代码分为四个类
- Card类:纸牌
- Player类:玩家
- CardsProvider类:简单的单例模式,只用于返回一副扑克牌
Test类:测试
代码过于简单,直接上代码:
`Card类package com.calf.puke;
public class Card implements Comparable{
//花色1234分别代表方块、梅花、红桃、黑桃
private int huaSe; //花色 ♠♣♥♦//数字2-14分别代表12345678910JQKA
private int num; // 数字public Card() {
// TODO Auto-generated constructor stub
}//调用这个函数前要判断huaSe和num是否在1-4和1-14范围
public Card(int huaSe, int num) {
super();
this.huaSe = huaSe;
this.num = num;
}public int getHuaSe() {
return huaSe;
}public void setHuaSe(int huaSe) {
this.huaSe = huaSe;
}public int getNum() {
return num;
}public void setNum(int num) {
this.num = num;
}@Override
public int hashCode() {
return Integer.valueOf(this.huaSe + “” +this.huaSe);
}@Override
public boolean equals(Object obj) {
if(this == obj)
return true;
if(null == obj)
return false;
if (obj instanceof Card) {
Card card = (Card) obj;
if(card.num == this.num && card.huaSe == this.huaSe)
return true;
}
return false;
}@Override
public String toString() {
String numStr = ” “; //数字转字符 即: 11->J 12-> Q 13->K 14->AString huaSeStr = " "; //花色转字符 花色1234分别代表方块、梅花、红桃、黑桃 if(num <= 10 ) numStr = String.valueOf(num); else{ switch (num) { case 11: numStr = "J"; break; case 12: numStr = "Q"; break; case 13: numStr = "K"; break; case 14: numStr = "A"; break; default: numStr = "错误的数字"; break; } } //花色转字符 switch (huaSe) { case 1: huaSeStr = "方块"; break; case 2: //♠♣♥♦ huaSeStr = "梅花"; break; case 3: huaSeStr = "红桃"; break; case 4: huaSeStr = "黑桃"; break; default: huaSeStr = "错误的花色"; break; } return huaSeStr +" " + numStr;
}
@Override
public int compareTo(Card o) {
if(this.num > o.num)
return 1;
else if (this.num == o.num) {
if(this.huaSe > o.huaSe){
return 1;
}else if (this.huaSe == o.huaSe) {
return 0;
}else {
return -1;
}
}else
return -1;
}
}
`Player类
package com.calf.puke;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
public class Player{
private int id; //id
private String name; //姓名
private List<Card> cards = new ArrayList<Card>(); //手中的牌
public Player() {
// TODO Auto-generated constructor stub
}
public Player(int id, String name) {
super();
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return id + name;
}
@Override
public int hashCode() {
return id;
}
@Override
public boolean equals(Object obj) {
if(obj == this)
return true;
if(null == obj)
return false;
if (obj instanceof Player) {
Player player = (Player) obj;
if(this.id == player.id && this.name == player.name)
return true;
}
return false;
}
public List<Card> getCards() {
return cards;
}
public void setCards(List<Card> cards) {
this.cards = cards;
}
}
CardProvider类
package com.calf.puke;
import java.util.ArrayList;
import java.util.List;
//一副牌类,用单例模式
public class CardProvider {
//牌
private static List<Card> cards;
private CardProvider()
{
}
public static List<Card> getSuitCards() {
if(null == cards)
createCards();
return cards;
}
/**
* 洗牌
* 创建一副52张没有大小王的牌
* @return
*/
private static void createCards() {
cards = new ArrayList<Card>();
//牌的数字从2-14
for(int i = 2; i <= 14; i++)
{
//牌的花色从1-4
for(int j = 1; j <= 4; j++)
{
Card card = new Card(j,i);
cards.add(card);
}
}
}
}
Test类
package com.calf.puke;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Random;
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
//获取一副新牌
List<Card> cards = CardProvider.getSuitCards();
//打乱这副牌
Collections.shuffle(cards);
//玩家对象
List<Player> players = new ArrayList<Player>();
//创建两个玩家
String idString; //用来接收键盘输入
String name; //用来接收键盘输入
Scanner console = new Scanner(System.in); //获取控制台输入
while(players.size() < 2) {
System.out.println("请输入玩家 " + (players.size()+1) + "的id:");
idString = console.nextLine();
try {
int id = Integer.parseInt(idString);
System.out.println("请输入玩家姓名:");
name = console.nextLine();
Player player = new Player(id,name);
players.add(player);
}catch (NumberFormatException e) {
System.out.println("id必须是整数,请重新输入...");
continue;
}
}
//给两个玩家一人一张牌
int index = 0; //牌的标号,每取一张自增1
for(int i = 0; i < players.size();i++)
{
Player player = players.get(i);
Card tempCard;
tempCard =
new Card(cards.get(index).getHuaSe(),cards.get(index).getNum());
index++;
players.get(i).getCards().add(tempCard);
}
Player player1 = players.get(0);
Player player2 = players.get(1);
int result = player1.getCards().get(0).compareTo(
player2.getCards().get(0));
switch (result) {
case 0:
System.out.println("平局");
break;
case 1:
System.out.println("玩家1胜");
break;
case -1:
System.out.println("玩家2胜");
break;
default:
System.out.println("出错");
break;
}
for (Iterator iterator = players.iterator(); iterator.hasNext();) {
System.out.println("----------玩家信息-----------");
Player player = (Player) iterator.next();
System.out.println(player);
System.out.println(player.getCards());
System.out.println("----------------------------");
}
}
}
`