Xiao_oNe_oNe
2015-09-17 18:29
扑克牌有源码吗
自己写的程序,能实现要求,有些啰嗦,欢迎大家指教!!!
package com.marvin.java3_7_1;
import java.util.List;
/**
* 玩家类 包含玩家的ID,姓名,手牌的信息
*
* @author Prague
*
*/
public class Player {
private String id;
private String name;
private List<PlayCard> handCard;
public Player(String id, String name) {
this.id = id;
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<PlayCard> getHandCard() {
return handCard;
}
public void setHandCard(List<PlayCard> handCard) {
this.handCard = handCard;
}
}
package com.marvin.java3_7_1;
/**
* 扑克类 包含扑克的花色、数字(或字母)
*
* @author Prague
*
*/
public class PlayCard {
private String color;// 记录花色,黑桃>红桃>梅花>方片
private String character;// 记录牌面的数字的
private int realNum;// 记录牌面数字的实际大小的,3<4<5<6<7<8<9<10<J<Q<K<A<2
private int num; // 一副扑克牌每张扑克的唯一标示
private int realColor; // 记录牌面花色的实际大小,黑桃(3)>红桃(2)>梅花(1)>方片(0)
public PlayCard(String color, String character, int realNum, int realColor, int num) {
this.color = color;
this.character = character;
this.realNum = realNum;
this.realColor = realColor;
this.num = num;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public String getCharacter() {
return character;
}
public void setCharacter(String character) {
this.character = character;
}
public int getRealNum() {
return realNum;
}
public void setRealNum(int realNum) {
this.realNum = realNum;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public int getRealColor() {
return realColor;
}
public void setRealColor(int realColor) {
this.realColor = realColor;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + num;
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
PlayCard other = (PlayCard) obj;
if (num != other.num)
return false;
return true;
}
}
package com.marvin.java3_7_1;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
/**
* 创建两名玩家 从键盘输入玩家的ID和姓名
*
* @author Prague
*
*/
public class CreatePlayer {
private List<Player> listPlayer = new ArrayList<Player>();
public List<Player> getListPlayer() {
return listPlayer;
}
/**
* 创建两名玩家,从键盘输入玩家信息
*/
@SuppressWarnings("resource")
public void createPlayer() {
Scanner sc = new Scanner(System.in);
for (int i = 0; i < 2; i++) {
System.out.println("请输入玩家的ID:");
Player p1 = new Player(null, null);
p1.setId(sc.next());
System.out.println("请输入玩家的姓名:");
p1.setName(sc.next());
listPlayer.add(p1);
}
}
}
package com.marvin.java3_7_1;
import java.util.ArrayList;
import java.util.List;
/**
* 创建一副扑克牌
*
* @author Prague
*
*/
public class CreatePlayCard {
private List<PlayCard> listPlayCard = new ArrayList<PlayCard>();
final String[] character = { "3", "4", "5", "6", "7", "8", "9", "10", "J",
"Q", "K", "A", "2" };
final String[] color = { "黑桃", "红桃", "梅花", "方片" };
public List<PlayCard> getListPlayCard() {
return this.listPlayCard;
}
// 创建扑克牌
public void createPlayCard() {
int num = 0;
for (int i = 0; i < 13; i++) {
for (int j = 0; j < color.length; j++) {
PlayCard pc = new PlayCard(color[j], character[i], i, (3 - j),
num++);
if (pc != null) {
listPlayCard.add(pc);
}
}
}
}
}
package com.marvin.java3_7_1;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
/**
* 洗牌 将之前创建的扑克牌打乱顺序
*
* @author Prague
*
*/
public class Shuffle {
private List<PlayCard> shufflePlayCard = new ArrayList<PlayCard>();
public List<PlayCard> getShufflePlayCard() {
return shufflePlayCard;
}
/**
* 将输入的扑克牌的顺序打乱,返回洗牌后的扑克牌集合
*/
public void shuffle(List<PlayCard> listPlayCard) {
Random random = new Random();
while (shufflePlayCard.size() < 52) {
int num = random.nextInt(52);
if (!shufflePlayCard.contains(listPlayCard.get(num))) {
shufflePlayCard.add(new PlayCard(listPlayCard.get(num)
.getColor(), listPlayCard.get(num).getCharacter(),
listPlayCard.get(num).getRealNum(), listPlayCard.get(
num).getRealColor(), listPlayCard.get(num)
.getNum()));
} else {
continue;
}
}
}
}
package com.marvin.java3_7_1;
import java.util.ArrayList;
import java.util.List;
/**
* 发牌
*
* @author Prague
*
*/
public class DistributePlayCard {
public void distribute(Player p1, Player p2, List<PlayCard> playCard) {
// p1.setHandCard(handCard);
List<PlayCard> p1HandCard = new ArrayList<PlayCard>();
List<PlayCard> p2HandCard = new ArrayList<PlayCard>();
p1HandCard.add(new PlayCard(playCard.get(0).getColor(), playCard.get(0)
.getCharacter(), playCard.get(0).getRealNum(), playCard.get(0)
.getRealColor(), playCard.get(0).getNum()));
p2HandCard.add(new PlayCard(playCard.get(1).getColor(), playCard.get(1)
.getCharacter(), playCard.get(1).getRealNum(), playCard.get(1)
.getRealColor(), playCard.get(1).getNum()));
p1HandCard.add(new PlayCard(playCard.get(2).getColor(), playCard.get(2)
.getCharacter(), playCard.get(2).getRealNum(), playCard.get(2)
.getRealColor(), playCard.get(2).getNum()));
p2HandCard.add(new PlayCard(playCard.get(3).getColor(), playCard.get(3)
.getCharacter(), playCard.get(3).getRealNum(), playCard.get(3)
.getRealColor(), playCard.get(3).getNum()));
p1.setHandCard(p1HandCard);
p2.setHandCard(p2HandCard);
}
}
package com.marvin.java3_7_1;
/**
* 根据扑克牌面实际大小找出扑克集合的最大值
*
* @author Prague
*
*/
public class FindMaxPlayCard {
public static int findMaxPlayCard(PlayCard pc1, PlayCard pc2) {
if (pc1.getRealNum() > pc2.getRealNum()) {
return 0;
} else if (pc1.getRealNum() < pc2.getRealNum()) {
return 1;
} else if (pc1.getRealNum() == pc2.getRealNum()) {
if (pc1.getRealColor() > pc2.getRealColor()) {
return 0;
} else if (pc1.getRealColor() < pc2.getRealColor()) {
return 1;
}
// else if (pc1.getRealColor() == pc2.getRealColor()) {
// return -1;// 牌面包括花色和数字都相等
// }
}
return -1;
}
}
package com.marvin.java3_7_1;
import java.util.ArrayList;
import java.util.List;
/**
* 洗牌发牌Easy版 功能描述: 1、创建一副扑克牌 包括四种花色:黑桃、红桃、梅花、方片 十三种点数:2-10,J、Q、K、A,不考虑大小王
* 2、创建两名玩家 玩家至少要有ID、姓名、手牌等属性,手牌为扑克牌的集合 3、洗牌 将之前创建的“一副扑克牌”打乱顺序 4、发牌
* 将洗牌之后的扑克牌集合,从第一张开始,发给两名玩家,按照一人一张的方式,每人发两张。
* 5、游戏比较两名玩家手中的扑克牌,规则为:取两人各自手中点数最大的牌进行比较
* ,点数大的赢;若两人各自的点数最大的牌相等,则再按花色进行比较,按照黑桃>红桃>梅花>方片的顺序进行比较。
*
* @author Prague
*
*/
public class PlayCardGame {
List<PlayCard> listPlayCard = new ArrayList<PlayCard>();
List<Player> listPlayer = new ArrayList<Player>();
public static void main(String[] args) {
PlayCardGame pcg = new PlayCardGame();
CreatePlayCard cpc = new CreatePlayCard();
System.out.println("---------------创建一副扑克牌--------------------");
cpc.createPlayCard(); // 创建一副扑克并输出创建结果
pcg.listPlayCard = cpc.getListPlayCard();
// if (pcg.listPlayCard != null) {
// for (PlayCard pc : pcg.listPlayCard) {
// System.out.println(pc.getColor() + " " + pc.getCharacter()
// + " " + pc.getRealNum() + " " + pc.getNum());
// }
// }
CreatePlayer cp = new CreatePlayer();
cp.createPlayer(); // 创建两名玩家
pcg.listPlayer = cp.getListPlayer();
if (pcg.listPlayer != null) {
for (Player p : pcg.listPlayer) {
System.out.println(p.getId() + " " + p.getName());
}
}
System.out.println("--------------洗牌后--------------------");
Shuffle sh = new Shuffle();
sh.shuffle(pcg.listPlayCard);
List<PlayCard> lp = new ArrayList<PlayCard>();
lp = sh.getShufflePlayCard();
// if (lp != null) {
// for (PlayCard playCard : lp) {
// System.out.println(playCard.getColor() + " "
// + playCard.getCharacter() + " "
// + playCard.getRealNum() + " " + playCard.getNum());
// }
// }
System.out.println("---------------玩家的手牌--------------------");
DistributePlayCard dpc = new DistributePlayCard();
dpc.distribute(pcg.listPlayer.get(0), pcg.listPlayer.get(1), lp);
System.out.println("玩家1第一张手牌:"
+ pcg.listPlayer.get(0).getHandCard().get(0).getColor() + " "
+ pcg.listPlayer.get(0).getHandCard().get(0).getCharacter());
System.out.println("玩家1第二张手牌:"
+ pcg.listPlayer.get(0).getHandCard().get(1).getColor() + " "
+ pcg.listPlayer.get(0).getHandCard().get(1).getCharacter());
System.out.println("玩家2第一张手牌:"
+ pcg.listPlayer.get(1).getHandCard().get(0).getColor() + " "
+ pcg.listPlayer.get(1).getHandCard().get(0).getCharacter());
System.out.println("玩家2第二张手牌:"
+ pcg.listPlayer.get(1).getHandCard().get(1).getColor() + " "
+ pcg.listPlayer.get(1).getHandCard().get(1).getCharacter());
// 找出每个玩家中最大的手牌
PlayCard player1Max = new PlayCard(null, null, 0, 0, 0);
PlayCard player2Max = new PlayCard(null, null, 0, 0, 0);
if (FindMaxPlayCard.findMaxPlayCard(pcg.listPlayer.get(0).getHandCard()
.get(0), pcg.listPlayer.get(0).getHandCard().get(1)) == 0) {
player1Max = pcg.listPlayer.get(0).getHandCard().get(0);
} else if (FindMaxPlayCard.findMaxPlayCard(pcg.listPlayer.get(0)
.getHandCard().get(0),
pcg.listPlayer.get(0).getHandCard().get(1)) == 1) {
player1Max = pcg.listPlayer.get(0).getHandCard().get(1);
}
if (FindMaxPlayCard.findMaxPlayCard(pcg.listPlayer.get(1).getHandCard()
.get(0), pcg.listPlayer.get(1).getHandCard().get(1)) == 0) {
player2Max = pcg.listPlayer.get(1).getHandCard().get(0);
} else if (FindMaxPlayCard.findMaxPlayCard(pcg.listPlayer.get(1)
.getHandCard().get(0),
pcg.listPlayer.get(1).getHandCard().get(1)) == 1) {
player2Max = pcg.listPlayer.get(1).getHandCard().get(1);
}
// 判断谁的手牌中的最大的那张牌比较大
if (FindMaxPlayCard.findMaxPlayCard(player1Max, player2Max) == 0) {
System.out.println("玩家1获胜!");
System.out
.println("玩家1的手牌是:"
+ pcg.listPlayer.get(0).getHandCard().get(0)
.getColor()
+ " "
+ pcg.listPlayer.get(0).getHandCard().get(0)
.getCharacter()
+ " 和 "
+ pcg.listPlayer.get(0).getHandCard().get(1)
.getColor()
+ " "
+ pcg.listPlayer.get(0).getHandCard().get(1)
.getCharacter());
} else if (FindMaxPlayCard.findMaxPlayCard(player1Max, player2Max) == 1) {
System.out.println("玩家2获胜!");
System.out
.println("玩家2的手牌是:"
+ pcg.listPlayer.get(1).getHandCard().get(0)
.getColor()
+ " "
+ pcg.listPlayer.get(1).getHandCard().get(0)
.getCharacter()
+ " 和 "
+ pcg.listPlayer.get(1).getHandCard().get(1)
.getColor()
+ " "
+ pcg.listPlayer.get(1).getHandCard().get(1)
.getCharacter());
} else if (FindMaxPlayCard.findMaxPlayCard(player1Max, player2Max) == -1) {
System.out.println("平局!");
System.out
.println("玩家的手牌是:"
+ pcg.listPlayer.get(1).getHandCard().get(0)
.getColor()
+ " "
+ pcg.listPlayer.get(1).getHandCard().get(0)
.getCharacter()
+ " 和 "
+ pcg.listPlayer.get(1).getHandCard().get(1)
.getColor()
+ " "
+ pcg.listPlayer.get(1).getHandCard().get(1)
.getCharacter());
}
}
}Java入门第三季
409776 学习 · 4546 问题
相似问题