1.这个游戏的bug还比较多,不过在输入正确的情况下还是能运行,偷个懒.
2.写这个程序主要是练习各种集合的使用,一开始想用HashSet得到随机元素,但是对象一旦确定,hashCode也确定了,虽然使用迭代器得到的元素是随机的,但在本台电脑上是不会变的,所以实现不了随机取元素,所以洗牌也无法实现了(以上只是我基于现有的知识的猜测和bullshit,可能是错的).
3.所以还是采用了ArrayList+HashMap实现了洗牌的功能。用Math.Random()产生随机数,让随机数作索引获取ArrayList中的元素,从而实现洗牌.
4.硬编程的东西还是少来。
Poker.java
import java.util.HashMap;
/*这个类为一张牌*/
public class Poker {
private String value;//点数
private String suit;//花色
private HashMap<String, Integer> list=new HashMap<>();
public Poker(String value, String suit) {
super();
this.value = value;
this.suit = suit;
}
public Poker(){
};
//getter
public String getValue() {
return value;
}
public String getSuit() {
return suit;
}
public int compareValue(Poker other){
String[] Cvalue=new String[]{"2","3","4","5","6","7","8","9","10","J","Q","K","A"};
for(int i=0,j=2;i<Cvalue.length||j<14;i++,j++){
list.put(Cvalue[i],(Integer)j);
}
return (list.get(this.getValue())-list.get(other.getValue()));
}
}
Cards
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import javax.swing.plaf.synth.SynthSpinnerUI;
import javax.swing.plaf.synth.SynthStyle;
/*这个类为一副牌,用来放poker的实例*/
public class Cards {
private static ArrayList<Poker> ADeckofCards=new ArrayList<>();//用ArrayList放52张牌
private static HashMap<Integer,Poker[]> CardsinHand=new HashMap<>();
public static void addPoker(Poker obj){
if(obj!=null){
ADeckofCards.add(obj); }
}
/*该方法用来创建一副牌,并添加到set中*/
public static void Creat(){
String[] Csuits=new String[]{"黑桃","红桃","方块","梅花"};
String[] Cvalue=new String[]{"2","3","4","5","6","7","8","9","10","J","Q","K","A"};
for(int i=0;i<Cvalue.length;i++){
for(int j=0;j<Csuits.length;j++){
Cards.addPoker(new Poker(Cvalue[i],Csuits[j]));
}
}
}
/*该方法使用迭代器返回每个元素,输出形式:牌面+花色*/
public static void printCards(){
System.out.println("---------------------------Poker---------------------------");
Iterator it=ADeckofCards.iterator();
int counter=0;
while(it.hasNext()){
Poker obj=(Poker)it.next();
System.out.printf("%s%s ",obj.getSuit(),obj.getValue());
counter++;
if(counter%10==0)
System.out.println();
}
System.out.println();
System.out.println("---------------------------Poker---------------------------");
}
/*该方法用来发牌,给两名玩家随机发两张牌*/
public static void deal(){
int index1,index2,index3,index4;
index1=(int)(Math.random()*51);
while(true){
index2=(int)(Math.random()*51);
if(index1==index2)
continue;
else
break;
}
while(true){
index3=(int)(Math.random()*51);
if(index3==index1||index3==index2)
continue;
else
break;
}
while(true){
index4=(int)(Math.random()*51);
if(index4==index1||index3==index2||index4==index3)
continue;
else
break;
}
Poker[] array1=new Poker[2];
array1[0]=Cards.ADeckofCards.get(index1);array1[1]=Cards.ADeckofCards.get(index2);
Poker[] array2=new Poker[2];
array2[0]=Cards.ADeckofCards.get(index3);array2[1]=Cards.ADeckofCards.get(index4);
CardsinHand.put(Player.getPlayesList()[0].getID(), array1);
CardsinHand.put(Player.getPlayesList()[1].getID(), array2);
}
public static void printGameInfor(){
for(int i=0;i<CardsinHand.size();i++){
System.out.print("玩家"+Player.getPlayesList()[i].getName()+"的牌为:");
for(int j=0;j<2;j++){
System.out.printf("%s%s ",Cards.CardsinHand.get((Integer)(i+1))[j].getSuit(),Cards.CardsinHand.get((Integer)(i+1))[j].getValue());
}
}
}
public static void CompareCards(){
int Result1=Cards.CardsinHand.get((Integer)(1))[0].compareValue(Cards.CardsinHand.get((Integer)(1))[1]);
int Result2=Cards.CardsinHand.get((Integer)(2))[0].compareValue(Cards.CardsinHand.get((Integer)(2))[1]);
Poker Max1=new Poker();
Poker Max2=new Poker();
if(Result1==0){
Max1=Cards.CardsinHand.get((Integer)(1))[0];
}
if(Result1<0){
Max1=Cards.CardsinHand.get((Integer)(1))[1];
}
if(Result1>0){
Max1=Cards.CardsinHand.get((Integer)(1))[0];
}
if(Result2==0){
Max2=Cards.CardsinHand.get((Integer)(2))[0];
}
if(Result2<0){
Max1=Cards.CardsinHand.get((Integer)(2))[1];
}
if(Result2>0){
Max2=Cards.CardsinHand.get((Integer)(2))[0];
}
if(Max1.compareValue(Max2)>0){
System.out.println("玩家"+Player.getPlayesList()[0].getName()+"获胜!!!");
}
if(Max1.compareValue(Max2)<0){
System.out.println("玩家"+Player.getPlayesList()[1].getName()+"获胜!!!");
}
if(Max1.compareValue(Max2)==0){
if(Max1.getSuit().equals(Max2.getSuit()))
System.out.println("平局!");
else{
HashMap<String, Integer> suitlist=new HashMap<>();
suitlist.put("黑桃", 4);
suitlist.put("红桃", 3);
suitlist.put("梅花", 2);
suitlist.put("方块", 1);
int suitReslut=suitlist.get(Max1.getSuit())-suitlist.get(Max2.getSuit());
if(suitReslut==0)
System.out.println("平局!");
if(suitReslut>0)
System.out.println("玩家"+Player.getPlayesList()[0].getName()+"获胜!!!");
if(suitReslut<0)
System.out.println("玩家"+Player.getPlayesList()[1].getName()+"获胜!!!");
}
}
}
}
Player.java
import java.util.Scanner;
public class Player {
private String name;
private int ID;
private static Scanner in=new Scanner(System.in);
private static Player[] PlayesList=new Player[2];
public Player(){
}
public Player(String name, int iD) {
super();
this.name = name;
ID = iD;
}
public static Player[] getPlayesList() {
return PlayesList;
}
public String getName() {
return name;
}
public int getID() {
return ID;
}
/*该方法用于创建2个玩家*/
public static void CreatPlayers(int index){
System.out.println("输入第"+(index+1)+"位玩家的名字和ID");
System.out.println("输入名字:");
String name=in.next();
System.out.println("输入ID:");
in=new Scanner(System.in);
int ID=in.nextInt();
PlayesList[index]=new Player(name, ID);
}
}
test.java
public class test {
public static void main(String[] args) {
// TODO Auto-generated method stub
/*创建扑克*/
System.out.println("---------------------------创建扑克中....---------------------");
System.out.println("---------------------------创建成功!-------------------------");
Cards.Creat();
Cards.printCards();
/*创建玩家*/
Player.CreatPlayers(0);
Player.CreatPlayers(1);
Cards.deal();
Cards.printGameInfor();
System.out.println();
Cards.CompareCards();
}
}