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

简易扑克牌游戏Java代码

萌萌哒懒猫猫
关注TA
已关注
手记 1
粉丝 0
获赞 16

玩家类

package imooc_easy_poker_game;

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

public class Player {

    //定义玩家的包含的属性(ID和name)
    public int id;
    public String name;
    public List<Poker> pokers;

    public Player(){

    }

    public Player(int id,String name){
        this.id = id;
        this.name = name;
        this.pokers = new ArrayList<Poker>();

    }
    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + id;
        return result;
    }
    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Player other = (Player) obj;
        if (id != other.id)
            return false;
        return true;
    }

}

扑克类

package imooc_easy_poker_game;

public class Poker{
    //定义扑克牌的属性(花色和点数)
    public String colour;
    public String point;

    public Poker(){

    }

    public Poker(String colour,String point){
        this.colour = colour;
        this.point = point;     
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub

    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((colour == null) ? 0 : colour.hashCode());
        result = prime * result + ((point == null) ? 0 : point.hashCode());
        return result;
    }
    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Poker other = (Poker) obj;
        if (colour == null) {
            if (other.colour != null)
                return false;
        } else if (!colour.equals(other.colour))
            return false;
        if (point == null) {
            if (other.point != null)
                return false;
        } else if (!point.equals(other.point))
            return false;
        return true;
    }

}

扑克比较类

package imooc_easy_poker_game;

import java.util.Comparator;

public class pokerComparator implements Comparator<Poker> {

    @Override
    public int compare(Poker poker0, Poker poker1) {
        // 创建花色和点数的数组
        //存储花色的数组,从小到大
        String[] colours = {"方片","梅花","红桃","黑桃"};
        //存储点数的数组
        String[] points = {"2","3","4","5","6","7","8","9","10","J","Q","K","A"};

        //比较索引位置,判断大小

        //得到花色的索引
        int c0=0;
        int c1=0;
        for(int i=0;i<colours.length;i++){
            if(poker0.colour.equals(colours[i])){
                c0=i;
            }
            if(poker1.colour.equals(colours[i])){
                c1=i;
            }           
        }

        //得到点数的索引
        int p0=0;
        int p1=0;
        for(int j=0;j<points.length;j++){
            if(poker0.point.equals(points[j])){
                p0=j;
            }
            if(poker1.point.equals(points[j])){
                p1=j;
            }           
        }

        //判断面值大小
        if(p0>p1){//先判断点数
            return 1;       
        }else if (p0==p1) {//点数相等,判断花色
            if(c0>c1){
                return 1;
            }else if (c0==c1) {//花色相等
                return 0;
            }else{
                return -1;
            }
        }else{
            return -1;
        }

    }

}

主类

package imooc_easy_poker_game;

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

public class PlayPoker {

    //存放扑克的List
    public List<Poker> pokerList;
    //存放玩家
    public List<Player> players;
    //存放所有的输入
    private Scanner console;
    //构造器中初始化pokerList
    public PlayPoker(){
        this.pokerList =  new ArrayList<Poker>();
        this.players = new ArrayList<Player>();
        console = new Scanner(System.in);
    }

    /**
     * 创建一副扑克牌,不包含大小王
     */
    public void createPoker(){
        //存储花色的数组
        String[] colours = {"黑桃","红桃","梅花","方片"};
        //存储点数的数组
        String[] points = {"2","3","4","5","6","7","8","9","10","J","Q","K","A"};
        //遍历花色和点数,创建扑克牌
        for(String colour:colours){
            for(String point:points){
                Poker pokerAdd = new Poker(colour,point);
                pokerList.add(pokerAdd);
            }           
        }
        System.out.println("成功创建扑克!");
        //打印扑克
        for(Poker poker:pokerList){
            System.out.print("["+poker.colour + ":"+ poker.point+"]");              
        }
        System.out.println();
    }

    /**
     * 随机洗牌
     * @param args
     */
    public void shuffle(){
        System.out.println("开始洗牌!");
        Collections.shuffle(pokerList);
        System.out.println("洗牌完成!洗牌后的牌为:");
        for(Poker poker:pokerList){
            System.out.print("["+poker.colour + ":"+ poker.point+"]");              
        }
        System.out.println();
    }

    /**
     * 创建玩家,count表示玩家个数
     */
    public void createPlayer(int count){
        int m= 0;
        while(m<count){
            System.out.println("输入玩家ID:");
            int inputID = 0;
            Player newPalyer = new Player();
            //判断输入的ID是否为整数,非整数,捕获异常
            while(true){
                try{
                    inputID = console.nextInt();
                    newPalyer.id = inputID;
                    break;
                }catch(Exception e){
                    System.out.println("玩家ID需为整数,请重新输入:");
                    console = new Scanner(System.in);
                }
            }
            /**
             * 判断ID是否被占用
             */
            if(players.contains(newPalyer)){
                System.out.println("输入的玩家ID已经存在,请重新输入!");
                continue;
            }else{
                System.out.println("输入玩家姓名:");
                String inputName = console.next();
                newPalyer.name = inputName;
                players.add(newPalyer);
                System.out.println("成功创建玩家:"+inputName);
                m++;
            }
        }
    }

    /**
     * 顺序发牌,count表示玩家数量,count2表述发牌轮数
     */
    public void play(int count,int count2){ 
        //循环发牌轮数
        for(int j=0;j<count2;j++){
            //循环玩家
            for(int i=0;i<count;i++){
                System.out.println("玩家"+ players.get(i).name +"第"+(j+1)+"轮拿牌为:");
                Poker fPoker =  pokerList.get(i+count*j);
                players.get(i).pokers.add(fPoker);
                System.out.println(fPoker.colour+fPoker.point);
            }           
        }
        System.out.println("发牌完成!");

        //排序玩家手牌
        for(int i=0;i<count;i++){
            Collections.sort(players.get(i).pokers,new pokerComparator());
            //输出玩家最大手牌
            System.out.println("玩家"+players.get(i).name+"的最大手牌为:"+players.get(i).pokers.get(count2-1).colour + players.get(i).pokers.get(count2-1).point);      
        }

        //比较玩家最大手牌的大小
        Player maxPlayer = new Player();
        pokerComparator pc = new pokerComparator();
        //先比较第一和第二个玩家的最大手牌,得出其中较大的一个。然后用较大的逐一比较后面玩家的最大手牌,得出最后获胜玩家
        int result = pc.compare(players.get(0).pokers.get(count2-1), players.get(1).pokers.get(count2-1));
        if(result==1){
            maxPlayer = players.get(0);         
        }else {
            maxPlayer = players.get(1); 
        }

        for(int i=2;i<count;i++){
            int result2  = pc.compare(maxPlayer.pokers.get(count2-1),players.get(i).pokers.get(count2-1));
            System.out.println("result2:"+result2);
            if(result2<0){
                maxPlayer = players.get(i);                             
            }
        System.out.println("玩家:"+maxPlayer.name +"最终获胜!");              

        //输出玩家所有的牌
        for(int i=0;i<count;i++){
            System.out.println("玩家"+players.get(i).name+"的所有手牌为:");
            for(int j=0;j<count2;j++){
                System.out.println("["+players.get(i).pokers.get(j).colour+":"+players.get(i).pokers.get(j).point+"]");
            }
        }       
    }

    public static void main(String[] args) {
        PlayPoker pp = new PlayPoker();
            pp.createPoker();
            pp.shuffle();
            pp.createPlayer(2);
            pp.play(2, 2);
    }
}
打开App,阅读手记
6人推荐
发表评论
随时随地看视频慕课网APP