Java置换

Java置换,java,permutation,poker,Java,Permutation,Poker,我试图写一个程序,可以跟踪每个玩家在扑克中的筹码数量。这不是一个扑克游戏,只是一个程序,可以保持每个玩家有多少筹码。但是,我希望能够“下注”、“呼叫”、“折叠”等,并能够自动跟踪 我的问题是,有没有一种方法可以在不写每个排列的情况下调整玩家的数量?目前,它只能跟踪2个人。我怎样才能让它在理论上跟踪无限多的人?我已经写了所有可能的排列,我知道它不是很有效,那么有没有更有效的方法来编码呢 我是一个java noob,因此任何帮助都将不胜感激 import java.util.Scanner; imp

我试图写一个程序,可以跟踪每个玩家在扑克中的筹码数量。这不是一个扑克游戏,只是一个程序,可以保持每个玩家有多少筹码。但是,我希望能够“下注”、“呼叫”、“折叠”等,并能够自动跟踪

我的问题是,有没有一种方法可以在不写每个排列的情况下调整玩家的数量?目前,它只能跟踪2个人。我怎样才能让它在理论上跟踪无限多的人?我已经写了所有可能的排列,我知道它不是很有效,那么有没有更有效的方法来编码呢

我是一个java noob,因此任何帮助都将不胜感激

import java.util.Scanner;
import static java.lang.System.out;

