/**
- 一、创建一副扑克牌
- 包括四种花色: 黑桃、红桃、梅花、方片
- 十三种点数:2——10,J、Q、K、A,不考虑大小王
- 二、创建两名玩家
- 玩家至少要有ID、姓名、手牌等属性,手牌为扑克牌的集合
- 三、洗牌
- 将之前创建的“一副扑克牌”打乱顺序
- 四、发牌
- 将洗牌之后的扑克牌集合,从第一张开始,发给两名玩家,按照一人一张的方式,每人发两张
- 五、游戏
- 比较两名玩家手中的扑克牌,规则为:取两人各自手中点数最大的牌进行比较,点数大的赢;
- 若两人各自的点数最大的牌相等,则再按花色(黑红梅方)比较。
- @author zhaoxin
-
*/
Card.java
package com.ChiuHsin.esayPokerGame;
public class Card implements Comparable<Card>{
private String type;
private String number;
public Card(String type,String number){
this.setType(type);
this.setNumber(number);
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((number == null) ? 0 : number.hashCode());
result = prime * result + ((type == null) ? 0 : type.hashCode());
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 (number == null) {
if (other.number != null)
return false;
} else if (!number.equals(other.number))
return false;
if (type == null) {
if (other.type != null)
return false;
} else if (!type.equals(other.type))
return false;
return true;
}
public String getType(){
return type;
}
public void setType(String type){
this.type = type;
}
public String getNumber(){
return number;
}
public void setNumber(String number){
this.number = number;
}
@Override
public int compareTo(Card o) {
String cardNumber="2,3,4,5,6,7,8,9,10,J,Q,K,A";
String cardType="红桃,黑桃,梅花,方片";
int result;
result=cardNumber.indexOf(this.getNumber())-cardNumber.indexOf(o.getNumber());
if(result==0){
result=cardType.indexOf(this.getType())-cardType.indexOf(o.getType());
}
return result;
}
}
Player.java
package com.ChiuHsin.esayPokerGame;
public class Player {
private String ID;
private String name;
public Player(String ID,String name){
this.ID = ID;
this.name = name;
}
public String getID(){
return ID;
}
public void setID(String id){
ID = id;
}
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
}
Game.java
package com.ChiuHsin.esayPokerGame;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
import java.util.HashMap;
public class Game {
List<Card>cardList = new ArrayList<Card>();
// List<Player>playerList = new ArrayList<Player>();
List<Card>player1HandCards = new ArrayList<Card>();
List<Card>player2HandCards = new ArrayList<Card>();
String[] type = {"红桃","黑桃","梅花","方片"};
String[] number = {"2","3","4","5","6","7","8","9","10","J","Q","K","A"};
public Map<Integer,Player>Players;
public Game(){
this.Players = new HashMap<Integer,Player>();
}
/**
* 创建一副扑克牌
*/
public void creatCards(){
int column = 1;
System.out.println("**********开始创建扑克牌**********");
for(int i=0;i<type.length;i++){
for(int j=0;j<number.length;j++){
cardList.add(new Card(type[i],number[j]));
}
}
for(int k=0;k<cardList.size();k++){
Card card1 = cardList.get(k);
//此处为了显示效果,略显冗余
if(column<=13){
System.out.print(card1.getType()+card1.getNumber()+" ");
column++;
}else{
System.out.println();
System.out.print(card1.getType()+card1.getNumber()+" ");
column = 2;
}
}
System.out.println();
System.out.println("**********创建扑克牌成功**********");
}
/**
* 创建两名玩家
*/
public void createPlayers(){
Scanner console = new Scanner(System.in);
int i=0;
while(i<2){
System.out.println("请输入玩家ID:");
try{
int ID = Integer.parseInt(console.next());
//判断该ID是否被占用
Player pl = Players.get(ID);
if(pl==null){
System.out.println("请输入玩家姓名:");
String name = console.next();
Player newPlayer = new Player(ID+"",name);
Players.put(ID, newPlayer);
// playerList.add(newPlayer);
System.out.println("成功添加第"+(i+1)+"个玩家:"+Players.get(ID).getName());
i++;
}else{
System.out.println("该玩家ID已被占用!!");
continue;
}
}catch(Exception e){
System.out.println("请输入整数!!");
}
}
}
/**
* 洗牌
*/
public void shuffleCards(){
System.out.println("************开始洗牌************");
Collections.shuffle(cardList);
System.out.println("************洗牌结束************");
}
/**
* 发牌
*/
public void dealCards(){
System.out.println("************开始发牌************");
// try{
for(int i=0;i<4;i++){
Card newCards = cardList.get(i);
if(i%2==0){
player1HandCards.add(newCards);
System.out.println("玩家"+Players.get(1).getName()+"摸牌");
}else{
player2HandCards.add(newCards);
System.out.println("玩家"+Players.get(2).getName()+"摸牌");
}
}
// }catch(IndexOutOfBoundsException e){
// System.out.println("hhhhhh");
// }
System.out.println("************发牌完毕************");
}
/**
* 比较大小
*/
public void compareSize(){
System.out.println("************游戏开始************");
Collections.sort(player1HandCards);
Card pHC1Max= player1HandCards.get(player1HandCards.size()-1);
System.out.println("玩家"+Players.get(1).getName()+"最大的手牌为:"+pHC1Max.getType()+pHC1Max.getNumber());
Collections.sort(player2HandCards);
Card pHC2Max= player2HandCards.get(player2HandCards.size()-1);
System.out.println("玩家"+Players.get(2).getName()+"最大的手牌为:"+pHC2Max.getType()+pHC2Max.getNumber());
List<Card>maxCardList= new ArrayList<Card>();
maxCardList.add(pHC1Max);
maxCardList.add(pHC2Max);
Collections.sort(maxCardList);
Card MaxCard= maxCardList.get(maxCardList.size()-1);
if(player1HandCards.contains(MaxCard)){
System.out.println("玩家"+Players.get(1).getName()+"获胜!!");
}else{
System.out.println("玩家"+Players.get(2).getName()+"获胜!!");
}
System.out.print("玩家"+Players.get(1).getName()+"的手牌是:");
for (Card card1 : player1HandCards) {
System.out.print(card1.getType()+card1.getNumber()+" ");
}
System.out.println();
System.out.print("玩家"+Players.get(2).getName()+"的手牌是:");
for (Card card2 : player2HandCards) {
System.out.print(card2.getType()+card2.getNumber()+" ");
}
System.out.println();
System.out.println("************游戏结束************");
}
/**
*
* @param args
*/
public static void main(String[] args) {
Game g1 = new Game();
g1.creatCards();
g1.createPlayers();
g1.shuffleCards();
g1.dealCards();
g1.compareSize();
}
}
运行结果:
**开始创建扑克牌**
红桃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 方片A
**创建扑克牌成功**
请输入玩家ID:
s
请输入整数!!
请输入玩家ID:
1
请输入玩家姓名:
Tom
成功添加第1个玩家:Tom
请输入玩家ID:
1
该玩家ID已被占用!!
请输入玩家ID:
2
请输入玩家姓名:
Jack
成功添加第2个玩家:Jack
****开始洗牌****
****洗牌结束****
****开始发牌****
玩家Tom摸牌
玩家Jack摸牌
玩家Tom摸牌
玩家Jack摸牌
****发牌完毕****
****游戏开始****
玩家Tom最大的手牌为:黑桃9
玩家Jack最大的手牌为:红桃K
玩家Jack获胜!!
玩家Tom的手牌是:方片6 黑桃9
玩家Jack的手牌是:梅花2 红桃K
****游戏结束****
热门评论
发牌那个方法是不是有问题,因为它在for循环里那个newCards是一直增加的,不能直接添加到手牌里吧?