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

JAVA第三季-模拟发牌游戏总结

GUITAR5music
关注TA
已关注
手记 2
粉丝 3
获赞 18

模拟洗牌发牌游戏
1.创建一副扑克牌
包括四种花色 2-10 JQKA 不考虑大小王
2.创建两名玩家
玩家至少要有ID、姓名、手牌等属性、手牌为扑克牌的集合
3.洗牌
将之前创建的一副扑克牌 打乱顺序
4.发牌
将洗牌之后的扑克牌集合,从第一张开始,一人一张,每人发两张
5.游戏
游戏规则:
取两人各自手中点数最大的牌进行比较,点数大的赢;若两人各自的点数最大的牌相等 则比较花色
花色大小的顺序:方块 梅花 红桃 黑桃的顺序
——————————————————————————————————————————————
总结:通过这三季的学习,一时间拿到这个题目刚开始还是无从下手,评论区找到一位同学的手记便开始整理思路。
完成模拟发牌游戏:首先要明确几个类
1.扑克牌类:花色和数字
2.玩家类:id和姓名 还有他手中的牌Llist 集合
3.比较规则类:这里的compare类要实现Comparator<Card> 接口,<>内是比较的类型。
实现该接口需要重写compare方法,参数是 两个Card类型的对象o1和o2。
方法内部是对比较这两个card对象的说明即比较规则,返回1则o1比o2大,返回-1则是o1比o2小。
返回0是两个对象相等。 Collections.sort(待比较的集合list,比较规则CompareRule). sort方法自动按比较规则对集合进行升序的排序。
4.PlayingCards即为 主方法类:类中主要定义方法所共用的成员 cardlist和playerlist。
其中cardlist是用来存取一副扑克牌的集合,playerlist是存取玩家的集合。
这两个集合在后续方法中创建扑克牌和创建玩家,以及后面对玩家和扑克牌的调用都有大大的作用。
在主方法类中把所用要实现的模块例如 创建扑克牌、创建玩家、洗牌、发牌、开始游戏等都分模块实现,在主方法体中只调用这些模块。这样的设计风格便于管理且一目了然。
————————————————————————————————————————————————
本次实践的主要收获:
1.对一个小程序的基本模块化有一定的了解
2.对集合list有一定的了解,后续还需继续学习。包括对comparable等的了解都太片面。
3.对java集合框架有待继续深入学习
4.课后多找一些其他小程序进行练习反思总结。
5.不求进度,求深度和投入。输入的同时也要输出!

package com.imooc;

/*
 * 扑克牌类
 * 成员对象:花色和数字
 */
public class Card {

    public String color;
    public String number;

    //有参构造函数
    public Card(String color,String nums){
       this.color=color;
       this.number=nums;

    }

    @Override
    public String toString() {
        return color+number;
    }

}
package com.imooc;

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

/*
 * 玩家类
 * 
 */
public class Player {
    public String id;
    public String name;
    public List<Card> playerCardList;

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

    }

//  @Override
//  public String toString() {
//      return name;
//  }

}
package com.imooc;

import java.util.Comparator;

public class Compare implements Comparator<Card>{

    @Override
    public int compare(Card o1, Card o2) {

        String colors="方块 梅花 红桃 黑桃";
        String numbers="3 4 5 6 7 8 9 J Q K A 2";

        //比较数字的大小 选出较大的手牌
        if(numbers.indexOf(o1.number)<numbers.indexOf(o2.number))
        {
            return -1;
        }
        else if(numbers.indexOf(o1.number)>numbers.indexOf(o2.number))
        {
            return 1;
        }
        else {
            //数字相等的时候比较花色
            if(colors.indexOf(o1.color)<colors.indexOf(o2.color))
            {
                return -1;
            }else if(colors.indexOf(o1.color)>colors.indexOf(o2.color)){
                return 1;
            }
            else {
                return 0;
            }

        }

    }

}
package com.imooc;

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

/*
 *模拟洗牌发牌游戏
 *1.创建一副扑克牌
 *包括四种花色  2-10 JQKA 不考虑大小王
 *2.创建两名玩家 
 *玩家至少要有ID、姓名、手牌等属性、手牌为扑克牌的集合
 *3.洗牌 
 *将之前创建的一副扑克牌 打乱顺序
 *4.发牌
 *将洗牌之后的扑克牌集合,从第一张开始,一人一张,每人发两张
 *5.游戏
 *游戏规则:
 *取两人各自手中点数最大的牌进行比较,点数大的赢;若两人各自的点数最大的牌相等 则比较花色 
 *花色大小的顺序:方块 梅花 红桃 黑桃的顺序
 */
public class PlayingCards {
    public List<Card> cardlist = new ArrayList<Card>();
    public List<Player> playerlist = new ArrayList<Player>();

    //创建一副扑克牌
    public void createCards(){
        String[] color={"方块", "梅花", "红桃","黑桃"};
        String[] nums={"A","2","3","4","5","6","7","8","9","10","J","Q","K"};

        for(int i=0;i<4;i++){
            for(int j=0;j<nums.length;j++){
                Card card=new Card(color[i],nums[j]);
                cardlist.add(card);
            }
        }
        System.out.println("===开始创建一副扑克牌====");
        System.out.println("===创建成功!====");
        System.out.println("扑克牌为:"+cardlist);
        System.out.println();

//      System.out.println(cardlist.get(0));
//      System.out.println(cardlist.get(51));

    }

