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