时间:2021-05-19
本文实例为大家分享了java实现扑克牌游戏的具体代码,供大家参考,具体内容如下
游戏功能描述
1、创建一副扑克牌:
包括四种花色:黑桃,红桃,梅花,方片
包括十三种点数:2-10,J,Q,K,A
2、创建两名玩家(or多名)
玩家至少要有ID,姓名,手牌等属性,手牌为扑克牌的集合
3、将创建好的扑克牌进行随机洗牌
4、从洗牌后的扑克牌的第一张开始,发给每个玩家,按照一人一张的方式,每人发两张(or多张)
5、比较两名玩家手中的扑克牌,比较规则为:取两人各自手中点数最大的牌进行比较,点数大的赢;若两人各自的点数最大的牌相等,则再按照花色比较。
代码
//Card.java
package card;public class Card{ private String color; private String number; public Card(String color, String number) { this.color = color; this.number = number; } public String getColor() { return color; } public String getNumber() { return number; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (!(obj instanceof Card)) return false; Card other = (Card) obj; if (color == null) { if (other.color != null) return false; } else if (!color.equals(other.color)) return false; if (number == null) { if (other.number != null) return false; } else if (!number.equals(other.number)) return false; return true; }}//Cards.java
package card;import java.util.ArrayList;import java.util.Collections;import java.util.List;public class Cards { private List<Card> list = new ArrayList<Card>(); //创建一副扑克牌 public Cards(){ System.out.println("-----------------创建扑克牌------------------"); String[] color = {"黑桃", "红桃", "梅花", "方片"}; String[] number = {"2", "3", "4", "5", "6", "7", "8", "9", "10", "J","Q","K", "A"}; for(int i=0;i<color.length;i++) for(int j=0;j<number.length;j++){ list.add(new Card(color[i], number[j])); } System.out.println("----------------扑克牌创建成功!---------------"); } //获取一副扑克牌 public List<Card> getList() { return list; } //洗牌(打乱) public void shufCards(){ System.out.println("----------------开始洗牌------------------------"); Collections.shuffle(list); System.out.println("----------------洗牌结束------------------------"); } //展示一副扑克牌 public void showCards(){ System.out.print("当前的扑克牌为:"); System.out.print("[ "); for(int i=0;i<list.size();i++){ System.out.print(list.get(i).getColor() + list.get(i).getNumber()+ " "); } System.out.println(" ]"); }}//Player.java
package card;import java.util.ArrayList;import java.util.List;public class Player { private int id; private String name; private List<Card> handCards = new ArrayList<Card>(); public Player(int id, String name){ this.id = id; this.name = name; } public List<Card> getHandCards() { return handCards; } public void setHandCards(Card card) { handCards.add(card); } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; }}//CardComparator.java(自定义排序规则)
package card;import java.util.Comparator;public class CardComparator implements Comparator<Card> { @Override public int compare(Card c1, Card c2) { // 构建花色和牌值数组,通过比对,计算得到某张牌的价值(大小) String[] color = {"方片", "梅花", "红桃", "黑桃"}; String[] number = {"2", "3", "4", "5", "6", "7", "8", "9", "10", "J","Q","K", "A"}; //由于比较规则是先比较牌值,如果相等再比较花色(黑红梅方),所以将牌值赋予较高的权值 int valueOfC1 = 0; int valueOfC2 = 0; for(int i=0;i<number.length;i++){ if(c1.getNumber().equals(number[i])) valueOfC1 += i*10; if(c2.getNumber().equals(number[i])) valueOfC2 += i*10; } for(int i=0;i<color.length;i++){ if(c1.getColor().equals(color[i])) valueOfC1 += i; if(c2.getColor().equals(color[i])) valueOfC2 += i; } if( valueOfC1 > valueOfC2 ) return -1; if( valueOfC1 < valueOfC2 ) return 1; return 0; }}//PlayDemo.java
package card;import java.util.ArrayList;import java.util.Collections;import java.util.List;import java.util.Scanner;public class PlayDemo { //创建玩家 //要对玩家ID的异常处理,要求用户只能输入整数ID,否则需要重新输入 public Player setPlayer(){ int id=0; String name=""; Scanner console = new Scanner(System.in); boolean ready = true; do{ try{ System.out.println("输入ID:"); id = console.nextInt(); ready = true; }catch(Exception e){ System.out.println("请输入整数类型的ID!"); ready = false; console.nextLine(); } }while(ready==false); System.out.println("输入姓名:"); name = console.next(); return new Player(id, name); } public static void main(String[] args) { //测试简易扑克牌程序 PlayDemo game = new PlayDemo(); //(1)创建一副牌 Cards cards = new Cards(); //(2)展示新的扑克牌 cards.showCards(); //(3)洗牌 cards.shufCards(); //(4)创建玩家 System.out.println("--------------创建两个(or多个)玩家就可以开始游戏啦!-------------"); List<Player> p = new ArrayList<Player>(); for(int i=0;i<2;i++) { System.out.println("请输入第"+(i+1)+"位玩家的ID和姓名:"); p.add(game.setPlayer()); } for(int i=0;i<p.size();i++) { System.out.println("欢迎玩家:"+p.get(i).getName()); } //(5)扑克牌比大小游戏开始啦~ int count = 0; System.out.println("------------------开始发牌---------------------"); //设定每人分别拿两张(or多张) for(int i=0; i<2;i++){ //玩家轮流拿牌 for(int j=0; j< p.size(); j++){ System.out.println(">玩家"+p.get(j).getName()+"拿牌"); p.get(j).setHandCards(cards.getList().get(count)); count++; } } System.out.println("------------------发牌结束!--------------------"); System.out.println("------------------开始游戏 ---------------------"); for(int i=0;i<p.size();i++){ System.out.print("玩家"+p.get(i).getName()+"的手牌为:[ "); for(int j=0;j<p.get(i).getHandCards().size();j++){ Card cur = p.get(i).getHandCards().get(j); System.out.print(cur.getColor()+cur.getNumber()+" "); } System.out.println(" ]"); } //排序得到每个玩家最大的手牌(排序规则自定义) for(int i=0;i<p.size();i++){ Collections.sort(p.get(i).getHandCards(), new CardComparator()); } List<Card> maxCard = new ArrayList<Card>(); for(int i=0;i<p.size();i++){ Card maxCur = p.get(i).getHandCards().get(0); System.out.println("玩家"+p.get(i).getName()+"最大的手牌为:"+ maxCur.getColor()+maxCur.getNumber()); maxCard.add(maxCur); } //得到最后的胜者 List<Card> temp = new ArrayList<Card>(); temp.addAll(maxCard); Collections.sort(temp, new CardComparator()); for(int i=0;i<p.size();i++){ if(maxCard.get(i).equals(temp.get(0))) System.out.println("恭喜玩家:"+p.get(i).getName()+"获胜!"); } }}游戏运行截图
还有一个地方需要优化,即不能输入重复的ID和姓名,可以重写Player的equals方法,将用户的输入与已有的输入相比较,不满足要求则需要重新输入,不过就先不加了。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
功能描述1、创建扑克牌。包括四种花色(黑桃,红心,梅花,方块),十三种点数(2-10,J,Q,K),不考虑大小王。2、创建两个玩家。包括玩家id、姓名、手牌等集
本文实例讲述了Java模拟扑克牌洗牌实现生成52张扑克的方法。分享给大家供大家参考,具体如下:要求:生成52张扑克,模拟扑克牌洗牌,并输出。实现代码:packa
Java练习——扑克牌发牌器,供大家参考,具体内容如下声明:学习自其他博主,感谢分享实现思路构建一张扑克牌构建一套扑克牌测试构建一张扑克牌/***@author
本文实例为大家分享了java实现多人多牌数比较游戏的具体代码,供大家参考,具体内容如下具体实现步骤如下:实现扑克Card类,用于储存扑克牌,1-13代表点数,4
算法思想插入排序的方式类似平时打扑克牌的时候排序自己手中的扑克牌。开始时,我们左手中没有牌,桌上有洗好的扑克牌,我们抓取一张扑克牌并放入左手的正确位置。为了找到