class Chips {
static String move; //first move
static int betVal1, betVal2;
static int pot;
static int P1, P2;
static int roundcount;
static String player;
static Scanner myScanner = new Scanner(System.in);
static int turncount;
static String outcome;

public static void firstP1() { //first move when P1 start
    out.print("P1 - will you 'Bet', 'Check' or 'Fold'? ");
    move = myScanner.next();

    while (!move.equals("Bet") && !move.equals("Check") && !move.equals("Fold")){
    out.print("Please type 'Bet', 'Check' or 'Fold'");
    move = myScanner.next();
    }

    switch(move) {
    case "Bet":
        out.print("How much will you bet? If you've changed your mind: Type '0' to check and '-1' to fold. ");
        betVal1 = myScanner.nextInt();

        while (betVal1 > P1) {
            out.print("You cannot bet more than your chip count. How much will you bet? ");
            betVal1 = myScanner.nextInt();
        }
        if (betVal1 == 0) { //check
            P2aftercheck();
        }
        if (betVal1 == -1) { //fold
            P2 += pot;
            pot = 0;
            roundcount = 0;
            turncount++;

            out.print("P1: ");
            out.println(P1);
            out.print("P2: ");
            out.println(P2);
            out.println("Next turn");

            if (turncount  % 2 == 0) { //check to see who begins next turn
                player = "One";
            } else {
                player = "Two";         
            }

            if( player.equals("One")) {
                firstP1();
            } else {
                firstP2();
            }

        }


        pot += betVal1;
        P1 -= betVal1;
        //out.println(betVal);
        //out.print(pot);
        P2afterbet();
        break;

    case "Check":
        P2aftercheck();
        break;

    case "Fold":
        P2 += pot;
        pot = 0;
        roundcount = 0;
        turncount++;

        if (turncount  % 2 == 0) {
            player = "One";
        } else {
            player = "Two";         
        }

        if( player.equals("One")) {
            firstP1();
        } else {
            firstP2();
        }
        break;

    }
}

public static void firstP2() { //first move when P2 start
    out.print("P2 - will you 'Bet', 'Check' or 'Fold'? ");
    move = myScanner.next();

    while (!move.equals("Bet") && !move.equals("Check") && !move.equals("Fold")){
    out.print("Please type 'Bet', 'Check' or 'Fold' ");
    move = myScanner.next();
    }

    switch(move) {
    case "Bet":
        out.print("How much will you bet? ");
        betVal2 = myScanner.nextInt();
        while (betVal2 > P2) {
            out.print("You can not bet more than your chip count. How much will you bet? ");
            betVal2 = myScanner.nextInt();
        }
        pot += betVal2;
        P2 -= betVal2;
        //out.println(betVal);
        //out.print(pot);
        P1afterbet();
        break;

    case "Check":
        P1aftercheck();
        break;

    case "Fold":
        P1 += pot;
        pot = 0;
        roundcount = 0;
        turncount++;

        out.print("P1: ");
        out.println(P1);
        out.print("P2: ");
        out.println(P2);
        out.println("Next turn");

        if (turncount  % 2 == 0) {
            player = "One";
        } else {
            player = "Two";         
        }

        if( player.equals("One")) {
            firstP1();
        } else {
            firstP2();
        }
        break;

    }
}

public static void P1afterbet() { //P1 move after P2 bet
    out.print("P1 - will you 'Bet', 'Call' or 'Fold'? ");
    move = myScanner.next();

    while (!move.equals("Bet") && !move.equals("Call") && !move.equals("Fold")){
        out.print("Please type 'Bet', 'Check' or 'Fold' ");
        move = myScanner.next();
    }

    switch(move) {
    case "Bet":
        out.print("How much will you bet? ");
        betVal1 = myScanner.nextInt();
        while (betVal1 < betVal2){
            out.print("Please bet at least ");
            out.print(betVal2);
            out.println(" chips.");
            out.print("How much will you bet? ");
            betVal1 = myScanner.nextInt();
        }

        pot += betVal1;
        P1 -= betVal1;
        P2afterbet();
        break;

    case "Call":
        pot += betVal1;
        P1 -= betVal1;
        roundcount++;
        if (roundcount == 4){
            roundend();
        }
        if( player.equals("P1")) {
            firstP1();
        } else {
            firstP2();
        }
        break;

    case "Fold":
        P2 += pot;
        pot = 0;
        roundcount = 0;
        turncount++;

        out.print("P1: ");
        out.println(P1);
        out.print("P2: ");
        out.println(P2);
        out.println("Next turn");

        if (turncount  % 2 == 0) {
            player = "One";
        } else {
            player = "Two";         
        }

        if( player.equals("One")) {
            firstP1();
        } else {
            firstP2();
        }
        break;
    }
}

public static void P1aftercheck() { //P1 move after P2 check
    out.print("P1 - will you 'Bet', 'Check' or 'Fold'? ");
    move = myScanner.next();

    while (!move.equals("Bet") && !move.equals("Check") && !move.equals("Fold")){
    out.print("Please type 'Bet', 'Check' or 'Fold'");
    move = myScanner.next();
    }

    switch(move) {
    case "Bet":
        out.print("How much will you bet? ");
        betVal1 = myScanner.nextInt();
        while (betVal1 > P1) {
            out.print("You can not bet more than your chip count. How much will you bet? ");
            betVal1 = myScanner.nextInt();
        }
        pot += betVal1;
        P1 -= betVal1;
        //out.println(betVal);
        //out.print(pot);
        P2afterbet();
        break;

    case "Check":
        roundcount++;
        if (roundcount == 4) {
            roundend();
        }
        if( player.equals("One")) {
            firstP1();
        } else {
            firstP2();
        }
        break;

    case "Fold":
        P2 += pot;
        pot = 0;
        roundcount=0;
        turncount++; 

        out.print("P1: ");
        out.println(P1);
        out.print("P2: ");
        out.println(P2);
        out.println("Next turn");

        if (turncount  % 2 == 0) {
            player = "One";
        } else {
            player = "Two";         
        }

        if( player.equals("One")) {
            firstP1();
        } else {
            firstP2();
        }
        break;

    }
}

public static void P2afterbet() { //P2 move after P1 bet
    out.print("P2 - will you 'Bet', 'Call' or 'Fold'? ");
    move = myScanner.next();

    while (!move.equals("Bet") && !move.equals("Call") && !move.equals("Fold")){
    out.print("Please type 'Bet', 'Check' or 'Fold'");
    move = myScanner.next();
    }

    switch(move) {
    case "Bet":
        out.print("How much will you bet? ");
        betVal2 = myScanner.nextInt();
        while (betVal2 > P2) {
            out.print("You can not bet more than your chip count. How much will you bet? ");
            betVal2 = myScanner.nextInt();
        }
        while (betVal2 < betVal1) {
            out.print("You must bet at least ");
            out.print(betVal1);
            betVal2 = myScanner.nextInt();
        }
        pot += betVal2;
        P2 -= betVal2;
        //out.println(betVal);
        //out.print(pot);
        P1afterbet();
        break;

    case "Call":
        P2 -= betVal1;
        pot += betVal1;
        roundcount++;
        if (roundcount == 4){
            roundend();
        }
        if( player.equals("P1")) {
            firstP1();
        } else {
            firstP2();
        }
        break;

    case "Fold":
        P1 += pot;
        pot = 0;
        roundcount = 0;
        turncount++;

        out.print("P1: ");
        out.println(P1);
        out.print("P2: ");
        out.println(P2);
        out.println("Next turn");

        if (turncount  % 2 == 0) {
            player = "One";
        } else {
            player = "Two";         
        }

        if( player.equals("One")) {
            firstP1();
        } else {
            firstP2();
        }
        break;

    }
}

public static void P2aftercheck() { //P2 move after P1 check
    out.print("P2 - will you 'Bet', 'Check' or 'Fold'? ");
    move = myScanner.next();

    while (!move.equals("Bet") && !move.equals("Check") && !move.equals("Fold")){
    out.print("Please type 'Bet', 'Check' or 'Fold'");
    move = myScanner.next();
    }

    switch(move) {
    case "Bet":
        out.print("How much will you bet? ");
        betVal2 = myScanner.nextInt();
        while (betVal2 > P1) {
            out.print("You can not bet more than your chip count. How much will you bet? ");
            betVal2 = myScanner.nextInt();
        }
        pot += betVal2;
        P2 -= betVal2;
        //out.println(betVal);
        //out.print(pot);
        P1afterbet();
        break;

    case "Check":
        roundcount++;
        if (roundcount == 4){
            roundend();
        }
        if( player.equals("One")) {
            firstP1();
        } else {
            firstP2();
        }

        break;

    case "Fold":
        P1 += pot;
        pot = 0;
        roundcount=0;
        turncount++;

        out.print("P1: ");
        out.println(P1);
        out.print("P2: ");
        out.println(P2);
        out.println("Next turn");

        if (turncount  % 2 == 0) {
            player = "One";
        } else {
            player = "Two";         
        }

        if( player.equals("One")) {
            firstP1();
        } else {
            firstP2();
        }

        break;

    }
}

public static void roundend() {
    out.print("Who won the round? 'P1' or 'P2'? ");
    outcome = myScanner.next();
    turncount++;

    if (turncount  % 2 == 0) {
        player = "One";
    } else {
        player = "Two";         
    }

    while (!outcome.equals("P1") && !outcome.equals("P2")){
        out.print("Please type 'P1' or 'P2'");
        outcome = myScanner.next();
    }

    if (outcome.equals("P1")){
        P1 += pot;
        pot = 0;
        roundcount = 0;

        out.print("P1: ");
        out.println(P1);
        out.print("P2: ");
        out.println(P2);
        out.println("Next turn");

        if (P1 != 0 && P2 != 0){
            if( player.equals("One")) {
                firstP1();
            } else {
                firstP2();
            }
        } else if (P1 == 0) {
            out.print("P1 is out of chips. P2 Wins!");
        } else {
            out.print("P2 is out of chips. P2 Wins!");
        }
    } else {
        P2 += pot;
        pot = 0;
        roundcount = 0;

        out.print("P1: ");
        out.println(P1);
        out.print("P2: ");
        out.println(P2);
        out.println("Next turn");

        if (P1 != 0 && P2 != 0) {
            if( player.equals("P1")) {
                firstP1();
            } else {
                firstP2();
            }
        } else if (P1 == 0) {
            out.print("P1 is out of chips. P2 Wins!");
        } else {
            out.print("P2 is out of chips. P2 Wins!");
        }
    } 

    System.exit(0);
}

public static void main(String args[]){

    pot = 0;
    roundcount = 0; //status within turn i.e. Flop, Turn, River
    turncount = 2; //use for who starts

    out.print("Please enter starting chip count ");
    P1 = myScanner.nextInt();
    P2 = P1;

    firstP1();
}
import java.util.Scanner;
导入静态java.lang.System.out;
等级芯片{
静态字符串移动;//第一次移动
静态int betVal1,betVal2;
静态int-pot;
静态int P1,P2;
静态整数舍入计数;
静态弦乐演奏器;
静态扫描仪myScanner=新扫描仪(System.in);
静态整数计数;
静态字符串结果;
public static void firstP1(){//P1启动时的第一个移动
打印(“P1-你会‘打赌’、‘检查’还是‘折叠’?”);
move=myScanner.next();
而(!move.equals(“下注”)和&!move.equals(“检查”)和&!move.equals(“折叠”)){
打印(“请键入“下注”、“支票”或“折叠”);
move=myScanner.next();
}
开关(移动){
案例“打赌”:
打印(“你会赌多少?如果你改变主意:键入“0”进行检查,-1”进行折叠。”);
betVal1=myScanner.nextInt();
while(betVal1>P1){
打印(“你不能下注超过筹码数。你会下注多少?”);
betVal1=myScanner.nextInt();
}
如果(betVal1==0){//检查
P2aftercheck();
}
如果(betVal1==-1){//fold
P2+=罐;
pot=0;
轮数=0;
turncount++;
打印输出(“P1:”);
out.println(P1);
打印输出(“P2:”);
out.println(P2);
out.println(“下一轮”);
如果(转数%2==0){//请检查下一轮由谁开始
player=“一”;
}否则{
player=“两”;
}
如果(玩家相等(“一”)){
第一个p1();
}否则{
第一个p2();
}
}
pot+=betVal1;
P1-=β1;
//out.println(betVal);
//打印输出(pot);
P2afterbet();
打破
案例“检查”:
P2aftercheck();
打破
案例“折叠”:
P2+=罐;
pot=0;
轮数=0;
turncount++;
如果(营业额%2==0){
player=“一”;
}否则{
player=“两”;
}
如果(玩家相等(“一”)){
第一个p1();
}否则{
第一个p2();
}
打破
}
}
public static void firstP2(){//P2启动时的第一个移动
打印(“P2-你会‘打赌’、‘检查’还是‘折叠’?”);
move=myScanner.next();
而(!move.equals(“下注”)和&!move.equals(“检查”)和&!move.equals(“折叠”)){
打印(“请键入“下注”、“支票”或“折叠”);
move=myScanner.next();
}
开关(移动){
案例“打赌”:
打印(“你要赌多少?”);
betVal2=myScanner.nextInt();
while(betVal2>P2){
打印(“您不能下注超过筹码数。您将下注多少?”);
betVal2=myScanner.nextInt();
}
pot+=betVal2;
P2-=β2;
//out.println(betVal);
//打印输出(pot);
P1afterbet();
打破
案例“检查”:
P1aftercheck();
打破
案例“折叠”:
P1+=罐;
pot=0;
轮数=0;
turncount++;
打印输出(“P1:”);
out.println(P1);
打印输出(“P2:”);
out.println(P2);
out.println(“下一轮”);
如果(营业额%2==0){
player=“一”;
}否则{
player=“两”;
}
如果(玩家相等(“一”)){
第一个p1();
}否则{
第一个p2();
}
打破
}
}
公共静态无效P1afterbet(){//P1在P2下注后移动
打印(“P1-你会‘打赌’、‘打电话’还是‘折叠’?”);
move=myScanner.next();
而(!move.equals(“下注”)和&!move.equals(“叫牌”)和&!move.equals(“折叠”)){
打印(“请键入“下注”、“支票”或“折叠”);
move=myScanner.next();
}
开关(移动){
案例“打赌”:
打印(“你要赌多少?”);
betVal1=myScanner.nextInt();
while(betVal1private static void player1Move() {
    //player 1 takes his move
}

private static void player2Move() {
    //player 2 takes her move
}
private static void move(int playerID) {
    //player playerID takes their move
}
Player[] Players; 
Players[0] = new Player();
Players[1] = new Player();