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

简易扑克游戏(Java入门第三季,集合框架综合实例)

标签:
Java

简易扑克游戏(Java入门第三季,集合框架综合实例),自己所写,功能全部实现,命令异常也有,也用了这一章节的主要知识,可能有些程序的条理有些地方不是特别清晰,其实是可以把一些杂乱的流程创建方法的
扑克类——Card


//扑克类
public class Card implements Comparable<Card>{
    private String huase;//扑克花色
    private String number;//扑克数字
    //花色和数字两个字符串数组,用来表示前面的元素小,后面的元素大
    private String[] huaseArray={ "方片", "梅花", "红桃", "黑桃" }; 
    private String[] numberArray={ "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A" }; 

    //构造器
    public Card(String huase,String number){
        this.huase=huase;
        this.number=number;
    }

    public String getHuase() {
        return huase;
    }

    public void setHuase(String huase) {
        this.huase = huase;
    }

    public String getNumber() {
        return number;
    }

    public void setNumber(String number) {
        this.number = number;
    }

    //用来定义List的排序标准
    @Override
    public int compareTo(Card o) 
    { 
        Integer huase1=0,huase2=0;
        Integer number1=0,number2=0;
        int result=0;
        //将牌的数字和花色按huaseArray数组、numberArray数组大小顺序,转变为一个数字,这个数字可以用来比较大小
        for(int i=0;i<4;i++)
        {
            if(this.getHuase().equals(huaseArray[i]))
                huase1=i;
        }
        for(int i=0;i<4;i++)
        {
            if(o.getHuase().equals(huaseArray[i]))
                huase2=i;
        }
        for(int i=0;i<13;i++){
            if(this.getNumber().equals(numberArray[i]))
                number1=i;
        }
        for(int i=0;i<13;i++){
            if(o.getNumber().equals(numberArray[i]))
                number2=i;
        }

        if(number1.compareTo(number2)!=0)//如果数字不相等
        { 
            //以下注释中可用来检查number1是否大于或小于number2
//          if(number1.compareTo(number2)>0)
//              System.out.println(number1+"大于"+number2);   
//          else
//              System.out.println(number1+"小于"+number2);
            result=number1.compareTo(number2);  
        } 
        else if(number1.compareTo(number2)==0)//如果数字相等
        {               
//              if(huase1.compareTo(huase2)>0)
//                  System.out.println(this.getHuase()+"大于"+o.getHuase());
//              else
//                  System.out.println(this.getHuase()+"小于"+o.getHuase());
                result=huase1.compareTo(huase2); 
        }
        return result; 
    }

    //覆盖原有toString方法,返回"花色数字"字符串,如"红桃A"
    @Override
    public String toString() {
        return ""+huase+number;
    }

}

玩家类——Player


import java.util.ArrayList;
import java.util.List;
//玩家类
public class Player {
    private int ID;//玩家ID
    private String name;//玩家姓名
    private List<Card> shoupai=new ArrayList<Card>();//玩家手牌List

    //构造器
    public Player(int iD, String name) {
        this.ID = iD;
        this.name = name;
        this.shoupai = new ArrayList();
    }

    public Player(){
        super();
    }

    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 List<Card> getShoupai() {
        return shoupai;
    }
    public void setShoupai(List<Card> shoupai) {
        this.shoupai = shoupai;
    }

}

自定义命令异常—— CommandException

//自定义命令异常
public class CommandException extends Exception {
    public CommandException(){

    }
    public CommandException(String message){
        super(message);
    }
}

Test类


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

public class Test {

    //创建52张扑克牌
    public Card[] createCard(){
        Card[] cards=new Card[52]; 
        String[] huase={ "方片", "梅花", "红桃", "黑桃" }; 
        String[] number={ "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A" }; 

        System.out.println(huase[0]);
        for(int i=0; i<52; i++) 
        { 
            cards[i]=new Card(huase[i/13],number[i%13]);} 
        return cards;
    }
    //遍历输出扑克牌
    public void printCard(Card[] cards){

        System.out.print("为:[");
        for (Card card : cards) {
            System.out.print(card.toString()+"-");
        }
        System.out.println("]");
    }
    //洗牌
    public void xiPai(Card[] cards) {
        Random rd = new Random(); 
        for (int i = 0; i < 52; i++) { 
            int newNum = rd.nextInt(52); 
            Card tmp = cards[newNum]; 
            cards[newNum] = cards[i]; 
            cards[i] = tmp; 
            } 
        }

