Java 保皇
2016-01-06 11:32
309 查看
模拟保皇游戏开始的发牌过程。
规则:4副扑克,5个玩家。1)有一个大王标记为皇上。每次发牌时,所发牌中有该大王的玩家是皇上。2)皇帝选择侍卫(也叫保儿、腿子,游戏过程中与皇帝一伙):作为皇上的玩家从自己的牌中选择一张拥有相同三张(点数和花色都相同)的一张牌(不能是2、3、大小王),其他四个玩家中有这张牌的就是侍卫。例如,皇上有三个红桃5,其他四个玩家中有红桃5的玩家就是侍卫。
特殊情况是:1)皇上有一套四张牌相同的点数的牌,皇帝可以自己做侍卫;2)皇帝没有满足要求的牌,无法获得侍卫。
程序要求:程序启动后生成5个玩家,并自动给他们发牌。然后输出:1)皇帝和侍卫的名字及其手里的牌(每张牌输出为“花色”+“点数”,如红桃5,牌之间用“,”分割),并按照大王、小王、2、A、K、Q、J、10、9、8、7、6、5、4、3的顺序排列,相同点数但不同花色的牌要把相同花色的牌放在一起;2)那张作为侍卫所特有的牌(“花色”+“点数”)。如果无法得到侍卫,则程序输出相应的提示。
输出样例:
皇帝:玩家1
皇帝的牌:[皇上, 小王, 小王, 小王, 小王, 方片2, 黑桃2, 黑桃A, 黑桃A, 红桃A, 方片K, 梅花K, 黑桃K, 红桃K, 梅花Q, 梅花Q, 黑桃Q,方片J, 方片J, 方片J, 红桃J, 梅花9, 黑桃9, 黑桃9, 方片8, 梅花8, 红桃8, 梅花7, 黑桃7, 黑桃7, 红桃7, 梅花6, 梅花6, 黑桃6, 黑桃6, 方片5, 梅花5, 黑桃5, 黑桃5, 梅花4, 梅花4, 梅花4, 方片3, 红桃3]
侍卫对应的牌:方片J
侍卫:玩家2
侍卫的牌:[方片2, 黑桃2, 红桃2, 方片A, 方片K, 梅花K, 梅花K, 黑桃K, 红桃K, 红桃K, 黑桃Q, 红桃Q,方片J, 方片10, 黑桃10, 红桃10, 红桃10, 红桃10, 方片9, 红桃9, 方片8, 梅花8, 梅花8, 黑桃8, 黑桃8, 黑桃8, 红桃8, 红桃8, 方片7, 黑桃7, 黑桃7, 方片6, 黑桃6, 黑桃5, 梅花4, 黑桃4, 红桃4, 红桃4, 方片3, 梅花3, 黑桃3, 红桃3, 红桃3]
规则:4副扑克,5个玩家。1)有一个大王标记为皇上。每次发牌时,所发牌中有该大王的玩家是皇上。2)皇帝选择侍卫(也叫保儿、腿子,游戏过程中与皇帝一伙):作为皇上的玩家从自己的牌中选择一张拥有相同三张(点数和花色都相同)的一张牌(不能是2、3、大小王),其他四个玩家中有这张牌的就是侍卫。例如,皇上有三个红桃5,其他四个玩家中有红桃5的玩家就是侍卫。
特殊情况是:1)皇上有一套四张牌相同的点数的牌,皇帝可以自己做侍卫;2)皇帝没有满足要求的牌,无法获得侍卫。
程序要求:程序启动后生成5个玩家,并自动给他们发牌。然后输出:1)皇帝和侍卫的名字及其手里的牌(每张牌输出为“花色”+“点数”,如红桃5,牌之间用“,”分割),并按照大王、小王、2、A、K、Q、J、10、9、8、7、6、5、4、3的顺序排列,相同点数但不同花色的牌要把相同花色的牌放在一起;2)那张作为侍卫所特有的牌(“花色”+“点数”)。如果无法得到侍卫,则程序输出相应的提示。
输出样例:
皇帝:玩家1
皇帝的牌:[皇上, 小王, 小王, 小王, 小王, 方片2, 黑桃2, 黑桃A, 黑桃A, 红桃A, 方片K, 梅花K, 黑桃K, 红桃K, 梅花Q, 梅花Q, 黑桃Q,方片J, 方片J, 方片J, 红桃J, 梅花9, 黑桃9, 黑桃9, 方片8, 梅花8, 红桃8, 梅花7, 黑桃7, 黑桃7, 红桃7, 梅花6, 梅花6, 黑桃6, 黑桃6, 方片5, 梅花5, 黑桃5, 黑桃5, 梅花4, 梅花4, 梅花4, 方片3, 红桃3]
侍卫对应的牌:方片J
侍卫:玩家2
侍卫的牌:[方片2, 黑桃2, 红桃2, 方片A, 方片K, 梅花K, 梅花K, 黑桃K, 红桃K, 红桃K, 黑桃Q, 红桃Q,方片J, 方片10, 黑桃10, 红桃10, 红桃10, 红桃10, 方片9, 红桃9, 方片8, 梅花8, 梅花8, 黑桃8, 黑桃8, 黑桃8, 红桃8, 红桃8, 方片7, 黑桃7, 黑桃7, 方片6, 黑桃6, 黑桃5, 梅花4, 黑桃4, 红桃4, 红桃4, 方片3, 梅花3, 黑桃3, 红桃3, 红桃3]
import java.util.*; public class BaoHuang { LinkedList<Card> cards = null; LinkedList<Player> players = null; public static void main(String[] args) { BaoHuang bh = new BaoHuang(); bh.send(); bh.check(); } BaoHuang() { cards = new LinkedList<Card>(); players = new LinkedList<Player>(); for (int i = 0; i < 13; i++) { for (int j = 0; j < 4; j++) { for (int k = 0; k < 4; k++) cards.add(new Card(j, i));// 基本牌 } } for (int i = 0; i < 4; i++) { cards.add(new Card(4, 14));// 小王 } for (int i = 0; i < 3; i++) { cards.add(new Card(5, 14));// 大王 } cards.add(new Card(6, 14));// 皇帝 for (int i = 0; i < 5; i++) { players.add(new Player()); } } void send() { Collections.shuffle(cards); int csize = cards.size(); // System.out.println(csize); for (int i = 0; i < csize; i++) { sort(i); } } void sort(int i) { int j = i % 5; Player py = players.get(j); LinkedList<Card> ll = py.pc; Card cd = cards.get(i); if (cd.type <= 3&&cd.value!=0&&cd.value!=12) py.count[cd.type][cd.value]++; int size = ll.size(); boolean bool = false; for (i = 0; i < size; i++) { if (cd.compareTo(ll.get(i)) >= 0) { ll.add(i, cd); bool = true; break; } } if (!bool) { ll.add(cd); } } void check() { Player temp = null; for (int i = 0; i < 5; i++) { temp = players.get(i); if ("皇帝".equals(temp.pc.get(0).toString())) { System.out.println("皇帝是:玩家"+(i+1)); System.out.print("皇帝的牌是:"); temp.show(); break; } } boolean bool = false; for (int i = 0; i < 4; i++) { for (int j = 1; j < 13; j++) { if (temp.count[i][j] >= 3) { bool = true; for(int k=0; k<5; k++){ if(players.get(k).count[i][j]==1){ System.out.println("侍卫对应的牌是:"+Card.change(i,j)); System.out.println("侍卫是:玩家"+(k+1)); System.out.print("侍卫的牌是:"); players.get(k).show(); break; } } 4000 } if(bool)break; } if(bool)break; } if(!bool)System.out.println("没有侍卫"); } } class Card implements Comparable<Card> { int type = 0; int value = 0; public Card(int type, int value) { this.type = type; this.value = value; } static String change(int type,int value){ String s1 = null; String s2 = null; switch (value) { case 8: s2 = "J"; break; case 9: s2 = "Q"; break; case 10: s2 = "K"; break; case 11: s2 = "A"; break; case 12: s2 = "2"; break; default: s2 = (value + 3) + ""; } switch (type) { case 2: s1 = "梅花 "; break; case 3: s1 = "方片 "; break; case 0: s1 = "红桃 "; break; case 1: s1 = "黑桃 "; break; case 4: s1 = "小王"; s2 = ""; break; case 5: s1 = "大王"; s2 = ""; break; case 6: s1 = "皇帝"; s2 = ""; break; default: } return s1 + s2; } @Override public String toString() { return change(type,value); } @Override public int compareTo(Card obj) { if (obj == this) return 0; Card other = (Card) obj; if (this.value < other.value) { return -1; } else if (this.value > other.value) { return 1; } else if (this.type < other.type) { return -1; } else if (this.type > other.type) { return 1; } else { return 0; } } @Override public int hashCode() { final int prime = 52; int result = 1; result = prime * type; result = result + value; return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Card other = (Card) obj; if (type != other.type) return false; if (value != other.value) return false; return true; } } class Player { LinkedList<Card> pc = new LinkedList<Card>(); int[][] count = new int[4][13]; Player() { for (int i = 0; i < 4; i++) { for (int j = 0; j < 13; j++) { count[i][j] = 0; } } } void show() { // System.out.println(pc.size()); System.out.print("["+pc.get(0)); for (int i = 1; i < pc.size(); i++) { System.out.print("," + pc.get(i)); } System.out.println("]"); } }
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树