java扑克牌测试题

功能描述

  1. 创建一副扑克牌: 
    包括四种花色:黑桃,红桃,梅花,方片 
    包括十三种点数:1-10,J,Q,K,
  2. 创建两名玩家(or多名) 
    玩家至少要有ID,姓名,手牌等属性,手牌为扑克牌的集合
  3. 将创建好的扑克牌进行随机洗牌
  4. 从洗牌后的扑克牌的第一张开始,发给每个玩家,按照一人一张的方式,每人发两张(or多张)
  5. 比较两名玩家手中的扑克牌,比较规则为:取两人各自手中点数最大的牌进行比较,点数大的赢;若两人各自的点数最大的牌相等,则再按照花色比较。
  6. 花色从大到小顺序位红桃 ,黑桃,花子,方片。

代码解析

    1.一张扑克类,使用定义为int类型的成员进行计算,用定义为String类型的成员进行输出,并且重写toString()方法。

        2.一副扑克类,使用ADeckCards类型的对象作为集合成员。

        3.程序还有玩家类,裁判类,以及测试类。

/*
 * 测试类
 * @author Livingdd
 */
public class Test {
public static void main(String[] args) {
System.out.println("游戏开始");
System.out.println("----------------------------------");
System.out.println("开始洗牌");
AManyCards cards = new AManyCards();
cards.setCards();
cards.washCards();
System.out.println("----------------------------------");
System.out.println("给选手发牌");
System.out.println("----------------------------------");
Player player1 = new Player("1","小明");
Player player2 = new Player("2","小刚");
player1.setHandCard1(cards.selectA_Cards());
player1.setHandCard2(cards.selectA_Cards());
player2.setHandCard1(cards.selectA_Cards());
player2.setHandCard2(cards.selectA_Cards());
System.out.println(player1.getId()+"号选手"+player1.getName()+"的手牌为:"+player1.getHandCard1()+"和"+player1.getHandCard2());
System.out.println(player2.getId()+"号选手"+player2.getName()+"的手牌为:"+player2.getHandCard1()+"和"+player2.getHandCard2());
System.out.println("----------------------------------");
ADeckCards temp = Judge.compare(player1.getHandCard1(), player1.getHandCard2());

System.out.println(player1.getId()+"号选手"+player1.getName()+"的最大手牌为:"+temp);

ADeckCards temps = Judge.compare(player2.getHandCard1(), player2.getHandCard2());

System.out.println(player2.getId()+"号选手"+player2.getName()+"的最大手牌为:"+temps);
System.out.println("----------------------------------");
ADeckCards max = Judge.compare(temp, temps);
if(max == temp) {
System.out.println("胜利者是"+player1.getName());
}else if(max == temps) {
System.out.println("胜利者是"+player2.getName());
}

}
}

代码

package cn.z;
/*
 * 一张扑克
 * @author Livingdd
 */
public class ADeckCards {
	/*
	 * 花色:1:红桃♥ 2:黑桃♠ 3:花子♣ 4:方片♦
	 * 点数11:J 12:Q 13:K 
	 */
	//用int类型进行比较,String类型 进行输出
	private int value;   
	private int color;
	private String values;
	private String colors;
	public int getValue() {
		return value;
	}
	public int getColor() {
		return color;
	}
	public ADeckCards(int value, int color, String values, String colors) {
		super();
		this.value = value;
		this.color = color;
		this.values = values;
		this.colors = colors;
	}
	@Override
	public String toString() {
		return colors+values;
	}
	
	
}

package cn.z;
/*
 * 测试类
 * @author Livingdd
 */
