分别再不同的类中所添加;
//类名称: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("游戏结束");
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)