package?pokergame;
import?java.util.ArrayList;
import?java.util.InputMismatchException;
import?java.util.Iterator;
import?java.util.Random;
import?java.util.Scanner;
//使用int來表示撲克,點數(shù)為2-14,花色為100-400,如104即為方片4
class?Poker{
private?int?color;
private?int?num;
private?int?poker;
private?String?colorString;
private?String?numString;
//設(shè)置撲克的花色和點數(shù)
public?Poker(int?color,int?num)?{
this.color?=?color;
this.num?=?num;
this.poker?=?color*100+num;
}
public?Poker(){
}
//將撲克的花色與點數(shù)提取出來
public?Poker(int?pokerint){
this.num?=?pokerint%100;
this.color?=?pokerint/100;
}
public?int?getPoker()?{
return?poker;
}
//將int表示的撲克轉(zhuǎn)換為字符串
public?String?toStringPoker(int?pokerint){
num?=?pokerint%100;
color?=?pokerint/100;
if?(num?==?11)?{
this.numString?=?"J";
}?else?if?(num?==?12)?{
this.numString?=?"Q";
}else?if?(num?==?13)?{
this.numString?=?"K";
}else?if?(num?==?14)?{
this.numString?=?"A";
}else?{
this.numString?=?num+"";
}
switch?(color)?{
case?1:
this.colorString?=?"方片";
break;
case?2:
this.colorString?=?"梅花";
break;
case?3:
this.colorString?=?"紅桃";
break;
case?4:
this.colorString?=?"黑桃";
break;
}
return?(colorString+numString);
}
}
//玩家類,用來表示玩家
class?Player{
private?int?ID;
private?String?name;
//玩家的手牌集合,用ArrayList來表示
ArrayList<Integer>?poker?=?new?ArrayList<>();?
Poker?pk?=?new?Poker();
//用來存儲玩家最大的手牌
private?int?maxPoker;
public?int?getID()?{
return?ID;
}
public?void?setID(int?iD)?{
ID?=?iD;
}
public?String?getName()?{
return?name;
}
public?void?setName(String?name)?{
this.name?=?name;
}
public?ArrayList<Integer>?getPoker()?{
return?poker;
}
public?void?setPoker(ArrayList<Integer>?poker)?{
this.poker?=?poker;
}
//將玩家的手牌轉(zhuǎn)換為字符串并輸出,index代表玩家的第幾張手牌
public?String?getPokerString(int?index){
return?pk.toStringPoker(poker.get(index));
}
public?int?getMaxPoker()?{
return?maxPoker;
}
public?void?setMaxPoker(int?maxPoker)?{
this.maxPoker?=?maxPoker;
}
}
public?class?PlayGame?{
ArrayList<Integer>?poker;
//用來存放洗牌后的撲克
int?poker1[];
//創(chuàng)建兩個玩家的對象
Player?player1;
Player?player2;
public?PlayGame(){
this.poker?=??new?ArrayList<>();
this.poker1?=?new?int[52];
this.player1?=?new?Player();
this.player2?=?new?Player();
}
//創(chuàng)建一副撲克,將其放在ArrayList集合中
public?void?makePoker(){
for?(int?i?=?1;?i?<=?4;?i++)?{
for?(int?j?=?2;?j?<=?14;?j++)?{
poker.add(new?Poker(i,j).getPoker());
}
}
}
//將創(chuàng)建好的撲克輸出到屏幕上
public?void?getPoker(){
Poker?pk?=?new?Poker();
System.out.print("為:[");
for?(Iterator<Integer>?iterator?=?poker.iterator();?iterator.hasNext();)?{
Integer?integer?=?(Integer)?iterator.next();
System.out.print(pk.toStringPoker(integer)+"?");
}
System.out.println("]");
}
//用來將排序后的ArrayList的撲克打亂順序并放在poker1數(shù)組中
public?void?shuffle(){
//將ArrayList的撲克先全部復(fù)制到poker1數(shù)組中
for?(int?i?=?0;?i?<?poker1.length;?i++)?{
poker1[i]?=?poker.get(i);
}
//打亂poker1中撲克
Random?rd?=?new?Random();
for?(int?i?=?0;?i?<?52;?i++)?{
int?rdnum?=?rd.nextInt(52);
poker1[i]?=?poker1[i]?+?poker1[rdnum];
poker1[rdnum]?=?poker1[i]?-?poker1[rdnum];
poker1[i]?=?poker1[i]?-?poker1[rdnum];
}
}
//用來創(chuàng)建玩家的方法
public?void?makePlayer(Player?player){
int?ID;
System.out.print("輸入ID:");
@SuppressWarnings("resource")
Scanner?scanner?=?new?Scanner(System.in);
while?(true)?{
try?{
if?(scanner.hasNext())?{
ID?=?scanner.nextInt();
player.setID(ID);
}
break;
}?catch?(InputMismatchException?e)?{
scanner.next();
System.out.println("ID應(yīng)該為整數(shù)");
}
}
System.out.print("輸入姓名:");
if?(scanner.hasNext())?{
player.setName(scanner.next());
}
}
//找出一個玩家手中最大的牌
public?String?comparPoker(Player?player){
if?(player.poker.get(0)%100?>?player.poker.get(1)%100)?{
player.setMaxPoker(player.poker.get(0));
return?player.pk.toStringPoker(player.poker.get(0));
}else?if?(player.poker.get(0)%100?<?player.poker.get(1)%100)?{
player.setMaxPoker(player.poker.get(1));
return?player.pk.toStringPoker(player.poker.get(1));
}else?if?(player.poker.get(0)/100?>?player.poker.get(1)/100)?{
player.setMaxPoker(player.poker.get(0));
return?player.pk.toStringPoker(player.poker.get(0));
}else?if?(player.poker.get(0)/100?<?player.poker.get(1)/100)?{
player.setMaxPoker(player.poker.get(1));
return?player.pk.toStringPoker(player.poker.get(1));
}else?{
player.setMaxPoker(player.poker.get(0));
return?player.pk.toStringPoker(player.poker.get(0));
}
}
//將兩個玩家手中最大的牌做比較,找出其中的贏家
public?String?comparPoker(Player?player1,Player?player2){
if?(player1.getMaxPoker()%100?>?player2.getMaxPoker()%100)?{
return?player1.getName();
}else?if?(player1.getMaxPoker()%100?<?player2.getMaxPoker()%100)?{
return?player2.getName();
}else?if?(player1.getMaxPoker()/100?>?player2.getMaxPoker()/100)?{
return?player1.getName();
}else?if?(player1.getMaxPoker()/100?<?player2.getMaxPoker()/100)?{
return?player2.getName();
}else?{
return?"平手";
}
}
public?static?void?main(String[]?args)?{
PlayGame?pg?=?new?PlayGame();
System.out.println("----------創(chuàng)建一副撲克牌----------");
pg.makePoker();?
System.out.println("----------撲克牌創(chuàng)建成功---------");
pg.getPoker();
System.out.println("--------開始洗牌---------");
pg.shuffle();
System.out.println("--------洗牌結(jié)束---------");
System.out.println("--------創(chuàng)建玩家---------");
System.out.println("請輸入第一位玩家的ID和姓名:");
pg.makePlayer(pg.player1);
System.out.println("請輸入第二位玩家的ID和姓名:");
pg.makePlayer(pg.player2);
System.out.println("\n歡迎玩家"+pg.player1.getName());
System.out.println("歡迎玩家"+pg.player2.getName());
System.out.println("\n--------開始發(fā)牌---------");
pg.player1.poker.add(pg.poker1[0]);
System.out.println("玩家"+pg.player1.getName()+"拿牌");
pg.player2.poker.add(pg.poker1[1]);
System.out.println("玩家"+pg.player2.getName()+"拿牌");
pg.player1.poker.add(pg.poker1[2]);
System.out.println("玩家"+pg.player1.getName()+"拿牌");
pg.player2.poker.add(pg.poker1[3]);
System.out.println("玩家"+pg.player2.getName()+"拿牌");
System.out.println("--------發(fā)牌結(jié)束----------");
System.out.println("--------開始游戲----------");
System.out.println("玩家"+pg.player1.getName()+"的最大的手牌為"+pg.comparPoker(pg.player1));
System.out.println("玩家"+pg.player2.getName()+"的最大的手牌為"+pg.comparPoker(pg.player2));
String?resultString?=?pg.comparPoker(pg.player1,?pg.player2);
if?(resultString?!=?"平手")?{
System.out.println("----------玩家"+resultString+"獲勝----------");
}else?{
System.out.println("------------平手-------------");
}
System.out.println("玩家各自的手牌為:");
System.out.println(pg.player1.getName()+"["+pg.player1.pk.toStringPoker(pg.player1.poker.get(0))+","+pg.player1.pk.toStringPoker(pg.player1.poker.get(1))+"]");
System.out.println(pg.player2.getName()+"["+pg.player2.pk.toStringPoker(pg.player2.poker.get(0))+","+pg.player2.pk.toStringPoker(pg.player2.poker.get(1))+"]");
}
}
2015-04-22
拿牌那里我覺得這樣寫好點,可擴展性大些,比如要拿10張牌,只需要改 for循環(huán)中 i<10就可以了。? 還有 那個異常處理,直接scanner.next()不會報錯? 我試了一下,我的要報錯。