一个简单的扑克牌小游戏

时间:2022-12-13 16:22:26

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

一个简单的扑克牌小游戏

一个简单的扑克牌小游戏