Страницы

Поиск по вопросам

четверг, 13 февраля 2020 г.

Крестики нолики

#java


Пытаюсь реализовать своими силами игру крестики-нолики на Java. Все вроде работает
так как задумывалось, но продолжение игры вообще не идет.

Суть в том что метод Exit() зацикливается. при вводе "n" все работает хорошо, а при
вводе "Y" Спрашивает по новой.

Подскажите,пожалуйста, в чем ошибка.



package tic_tac_toe;

import java.util.Scanner;

public class XO {

    public static void Game(){

        Scanner in = new Scanner(System.in); // Подключение класса считывания инф-и
(аля Read)
        String hole; // переменная местоположения

        String[][] field = new String[3][3];
        // Заполняем массив пробелами, для последущего замещения их Х или О
        for (int i = 0; i < 3; i++){
            System.out.println();
            for (int j = 0; j < 3; j++){
                field[i][j] = (" [ ] ");
                System.out.print(field[i][j]);
            }
        }       

        int i = 2;
        int quit=0;
        while((i<11) & (quit == 0)){

            if (i % 2 == 0){
                System.out.println("\nХодит Х");
            }
            else{
                System.out.println("\nХодит О");
            }
            System.out.print("Введите клетку:> ");
            // Считывание ввода, и ход.
                switch (hole = in.next()){
                case "7":{
                    if (field[0][0] == (" [ ] ")){
                        if (i % 2 == 0){
                            field[0][0] = (" [X] ");
                            i++;
                            break;
                        }
                        else {
                            field[0][0] = (" [O] ");
                            i++; break;
                        }
                    }
                    else{
                        System.out.println("Эта клетка занята, введите другую."); break;
                    }
                }

                case "8":{
                    if (field[0][1] == (" [ ] ")){
                        if (i % 2 == 0){
                            field[0][1] = (" [X] ");
                            i++; break;
                        }
                        else {
                            field[0][1] = (" [O] ");
                            i++; break;
                        }
                    }
                    else{
                        System.out.println("Эта клетка занята, введите другую."); break;
                    }
                }
                case "9":{
                    if (field[0][2] == (" [ ] ")){
                        if (i % 2 == 0){
                            field[0][2] = (" [X] ");
                            i++; break;
                        }
                        else {
                            field[0][2] = (" [O] ");
                            i++; break;
                        }
                    }
                    else{
                        System.out.println("Эта клетка занята, введите другую."); break;
                    }
                }
                case "4":{
                    if (field[1][0] == (" [ ] ")){
                        if (i % 2 == 0){
                            field[1][0] = (" [X] ");
                            i++; break;
                        }
                        else {
                            field[1][0] = (" [O] ");
                            i++; break;
                        }
                    }
                    else{
                        System.out.println("Эта клетка занята, введите другую."); break;
                    }
                }
                case "5":{
                    if (field[1][1] == (" [ ] ")){
                        if (i % 2 == 0){
                            field[1][1] = (" [X] ");
                            i++; break;
                        }
                        else {
                            field[1][1] = (" [O] ");
                            i++; break;
                        }
                    }
                    else{
                        System.out.println("Эта клетка занята, введите другую."); break;
                    }
                }
                case "6":{
                    if (field[1][2] == (" [ ] ")){
                        if (i % 2 == 0){
                            field[1][2] = (" [X] ");
                            i++; break;
                        }
                        else {
                            field[1][2] = (" [O] ");
                            i++; break;
                        }
                    }
                    else{
                        System.out.println("Эта клетка занята, введите другую."); break;
                    }
                }
                case "1":{
                    if (field[2][0] == (" [ ] ")){
                        if (i % 2 == 0){
                            field[2][0] = (" [X] ");
                            i++; break;
                        }
                        else {
                            field[2][0] = (" [O] ");
                            i++; break;
                        }
                    }
                    else{
                        System.out.println("Эта клетка занята, введите другую."); break;
                    }
                }
                case "2":{
                    if (field[2][1] == (" [ ] ")){
                        if (i % 2 == 0){
                            field[2][1] = (" [X] ");
                            i++; break;
                        }
                        else {
                            field[2][1] = (" [O] ");
                            i++; break;
                        }
                    }
                    else{
                        System.out.println("Эта клетка занята, введите другую."); break;
                    }
                }
                case "3":{
                    if (field[2][2] == (" [ ] ")){
                        if (i % 2 == 0){
                            field[2][2] = (" [X] ");
                            i++; break;
                        }
                        else {
                            field[2][2] = (" [O] ");
                            i++; break;
                        }
                    }
                    else{
                        System.out.println("Эта клетка занята, введите другую."); break;
                    }
                }
                default:
                    System.out.println("\nОшибка ведите еще раз!");
                    break;
                }
            // Вывод поля на экран
            for (int p = 0; p < 3; p++){
                System.out.println();
                for (int l = 0; l < 3; l++){
                    System.out.print(field[p][l]);
                }
            }
            for (int t = 0; t<3 ; t++){ 
            // Проверка прямых
                if      (((field[t][0]) == " [O] " & (field[t][1]) == " [O] " & field[t][2]
== " [O] ") ||
                         ((field[0][t]) == " [O] " & (field[1][t]) == " [O] " & field[2][t]
== " [O] ")) {
                    System.out.print("\nПобедил  О ");
                    quit++; Exit();
                }
                else if (((field[t][0]) == " [X] " & (field[t][1]) == " [X] " & field[t][2]
== " [X] ") ||
                         ((field[0][t]) == " [X] " & (field[1][t]) == " [X] " & field[2][t]
== " [X] ")) {
                    System.out.print("\nПобедил  Х ");
                    quit++; Exit();
                }
                else {}
            }
            // Проверка диагоналей
            if      (((field[0][0]) == " [X] " & (field[1][1]) == " [X] " & field[2][2]
== " [X] ") ||
                     ((field[0][2]) == " [X] " & (field[1][1]) == " [X] " & field[2][0]
== " [X] ")) {
                System.out.print("\nПобедил  Х ");
                quit++; Exit();
            }
            else if (((field[0][0]) == " [O] " & (field[1][1]) == " [O] " & field[2][2]
== " [O] ") ||
                     ((field[0][2]) == " [O] " & (field[1][1]) == " [O] " & field[2][0]
== " [O] ")) {
                System.out.print("\nПобедил  О ");
                quit++; Exit();
            }
            else {}
        }
            System.out.println();
        }
    public static void Exit(){ // Отсутствует продолжение игры      
        Scanner ex = new Scanner(System.in);
        String re;
        do {
            System.out.print("Хотите продолжить игру? ");
            re = ex.next();
            if (re == "Y"){
                Game();
            }
            else if(re == "n") {
                break;
            }
        } while (re == ("Y") || re == "n");
    }
    public static void main(String[] args) {
        Game();
        //Exit();
    }
}

    


