手记

Java入门第三季 7-1 简易扑克牌游戏

刚看完Java入门第三季,敲了一晚上的案例。在网上看到可以用Collections.shuffle()方法对List使用能达到洗牌的效果便作死尝试了一下。用了两个List表往牌堆里插入所有的牌。然后发现用集合类型并且是String属性的牌来进行比较的时候,JQKA并不好直接比较(:з」∠),便用了个比较蠢的方法来进行转换比较。萌新逻辑思路(不存在的)比较直,可能导致了代码比较冗长…参考参考就好

创建player类

package poker;

public class player {
    private int ID;
    private String name;

    public int getID() {
        return ID;
    }
    public void setID(int iD) {
        ID = iD;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }

    public player(int ID,String name){
        setID(ID);
        setName(name);
    }

}

创建Card类

package poker;

import java.util.ArrayList ;
import java.util.List;

public class Card {
    public String number;
    public String color;

    public Card (String number,String color){
        this.number=number;
        this.color=color;
    }

}

pokerGame类,游戏本体

package poker;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;

import poker.player;

public class pokerGame {

private Scanner input=new Scanner(System.in);

List <Card> CardList=new ArrayList<Card>();//牌堆
List <Card> CardList1=new ArrayList<Card>();//P1手牌表
List <Card> CardList2=new ArrayList<Card>();//P2手牌表

player player1;//全局对象玩家1
player player2;//全局对象玩家2

public void washCard(){
    //牌的大小
    List <String> CNlist=new ArrayList<String>();//牌表
    for(int i=1;i<10;i++){
        CNlist.add(i+1+"");
    }
    CNlist.add("J");
    CNlist.add("Q");
    CNlist.add("K");
    CNlist.add("A");

    //牌的花色
    List <String> colorList=new ArrayList<String>();//花色表
    colorList.add("方块");
    colorList.add("梅花");
    colorList.add("红桃");
    colorList.add("黑桃");

    //所有牌插入牌堆
    for(String x:CNlist){
        for(String y:colorList){
            Card z=new Card(x,y);
            CardList.add(z);
        }
    }

    //调用shuffle()方法洗牌
    Collections.shuffle(CardList);
    //输出牌堆
//  for(Card k:CardList){
//      System.out.println(k.color+k.number);
//  }
    System.out.println("----------洗牌完了----------");
}

public void login(){
    //第一位选手输入信息
    int inputID1;
    while(true){
    try{
        System.out.println("有请第一位选手输入ID:");
        Scanner input=new Scanner(System.in);       
        inputID1=input.nextInt();
        break;
    }catch(Exception e){
        System.out.println("请输入整数!");
        continue;   
    }
    }
    System.out.println("请第一位选手输入姓名:");
    String inputName1=input.next();

    player1=new player(inputID1,inputName1);
    System.out.println("欢迎玩家:"+player1.getID()+"号,"+player1.getName());

    //第二位选手输入信息
    int inputID2;
    while(true){
        try{
            System.out.println("有请第二位选手输入ID:");
            Scanner input=new Scanner(System.in);
            inputID2=input.nextInt();
            break;
        }catch(Exception e){
            System.out.println("请输入整数!");
            continue;
        }
        }
    System.out.println("请第二位选手输入姓名:");
    String inputName2=input.next();
    player2=new player(inputID2,inputName2);
    System.out.println("欢迎玩家:"+player2.getID()+"号,"+player2.getName());
}

public void doro(){
    System.out.println("----------开始发牌----------");

    //拿牌
    CardList1.add(CardList.get(0));
    System.out.println("----玩家:"+player1.getName()+"抽牌");
    CardList2.add(CardList.get(1));
    System.out.println("----玩家:"+player2.getName()+"抽牌");
    CardList1.add(CardList.get(2));
    System.out.println("----玩家:"+player1.getName()+"抽牌");
    CardList2.add(CardList.get(3));
    System.out.println("----玩家:"+player2.getName()+"抽牌");

    System.out.println("-----发牌完了-----");

}

//用作比较
public String change1(String number){
    if(number=="J")
        number=11+"";
    if(number=="Q")
        number=12+"";
    if(number=="K")
        number=13+"";
    if(number=="A")
        number=14+"";
    return number;
}

//用作比较
public String change2(String R){
    if(R=="方块")
        R=1+"";
    if(R=="梅花")
        R=2+"";
    if(R=="红桃")
        R=3+"";
    if(R=="黑桃")
        R=4+"";
    return R;
}

public void comparable(){
    System.out.println("-----游戏开始-----");
    String bigP1="";    //存放玩家1最大牌数字
    String bigP2="";   //存放玩家2最大牌数字
    String CC1="";   //存放玩家1最大花色
    String CC2="";   //存放玩家2最大花色
    int T;   //比较玩家1手牌数字大小
    int R;   //比较玩家2手牌数字大小
    int B;   //比较两个玩家手牌数字大小
    int N;   //比较两玩家手牌花色大小
    String p11=CardList1.get(0).number;
    p11 =change1(CardList1.get(0).number);
    String c11=change2(CardList1.get(0).color);

    String p12 =CardList1.get(1).number;
    p12 =change1(CardList1.get(1).number);
    String c12=change2(CardList1.get(1).color);

    String p21=CardList2.get(0).number;
    String c21=change2(CardList2.get(0).color);
    p21 =change1(CardList2.get(0).number);

    String p22 =CardList2.get(1).number;
    p22 =change1(CardList2.get(1).number);
    String c22=change2(CardList2.get(1).color);

    //判断P1手牌大小
    if(p11.length()>p12.length()){
        bigP1=p11;
    }
    else if(p11.length()<p12.length()){
        bigP1=p12;
    }
    else if(p11.length()==p12.length()){
        T=p11.compareTo(p12);
    if(T>0)
        bigP1=p11;
    if(T<0)
        bigP1=p12;
    if(T==0){
        R=c11.compareTo(c12);
            if(R>0)
                {bigP1=p11;
                CC1=c11;
                }
            else
            {   bigP1=p12;
                CC1=c12;
            }
    }
    }

    //判断p2手牌大小
    if(p21.length()>p22.length()){
        bigP2=p21;
    }
    else if(p21.length()<p22.length()){
        bigP2=p22;
    }
    else if(p21.length()==p22.length()){
        T=p21.compareTo(p22);
    if(T>0)
        bigP2=p21;
    if(T<0)
        bigP2=p22;
    if(T==0){
        R=c11.compareTo(c12);
        if(R>0)
        {   bigP2=p21;
            CC2=c21;
        }
        else
            {   bigP2=p22;
            CC2=c22;
            }
        }
    }

    //判断玩家一最大手牌
    if(bigP1==p11&&CC1==c11){
        System.out.println(player1.getName()+"最大的手牌为:"+CardList1.get(0).color
                +CardList1.get(0).number);
    }
    if(bigP1==p12&&CC1==c12){
        System.out.println(player1.getName()+"最大的手牌为:"+CardList1.get(1).color
                +CardList1.get(1).number);
    }
    else if(bigP1==p11)
        System.out.println(player1.getName()+"最大的手牌为:"+CardList1.get(0).color
                +CardList1.get(0).number);
    else
        System.out.println(player1.getName()+"最大的手牌为:"+CardList1.get(1).color
                +CardList1.get(1).number);

    //判断玩家二最大手牌
    if(bigP2==p21&&CC2==c21){
        System.out.println(player2.getName()+"最大的手牌为:"+CardList2.get(0).color
                +CardList2.get(0).number);
    }
    if(bigP2==p22&&CC2==c22){
        System.out.println(player2.getName()+"最大的手牌为:"+CardList2.get(1).color
                +CardList2.get(1).number);
    }
    else if(bigP2==p21)
        System.out.println(player2.getName()+"最大的手牌为:"+CardList2.get(0).color
                +CardList2.get(0).number);
    else
        System.out.println(player2.getName()+"最大的手牌为:"+CardList2.get(1).color
                +CardList2.get(1).number);

    //比较双方最大的牌
    B=bigP1.compareTo(bigP2);
    if(B>0)
        System.out.println("<<<<<"+player1.getID()+"号玩家:"+player1.getName()+"获胜!>>>>>");
    if(B<0)
        System.out.println("<<<<<"+player2.getID()+"号玩家:"+player2.getName()+"获胜!>>>>>");
    if(B==0){   //若双方数字相同,则比较花色
        N=CC1.compareTo(CC2);
    if(N>0)
        System.out.println("<<<<<"+player1.getID()+"号玩家:"+player1.getName()+"获胜!>>>>>");
    else
        System.out.println("<<<<<"+player2.getID()+"号玩家:"+player2.getName()+"获胜!>>>>>");
    }

    //输出双方最大手牌
    System.out.println(player1.getID()+"号玩家"+player1.getName()+"的手牌为:["
            +CardList1.get(0).color+CardList1.get(0).number+","
            +CardList1.get(1).color+CardList1.get(1).number+"]");

    System.out.println(player2.getID()+"号玩家"+player2.getName()+"的手牌为:["
            +CardList2.get(0).color+CardList2.get(0).number+","
            +CardList2.get(1).color+CardList2.get(1).number+"]");

    System.out.println("-----游戏结束-----");
}

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        pokerGame poi=new pokerGame();

        poi.login();
        poi.washCard();
        poi.doro();
        poi.comparable();
    }

}

附上运行效果

8人推荐
随时随地看视频
慕课网APP