public class Test {
	public static void main(String[] args) {
		System.out.println("游戏开始");
		System.out.println("----------------------------------");
		System.out.println("开始洗牌");
		AManyCards cards = new AManyCards();
		cards.setCards();
		cards.washCards();
		System.out.println("----------------------------------");
		System.out.println("给选手发牌");
		System.out.println("----------------------------------");
		Player player1 = new Player("1","小明");
		Player player2 = new Player("2","小刚");
		player1.setHandCard1(cards.selectA_Cards());
		player1.setHandCard2(cards.selectA_Cards());
		player2.setHandCard1(cards.selectA_Cards());
		player2.setHandCard2(cards.selectA_Cards());
		System.out.println(player1.getId()+"号选手"+player1.getName()+"的手牌为:"+player1.getHandCard1()+"和"+player1.getHandCard2());
		System.out.println(player2.getId()+"号选手"+player2.getName()+"的手牌为:"+player2.getHandCard1()+"和"+player2.getHandCard2());
		System.out.println("----------------------------------");
		ADeckCards temp = Judge.compare(player1.getHandCard1(), player1.getHandCard2());
		
		System.out.println(player1.getId()+"号选手"+player1.getName()+"的最大手牌为:"+temp);
		
		ADeckCards temps = Judge.compare(player2.getHandCard1(), player2.getHandCard2());
		
		System.out.println(player2.getId()+"号选手"+player2.getName()+"的最大手牌为:"+temps);
		System.out.println("----------------------------------");
		ADeckCards max = Judge.compare(temp, temps);
		if(max == temp) {
			System.out.println("胜利者是"+player1.getName());
		}else if(max == temps) {
			System.out.println("胜利者是"+player2.getName());
		}
	
	}
}

package cn.z;
/*
 * 裁判类
 * @author Livingdd
 */
public class Judge {
	//定义类方法
	public static ADeckCards compare(ADeckCards cards1,ADeckCards cards2) {
		if(cards1.getValue() > cards2.getValue()) {
			return cards1;
		}else if(cards1.getValue() < cards2.getValue()) {
			return cards2;
		}else if(cards1.getValue() == cards2.getValue()) {
			if(cards1.getColor() > cards2.getColor()) {
				return cards1;
			}else if(cards1.getColor() < cards2.getColor()) {
				return cards2;
			}
		}
		return null;
	}
}

package cn.z;
/*
 * 玩家类有ID,name以及两张手牌等属性。
 * @author Livingdd
 */
public class Player {
	private String id;
	private String name;
	private ADeckCards handCard1;
	private ADeckCards handCard2;
	public ADeckCards getHandCard1() {
		return handCard1;
	}
	public ADeckCards getHandCard2() {
		return handCard2;
	}
	public Player(String id, String name) {
		super();
		this.id = id;
		this.name = name;
	}
	public void setHandCard1(ADeckCards handCard1) {
		this.handCard1 = handCard1;
	}
	public String getId() {
		return id;
	}
	public String getName() {
		return name;	
	}
	public void setHandCard2(ADeckCards handCard2) {
		this.handCard2 = handCard2;
	}
	
	
	
}

package cn.z;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;
/*
 * 一副扑克
 * @author Livingdd
 */
public class AManyCards {
	//定义存放ADeckCards对象的集合
	private List<ADeckCards> aDC= new ArrayList<ADeckCards>();
	//定义花色数与扑克牌数
	public List<ADeckCards> getaDC() {
		return aDC;
	}
	private final static int cardsCount = 52;
	/*
	 * 将花色号和花色以及一副扑克的对象作为形参,重复的调用来建立一副扑克
	 */
	public void append(int c,String s,AManyCards aManyCards) {
		List<ADeckCards> adc = new ArrayList<ADeckCards>();
		adc.add(new ADeckCards(1,c,"A",s));
		for(int i = 2; i <= 10; i++ ) {
			adc.add(new ADeckCards(i,c,Integer.toString(i),s));
		}
		adc.add(new ADeckCards(11,c,"J",s));
		adc.add(new ADeckCards(12,c,"Q",s));
		adc.add(new ADeckCards(13,c,"K",s));
		aManyCards.aDC.addAll(adc);
	}
	/*
	 * 调用append方法进行建立一副扑克
	 */
	public void setCards() {	
		append(1,"红桃",this);
		append(2,"黑桃",this);
		append(3,"花子",this);
		append(4,"方片",this);
	}
	/*
	 * 调用随机数来取一张扑克
	 */
	public ADeckCards selectA_Cards() {
		Random rand = new Random();
		return this.aDC.get(rand.nextInt(cardsCount));
	}
	/*
	 * 将前26个扑克牌与产生的随机数对应的扑克牌(产生的随机数在后26个扑克牌之间)进行兑换
	 */
	public void washCards() {
		//产生1-26的随机数
		Random rand = new Random();
//		rand.nextInt(27) + 26;
		//如果嫌此类洗牌算法洗的不够散,可以将j的值多加几个,来多换几遍牌。
		for(int j = 1; j<= 5; j++) {
			for(int i = 0; i <= 25; i++) {
				//利用swap函数来进行交换。
				Collections.swap(this.aDC, i, rand.nextInt(26) + 26);
			}
		}
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值