用java编写发牌游戏_JAVA第三季-模拟发牌游戏总结

模拟洗牌发牌游戏

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)

{

return -1;

}

else if(numbers.indexOf(o1.number)>numbers.indexOf(o2.number))

{

return 1;

}

else {

//数字相等的时候比较花色

if(colors.indexOf(o1.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 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<4;i++){

for(int j=0;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 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]

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值