Java入门第三季-综合实战:简易扑克牌游戏

一、概述

第三季的综合实战部分是写一个简易扑克牌游戏,功能实现要求如下:

1.创建一副扑克牌
包括四种花色: 黑桃 红桃 梅花 方片
十三种点数 2-10,JQKA,不考虑大小王
2.创建两名玩家
玩家至少有ID,姓名,手牌等属性。手牌为扑克牌的集合
3.洗牌
将之前创建的“一副扑克牌”打乱顺序
4.发牌
洗牌后的扑克牌集合,从第一张开始,发给两名玩家,按照一人一张的方式,每人发两张
5.游戏
比较两名玩家的扑克牌,规则为,分别取两人手牌中点数大的牌进行比较
点数大的获胜,若点数相等,则按照黑红梅方的顺序比较花色。


示例效果如下:




输入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] 






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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值