Java实验 21点扑克牌游戏

Java实验 21点扑克牌游戏,第1张

分别再不同的类中所添加;

//类名称:Blackjack_game
import java.util.*;

public class Blackjack_game {
    public static  void main(String args[]){
        Scanner cin =new Scanner(System.in);
        Game game = new Game();
        System.out.println("----------------------------欢迎来到21点游戏桌-------------------------");
        System.out.println();
        System.out.println("请输入需要加入游戏的玩家的数量:");
        int n= cin.nextInt();
        Player[] player = new Player[20];
        for(int i=0 ; i<n ; i++){
            System.out.println("请输入玩家"+(i+1)+"的名字:");
            String name = cin.next();
            player[i] = new Player(name);
           game.add(player[i]);
           System.out.println(name+"加入成功");
        }
    game.start();
    }

//类名称:Card
import java.util.*;

//包含花色和牌面,覆盖了 Object 类中的 toString 方法(输出单张扑克牌用)。

public class Card {
    private byte points;
    private String color;
    public Card(){}

    public void setPoint(byte points) {
        this.points = points;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public byte getPoints() {
        return points;
    }

    public String getColor() {
        return color;
    }

    public String toString() {
        if(points==1)
        {
            return "color:"+color+" points: A";
        }
        else if(points==11){
            return "color:"+color+" points: J";
        } else if (points==12) {
            return "color:"+color+" points: Q";
        }
        else if(points==13){
            return "color:"+color+" points: K";
        }
        else
            return "color:"+color+" points:" + points;
    }
}
//类名称:Poker
import javax.swing.*;
import java.util.*;
import java.math.*;

//包含 52 张牌(初始时按花色有序排列);
//shuffle 方法实现洗牌功能;
//pop 方法实现依序发牌;
//print 方法主要测试用,确认 shuffle 功能是否有效。


public class Poker {
    private Card[] cards = new Card[53];
    String[] color = {" ","♥","♦","♠","♣"};
    private int pos;
/*
无参构造
初始化每一张牌的花色和点数
 */

    public Poker(){
        for(int i=0 ; i<=52 ; i++){
            cards[i] = new Card();
            if(i==0) continue;
            if(i%13==0){
                cards[i].setPoint((byte)13);
                cards[i].setColor(color[i/13]);
            }
            else{
                cards[i].setPoint((byte)(1+i%13));
                cards[i].setColor(color[1+i/13]);
            }
        }
        this.pos=1;
    }


/*
shuffle 方法实现洗牌功能;
 */
    public void shuffle(){
        Random rad = new Random();
        for(int i=0 ; i<10000 ; i++){
            int a=rad.nextInt(52)+1;
            int b=rad.nextInt(52)+1;
            Card temp;
            temp = cards[a];
            cards[a]=cards[b];
            cards[b]=temp;
        }
    }


/*
pop 方法实现依序发牌;
 */
    public Card pop(){
        return cards[pos++];
    }
}
//类名称:Player
import java.util.*;
/*
包含姓名及拿到的牌;
join 方法实现加入一局游戏;
print 方法实现输出已拿到的牌;
decide 方法决定是否要牌;
add 方法实现接收发出的牌,游戏通过调用此方法将牌发给玩家;
sort 方法实现对拿到的牌由小到大排序(计分前将牌整理好);
score 实现计算出玩家拿到牌的分数。
 */


public class Player {
    private String Name;
    private Card[] cards = new Card[20];
    private int pos;


    public Player(){}


    public void setName(String name) {
        Name = name;
    }

    public String putName(){
        return Name;
    }


/*
有参构造
玩家牌的初始化构造;
 */

    public Player(String name){
        this.Name=name;
        this.pos=0;
        for(int i=0 ;i<20 ; i++){
            cards[i] = new Card();
        }
    }


/*
add 方法实现接收发出的牌,游戏通过调用此方法将牌发给玩家;
 */

    public void add(Card card){
        cards[pos++]=card;
    }


/*
sort 方法实现对拿到的牌由小到大排序(计分前将牌整理好);
 */