    //洗牌 
    public void randomCard(){
        System.out.println("=====开始洗牌====");
        Collections.shuffle(cardlist);
        System.out.println("=====洗牌结束====");
        System.out.println("洗牌后的结果:"+cardlist);
        System.out.println();
    }

    /*
     * 创建两位玩家
     */
    public void createPlayer()
    {
        System.out.println("===开始创建玩家==");
        Scanner scanner=new Scanner(System.in);

        for(int i=1;i<3;i++)
        {
             System.out.println("请输入玩家"+i+"的id:");
             String id;
             id=scanner.next();
             System.out.println("请输入玩家"+i+":的姓名");

              String name=scanner.next();
              playerlist.add(new Player(id,name));

        }

        System.out.println("欢迎玩家"+playerlist.get(0).name);
        System.out.println("欢迎玩家"+playerlist.get(1).name);

         System.out.println("");

    }
    /*
     * 发牌操作
     * 每位玩家 发两张牌
     */
    public void assignCard(){
        System.out.println("====开始发牌=====");
        Random random=new Random();
        for(int i=1;i<3;i++)
        {
            System.out.println("玩家:"+playerlist.get(0).name+"拿牌");
            int k=random.nextInt(51);
            playerlist.get(0).playerCardList.add(cardlist.get(k));

            System.out.println("玩家:"+playerlist.get(1).name+"拿牌");
            k=random.nextInt(51);
            playerlist.get(1).playerCardList.add(cardlist.get(k));

        }
        System.out.println("==发牌结束==");
        System.out.println();
    }

    /*
     * 开始游戏
     *
     */
    public void startGame(){
        Player player1=playerlist.get(0);
        Player player2=playerlist.get(1);

        System.out.println("==START GAME==");

        Compare compareRule=new Compare();
        Collections.sort(player1.playerCardList,compareRule);
        Collections.sort(player2.playerCardList,compareRule);
        List<Card> bigCard= new ArrayList<>();
        bigCard.add(player1.playerCardList.get(1));
        bigCard.add(player2.playerCardList.get(1));

        System.out.println("*****玩家1:"+player1.name+"最大的手牌为"+player1.playerCardList.get(1));
        System.out.println("*****玩家2:"+player2.name+"最大的手牌为"+player2.playerCardList.get(1));

        Collections.sort(bigCard,compareRule);

        if(bigCard.get(1).equals(player1.playerCardList.get(1))){
            System.out.println("玩家1"+player1.name+"获胜!!");
        }else{
            System.out.println("玩家2"+player2.name+"获胜!!");
        }

        System.out.println("玩家各自的手牌:");
        System.out.println(player1.name+":"+player1.playerCardList);
        System.out.println(player2.name+":"+player2.playerCardList);
    }

    public static void main(String[] args) {
        PlayingCards test=new PlayingCards();
        // TODO Auto-generated method stub

        test.createCards();
        test.randomCard();
        test.createPlayer();
        test.assignCard();
        test.startGame();

    }

}

测试界面
===开始创建一副扑克牌========
===创建成功!========
扑克牌为:[方块A, 方块2, 方块3, 方块4, 方块5, 方块6, 方块7, 方块8, 方块9, 方块10, 方块J, 方块Q, 方块K, 梅花A, 梅花2, 梅花3, 梅花4, 梅花5, 梅花6, 梅花7, 梅花8, 梅花9, 梅花10, 梅花J, 梅花Q, 梅花K, 红桃A, 红桃2, 红桃3, 红桃4, 红桃5, 红桃6, 红桃7, 红桃8, 红桃9, 红桃10, 红桃J, 红桃Q, 红桃K, 黑桃A, 黑桃2, 黑桃3, 黑桃4, 黑桃5, 黑桃6, 黑桃7, 黑桃8, 黑桃9, 黑桃10, 黑桃J, 黑桃Q, 黑桃K]

===开始洗牌====
===洗牌结束====
洗牌后的结果:[红桃9, 黑桃J, 梅花Q, 梅花5, 黑桃10, 黑桃A, 方块8, 黑桃8, 梅花A, 黑桃9, 红桃8, 黑桃4, 方块Q, 方块9, 梅花10, 黑桃2, 方块2, 梅花8, 方块A, 方块3, 梅花9, 方块J, 红桃3, 红桃J, 梅花6, 黑桃7, 红桃7, 方块10, 梅花7, 黑桃K, 梅花4, 红桃10, 方块4, 梅花2, 梅花K, 黑桃Q, 黑桃6, 红桃A, 方块7, 红桃5, 红桃6, 梅花3, 方块K, 黑桃5, 红桃2, 方块5, 梅花J, 方块6, 红桃Q, 红桃4, 黑桃3, 红桃K]

===开始创建玩家========
请输入玩家1的id:

1
请输入玩家1:的姓名
戴鹏
请输入玩家2的id:
2
请输入玩家2:的姓名
付莹莹
欢迎玩家戴鹏
欢迎玩家付莹莹

===开始发牌======
玩家:戴鹏拿牌
玩家:付莹莹拿牌
玩家:戴鹏拿牌
玩家:付莹莹拿牌
==发牌结束==

==START GAME==
玩家1:戴鹏最大的手牌为红桃9
玩家2:付莹莹最大的手牌为黑桃A
玩家2付莹莹获胜!!
玩家各自的手牌:
戴鹏:[黑桃7, 红桃9]
付莹莹:[方块8, 黑桃A]

打开App,阅读手记
7人推荐
发表评论
随时随地看视频慕课网APP