简单扑克游戏

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();
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值