Форум программистов, компьютерный форум, киберфорум
Наши страницы

Java SE (J2SE)

Войти
Регистрация
Восстановить пароль
 
instrument
0 / 0 / 0
Регистрация: 18.04.2016
Сообщений: 6
#1

Крестики нолики(учимся) - Java SE

18.04.2016, 11:28. Просмотров 557. Ответов 12
Метки нет (Все метки)

Всем привет, изучаю java со всем не много и взбрела в голову идея написать игру крестики нолики)
Но что то не получается, ходить может только один игрок, а второй игрок просто скажем так игнорируется.
Если не сложно укажите на ошибки.
Вот собственно говоря и код
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
public class Game {
    public static void main(String[] args) throws IOException {
        char[][] map = new char[3][3];
        inizilization(map);
        System.out.println("Готовим карту для игры");
        for (int i = 0; i < 9; i++) {
            showMap(map);
            playerX(map);
            player(map);
        }
    }
    //вывод карты
    public static void showMap(char map[][]) {
        for (int i = 0; i < map.length; i++) {
            for (int j = 0; j < map.length; j++) {
                System.out.print(map[i][j]);
            }
            System.out.println();
        }
    }
    //Ход крестиков
    public static void playerX(char map[][]) throws IOException{
        BufferedReader read = new BufferedReader(new InputStreamReader(System.in));
        System.out.println("Ходят Крестики");
        char a = (char) System.in.read();
        for (int i = 0; i < map.length; i++) {
            for (int j = 0; j < map.length; j++) {
                if(map[i][j] == a){
                    map[i][j] = 'X';
                }
            }
        }
    }
    //Ход ноликов
    public static void player(char map[][]) throws IOException{
        System.out.println("Ходят Нолики");
        BufferedReader read = new BufferedReader(new InputStreamReader(System.in));
        char b = (char) System.in.read();
        for (int i = 0; i < map.length; i++) {
            for (int j = 0; j < map.length; j++) {
                if(map[i][j] == b){
                    map[i][j] = 'O';
                }
            }
        }
    }
    //Инициализация массива
    public static void inizilization(char map[][]){
        char a = 49;
        for (int i = 0; i < map.length; i++) {
            for (int j = 0; j < map.length; j++) {
                map[i][j] = a;
                a++;
            }
        }
    }
}
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.04.2016, 11:28
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Крестики нолики(учимся) (Java SE):

Крестики нолики - Java SE
Задание : Необходимо реализовать метод, который проверяет наличие победителя на поле! Этот метод расположен в классе:...

ИИ для крестики-нолики - Java SE
Есть программа на Java, крестики-нолики. Human vs PC. Ход компьютера происходит рандомно. А необходимо сделать хотя бы простенький ИИ,...

игра крестики нолики - Java SE
помогите переделать код : import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public...

Не работают крестики-нолики - Java SE
Все нормально работало, что-то поменял и теперь после 1 хода игра заканчивается. В чем проблема? package javaapplication18; import...

Крестики-нолики (консоль) - Java SE
Пишу игру крестики-нолики 5х5 с консольной реализацией. Столкнулся со следующими проблемами: 1) Почему-то можно победить и с первого...

Крестики нолики ( логика компьютера ) - Java SE
Нужно доработать игру Крестики=Нолики А именно. Что-бы &quot;О&quot; ставил комп, а не юзер. Как реализовать это и логику компа еще не придумал....