    /**
     * 输入ID,姓名并检查是否异常
     * @param args
     */
    public static Player input() throws CommandException{
        Scanner console=new Scanner(System.in);
        Player player = null;
        try{
            System.out.println("输入ID:");
            int ID=console.nextInt();
            System.out.println("输入姓名:");
            String name=console.next();
            player=new Player(ID,name);
            return player;
        }catch(Exception e){
            throw new CommandException("输入有误!");
        }

    }

    //主函数
    public static void main(String[] args) {
        Test t=new Test();
        List<Card> maxShoupai=new ArrayList<Card>();//用来存之后两位玩家的各自最大牌,再用来比较最大
        Card[] newcards=t.createCard();//创建52张扑克牌赋给newcards数组
        Player[] player=new Player[2];//初始化2玩家数组
        System.out.println("----------创建扑克牌----------");
        System.out.println("---------扑克牌创建成功!----------");
        t.printCard(newcards);//遍历输出
        System.out.println();
        System.out.println("-----------开始洗牌-----------");
        System.out.println("-----------洗牌结束!-----------");
        t.xiPai(newcards);//洗牌,原来newcards数组里次序变乱,但数组依然是newcards
        t.printCard(newcards);//遍历输出
        System.out.println();
        System.out.println("-----------创建玩家-----------");
            //两次循环输入两个玩家的信息
            for(int i=0;i<2;i++){
                //如果输入异常,即每一个玩家输入有误,玩家内数据无则一直循环输入
                while(true){
                System.out.println("请输入第"+(i+1)+"位玩家的ID和姓名:");
                try {
                    player[i]=input();//调用输入方法
                } catch (CommandException e) {
                    System.out.println(e.getMessage());
                }
                if(player[i].getName()!=null)//第i+1个玩家内名字不为空,即没有输入命令异常,则退出循环    
                break;
                }
            }
        for(int i=0;i<2;i++){
            System.out.println("----欢迎玩家:"+player[i].getName());
        }
        System.out.println("-----------开始发牌…-----------");
        //显示两个玩家依次拿牌
        for(int i=0;i<4;i++){
            if(i%2==0){
                System.out.println("----玩家"+player[0].getName()+"-拿牌");
                player[0].getShoupai().add(newcards[i]);
            }
            else{
                System.out.println("----玩家"+player[1].getName()+"-拿牌");
                player[1].getShoupai().add(newcards[i]);
            }
        }
        System.out.println("----------发牌结束!----------");
        System.out.println("----------游戏开始…----------");

        Collections.sort(player[0].getShoupai());//对玩家1手牌进行排序,是升序,小的在前

        Collections.sort(player[1].getShoupai());//对玩家2手牌进行排序,是升序,小的在前

        System.out.println("玩家:"+player[0].getName()+"最大的手牌为 :"+player[0].getShoupai().get(1));//输出玩家1最大牌

        System.out.println("玩家:"+player[1].getName()+"最大的手牌为 :"+player[1].getShoupai().get(1));//输出玩家2最大牌

        maxShoupai.add(0, player[0].getShoupai().get(1));//将玩家1的最大手牌添加到比较卡组

        maxShoupai.add(0, player[1].getShoupai().get(1));//将玩家2的最大手牌添加到比较卡组

        Collections.sort(maxShoupai);//对比较卡组进行排序,是升序,小的在前

        System.out.println("最大牌是:"+maxShoupai.get(1));//输出最大牌

        //遍历看最大牌是否跟某一个玩家的最大牌是同一张
        for(int i=0;i<2;i++){
            if(maxShoupai.get(1).equals(player[i].getShoupai().get(1)))
                System.out.println("--------玩家:"+player[i].getName()+"获胜!----------");
        }
        System.out.println("玩家各自的手牌为:");
        for(int i=0;i<2;i++){
            //输出玩家各自手牌
            System.out.println(""+player[i].getName()+"["+player[i].getShoupai().get(0).toString()+","+player[i].getShoupai().get(1).toString()+"]");

        }

    }
}
点击查看更多内容
1人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消