继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

java入门第三季——简易扑克牌游戏

望远
关注TA
已关注
手记 3
粉丝 178
获赞 51

一开始其实没什么思路但是在看过几位大神的思路之后,自己还是能够写出来的~~思路如下:
1)创建一个Card类,它包含两个属性—面值,花色;
2)创建两个List<String>一个用于存储扑克牌的花色信息,一个用于储存面值信息;
3)创建一个List<Card>,用于接收创建的扑克牌
4)创建一个Player类用于存储玩家信息

package com.imooc;
/**
 * 扑克牌类,有着两个属性 style(花色)name(具体点数)
 * @author xl
 *
 */
public class Card {
    public String style;
    public String name;
    public Card(String style, String name) {
        super();
        this.style = style;
        this.name = name;
    }
    @Override
    //重写toString()方法
    public String toString() {
        String string="["+this.style+" "+this.name+"]";
        return string;
    }
}

package com.imooc;

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

//创建对应的不同花色
public class styleList {
    public List<String>styleList;
    public styleList(){
        styleList=new ArrayList<String>();
        styleList.add("黑桃");
        styleList.add("红心");
        styleList.add("梅花");
        styleList.add("方片");
    }
}

package com.imooc;

import java.util.ArrayList;
import java.util.List;
//创建具体点数大小的扑克牌
public class nameList {
    public List<String> numList;
    public nameList(){
        numList =new ArrayList<String>();
        for(int i=0;i<9;i++){
            numList.add((i+2)+"");
        }
        numList.add("J");
        numList.add("Q");
        numList.add("K");
        numList.add("A");
    }
}
package com.imooc;
//玩家类,用于创建具体玩家对象
public class Players {
    public Integer id;
    public String name;
    Card card1,card2;
    public Players(Integer id, String name, Card card1, Card card2) {
        super();
        this.id = id;
        this.name = name;
        this.card1 = card1;
        this.card2 = card2;
    }
    public String toString() {
        String string="玩家"+name+"的牌为:"+card1+" : "+card2;
        return string;
    }
}
package com.imooc;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;
//通过List<Card>来接收产生的扑克牌
public class List_test {
    List<Card>table;
    public List_test(){
        table=new ArrayList<Card>();
        styleList styleList=new styleList();
        nameList nameList=new nameList();
        System.out.println("--------------------开始创建扑克牌-------------------");
        System.out.println();
        /**
         * 通过循环嵌套创建扑克牌
         */
        for(int i=0;i<4;i++){
            for(int j=0;j<13;j++){
                Card c=new Card(styleList.styleList.get(i),
                        nameList.numList.get(j));
                table.add(c);
            }
        }
        /**
         * 格式化输出创建的扑克牌信息
         */
        for(int i=0;i<52;i++){
            System.out.print("创建扑克牌"+table.get(i).style
                    +table.get(i).name+"  ");
            if((i+1)%13==0)
                System.out.println();
        }
        System.out.println();
        System.out.println("------------------创建扑克牌完毕!---------------");
    }
    /**
     * 将新创建的扑克牌进行洗牌
     */
public void washCard(){
    //创建一个新的容器用于存储随机取出的扑克牌
    List<Card>newtable=new ArrayList<Card>();
    Random random=new Random();
    System.out.println("----------------------开始洗牌--------------------");
    for(int i=0;i<52;i++){
        Card c;
        do {//确保添加到新容器的扑克牌都是新容器没有的牌
            c=table.get(random.nextInt(51));
            newtable.add(c);
        } while (!newtable.contains(c));
    }
    this.table=newtable;
    System.out.println("------------------------洗牌结束------------------");
}
/**
 * 获取扑克牌,进行发牌操作
 * @param num
 * @return
 */
public List<Card> give_card(int num){
    List<Card>newtable=new ArrayList<Card>();
    Random random=new Random();
    for(int i=0;i<num;i++){
        Card c;
        do {
            c=table.get(random.nextInt(51));
            newtable.add(c);
        } while (!newtable.contains(c));
    }
    return newtable;
}

/**
 * 比较牌的大小
 * @param cd1
 * @param cd2
 * @return
 */
public Card compare(Card cd1,Card cd2){
    styleList st=new styleList();
    nameList nt=new nameList();
    int i=nt.numList.indexOf(cd1.name);
    int j=nt.numList.indexOf(cd2.name);
    if(i>j){
        return cd1;
    }
    if(i==j){
        int i1=st.styleList.indexOf(cd1.style);
        int i2=st.styleList.indexOf(cd2.style);
        if(i1>i2)
            return cd1;
    }
    return cd2;
   }
}

package com.imooc;

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

/**
 * @author xl
 *
 */
public class gameTest {
    /**
     * 测试类
     * @param args
     */
    public static void main(String []args){
        Integer id1;
        Integer id2;
        String name1;
        String name2;
        System.out.println("----------------------欢迎进入游戏--------------------");
        List_test Cards=new List_test();
        Scanner input=new Scanner(System.in);
        /*
         * 开始输入玩家信息
         */
        System.out.println("------------------开始创建玩家(2人)------------------");
        System.out.println("请输入玩家1的ID");
        id1=input.nextInt();
        input.nextLine();
        System.out.println("请输入玩家1的姓名");
        name1=input.nextLine();
        System.out.println("请输入玩家2的ID");
        id2=input.nextInt();
        input.nextLine();
        System.out.println("请输入玩家2的姓名");
        name2=input.nextLine();
        System.out.println("-------------------玩家创建完成----------------------");
        /*
         * 开始洗牌
         */
        Cards.washCard();
        /*
         * 获取四张牌,每人两张
         */
        List<Card>newtable=Cards.give_card(4);
        Card[]card=new Card[newtable.size()];
        for(int i=0;i<newtable.size();i++){
            card[i]=newtable.get(i);
        }

        /*
         * 完善玩家信息:id/name/card1/card2
         */
        Players player1=new Players(id1,name1,card[0],card[1]);
        Players player2=new Players(id2,name2,card[2],card[3]);
        /*
         * 通过比较各自的牌,分别得到各自最大的牌
         */
        Card c1=Cards.compare(card[0], card[1]);
        Card c2=Cards.compare(card[2], card[3]);
        /*
         * 再次比较,得到最终四张牌中的最大的牌
         */
        Card c3=Cards.compare(c1, c2);

        /*
         * 最简单的读取玩家信息的方法,分别输出对应属性
         */
//      System.out.println("  "+player1.name+"的牌为:"+card[0].style+card[0].name+
//      " : "+card[1].style+card[1].name);
//      System.out.println("  "+player2.name+"的牌为:"+card[2].style+card[2].name+
//      " : "+card[3].style+card[3].name);

        /*
         * 通过重写Players和Card的toString方法,调用toString方法输出玩家信息
         */
        System.out.println(player1);
        System.out.println(player2);

        /*
         * 判断输赢,并输出
         */

        if(c3.equals(c1))
        {
            System.out.println("玩家 --"+player1.name+"获胜");
        }else
            System.out.println("玩家 --"+player2.name+"获胜");
    }

}

运行结果:
图片描述
第一次发手记,代码中有什么不足的地方,还请大神们多多指教~~

打开App,阅读手记
10人推荐
发表评论
随时随地看视频慕课网APP