Ответы

Ответ 1



Строки сравнивают методом equals(String str) То есть у Вас должно быть: do { System.out.print("Хотите продолжить игру? "); re = ex.next(); if (re.equals("Y")) { Game(); } else if (re.equals("N")) { break; } } while (re.equals("N") || re.equals("Y")); А при вводе "n" поток выходит из цикла лишь потому, что Вы воспользовались досрочным выходом break из цикла.

Ответ 2



package com.company; import java.util.Scanner; public class Main { public static void main(String[] args) { char[][] field = new char[3][3]; Scanner scanner = new Scanner(System.in); while (true) { System.out.print("Крестики, введите номер клетки по горизонтали, начиная с 0: "); int a = scanner.nextInt(); System.out.print("Крестики, по вертикали: "); int b = scanner.nextInt(); field[a][b] = 'x'; for (int i = 0; i<3; i++){ for (int j = 0; j<3; j++){ System.out.print(field[i][j]+" | "); } System.out.println(); } System.out.print("Нолики, введите номер клетки по горизонтали, начиная с 0: "); int c = scanner.nextInt(); System.out.print("Нолики, по вертикали: "); int d = scanner.nextInt(); field[c][d] = '0'; for (int i = 0; i<3; i++){ for (int j = 0; j<3; j++){ System.out.print(field[i][j]+" | "); } System.out.println(); } if (field[0][0] == field[0][1]&& field[0][1] == field[0][2]&&field[0][2]=='x'||field[0][2]=='y'){ System.out.println("Победили "+field[0][2]); break; } else if (field[0][0] == field[1][0]&& field[1][0] == field[2][0]&&field[2][0]=='x'||field[2][0]=='y'){ System.out.println("Победили "+field[0][0]); break; } else if (field[0][1] == field[1][1]&& field[1][1] == field[2][1]&&field[2][1]=='x'||field[2][1]=='y'){ System.out.println("Победили "+field[0][1]); break; } else if (field[2][0] == field[2][1]&& field[2][1] == field[2][2]&&field[2][2]=='x'||field[2][2]=='y'){ System.out.println("Победили "+field[2][0]); break; } else if (field[0][2] == field[1][2]&& field[1][2] == field[2][2]&&field[2][2]=='x'||field[2][2]=='y'){ System.out.println("Победили "+field[0][2]); break; } else if (field[0][0] == field[1][1]&& field[1][1] == field[2][2]&&field[2][2]=='x'||field[2][2]=='y'){ System.out.println("Победили "+field[0][0]); break; } else if (field[1][0] == field[1][1]&& field[1][1] == field[2][2]&&field[2][2]=='x'||field[2][2]=='y'){ System.out.println("Победили "+field[1][0]); break; } else if (field[0][2] == field[1][1]&& field[1][1] == field[2][0]&&field[0][2]=='x'||field[0][2]=='y'){ System.out.println("Победили "+field[0][2]); break; } } } } По сути тот же код, но просто хочу его показать, ибо это первый более-менее серьёзный "проект" :), хотя еще сырой довольно.

Ответ 3



Просто добавте break после: if (re == "Y") { Game();

Комментариев нет:

Отправить комментарий