Java扑克牌小程序

慕课网第三季作业

要求
1. 创建一副扑克牌,包括2-10,J,Q,K,A,黑桃,红桃,梅花,方片,不包括大小王。
2. 创建两名玩家,有name属性。
3. 洗牌,利用Collections.shuffle方法打乱顺序。
4. 发牌,从第一张开始,按照一人一张的方式,每人发两张牌。
5. 比牌,两人分别拿出手中最大牌比较,点数大者赢,若点数相同,则比较花色。

设计思路:
创建Cards类,Play类,Game类,Test类。
其中Game类中的Compare(Caed x,Card y)方法用来比较两张牌的大小

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

Cards类

package crad;

public class Cards {
    /**
     * 卡牌类
     */
    private String color;//花色
    private String number;//数字

    public Cards(String color,String number){
        this.color = color;
        this.number = number;
    }

    public String getColor() {
        return color;
    }
    public void setColor(String color) {
        this.color = color;
    }
    public String getNumber() {
        return number;
    }
    public void setNumber(String number) {
        this.number = number;
    }
    @Override
    public String toString() {
        return getColor()+getNumber();
    }



}

Play类

package crad;

public class Play {
    /**
     * 玩家类
     */
    private Integer id;//玩家ID
    private String name;//玩家姓名

    public Play(Integer id,String name){
        this.id = id;
        this.name = name;
    }

    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

Game类

package crad;
/**
 * 游戏主程序
 */

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

//创建牌       CreateCards()
//创建玩家  CreatePlays()
//洗牌    ChangeCards()
//发牌    SendCards()
//判断输赢  GameKo()

public class Game {
    Scanner input = new Scanner(System.in);


    List<Cards> CardsList = new ArrayList<Cards>();
    List<Play> PlayList = new ArrayList<Play>();
    List<Cards> nowCardsList = new ArrayList<Cards>();  

    String[] color =new String[] {"黑桃","红桃","梅花","方片"};
    String[] number = new String[] {"2","3","4","5","6","7","8","9","10","J","Q","K","A"};

    public void CreatePlays(){

        System.out.println("说明:本游戏为2人游戏,双方玩家各发2张牌,取出最大的一张牌与对手比较,点数大者赢,若点数相同,按'黑,红,梅,方'比较大小");
        for(int i=0;i<2;i++){
            System.out.println("请输入玩家"+(i+1)+"的姓名");
            PlayList.add(new Play(i, input.next()));
        }
    }

    public void CreateCards(){
        System.out.println("正在创建扑克牌......");

        for(int i=0;i<4;i++){
            for(int j=0;j<13;j++){
                CardsList.add(new Cards(color[i], number[j]));

            }
        }
        System.out.println("扑克牌有:"+CardsList.toString());
        System.out.println("创建完成!");
    }

    public void ChangeCards(){
        System.out.println("开始洗牌......");
        Random rm = new Random();
        int x = rm.nextInt(10);
        for(int i=0;i<x;i++){
            System.out.println("第"+(i+1)+"次洗牌");
            //System.out.println("打乱前:"+CardsList.toString());
            Collections.shuffle(CardsList);
            //System.out.println("打乱后:"+CardsList.toString());
        }
        System.out.println("洗牌结束!");

    }

    public void SendCards(){
        System.out.println("开始发牌......");
        for(int i=0;i<4;i++){
            //nowCardsList.add(new Cards(color[i], number[i]));
            nowCardsList.add(CardsList.get(i));
            System.out.println("玩家"+PlayList.get(i%2).getName()+"拿牌"+nowCardsList.get(i).toString());
        }
        System.out.println("发牌结束!");
    }

