package pokergame;
import java.util.ArrayList;
import java.util.InputMismatchException;
import java.util.Iterator;
import java.util.Random;
import java.util.Scanner;
//使用int来表示扑克,点数为2-14,花色为100-400,如104即为方片4
class Poker{
private int color;
private int num;
private int poker;
private String colorString;
private String numString;
//设置扑克的花色和点数
public Poker(int color,int num) {
this.color = color;
this.num = num;
this.poker = color*100+num;
}
public Poker(){
}
//将扑克的花色与点数提取出来
public Poker(int pokerint){
this.num = pokerint%100;
this.color = pokerint/100;
}
public int getPoker() {
return poker;
}
//将int表示的扑克转换为字符串
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;
}
//将玩家的手牌转换为字符串并输出,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[];
//创建两个玩家的对象
Player player1;
Player player2;
public PlayGame(){
this.poker = new ArrayList<>();
this.poker1 = new int[52];
this.player1 = new Player();
this.player2 = new Player();
}
//创建一副扑克,将其放在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());
}
}
}
//将创建好的扑克输出到屏幕上
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数组中
public void shuffle(){
//将ArrayList的扑克先全部复制到poker1数组中
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];
}
}
//用来创建玩家的方法
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应该为整数");
}
}
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("----------创建一副扑克牌----------");
pg.makePoker();
System.out.println("----------扑克牌创建成功---------");
pg.getPoker();
System.out.println("--------开始洗牌---------");
pg.shuffle();
System.out.println("--------洗牌结束---------");
System.out.println("--------创建玩家---------");
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--------开始发牌---------");
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("--------发牌结束----------");
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))+"]");
}
}