Java基本内存匹配游戏

时间:2016-01-27 00:31:10

标签: java

我正在尝试编写一个具有8个相同数字对的4x4内存匹配游戏。所有面朝下的卡都标有星号。然后用户输入(1,1)和(1,2)作为猜测,如果正确则保持面朝上,游戏继续。

我的问题:我已经完成了大部分代码但是我的方法游戏运行游戏我无法弄清楚如何设置它。任何建议将不胜感激。

我的代码:

     //Welcome Prompt
    System.out.println("Welcome to the memory matching game!");
    System.out.println("Enter the card coordinate for each card when promted to.");
    System.out.println("For Example, 11 = Card 1 and 12 = Card 2.\n\n");

    board();
}

//print the board
public static void board() {
    int[][] cards = new int[4][4];
    boolean upDown[][] = new boolean[4][4];

    cards = randomizer(); //Shuffle cards       
    System.out.println("     1 2 3 4 ");
    System.out.println("---+---------");
    for (int i = 0; i < 4; i++) {
        System.out.print(" " + (i + 1) + " | ");
        for (int a = 0; a < 4; a++) {
            System.out.print("* ");
            upDown[i][a] = false;
        }
        System.out.println();
    }
    System.out.println();
    game(upDown, cards); // calls the game
}

public static int[][] randomizer() {
    int num[] = {1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8};
    int cards[][] = new int[4][4];
    Random random = new Random();
    int temp, t;
    for (int j = 0; j <= 20; j++) {
        for (int x = 0; x < 16; x++) { //Randomize the card order
            t = random.nextInt(1000) % 15;
            temp = num[x];
            num[x] = num[t];
            num[t] = temp;

        }
        t = 0;
        for (int r = 0; r < 4; r++) // Cards receive Numbers
        {
            for (int s = 0; s < 4; s++) {
                cards[r][s] = num[t];
                t = t + 1;
            }
        }

    }
    return cards;
}

//Start the Game
public static void game(boolean[][] upDown, int[][] cards) {

}

//shuffle the cards
public static int[][] shuf() {
    int start[] = {1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8};
    int cards[][] = new int[4][4];
    Random ran = new Random();
    int tmp, i;
    for (int s = 0; s <= 20; s++) {
        for (int x = 0; x < 16; x++) //randomize the card placements
        {
            i = ran.nextInt(100000) % 15;
            tmp = start[x];
            start[x] = start[i];
            start[i] = tmp;
        }
    }
    i = 0;

    for (int r = 0; r < 4; r++) // put values in cards here
    {
        for (int c = 0; c < 4; c++) {
            cards[r][c] = start[i];
            i = i + 1;
        }
    }
    return cards;

}
}

1 个答案:

答案 0 :(得分:0)

这是非常基本的。但它显示了如何运行游戏的基本思路。左上角=&#34; 11&#34;,右下角=&#34; 44&#34;。您可以将其清理为练习(包括静态引用作为方法参数传递,检查输入不会导致数组超出边界错误等)

public class MemoryGame {

    static int[][] cards = new int[4][4];
    static boolean upDown[][] = new boolean[4][4];
    static Scanner s = new Scanner(System.in);

    public static void main(String[] args) {
        setup();
        game(upDown, cards); // calls the game
    }

    //print the board
    public static void setup() {
        for (int i = 0; i < 4; i++) {
            for (int a = 0; a < 4; a++) {
                upDown[i][a]=false;
            }
        }
        cards = randomizer(); //Shuffle cards       
    }

    //print the board
    public static void displayBoard(boolean[][] upDown, int[][] cards) {

        System.out.println("     1 2 3 4 ");
        System.out.println("---+---------");
        for (int i = 0; i < 4; i++) {
            System.out.print(" " + (i + 1) + " | ");
            for (int a = 0; a < 4; a++) {
                if (upDown[i][a]) {
                    System.out.print(cards[i][a]);
                    System.out.print(" ");
                }
                else
                    System.out.print("* ");
            }
            System.out.println();
        }
        System.out.println();
    }

    public static int[][] randomizer() {
        int num[] = {1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8};
        int cards[][] = new int[4][4];
        Random random = new Random();
        int temp, t;
        for (int j = 0; j <= 20; j++) {
            for (int x = 0; x < 16; x++) { //Randomize the card order
                t = random.nextInt(1000) % 15;
                temp = num[x];
                num[x] = num[t];
                num[t] = temp;

            }
            t = 0;
            for (int r = 0; r < 4; r++) // Cards receive Numbers
            {
                for (int s = 0; s < 4; s++) {
                    cards[r][s] = num[t];
                    t = t + 1;
                }
            }

        }
        return cards;
    }

    //Start the Game
    public static void game(boolean[][] upDown, int[][] cards) {
        int noDownCards = 16;
        while (noDownCards > 0) {
            displayBoard(upDown, cards);
            System.out.println("Enter co-oridinate 1");
            String g1 = s.next();
            int g1x = Integer.valueOf(g1.substring(0, 1))-1;
            int g1y = Integer.valueOf(g1.substring(1, 2))-1;
            System.out.println(cards[g1x][g1y]);

            System.out.println("Enter co-oridinate 2");
            String g2 = s.next();
            int g2x = Integer.valueOf(g2.substring(0, 1))-1;
            int g2y = Integer.valueOf(g2.substring(1, 2))-1;
            System.out.println(cards[g2x][g2y]);
            if (cards[g1x][g1y] == cards[g2x][g2y]) {
                System.out.println("You found a match");
                upDown[g1x][g1y] = true;
                upDown[g2x][g2y] = true;
                noDownCards -= 2;
            }
        }
        displayBoard(upDown, cards);
        System.out.println("You win");
    }

    //shuffle the cards
    public static int[][] shuf() {
        int start[] = {1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8};
        int cards[][] = new int[4][4];
        Random ran = new Random();
        int tmp, i;
        for (int s = 0; s <= 20; s++) {
            for (int x = 0; x < 16; x++) //randomize the card placements
            {
                i = ran.nextInt(100000) % 15;
                tmp = start[x];
                start[x] = start[i];
                start[i] = tmp;
            }
        }
        i = 0;

        for (int r = 0; r < 4; r++) // put values in cards here
        {
            for (int c = 0; c < 4; c++) {
                cards[r][c] = start[i];
                i = i + 1;
            }
        }
        return cards;

    }

}