这是我在慕课学习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(); }}测试如下