12
КОП
405 / 332 / 102
Регистрация: 15.08.2010
Сообщений: 917
18.04.2016, 11:42 #2
Цитата Сообщение от instrument Посмотреть сообщение
BufferedReader read = new BufferedReader(new InputStreamReader(System.in));
для понимания ошибки объясните себе (и нам), зачем эта строка?
0
instrument
0 / 0 / 0
Регистрация: 18.04.2016
Сообщений: 6
18.04.2016, 11:55  [ТС] #3
КОП, Ну без неё я не могу ввести какой либо символ с клавиатуры.
Java
1
2
3
BufferedReader read = new BufferedReader(new InputStreamReader(System.in));
int a = Integer.parseInt(read.readLine()); либо
String strok = read.readLine();
Затрудняюсь ответить, но с помощью этой конструкции я могу вводить символы
0
Den_Ur
8 / 8 / 4
Регистрация: 11.04.2016
Сообщений: 75
18.04.2016, 12:00 #4
Вот тут есть видеоуроки по этой игре
1
instrument
0 / 0 / 0
Регистрация: 18.04.2016
Сообщений: 6
18.04.2016, 12:13  [ТС] #5
КОП, Den_Ur, Видео урок это одно, я считаю, что у меня достаточно знаний даже без видео уроков написать. Хоть я и учу Java не так давно. Было много опыта с C++.
А тут я не могу понять почему у меня первый метод работает с вводом, а второй нет. Он просто его игнорит даже не дает ввести. При дебаже программы, он дает и 2 методу ввести символ, Но он уже его не может сравнить в массиве то есть просто проходит цикл и вырубается. Когда же запускаешь он в обще не дает в писать во второй метод какую либо цифру. Вот я не могу и понять почему....
0
КОП
405 / 332 / 102
Регистрация: 15.08.2010
Сообщений: 917
18.04.2016, 12:21 #6
Цитата Сообщение от instrument Посмотреть сообщение
Ну без неё я не могу ввести какой либо символ с клавиатуры.
если вы ее сотрете в коде, не изменится абсолютно ничего. IDE должна выдавать предупреждение о неиспользованной локальной переменной
0
instrument
0 / 0 / 0
Регистрация: 18.04.2016
Сообщений: 6
18.04.2016, 12:26  [ТС] #7
КОП,
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
public static void main(String[] args) throws IOException {
        char[][] map = new char[3][3];
        inizilization(map);
        System.out.println("Готовим карту для игры");
 
 
 
    }
    //вывод карты
    public static void showMap(char map[][]) {
        for (int i = 0; i < map.length; i++) {
            for (int j = 0; j < map.length; j++) {
                System.out.print(map[i][j]);
            }
            System.out.println();
        }
    }
    //Ход крестиков
    public static void playerX(char map[][]) throws IOException{
        System.out.println("Ходят Крестики");
        char a = (char) System.in.read();
        for (int i = 0; i < map.length; i++) {
            for (int j = 0; j < map.length; j++) {
                if(map[i][j] == a){
                    map[i][j] = 'X';
                }
            }
        }
    }
    //Ход ноликов
    public static void player(char map[][]) throws IOException{
        System.out.println("Ходят Нолики");
        char a = (char) System.in.read();
        for (int i = 0; i < map.length; i++) {
            for (int j = 0; j < map.length; j++) {
                if(map[i][j] == a){
                    map[i][j] = 'O';
                }
            }
        }
    }
    //Инициализация массива
    public static void inizilization(char map[][]){
        char a = 49;
        for (int i = 0; i < map.length; i++) {
            for (int j = 0; j < map.length; j++) {
                map[i][j] = a;
                a++;
            }
        }
    }
Ну вот код, уже не знаю и что делать не хочет он работать со вторым методом. То есть именно со вторым если написать что первые нолик ходит, то он сходит а крестик уже нет.
0
Aliara
13 / 13 / 7
Регистрация: 18.06.2015
Сообщений: 68
18.04.2016, 12:27 #8
Используйте
Java
1
2
Scanner input = new Scanner(System.in);
int choice = input.nextInt();
А относительно вашего ввода, вы, по сути, вводите два символа - цифру и переход на новую строку. В первый раз он читает цифру, а во второй все, что осталось
1
instrument
0 / 0 / 0
Регистрация: 18.04.2016
Сообщений: 6
18.04.2016, 12:36  [ТС] #9
Aliara, Но, как тогда сравнить???
Java
1
if(map[i][j] == a)
В данном случае условие не работает, из - за этого я и пошел вводить char чтоб сравнить...
0
Aliara
13 / 13 / 7
Регистрация: 18.06.2015
Сообщений: 68
18.04.2016, 12:44 #10
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Как вариант
Java
1
2
Scanner input = new Scanner(System.in);
char b= input.nextLine().charAt(0);
0
instrument
0 / 0 / 0
Регистрация: 18.04.2016
Сообщений: 6
18.04.2016, 12:48  [ТС] #11
Aliara, Спасибо пойду почитаю про charAt)
0
Den_Ur
8 / 8 / 4
Регистрация: 11.04.2016
Сообщений: 75
18.04.2016, 13:16 #12
Можно попробовать вынести запрос на ввод в отдельный метод:

Java
1
2
3
4
5
6
7
8
9
public String getQuery(){
    Scanner sc = new Scanner(System.in);
        String s = null;
        do{
            s = sc.nextLine();
        }while(!(s.equals("X") || s.equals("O")));
        
        return s;
    }
0
Aviz__
307 / 203 / 44
Регистрация: 17.02.2014
Сообщений: 1,624
19.04.2016, 11:52 #13
Глянь здесь ИИ для крестики-нолики
Там я приводил свой алгоритм и полную реализацию игры с компом
0
19.04.2016, 11:52
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.04.2016, 11:52
Привет! Вот еще темы с ответами:

Проверка победы в крестики-нолики по диагонали - Java SE
Не могу составить правильные условия победы по диагонали. При наличии 5 одинаковых символов по диагонали, игра все равно продолжается. ...

Крестики-нолики (проверка занятости ячейки) - Java SE
Здравствуйте всем! Есть код игры крестиков-ноликов, но при нажатии на одну и ту же кнопку это расценивается как ход и программа ставит...

Крестики-нолики, поле 5 на 5, победа если 4 в ряд - Java SE
Вечер добрый! Подскажите, как изменить логику проверки победы, чтобы она срабатывала при 4 фишках по горизонтали, вертикали или диагонали,...

Компоненты для поля крестики нолики, распологаются неправильно - Java SE
Кручу верчу, так и сяк пробовал, но чета поле создать для крестиков ноликов не могу. Хочется именно в for все провернуть, а не указывать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru