为了账号安全,请及时绑定邮箱和手机立即绑定

借鉴很多前辈的代码进行的改造,可以创建玩家人数以及每位玩家发牌的数量,有不完善的地方还望多多指教

package com.imooc;

/*
 * 扑克牌类
 * 实现Comparable接口用于比较大小
 * */
public class Card implements Comparable<Card> {
    //牌的点数
    private String pokerpoints;
    //牌的花色
    private String pokercolor;
    //初始化构造方法
    public Card(String pokerpoints,String pokercolor){
        this.pokerpoints=pokerpoints;
        this.pokercolor=pokercolor;
    }
    
    public Card(){
        
    }

    
    

    public String getPokerpoints() {
        return pokerpoints;
    }




    public void setPokerpoints(String pokerpoints) {
        this.pokerpoints = pokerpoints;
    }




    public String getPokercolor() {
        return pokercolor;
    }




    public void setPokercolor(String pokercolor) {
        this.pokercolor = pokercolor;
    }
    
    

    @Override
    public String toString() {
        return pokercolor+pokerpoints+"";
    }

    //重写Comparable的compareTO方法
    @Override
    public int compareTo(Card o) {
        //用来比较点数
        String ifpokerpoints="2,3,4,5,6,7,8,9,10,J,Q,K,A";
        //用来比较花色
        String ifpokercolor="方片,梅花,红桃,黑桃";
        
        //当前扑克牌点数第一次出现的位置减去O对象扑克牌点数第一次出现的位置
                int i=ifpokerpoints.indexOf(o.getPokerpoints())-ifpokerpoints.indexOf(this.getPokerpoints());
                //如果点数的位置相同那么点数是一样的
                if(i==0){
                    //如果点数一样那么比较花色的位置是否相同
                    i=ifpokercolor.indexOf(o.getPokercolor())-ifpokercolor.indexOf(this.getPokercolor());
                }
                //返回i的值正数大于负数小于
                return i;
        
    }

}


package com.imooc;

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

/*
 * 正副扑克牌的类
 * */

public class Poker {
    //用来存放扑克牌的集合
    List<Card> listcard=new ArrayList<Card>();
    
    //创建扑克牌
    public  void  creatPoker(){
        System.out.println("-----创建扑克牌-----");
        //定义一个牌数的数组
        String[] name={"2","3","4","5","6","7","8","9","10","J","Q","K","A"};
        //定义一个花色数组
        String[] color={"方片","梅花","红桃","黑桃"};
        
        //循环往扑克牌集合中添加扑克
        for(int i=0;i<name.length;i++){
            for(int j=0;j<color.length;j++){
                listcard.add(new Card(name[i],color[j]));
            }
        }
        System.out.println(listcard);
        System.out.println("-----创建完成-----");
    }
    
    //洗牌
    public void randompoker(){
        System.out.println("-----开始洗牌-----");
        //调用Collections.shuffle()就可以实现顺序打乱
        Collections.shuffle(listcard);
        System.out.println(listcard);
        System.out.println("-----洗牌完成-----");
    }
    
    //获取扑克牌的数量
    public int size(){
        return this.listcard.size();
    }
    //返回当前扑克牌集合
    public List<Card> getlistCard(){
        return this.listcard;
    }
}


package com.imooc;

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

/*
 * 玩家类
 * 包括玩家id,玩家姓名
 * 玩家手中最大的牌和存放玩家手牌的集合
 * */
public class Player implements Comparable<Player> {
    //玩家id
    private int id;
    //玩家姓名
    private String name;
    //玩家手中最大的牌
    private Card maxcard;
    //存放玩家手牌的集合
    private List<Card> cards=new ArrayList<Card>();

    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    
    public List<Card> getCards() {
        return cards;
    }
    public void setCards(List<Card> cards) {
        this.cards = cards;
    }
    
    
    //构造方法
    public Player(int id,String name){
        this.id=id;
        this.name=name;
    }
    
    //获取玩家手中最大的牌
    public Card getMaxcard(){
        //先排序,Card类中重写了comprarTo()方法,下标为0的是最大的值
        Collections.sort(cards);
        //返回获取到的最大的值
        return this.maxcard=cards.get(0);
    }
    
    
    
    @Override
    public int compareTo(Player o) {
        // 根据玩家手中最大的牌进行排序,获胜的玩家排在最前面
        return this.getMaxcard().compareTo(o.getMaxcard());
        
    }
    
    //玩家拿牌的方法
    public void add(Card card){
        System.out.println("玩家:"+this.name+"拿牌:"+card);
        //添加到手牌集合
        this.cards.add(card);
    }
    
    
    //输出玩家最大的手牌
    public void showMax(){
        System.out.println("玩家:"+this.name+"的最大手牌为:"+this.getMaxcard());
    }
}


package com.imooc;

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

/*
 * 扑克牌游戏类
 * 创建玩家
 * 根据输入的玩家信息进行发牌
 * 最后比较大小
 * */
