mooc上的java入门第三季的扑克牌游戏

1.首先创建四种花色:黑桃,红桃,梅花,方片,十三种点数2-10,j,q,k,a,不考虑大小王,

2.创建两名玩家,玩家至少有ID,姓名,手牌,

3.洗牌,将创建的扑克牌的顺序打乱,

4.按照一人一张的方式每人人发两张,

5.规则为,取两个人手中点数最大的牌进行比较,点数大的赢;若各自相同,则按花色进行比较,黑红梅方,

6.会决出获胜玩家,

7.玩家的ID是int类型的,如果不匹配,则会抛出异常,

 8.最后会输出玩家各自的手牌。


原来写到一半,发现写不下去了(给自己挖的坑太多了)然后上网找了篇比较简洁的学习学习,代码如下

public class Cards {
//首先创建四种花色:黑桃,红桃,梅花,方片,十三种点数2-10,j,q,k,a,不考虑大小王
	public String design;
	public String point;
	public Cards(String design,String point) {
		this.design = design;
		this.point = point;
	}
}

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class Player{
  //创建两名玩家,玩家至少有ID,姓名,手牌
	public int id;
	public String name;
	Set<Cards> handCard;
	public Player(int ID,String name) {
		this.id = ID;
		this.name = name;
		handCard = new HashSet<Cards>();
	}
}

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Random;
import java.util.Scanner;

public class Test {
	/*
	 * 1.首先创建四种花色:黑桃,红桃,梅花,方片,十三种点数2-10,j,q,k,a,不考虑大小王
	 * 2.创建两名玩家,玩家至少有ID,姓名,手牌,
	 * 3.洗牌,将创建的扑克牌的顺序打乱,
	 * 4.按照一人一张的方式每人人发两张
	 * 5.规则为,取两个人手中点数最大的牌进行比较,点数大的赢;若各自相同,则按花色进行比较,黑红梅方
	 * 6.会决出玩家
	 * 7.玩家的ID是int类型的,如果不匹配,则会抛出异常
	 * 8.最后会输出玩家各自的手牌
	 */	
	List<Cards> allCards;
	public Test() {
		allCards = new ArrayList<Cards>();
	}
	/*创建扑克牌,他这是用数组来实现,相对于我的暴力破解,更高效率
	 * String[] a = new String(),刚开始的时候想到这个,但是报错了,就没有想到继续赋值给他们了
	 */
	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 < design.length;i++) {
			for(int j = 0; j < point.length;j++) {
				Cards c = new Cards(design[i],point[j]);
				allCards.add(c);
			}
		}
	}

	//访问扑克牌,使用for each方法访问allCards的每一个对象
	public void printCards() {
		System.out.println("扑克牌为:");
		for (Cards cards : allCards) {
			System.out.println(cards.design+cards.point+",");
		}
	}
	//创建玩家,输入ID和姓名,使用捕获异常,利用try,catch(Exception e)
	int id = 0;
	String name;
	public int createPlayer(int num) {
		System.out.println("------请输入第"+num+"家的ID-------");
		Scanner sc = new Scanner(System.in);
		try {
			id = sc.nextInt();
		}catch(Exception e) {
			System.out.println("请输入一个整数ID");
			return this.createPlayer(num);
		}
		System.out.println("------请输入第"+num+"家的姓名-------");
		name = sc.next();
		return 0;
	}
	//发牌,洗牌后发牌,就可利用get(0)方法
	public void deal(Player playernum) {
		Cards card = this.allCards.get(0);
		playernum.handCard.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.point)) {
				return b;
			}
			else return a;
		}
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println("-----------创建扑克牌----------");
		Test ts = new Test();
		ts.setUp();
		System.out.println("------------扑克牌创建成功--------");
		ts.printCards();
		System.out.println("--------------开始洗牌----------");
		Collections.shuffle(ts.allCards);
		System.out.println("--------------洗牌完成----------");
		System.out.println("创建玩家");
		ts.createPlayer(1);
		Player pl1 = new Player(ts.id,ts.name);
		ts.createPlayer(2);
		Player pl2 = new Player(ts.id,ts.name);
		
		System.out.println("欢迎玩家"+pl1.name+pl2.name+"来到游戏");
		System.out.println("现在开始发牌");
		ts.deal(pl1);
		ts.deal(pl2);
		ts.deal(pl1);
		ts.deal(pl2);
		System.out.println("---------发牌结束,游戏开始--------");
		Cards temp1 = new Cards("方片","2");
		for (Cards c : pl1.handCard) {
			temp1 = ts.pkCard(temp1, c);
		}
		System.out.println("玩家"+pl1.name+"最大的手牌为:"+temp1.design+temp1.point);
		Cards temp2 = new Cards("方片","2");
		for (Cards c : pl2.handCard) {
			temp2 = ts.pkCard(temp2, c);
		}
		System.out.println("玩家"+pl2.name+"最大的手牌为:"+temp2.design+temp2.point);
		String winName;
		if(ts.pkCard(temp1,temp2)==temp1)
			winName = pl1.name;
		else
			winName = pl2.name;
		System.out.println("游戏结束,玩家"+winName+"获胜");
		for (Cards c : pl1.handCard) {
			System.out.println("【py1的手牌为"+c.design+c.point+"】");
		}
		for (Cards c : pl2.handCard) {
			System.out.println("【py2的手牌为"+c.design+c.point+"】");
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值