    public int Comparison(Cards x,Cards y){
        int Comparison1=0,Comparison2=0;//比较数字
        int Comparison3=0,Comparison4=0;//比较花色

        //玩家的手牌1
        for(int i=0;i<13;i++){
            if(x.getNumber().equals(number[i])){
                Comparison1 = i;
            }

        }
        for(int i=0;i<4;i++){
            if(x.getColor().equals(color[i])){
                Comparison3 = i;
            }
        }
        //玩家的手牌2
        for(int i=0;i<13;i++){
            if(y.getNumber().equals(number[i])){
                Comparison2 = i;
            }

        }
        for(int i=0;i<4;i++){
            if(y.getColor().equals(color[i])){
                Comparison4 = i;
            }
        }

        //选出玩家2张牌中较大的一张
        if(Comparison1<Comparison2){
            return 2;
        }else if(Comparison1>Comparison2){
            return 1; 
        }else if(Comparison3<Comparison4){
            return 2;
        }else{
            return 1;
        }


    }

    public void GameKo(){
        List<Cards> maxCard = new ArrayList<Cards>();
        int last1=0,last2=0,last3=0;
        //玩家1最大手牌
        last1 = Comparison(nowCardsList.get(0), nowCardsList.get(2));
        if(last1==1){
            maxCard.add(nowCardsList.get(0));
        }else if(last1==2){
            maxCard.add(nowCardsList.get(2));
        }
        System.out.println("玩家"+PlayList.get(0).getName()+"的最大手牌是"+maxCard.get(0).toString());
        //玩家2最大手牌
        last2 = Comparison(nowCardsList.get(1), nowCardsList.get(3));
        if(last2==1){
            maxCard.add(nowCardsList.get(1));
        }else if(last2==2){
            maxCard.add(nowCardsList.get(3));
        }
        System.out.println("玩家"+PlayList.get(1).getName()+"的最大手牌是"+maxCard.get(1).toString());
        //双方比较
        last3 = Comparison(maxCard.get(0), maxCard.get(1));
        if(last3==1){
            System.out.println("玩家"+PlayList.get(0).getName()+"获胜。");
        }else if(last3==2){
            System.out.println("玩家"+PlayList.get(1).getName()+"获胜。");
        }
    }

}

Test类

package crad;

public class test {
    public static void main(String[] args) {
        Game gm  =new Game();
        gm.CreatePlays();
        gm.CreateCards();
        gm.ChangeCards();
        gm.SendCards();
        gm.GameKo();
    }
}
* Game 类 * 功能:整个游戏:开始游戏 -> 初始牌 -> 洗牌 -> 发牌 -> 排序 -> 比较大小 -> 游戏结果 * 游戏说明: * 1.创建一副扑克牌,不考虑大小王 * 2.创建两名玩家,玩家至少要有ID、姓名、手牌等属性,手牌为扑克牌的集合 * 3.洗牌,将之前创建的扑克牌顺序打乱 * 4.发牌,将洗牌之后的扑克牌集合,从第一张开始,发给两名玩家,按照一人一张的方式,每人发两张 * 5.开始游戏,比大小,大小相同比花色 * * PockerCard 类 * 功能:扑克牌的核心类 包括创建角色、创建牌、显示牌、洗牌、比较牌、排序牌等 * 属性:List cards 整幅扑克牌的集合 、 People[] peoples 角色 * 方法: public PockerCard() //无参构造函数: 创建牌的集合、创建两个角色对象 * public void initializeCard() //创建整幅扑克牌 * public void showCard() //显示单支牌的花色和点数 * public void refreshCard() //洗牌 从第一支牌开始从所有牌中随机取一只与之交换 * public void addPeopleInfo() //添加玩家的基本信息 * public void dealCard() //发牌 从开始分别给A B发牌 每人两支 * public void showPeopleCard() //显示两个角色自己获得的牌 * public void sortCard() //将每个角色自己的牌按从小到大排序 * public void comparePeopleCard() //比较角色的牌 * * SingleCard类 实现Comparable接口 * 功能:产生单支牌 * 属性:ID、color、keyID数组、keyColor数组 * 方法:public SingleCard(){} //无参构造函数 * public SingleCard(String ID,String color) //有参构造函数 * @Override public int compareTo(SingleCard o) //比较当前牌与SingleCard o的牌的大小 * * People类 * 功能:产生一个角色 * 属性:ID、Name、和、存储牌的List集合。 * 方法: public People() //初始化存储牌的List集合; *
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值