Java实现纸牌游戏
实现要求(游戏规则)
有一副扑克54张(同现实接触的纸牌一致),玩家两名,洗牌后随机从任何一个玩家开始发牌,每人获得27张后停顿30秒,然后正式开始游戏,两名玩家逐个出牌(每张牌都是随机抽取),第一局随机决定谁先出,第二局开始,谁的牌大(按照大小规则)谁先出。如果玩家A大,那么将玩家B的牌拿到玩家A的纸牌中,30s后哪个玩家的牌多,谁就获胜!!
代码实现
- 实体类
扑克牌
public class Card {
private String rank;
private String color;
public Card(String rank, String color) {
this.rank = rank;
this.color = color;
}
public Card() {
}
public String getRank() {
return rank;
}
public void setRank(String rank) {
this.rank = rank;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
@Override
public String toString() {
return "Card{" +
"rank='" + rank + '\'' +
", color='" + color + '\'' +
'}';
}
}
玩家
public class Player {
private String name;
List<Card> handCards = new ArrayList<Card>();
public Player(String name, List<Card> handCards) {
this.name = name;
this.handCards = handCards;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<Card> getHandCards() {
return handCards;
}
public void setHandCards(Card card) {
this.handCards = handCards;
}
}
- 创建扑克类
//创建一副扑克牌
public class Poke {
//扑克集合
private List<Card> pokeList = new ArrayList<>();
//扑克牌的值
private int value;
//创建一副扑克牌
public Poke(){
String[] rank = {"2","3","4","5","6","7","8","9","10","J","Q","K","A"};
String[] color={"黑桃","红桃","方块","梅花"};
System.out.println("--------创建一副扑克牌--------");
for (int i = 0; i < rank.length; i++) {
for (int j = 0; j < color.length; j++) {
pokeList.add(new Card(rank[i],color[j]));
}
}
pokeList.add(new Card("red_joke",""));
pokeList.add(new Card("black_joke",""));
//打乱顺序
Collections.shuffle(pokeList);
}
//拿到一张牌
public List<Card> getCard(){
return pokeList;
}
//给扑克牌排大小
public int getValue(Card card){
String[] rank = {"2","3","4","5","6","7","8","9","10","J","Q","K","A"};
String[] color={"黑桃","红桃","方块","梅花"};
for (int i = 0; i < rank.length; i++) {
if(card.getRank().equals(rank[i])){
value=i*10;
}
}
for (int i = 0; i < color.length; i++) {
if(card.getColor().equals(color[i])){
value+=i;
}
}
return value;
}
}
- 主函数
public class Main {
public static void main(String[] args) throws InterruptedException {
//游戏加载界面
System.out.println("--------欢迎来到纸牌游戏--------");
System.out.println("------------游戏规则------------");
System.out.println("共54张牌,两名玩家随机得到27张," + "\n" +
"停顿30s后,开启第一局随机一名" + "\n" +
"玩家先出牌,第二局开启,谁的" + "\n" +
"牌大谁先出,每一局中牌大的人" + "\n" +
"赢得牌小的人的牌!30s后谁的" + "\n" +
"牌多谁就获胜!!");
System.out.println("-------------------------------");
System.out.println("-------------------------------");
Thread.sleep(2000);
//创建游戏角色
List<Card> p1HandCard = new ArrayList<>();
List<Card> p2HandCard = new ArrayList<>();
Player p1 = new Player("王姐", p1HandCard);
System.out.println("p1玩家:" + p1.getName() + "加载成功!!");
Player p2 = new Player("三哥", p2HandCard);
System.out.println("p2玩家:" + p2.getName() + "加载成功!!");
System.out.println("-------------------------------");
System.out.println("-------------------------------");
Thread.sleep(2000);
//创建一副扑克牌
Poke poke = new Poke();
System.out.println("--------美女荷官正在洗牌--------");
System.out.println("洗牌完成!!");
System.out.println("-------------------------------");
System.out.println("-------------------------------");
Thread.sleep(2000);
//发牌
System.out.println("--------美女荷官正在发牌--------");
int count = 0;
for (int i = 0; i < 27; i++) {
// Thread.sleep(500);
for (int j = 0; j < 2; j++) {
if (j == 0) {
p1HandCard.add(poke.getCard().get(count));
System.out.println(p1.getName() + "拿到" + poke.getCard().get(count).getColor() + poke.getCard().get(count).getRank());
} else {
p2HandCard.add(poke.getCard().get(count));
System.out.println(p2.getName() + "拿到" + poke.getCard().get(count).getColor() + poke.getCard().get(count).getRank());
}
count++;
}
}
System.out.println("发牌完成!!30s后开始游戏!!!");
System.out.println("-------------------------------");
System.out.println("-------------------------------");
for (int i = 30; i > 0; i--) {
// Thread.sleep(1000);
System.out.println(i);
}
//游戏开始,双方出牌
Long t1 = System.currentTimeMillis();
int value1;
int value2;
//第一局
int random1 = new Random().nextInt(p1.getHandCards().size());
int random2 = new Random().nextInt(p2.getHandCards().size());
value1 = poke.getValue(p1.getHandCards().get(random1));
System.out.println(p1.getName() + "出了一张:" + p1.getHandCards().get(random1).getColor() + p1.getHandCards().get(random1).getRank());
value2 = poke.getValue(p2.getHandCards().get(random2));
System.out.println(p2.getName() + "出了一张:" + p2.getHandCards().get(random2).getColor() + p2.getHandCards().get(random2).getRank());
if (value1 > value2) {
p1HandCard.add(p2.getHandCards().get(random2));
p2.getHandCards().remove(random2);
System.out.println(p1.getName() + "得到一张牌,现在共有:" + p1.getHandCards().size() + "张");
} else {
p2HandCard.add(p1.getHandCards().get(random1));
p1.getHandCards().remove(random1);
System.out.println(p2.getName() + "得到一张牌,现在共有:" + p2.getHandCards().size() + "张");
}
while (true) {
//设置30后游戏结束
Long t2 = System.currentTimeMillis();
if (t2 - t1 > 30*1000) {
break;
} else {
Thread.sleep(1000);
int random3 = new Random().nextInt(p1.getHandCards().size());
int random4 = new Random().nextInt(p2.getHandCards().size());
value1 = poke.getValue(p1.getHandCards().get(random3));
System.out.println(p1.getName() + "出了一张:" + p1.getHandCards().get(random3).getColor() + p1.getHandCards().get(random3).getRank());
value2 = poke.getValue(p2.getHandCards().get(random4));
System.out.println(p2.getName() + "出了一张:" + p2.getHandCards().get(random4).getColor() + p2.getHandCards().get(random4).getRank());
if (value1 > value2) {
p1HandCard.add(p2.getHandCards().get(random2));
p2.getHandCards().remove(random2);
System.out.println(p1.getName() + "得到一张牌,现在共有:" + p1.getHandCards().size() + "张");
} else {
p2HandCard.add(p1.getHandCards().get(random1));
p1.getHandCards().remove(random1);
System.out.println(p2.getName() + "得到一张牌,现在共有:" + p2.getHandCards().size() + "张");
}
if (p1.getHandCards().size() == 0) {
System.out.println(p2.getName() + "获胜!!");
break;
}
if (p2.getHandCards().size() == 0) {
System.out.println(p1.getName() + "获胜!!");
break;
}
}
}
if (p1.getHandCards().size() > p2.getHandCards().size()) {
System.out.println(p1.getName() + "获胜!!");
} else if (p1.getHandCards().size() < p2.getHandCards().size()) {
System.out.println(p2.getName() + "获胜!!");
} else {
System.out.println("平局!!皆大欢喜!!!");
}
}
}
项目优化后:
- 实体类
扑克牌
public class Card {
private String rank;
private String color;
public Card(String rank, String color) {
this.rank = rank;
this.color = color;
}
public Card() {
}
public String getRank() {
return rank;
}
public void setRank(String rank) {
this.rank = rank;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
@Override
public String toString() {
return "Card{" +
"rank='" + rank + '\'' +
", color='" + color + '\'' +
'}';
}
}
玩家
public class Player {
private String name;
List<Card> handCards = new ArrayList<Card>();
public Player(String name, List<Card> handCards) {
this.name = name;
this.handCards = handCards;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<Card> getHandCards() {
return handCards;
}
public void setHandCards(Card card) {
this.handCards = handCards;
}
}
- 创建扑克牌类
//创建一副扑克牌
public class Poke {
//扑克集合
private List<Card> pokeList = new ArrayList<>();
//扑克牌的值
private int value;
//创建一副扑克牌
public Poke(){
String[] rank = {"2","3","4","5","6","7","8","9","10","J","Q","K","A"};
String[] color={"黑桃","红桃","方块","梅花"};
System.out.println("--------创建一副扑克牌--------");
for (int i = 0; i < rank.length; i++) {
for (int j = 0; j < color.length; j++) {
pokeList.add(new Card(rank[i],color[j]));
}
}
pokeList.add(new Card("red_joke",""));
pokeList.add(new Card("black_joke",""));
//打乱顺序
Collections.shuffle(pokeList);
}
//拿到一张牌
public List<Card> getCard(){
return pokeList;
}
//给扑克牌排大小
public int getValue(Card card){
String[] rank = {"2","3","4","5","6","7","8","9","10","J","Q","K","A"};
String[] color={"黑桃","红桃","方块","梅花"};
for (int i = 0; i < rank.length; i++) {
if(card.getRank().equals(rank[i])){
value=i*10;
}
}
for (int i = 0; i < color.length; i++) {
if(card.getColor().equals(color[i])){
value+=i;
}
}
return value;
}
//发牌
public void DealCard(Poke poke, Player p1, Player p2, List<Card> p1HandCard, List<Card> p2HandCard){
System.out.println("--------美女荷官正在发牌--------");
int count = 0;
for (int i = 0; i < 27; i++) {
// Thread.sleep(500);
for (int j = 0; j < 2; j++) {
if (j == 0) {
p1HandCard.add(poke.getCard().get(count));
System.out.println(p1.getName() + "拿到" + poke.getCard().get(count).getColor() + poke.getCard().get(count).getRank());
} else {
p2HandCard.add(poke.getCard().get(count));
System.out.println(p2.getName() + "拿到" + poke.getCard().get(count).getColor() + poke.getCard().get(count).getRank());
}
count++;
}
}
System.out.println("发牌完成!!30s后开始游戏!!!");
System.out.println("-------------------------------");
System.out.println("-------------------------------");
for (int i = 30; i > 0; i--) {
Thread.sleep(1000);
System.out.println(i);
}
}
}
- 主函数
public class Main {
public static void main(String[] args) throws InterruptedException {
//游戏加载界面
System.out.println("--------欢迎来到纸牌游戏--------");
System.out.println("------------游戏规则------------");
System.out.println("共54张牌,两名玩家随机得到27张," + "\n" +
"停顿30s后,开启第一局随机一名" + "\n" +
"玩家先出牌,第二局开启,谁的" + "\n" +
"牌大谁先出,每一局中牌大的人" + "\n" +
"赢得牌小的人的牌!30s后谁的" + "\n" +
"牌多谁就获胜!!");
System.out.println("-------------------------------");
System.out.println("-------------------------------");
Thread.sleep(2000);
//创建游戏角色
List<Card> p1HandCard = new ArrayList<>();
List<Card> p2HandCard = new ArrayList<>();
Player p1 = new Player("王姐", p1HandCard);
System.out.println("p1玩家:" + p1.getName() + "加载成功!!");
Player p2 = new Player("三哥", p2HandCard);
System.out.println("p2玩家:" + p2.getName() + "加载成功!!");
System.out.println("-------------------------------");
System.out.println("-------------------------------");
Thread.sleep(2000);
//创建一副扑克牌
Poke poke = new Poke();
System.out.println("--------美女荷官正在洗牌--------");
System.out.println("洗牌完成!!");
System.out.println("-------------------------------");
System.out.println("-------------------------------");
Thread.sleep(2000);
//发牌
poke.DealCard(poke,p1, p2, p1HandCard, p2HandCard);
//游戏开始,双方出牌
new PlayGame(p1, p2, p1HandCard, p2HandCard, poke);
}
}
项目肯定还有很多需要优化的地方!!!如果有什么好的建议或者有什么问题请留言!!!!
版权声明:本文为weixin_49512993原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。