一、概述
第三季的综合实战部分是写一个简易扑克牌游戏,功能实现要求如下:
示例效果如下:
输入ID要求是一个整数,因此要加入异常处理
二、程序思路
1. 首先需要创建一个扑克牌类,包含花色和点数等属性;
2.创建玩家类,包含ID、姓名、手牌等属性,手牌可以存入HashSet中;
3.游戏部分需要实现这几个功能:创建扑克牌、洗牌、发牌和比较大小,用List来存储创建的扑克牌。
三、代码实现
扑克牌类:
package poker;
public class Cards {
public String design;
public String point;
public Cards(String design, String point){
this.design = design;
this.point = point;
}
}
玩家类:
package poker;
import java.util.*;
public class Player {
public int id;
public String name;
public Set<Cards> handcards;
public Player(int id, String name){
this.id = id;
this.name = name;
this.handcards = new HashSet<Cards>();
}
}
游戏部分:
package poker;
import java.util.*;
public class Game {
public List<Cards> allcards;
public Game(){
this.allcards = new ArrayList<Cards>();
}
/**
* 创建一副扑克牌
*/
public void setup(){
String design[] = {"黑桃","红桃","梅花","方片"};
String point[] = {"A","K","Q","J","10","9","8","7","6","5","4","3","2"};
for (int i = 0;i<4;i++){
for (int j = 0; j<13;j++){
Cards c = new Cards(design[i], point[j]);
allcards.add(c);
}
}
}
/**
* 通过for each方法访问集合元素
* 遍历打印扑克牌
*/
public void printCards() {
System.out.println("为:");
for (Object obj : allcards) {
Cards card = (Cards) obj;
System.out.print(card.design + card.point + ",");
}
}
/**
* 创建玩家,输入ID和姓名
*/
int id=0;
String name;
public int creatplayer(int num){
System.out.println("------请输入第"+ num +"位玩家ID------");
Scanner input = new Scanner(System.in);
//处理异常
try {
id =input.nextInt();
} catch (Exception e) {
System.out.println("请输入一个整数ID");
return this.creatplayer(num);
}
System.out.println("------请输入第"+ num +"位玩家姓名------");
name =input.next();
return 0;
}
/**
* 发牌
*/
public void deal(Player playernum){
Cards card = this.allcards.get(0);
playernum.handcards.add(card);
this.allcards.remove(card);
System.out.println("------玩家 "+playernum.name+"拿牌------");
}
/**
* 比较牌面大小
*/
public Cards pkcard(Cards a,Cards b){
ArrayList<String> design = new ArrayList<String>(Arrays.asList("黑桃","红桃","梅花","方片"));
ArrayList<String> point = new ArrayList<String>(Arrays.asList("A","K","Q","J","10","9","8","7","6","5","4","3","2"));
if (point.indexOf(a.point)<point.indexOf(b.point))
return a;
else if (point.indexOf(a.point)>point.indexOf(b.point))
return b;
else {
if (design.indexOf(a.design)>point.indexOf(b.design))
return b;
else return a;
}
}
public static void main(String[] args){
System.out.println("------创建扑克牌------");
Game game = new Game();
game.setup();
System.out.println("------扑克牌创建成功------");
game.printCards();
System.out.println();
System.out.println("------开始洗牌------");
Collections.shuffle(game.allcards);
System.out.println("------洗牌结束------");
System.out.println("------创建玩家------");
game.creatplayer(1);
Player player1 = new Player(game.id, game.name);
game.creatplayer(2);
Player player2 = new Player(game.id, game.name);
System.out.println("------欢迎玩家 " + player1.name + "和" + player2.name+"------");
System.out.println("------现在开始发牌------");
game.deal(player1);
game.deal(player2);
game.deal(player1);
game.deal(player2);
System.out.println("------发牌结束,游戏开始!------");
Cards temp1 = new Cards("方片", "2");
for (Cards c: player1.handcards)
{
temp1 = game.pkcard(temp1,c);
}
System.out.println("玩家"+player1.name+"最大的手牌为:"+temp1.design+temp1.point);
Cards temp2 = new Cards("方片", "2");
for (Cards c: player2.handcards)
{
temp2 = game.pkcard(temp2,c);
}
System.out.println("玩家"+player2.name+"最大的手牌为:"+temp2.design+temp2.point);
String winname;
if (game.pkcard(temp1,temp2)==temp1)
winname = player1.name;
else winname = player2.name;
System.out.println("--------恭喜玩家"+winname+"获胜!--------");
System.out.println("--------玩家各自手牌为:--------");
System.out.print(player1.name+":");
for (Cards c: player1.handcards)
{
System.out.print("["+c.design+c.point+"] ");
}
System.out.println();
System.out.print(player2.name+":");
for (Cards c: player2.handcards)
{
System.out.print("["+c.design+c.point+"] ");
}
}
}
四、输出效果
------创建扑克牌------
------扑克牌创建成功------
为:
黑桃A,黑桃K,黑桃Q,黑桃J,黑桃10,黑桃9,黑桃8,黑桃7,黑桃6,黑桃5,黑桃4,黑桃3,黑桃2,红桃A,红桃K,红桃Q,红桃J,红桃10,红桃9,红桃8,红桃7,红桃6,红桃5,红桃4,红桃3,红桃2,梅花A,梅花K,梅花Q,梅花J,梅花10,梅花9,梅花8,梅花7,梅花6,梅花5,梅花4,梅花3,梅花2,方片A,方片K,方片Q,方片J,方片10,方片9,方片8,方片7,方片6,方片5,方片4,方片3,方片2,
------开始洗牌------
------洗牌结束------
------创建玩家------
------请输入第1位玩家ID------
a
请输入一个整数ID
------请输入第1位玩家ID------
1
------请输入第1位玩家姓名------
Mary
------请输入第2位玩家ID------
b
请输入一个整数ID
------请输入第2位玩家ID------
2
------请输入第2位玩家姓名------
Lily
------欢迎玩家 Mary和Lily------
------现在开始发牌------
------玩家 Mary拿牌------
------玩家 Lily拿牌------
------玩家 Mary拿牌------
------玩家 Lily拿牌------
------发牌结束,游戏开始!------
玩家Mary最大的手牌为:黑桃Q
玩家Lily最大的手牌为:方片9
--------恭喜玩家Mary获胜!--------
--------玩家各自手牌为:--------
Mary:[黑桃Q] [红桃J]
Lily:[方片7] [方片9]