模拟洗牌发牌游戏
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]
共同学习,写下你的评论
评论加载中...
作者其他优质文章