public class PokerGema {
    //存放玩家的集合
    private List<Player> listplayer=new ArrayList<Player>();
    //整幅扑克牌的类
    Poker poker=new Poker();
    //接收用户输入的信息
    private Scanner scanner=new Scanner(System.in);
    //保存玩家的人数
    int number=0;
    
    //创建玩家人数
    public void creatplayerNumber(){
        System.out.println("扑克牌的总数为:"+poker.size());
        System.out.println("-----请输入要创建的玩家人数-----");
        //判断键盘是否有输入,当有输入时进行循坏
        while(scanner.hasNext()){            
            //判断输入的值是否为整形,当为整形时执行循坏
            if(scanner.hasNextInt()){
                int j=scanner.nextInt();
                //判断输入的值是否大于2并且小于扑克牌的数量
                if(j>1&&j<poker.size()){
                    //接收用户输入的信息
                    number=j;                
                    break;
                }else{
                    System.out.println("请输入正确的玩家人数");
                    System.out.println("玩家人数要大于2,并且小于扑克牌的总数:"+poker.size());
                    continue;//继续循环
                }
                
            }else{
                System.out.println("请输入数字哦!");
                //清空scanner的数据
                scanner.next();
                continue;//继续循环
            }
        }
        //循环添加玩家
        for(int i=1;i<=number;i++){
            System.out.println("请输入第:"+i+"个玩家姓名");
            listplayer.add(new Player(i,scanner.next()));//添加玩家
        }
        //循坏输出玩家信息
        for (Player player : listplayer) {
            System.out.println("欢迎玩家:"+player.getName());
        }
            
    }
    
    
    //开始创建扑克牌
    public void StartCreatingPoker(){
        //创建扑克牌
        poker.creatPoker();
        //洗牌
        poker.randompoker();
    }
    //发牌
    public void dealpoker(){
        //提示用户输入信息
        System.out.println("请设置每位玩家发多少张牌");
        System.out.println("每位玩家发牌的数量必须大于0并且发牌的总数不能超过扑克牌的数量:"+poker.size());
        //用于保存每位玩家发牌的数量
        int i=0;
        //判断是否有输入
        while(scanner.hasNext()){
            //判断输入的是否是int型
            if(scanner.hasNextInt()){
                int j=scanner.nextInt();//将输入的值赋值给j;
                int k=j*number;//计算玩家人乘以每位玩家发牌的牌数得到总的发牌数量
                //判断每位玩家的牌数要大于0并且小于扑克牌的数量
                if(j>0&&k<poker.size()){
                    i=j;
                    break;//跳出循环
                }else{
                    System.out.println("每位玩家发牌的数量必须大于0并且小于扑克牌的总数:"+poker.size());
                    continue;//继续循环
                }
            }else{
                System.out.println("请输入整数");
                //清空scanner输入的信息
                scanner.next();
                continue;//继续循环
            }
        }
        //每位玩家发牌的数量乘以玩家的人数得到发牌的总数
        int pokernumber=i*number;    
        //每位玩家拿牌的数量乘以玩家的人数得到发牌的总数,然后总数多少就循环多少次
        for(int j=0;j<pokernumber;){
            //依次向玩家1添加扑克牌1,玩家2添加扑克牌2,玩家1添加扑克牌3,玩家2添加扑克牌4.。。。。。
            for(int b=0;b<number;b++){
                //获得每位玩家然后依次添加扑克牌
                listplayer.get(b).add(poker.getlistCard().get(j));
                j++;//每次基数加一
            }
        }
            
    }
    
    //输出玩家手中各自的手牌和最大的扑克牌
    public void PlayerMaxPoker(){
        //输出玩家各自的手牌
        for (Player playername : listplayer) {
            System.out.println("玩家:"+playername.getName()+"的手牌为:"+playername.getCards().toString());
        }
        
        
        //输出最大的手牌
        for (Player playername : listplayer) {
            playername.showMax();
        }
    }
    
    //比较大小,根据玩家手中最大的牌进行排序
    public void comparePlayer(){
        Collections.sort(listplayer);
        System.out.println("玩家:"+listplayer.get(0).getName()+"获胜!");
    }
    

}


package com.imooc;

public class Test {

    /**
     *主程序测试类
     */
    public static void main(String[] args) {
        //创建扑克牌游戏类的实例
        PokerGema pokergema=new PokerGema();
        //创建扑克牌
        pokergema.StartCreatingPoker();
        //创建玩家
        pokergema.creatplayerNumber();
        //发牌
        pokergema.dealpoker();
        ////输出玩家手中各自的手牌和最大的扑克牌
        pokergema.PlayerMaxPoker();
        //比较大小,根据玩家手中最大的牌进行排序
        pokergema.comparePlayer();

    }

}


正在回答

举报

0/150
提交
取消

借鉴很多前辈的代码进行的改造,可以创建玩家人数以及每位玩家发牌的数量,有不完善的地方还望多多指教

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信