一个简单的扑克牌小游戏

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





  • 1
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值