Java - BlackJack项目 - I / O和周期问题

时间:2017-11-08 20:53:13

标签: java io blackjack

我试图制作一个由字符输入驱动的简单BlackJack游戏,并且在后面的部分我遇到了很多问题。

我评论了给我带来麻烦的部分,其余部分似乎没有错误,我做了单元测试。 那么,我做了什么?我创建了一个类来保存卡片并管理它们,桌子,玩家和经销商都是桌子的实例。 一张表最多有5张卡(为简单起见),每个卡对象都来自Card类,它有一种向卡对象添加数据的方法。

主类驱动程序并使用键盘输入的字符做出决定,此时我遇到了问题。

    import java.io.IOException;

class Table{
    Card[] hand = new Card[5];
    int counter = 1;

    Table() {
        for ( int i=0; i<hand.length; i++) {
            hand[i]=new Card();
        }
        hand[0].GetCard();


    }

    void ReadCards(){
        for(int i= 0;i<counter;i++ ) {
            System.out.println("The card "+(i+1)+" is " + hand[i].name + " "+ hand[i].seed + "."  );

        }
    }
    void DrawCards() {
        hand[counter].GetCard();
        counter++;
    }
    boolean isOut() {
        int sum = 0;
        for(int i= 0;i<counter;i++ ) {
            sum += hand[i].value; 
            if(sum >21) {
                return true;
            }

        }
        return false;
    }

    int TheSum() {
        int sum = 0;
        for(int i= 0;i<counter;i++ ) {
            sum += hand[i].value; 


        }
        return sum;
    }

    boolean isWIN(Table p2) {
        int sum = 0;
        int sump2 = 0;
        for(int i= 0;i<counter;i++ ) {
            sum += hand[i].value; 


        }
        for(int i= 0;i<p2.counter;i++ ) {
            sump2 += p2.hand[i].value; 


        }
        if (sum>sump2) {
            return true;
        }
        else return false;
    }



    class Card {
        public int value = 0;
        public String name = "";
        public String seed = ""; 



        void GetCard(){
            int positive = 0;
            do {
                positive = (int) (Math.random()*100) % 10;
            }while(positive == 0 );
            value = positive;
            if(value<10) {
                name = String.valueOf(value);
            }
            else {
                positive = 0;
                do {
                    positive = (int) (Math.random()*100) % 3;
                }while(positive == 0 );
                switch(positive) {
                case 1:
                    name = "J";
                    break;
                case 2:
                    name = "Q";
                    break;
                case 3:
                    name ="K";
                    break;

                }


            }
            positive = 0;
            do {
                positive = (int) (Math.random()*100) % 4;
            }while(positive == 0 );
            switch(positive) {
            case 1:
                seed = "CLUB";
                break;
            case 2:
                seed = "DIAMOND";
                break;
            case 3:
                seed ="SPADE";
                break;
            case 4:
                seed ="HEART";
                break;
            }

        }
    }
}



public class BlackJack {
    public static void main(String args[])throws IOException {


        System.out.println("Welcome to the BlackJack's table! Press y to start! ");
        char flag;
        do {
        flag = (char)System.in.read();

        }while(flag != 'y' );
        Table dealer = new Table();
        Table player = new Table();
        System.out.println("DEALER");
        dealer.ReadCards();
        System.out.println("PLAYER");
        player.ReadCards();
        flag = ' ';
        System.out.println("Do you want to draw a card? I'll draw until you'll press n");
/*
        flag = (char)System.in.read();
        while(flag != 'n' ) {
            player.DrawCards();
            player.ReadCards();
            if (player.isOut()) {
                System.out.println("YOU LOSE");
                System.exit(0);
            }
            flag = (char)System.in.read();
        }
        System.out.println("The dealer will draw");
        while(dealer.TheSum()<18) {
            dealer.DrawCards();
            dealer.ReadCards();
            if (dealer.isOut()) {
                System.out.println("YOU WIN");
                System.exit(0);
            }
        }
*/
        System.out.println("WHO WON?");

        if (player.isWIN(dealer)){
            System.out.println("YOU WIN");
        }
        else System.out.println("YOU LOSE");

    }
}

是的,我不习惯java。 Console screenshot of the output here!

1 个答案:

答案 0 :(得分:0)

以下是修复循环问题的示例,但游戏逻辑可能存在一些问题,这超出了此问题的范围。

   public static void main(String args[]) throws IOException {
        Scanner s = new Scanner(System.in);
        System.out.println("Welcome to the BlackJack's table! Press y to start! ");
        char flag;
        do {
            flag = (char) s.nextLine().charAt(0);

        } while (flag != 'y');
        Table dealer = new Table();
        Table player = new Table();
        System.out.println("DEALER");
        dealer.ReadCards();
        System.out.println("PLAYER");
        player.ReadCards();
        flag = ' ';
        System.out.println("Do you want to draw a card? I'll draw until you'll press n");

        while (true) {
            flag = s.nextLine().charAt(0);

            if (flag == 'n') {
                break;
            }

            player.DrawCards();
            player.ReadCards();
            if (player.isOut()) {
                System.out.println("YOU LOSE");
                System.exit(0);
            }
            System.out.println("The dealer will draw");
            while (dealer.TheSum() < 18) {
                dealer.DrawCards();
                dealer.ReadCards();
                if (dealer.isOut()) {
                    System.out.println("YOU WIN");
                    System.exit(0);
                }
            }

            System.out.println(String.format("The dealer has finished drawing. Dealers score %d. Your score %d", dealer.TheSum(), player.TheSum()));
        }

        System.out.println("WHO WON?");

        if (player.isWIN(dealer)) {
            System.out.println("YOU WIN");
        } else {
            System.out.println("YOU LOSE");
        }
    }

输出:

Welcome to the BlackJack's table! Press y to start! 
y
DEALER
The card 1 is 8 CLUB.
PLAYER
The card 1 is 2 SPADE.
Do you want to draw a card? I'll draw until you'll press n
n
WHO WON?
YOU LOSE