    public void sort(){
        for(int i=0 ; i<pos-1 ; i++){
            for(int j=i+1 ; j<pos ; j++){
                if(cards[i].getPoints()>cards[j].getPoints()){
                    Card temp = cards[i];
                    cards[i]=cards[j];
                    cards[j]=temp;
                }
            }
        }

    }


/*
    decide 方法决定是否要牌;
 */
    public Boolean decide() {
        Scanner cin = new Scanner(System.in);
        System.out.println("-----------------------------当前的牌面是--------------------------");
        print();
        if(score()>21)
            return false;
        System.out.println(Name + "是否要牌:(1-要牌,0-不要牌)");
        int de = cin.nextInt();
        if (de == 1) {
            return true;
        }
            return false;
    }


/*
    score 实现计算出玩家拿到牌的分数。
 */
    public byte score(){
        int sum=0;
        for(int i=0 ; i<pos ; i++){
            if(cards[i].getPoints()>10){
                sum+=10;
            }
            else {
                sum = sum +cards[i].getPoints();
            }
        }
        return (byte)sum;
    }

/*
print 方法实现输出已拿到的牌;
 */


    public void print(){
        sort();
        System.out.println(Name+" 的牌是:");
        for(int i=0 ; i<pos ; i++){
            System.out.println(cards[i].toString());
        }
        System.out.println("当前的点数是"+score());
    }



/*
    join 方法实现加入一局游戏;
    与Game中add方法重复,没有实际意义。
 */
    public void join(Game game){

    }
}
//类名称:Game
import java.awt.desktop.ScreenSleepEvent;
import java.util.*;

/*
包含一副扑克及若干玩家;
add 方法实现添加玩家,玩家通过调用此方法加入游戏;
start 方法实现开始游戏;
initialize 方法实现给每位玩家先发两张牌;
dealCards 方法实现发牌;
judgeResult 方法实现判定赢家。

 */


public class Game {

    private Poker poker;
    private Player[] players = new Player[20];
    private  int pos;


/*
无参构造
初始化
 */


    public Game(){
        poker = new Poker();
        this.pos=0;
        poker.shuffle();
    }


/*
add 方法实现添加玩家,玩家通过调用此方法加入游戏;
 */

    public void add(Player player){
        players[pos] = new Player();
        players[pos] = player;
        pos++;
    }

/*
dealCards 方法实现发牌;
 */

    public void dealCards(){
        for(int i=0 ; i<pos ; i++){
            while(players[i].decide()){
                players[i].add(poker.pop());
            }
        }
    }



/*
initialize 方法实现给每位玩家先发两张牌;
 */

    public void initialize(){
        for(int i=0 ; i<pos ; i++){
            players[i].add(poker.pop());
            players[i].add(poker.pop());
        }
    }


/*
judgeResult 方法实现判定赢家。
 */
    public void judgeResult(){
        int[] a = new int[20];
        int p=0;
        for(int i=0 ; i<pos ; i++){
            if(players[i].score()<=21){
                a[p++]=i;
            }
        }

        for(int i=0 ; i<p-1 ; i++){
            for(int j=i+1 ; j<p ; j++){
                if(players[a[i]].score()<players[a[j]].score()){
                    int temp=a[i];
                    a[i]=a[j];
                    a[j]=temp;
                }
            }
        }
        System.out.println("赢家是:"+players[a[0]].putName());
        for(int i=1 ; i<p ; i++){
            if(players[a[i]].score()==players[a[0]].score()){
                System.out.println("赢家是:"+players[a[i]].putName());
            }
            else
                break;
        }
    }

/*
start 方法实现开始游戏;
 */

    public void start(){
        System.out.println("------------------------------游戏正式开始---------------------------");
        initialize();   //  先发两张牌;
        System.out.println("----------------------------初始发牌阶段结束-------------------------");
        for(int i=0 ; i<pos ; i++)
            players[i].print();
        dealCards();    //发牌阶段
        System.out.println("------------------------------发牌结束---------------------------");
        judgeResult();
        System.out.println("游戏结束");
    }


}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/801270.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-07
下一篇 2022-05-07

发表评论

登录后才能评论

评论列表(0条)

保存