这是我在慕课学习Java的一个小游戏作业
游戏规则如下:
一、创建一副扑克牌
包括四种花色: 黑桃、红桃、梅花、方片
十三种点数:2——10,J、Q、K、A,不考虑大小王
二、创建两名玩家
玩家有ID、姓名、手牌等属性,手牌为扑克牌的集合
三、洗牌
将之前创建的“一副扑克牌”打乱顺序
四、发牌
将洗牌之后的扑克牌集合,从第一张开始,发给两名玩家,按照一人一张的方式,每人发两张
五、游戏
比较两名玩家手中的扑克牌,规则为:取两人各自手中点数最大的牌进行比较,点数大的赢;若两人各自的点数最大的牌相等,则再按花色(黑红梅方)比较。
代码如下:
package imooc;
/**
* 扑克牌
*/
public class Cards {
/**
* suits->花色
* figures->点数
*/
public String suits;
public String figures;
//构造器
public Cards(String suits, String figures) {
this.suits = suits;
this.figures = figures;
}
}
package imooc;
import java.util.ArrayList;
import java.util.List;
/**
* 玩家
*创建List属性的cards用于存储玩家的牌
*/
public class Players {
public int ID;
public String name;
public List<Cards> cards;
public Players(){
this.cards=new ArrayList<Cards>();
}
}
package imooc;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Test {
Scanner input=new Scanner(System.in);
public List<Cards> allCards;//存储所有的牌
//String数组suits来存储牌的花色
String[] suits={"方块","梅花","红心","黑桃"};
//String数组figures存储牌的所有点数
String[] figures={"2","3","4","5","6","7","8","9","10","J","Q","K","A"};
//构造函数
public Test(){
this.allCards=new ArrayList<Cards>();
}
/**
* 创建扑克牌
*/
public void creatCards(){
for(int i=0;i<4;i++){
for(int j=0;j<13;j++){
allCards.add(new Cards(suits[i],figures[j]));
}
}
}
/**
* 输出扑克牌
*/
public void showCards(){
int num=0;
for(int i=0;i<52;i++){
System.out.print(allCards.get(i).suits+allCards.get(i).figures+" ");
num++;
if(num%13==0)
//输出一行13张牌换行
System.out.println();
}
}
/**
* 洗牌
* 遍历一个元素后
* 随机产生一个0到52的数与之交换
*/
public void shuffle(){
for(int i=0;i<52;i++){
int x=(int)(Math.random()*52);
Cards temp=allCards.get(x);
allCards.set(i, temp);
allCards.set(x, allCards.get(i));
}
}
/**
* 创建两个玩家并发牌决斗
*/
public void creatPlayers(){
Players p1=new Players();
Players p2=new Players();
//创建第一个玩家
while(true){
try{
System.out.println("请输入第一个玩家账号(数字!):");
String id=input.next();
p1.ID=Integer.parseInt(id);
break;
}catch(NumberFormatException e){//当输入的数据不是整数类型时,捕捉异常
System.out.println("请输入正确的账号!");
}
}
System.out.println("请输入玩家名称:");
p1.name=input.next();
//创建第二个玩家
while(true){
try{
System.out.println("请输入第二个玩家账号(数字!):");
String id=input.next();
p2.ID=Integer.parseInt(id);
break;
}catch(NumberFormatException e){
System.out.println("请输入正确的账号!");
}
}
System.out.println("请输入第二个玩家的名称:");
p2.name=input.next();
System.out.println("\n玩家创建成功!\n ");
/**
* 发牌
*/
System.out.println("-------------发牌------------");
p1.cards.add(allCards.get(0));
p2.cards.add(allCards.get(1));
p1.cards.add(allCards.get(2));
p2.cards.add(allCards.get(3));
System.out.println("发牌结束\n");
//终极PK!
fight(p1,p2);
}
/**
* 玩家PK
*/
public void fight(Players p1,Players p2){
System.out.println("开始PK啦--");
//先选出玩家1和玩家2各自的最大牌,然后比较各自的最大牌谁最大,大的就赢了
int a=compare(p1.cards.get(0), p1.cards.get(1));
int b=compare(p2.cards.get(0), p2.cards.get(1));
int c=0; //c是用来存储比较玩家各自最大牌比较后的数值
if(a==1){
if(b==1)
c=compare(p1.cards.get(0), p2.cards.get(0));
else
c=compare(p1.cards.get(0), p2.cards.get(1));
}
else{
if(b==1)
c=compare(p1.cards.get(1), p2.cards.get(0));
else
c=compare(p1.cards.get(1), p2.cards.get(1));
}
//此时玩家1和玩家2决斗完毕,胜利结果掌握在c的手里
if(c==1){
System.out.println("恭喜"+p1.name+"赢得冠军!");
}
else{
System.out.println("恭喜"+p2.name+"赢得冠军!");
}
System.out.println();
//亮出双方的牌
showPlayer(p1);
System.out.println();
showPlayer(p2);
}
/**
* 对牌进行比大小
* 第一个牌大则返回1,否则返回-1
*/
public int compare(Cards fir,Cards sec){
int fir_suit=0,sec_suit=0,fir_figure=0,sec_figure=0;
for(int i=0;i<4;i++){
if(fir.suits.equals(suits[i]))
fir_suit=i;
if(sec.suits.equals(suits[i]))
sec_suit=i;
}
for(int j=0;j<13;j++){
if(fir.figures.equals(figures[j]))
fir_figure=j;
if(sec.figures.equals(figures[j]))
sec_figure=j;
}
//先比较点数,大者赢
if(fir_figure>sec_figure)
return 1;
if(fir_figure<sec_figure)
return -1;
else{
//如果点数相同则比较花色
if(fir_suit>sec_suit)
return 1;
else
return -1;
}
}
/**
* 显示玩家牌
*/
public void showPlayer(Players p){
System.out.println("玩家"+p.name+"的牌:");
System.out.println(p.cards.get(0).suits+" "+p.cards.get(0).figures);
System.out.println(p.cards.get(1).suits+" "+p.cards.get(1).figures);
}
public static void main(String[] args){
Test t=new Test();
System.out.println("-------------创建扑克牌------------");
System.out.println("......");
t.creatCards();
System.out.println("-------------创建扑克牌成功!------------");
System.out.println("\n创建的牌如下:");
t.showCards();
System.out.println("\n-------------开始洗牌------------");
System.out.println("......");
t.shuffle();
System.out.println("-------------洗牌成功!------------");
System.out.println("\n洗完的牌如下:");
t.showCards();
System.out.println("\n-------------创建玩家并发牌------------");
t.creatPlayers();
}
}
测试如下