ITPub博客

首页 > IT职业 > IT生活 > JAVA第三季-模拟发牌游戏总结

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

IT生活 作者:cityvag 时间:2021-09-09 09:00:21 0 删除 编辑

模拟洗牌发牌游戏
1.创建一副扑克牌
包括四种花色 2-10 JQKA 不考虑大小王
2.创建两名玩家
玩家至少要有ID、姓名、手牌等属性、手牌为扑克牌的集合
3.洗牌
将之前创建的一副扑克牌 打乱顺序
4.发牌
将洗牌之后的扑克牌集合,从第一张开始,一人一张,每人发两张
5.游戏
游戏规则:
取两人各自手中点数最大的牌进行比较,点数大的赢;若两人各自的点数最大的牌相等 则比较花色
花色大小的顺序:方块 梅花 红桃 黑桃的顺序
——————————————————————————————————————————————
总结:通过这三季的学习,一时间拿到这个题目刚开始还是无从下手,评论区找到一位同学的手记便开始整理思路。
完成模拟发牌游戏:首先要明确几个类
1.扑克牌类:花色和数字
2.玩家类:id和姓名 还有他手中的牌Llist 集合
3.比较规则类:这里的compare类要实现Comparator 接口,内是比较的类型。
实现该接口需要重写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 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{

    @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(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 cardlist = new ArrayList();
    public List playerlist = new ArrayList();

    //创建一副扑克牌
    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 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]

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/3518/viewspace-2807638/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-08-30

  • 博文量
    79
  • 访问量
    742