java实现--简易扑克牌游戏

原创 2016年08月29日 20:17:23

第三季听课后的综合实战,要求如下:
1.创建一副扑克牌,不考虑大小王
2.创建两名玩家,玩家至少要有ID、姓名、手牌等属性,手牌为扑克牌的集合
3.洗牌,将之前创建的扑克牌顺序打乱
4.发牌,将洗牌之后的扑克牌集合,从第一张开始,发给两名玩家,按照一人一张的方式,每人发两张
5.开始游戏,比大小,大小相同比花色(黑红梅方)

实现代码如下:

扑克类

public class Poker {
    public Integer color;
    public Integer number;
    public Integer dengji;//等级属性,用于之后的比较大小

    public Poker(int color,int number){
        this.color = color;
        this.number = number;
        this.dengji = color + number;
    }

    @Override
    public String toString() {
        String colorString = "";
        String numberString = "";
        switch(color){
        case 0 : colorString = "方片";break;
        case 13 : colorString = "梅花";break;
        case 26 : colorString = "红桃";break;
        case 39 : colorString = "黑桃";break;
        }
        switch(number){
        case 11 : numberString = "J";break;
        case 12 : numberString = "Q";break;
        case 13 : numberString = "K";break;
        case 14 : numberString = "A";break;
        default :numberString = String.valueOf(number);break;
        }
        return colorString + numberString    ;
    }
}

玩家类

public class Player {
    public Integer id;
    public String name;
    public List<Poker> playerlist;

    public Player(Integer id,String name){
        this.id = id;
        this.name = name;
        this.playerlist = new ArrayList<Poker>();
    }
}

游戏具体实现

public class PokerList {
    public List<Poker> pokerlist;
    private Scanner console;
    private Player player1;
    private Player player2;

    public PokerList(){
        this.pokerlist = new ArrayList<Poker>(52);
        this.console = new Scanner(System.in);
    }

    //创建一副扑克牌
    public void newPoker(){
        for(int i = 0 ; i < 4 ; i++){
            int color = i * 13;
            for(int j = 0 ; j < 13 ; j++){
                int number = j + 2;
                Poker poker = new Poker(color,number);
                pokerlist.add(poker);
            }
        }
    }

    //遍历输出
    public void eachPoker(){
        for(Poker po : pokerlist){
            System.out.print(po.toString() + ",");
        }
        System.out.println();
    }

    //洗牌
    public void shufflePoker(){
        Collections.shuffle(pokerlist);
    }

    //创建玩家并发牌
    public void dealPoker(){
        System.out.println("请输入第一位玩家的id和姓名");
        System.out.println("输入id:");
        Integer id1 = console.nextInt();
        System.out.println("输入姓名:");
        String name1 = console.next();
        System.out.println("请输入第二位玩家的id和姓名");
        System.out.println("输入id:");
        Integer id2 = console.nextInt();
        System.out.println("输入姓名:");
        String name2 = console.next();
        System.out.println("******欢迎玩家:" + name1);
        System.out.println("******欢迎玩家:" + name2);

        System.out.println("******开始发牌******");
        player1 = new Player(id1,name1);
        player2 = new Player(id2,name2);
        player1.playerlist.add(pokerlist.get(0));
        System.out.println("***玩家:" + name1 + " 拿牌***");
        player2.playerlist.add(pokerlist.get(1));
        System.out.println("***玩家:" + name2 + " 拿牌***");
        player1.playerlist.add(pokerlist.get(2));
        System.out.println("***玩家:" + name1 + " 拿牌***");
        player2.playerlist.add(pokerlist.get(3));
        System.out.println("***玩家:" + name2 + " 拿牌***");
        System.out.println("******发牌结束******");
    }

    //比较牌的大小
    public void comparePoker(){
        System.out.println("******游戏开始******");
        Collections.sort(player1.playerlist);
        Poker p1 = player1.playerlist.get(1);
        System.out.println("玩家:" + player1.name + "最大的手牌是:" + p1);
        Collections.sort(player2.playerlist);
        Poker p2 = player2.playerlist.get(1);
        System.out.println("玩家:" + player2.name + "最大的手牌是:" + p2);
        if(p1.number > p2.number)
            System.out.println("******玩家:" + player1.name + "获胜!!******");
        else if(p1.number < p2.number)
            System.out.println("******玩家:" + player2.name + "获胜!!******");
        else{
            PokerComparator result = new PokerComparator();
            if(result.compare(p1, p2) == 1)
                System.out.println("******玩家:" + player1.name + "获胜!!******");
            else
                System.out.println("******玩家:" + player2.name + "获胜!!******");
        }
    }

    //输出各个玩家的手牌
    public void showPoker(){
        System.out.println("玩家各自的手牌为:");
        for(Poker po1 : player1.playerlist){
            System.out.print(player1.name + ":" + po1.toString() + " ");
        }
        System.out.println();
        for(Poker po2 : player2.playerlist){
            System.out.print(player2.name + ":" + po2.toString() + " ");
        }
    }
}

这里的sort,使用了Comparable接口,需要重写compareTo方法,根据数值比大小

//在Poker类里
@Override
    public int compareTo(Poker o) {
        // TODO Auto-generated method stub
        return this.number.compareTo(o.number);
    }

还是sort,使用了Comparator接口,需要重写compare方法,当数值相同时根据花色比大小
之前的等级属性派上用场了

public class PokerComparator implements Comparator<Poker> {
    @Override
    public int compare(Poker o1, Poker o2) {
        // TODO Auto-generated method stub
        return o1.dengji.compareTo(o2.dengji);
    }
}

结果:
这里写图片描述
这里写图片描述

总结:
难的地方在于比较牌的大小,这里重写了compare方法,并给扑克牌设置了等级属性,这里借鉴了http://www.ituring.com.cn/article/18401

版权声明:本文为博主原创文章,未经博主允许不得转载。

Java入门第三季-综合实战:简易扑克牌游戏

一、概述 第三季的综合实战部分是写一个简易扑克牌游戏,功能实现要求如下: 1.创建一副扑克牌 包括四种花色: 黑桃 红桃 梅花 方片 十三种点数 2-10,JQKA,不考虑大小王 2.创建两名玩家 ...
  • qwerty_bibabo
  • qwerty_bibabo
  • 2016年07月26日 18:15
  • 4320

java简易扑克牌游戏,慕课第三季作业

要求:1、创建牌,分四个花色,每个花色13张,没有大小王2、创建玩家,玩家有ID和姓名,每个人两张牌3、洗牌,打乱牌序 利用Collections.shuffle方法,加个随机数循环多次洗牌,保证不重...
  • lily960427
  • lily960427
  • 2017年03月26日 21:02
  • 468

Java实现简易扑克牌游戏

Java实现简易扑克牌游戏——black的专栏——washaxiu
  • u012596172
  • u012596172
  • 2017年06月14日 17:27
  • 698

java编写简易扑克牌游戏

游戏功能描述 创建一副扑克牌: 包括四种花色:黑桃,红桃,梅花,方片 包括十三种点数:2-10,J,Q,K,A 创建两名玩家(or多名) 玩家至少要有ID,姓名,手牌等属性,手牌为扑克牌的集合...
  • qq_20581563
  • qq_20581563
  • 2016年04月27日 23:07
  • 15178

慕课网简易扑克牌游戏

问题描述 创建一副扑克牌,包含四种花色:黑桃、红桃、梅花、方片。十三种点数:2-10,J、Q、K、A,不考虑大小王。 创建两名玩家。玩家至少要有ID、姓名、手牌等属性,手牌为扑克牌的集合 洗牌。将之前...
  • u011741311
  • u011741311
  • 2017年06月09日 11:10
  • 783

java 小项目:简单扑克牌游戏

项目要求 1>新建两个玩家 2>创建扑克牌,洗牌 3>发牌,每个玩家没人拿两张,比较大小 4>比较规则:两个玩家选出各种最大的牌,进行游戏,先比较点数大小,点数大的获胜,点数相同则比较花色:黑...
  • github_27609763
  • github_27609763
  • 2015年05月27日 05:44
  • 4008

java实现简易扑克牌游戏

简易扑克牌游戏:功能: 创建一副扑克牌,花色为:黑桃,红桃,梅花,方片,且依次变小, 数字为:”2”,”3”,”4”,”5”,”6”,”7”,”8”,”9”,”10”, “J”,”Q”,”...
  • lc1978037519
  • lc1978037519
  • 2017年03月29日 21:11
  • 124

Java扑克游戏(多人多牌数比较游戏)的实现

具体实现步骤如下: 实现扑克Card类,用于储存扑克牌,1-13代表点数,4-1代表花色(黑桃,红桃,梅花,分块)实现扑克列表CardList类,用于实现生成一副牌,洗牌,发牌的功能实现玩家Pl...
  • baidu_35738377
  • baidu_35738377
  • 2016年12月26日 09:14
  • 986

java ----实现简单的21点纸牌游戏

- 游戏设计思路: 电脑和玩家的比拼:谁手中扑克牌的“点数和”首先达到21点为获胜方,或者在双方都叫停的情况下谁的“点数和”越接近21点且不大于21点为获胜方,凡是大于21点或者“点数和:小于对方...
  • angry_youth
  • angry_youth
  • 2017年07月06日 23:05
  • 823

Java扑克牌小程序

慕课网第三季作业要求 1. 创建一副扑克牌,包括2-10,J,Q,K,A,黑桃,红桃,梅花,方片,不包括大小王。 2. 创建两名玩家,有name属性。 3. 洗牌,利用Collectio...
  • izzlin
  • izzlin
  • 2017年04月09日 20:27
  • 439
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java实现--简易扑克牌游戏
举报原因:
原因补充:

(最多只允许输入30个字)