Форум программистов, компьютерный форум, киберфорум
Java
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 19.07.2013
Сообщений: 121

TicTacToe

14.08.2013, 11:31. Показов 1298. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет всем. Есть проблема с Крестиками и Ноликами. Дело в том, что за цикл выводятся кнопки, но при нажатии на одну из кнопок все остальные тоже принимают значение. Такого как я понимаю быть не должно))
Вот скрипт:
P.S. main сlass есть, но в отдельном фауле
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
import java.awt.Container;
import java.awt.GridLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
 
import javax.swing.JButton;
import javax.swing.JFrame;
 
 
class MyFrame extends JFrame{
    
    JButton b[] = new JButton[9];
    String a1,a2,a3,b1,b2,b3,c1,c2,c3;
    String s[] = {a1,a2,a3,b1,b2,b3,c1,c2,c3};
    String znak;
    
    int player = 0;
    
    public MyFrame(){
    setTitle("TicTacToe");
    setSize(500,500);
    Container c = getContentPane();
    c.setLayout(new GridLayout(3,3));
    
    for(int i=0;i<b.length;i++){
        b[i] = new JButton(s[i]);
         b[i].addMouseListener(new MouseAdapter(){
             public void mouseClicked(MouseEvent e){
                for(int j = 0;j<b.length;j++){
                     b[j].setText(s[j]);
                    if(player == 0) {znak ="x"; b[j].setText(znak);}
                    if(player == 1) {znak = "o"; b[j].setText(znak);} 
                }
                 
                player ++;                       
                if(player > 1) player = 0;      
             }
         });
         c.add(b[i]);
        }
 }
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.08.2013, 11:31
Ответы с готовыми решениями:

Ai TicTacToe
Помогите решить задачу есть исходные данные в виде интерфейса package re.re; /** * Created by user on 04.08.2016. */ public...

игра TicTacToe
Привет, всем! Написал игру TicTacToe, по книге Якова Файна, но есть одна проблема. Игра запускается, играет, если первая игра выиграна или...

TicTacToe ООП
Сделал TicTacToe на ООП. Сейчас один класс. Подскажите как лучше модернизировать? Какие методы и классы добавить, какие плохо реализованы,...

10
 Аватар для Lancaster
63 / 63 / 12
Регистрация: 29.08.2012
Сообщений: 152
14.08.2013, 12:09
Судя по вашему коду - должно А вообще это происходит по тому, что при вызове листенера, вы циклом проходитесь по вашему массиву кнопок и каждой кнопке присваиваете текст знака. А должны, присваивать только той кнопке, на которой листенер был вызван.

Измените немного содержимое метода mouseClicked

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
                @Override
                public void mouseClicked(MouseEvent e) {
 
                    JButton currentBtn = (JButton) e.getSource();
 
                    if (!currentBtn.getText().isEmpty()) {
                        return;
                    }
 
                    if (player == 0) {
                        znak = "x";
                        currentBtn.setText(znak);
                    }
                    if (player == 1) {
                        znak = "o";
                        currentBtn.setText(znak);
                    }
 
                    player++;
                    if (player > 1) {
                        player = 0;
                    }
                }
1
1 / 1 / 0
Регистрация: 19.07.2013
Сообщений: 121
14.08.2013, 12:28  [ТС]
О БОЖЕ Чувак СПАСИБО тебе огромное!!!!!
0
11 / 11 / 0
Регистрация: 19.03.2010
Сообщений: 101
14.08.2013, 13:03
Только что собирался ответить)))
0
мну довольно <(-__-)l
 Аватар для gGrn-7DA
217 / 206 / 15
Регистрация: 17.01.2010
Сообщений: 2,462
14.08.2013, 21:12
Цитата Сообщение от Lancaster Посмотреть сообщение
Java
1
2
3
4
player++;
if (player > 1) {
    player = 0;
}
KISS и все такое, но я делаю так :
Java
1
player = 1 - player;

Не по теме:

странно, но я умудрялся ошибиться в этих 4 строках:)

0
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
14.08.2013, 21:56
ребята пользуйтесь синтаксисом наконец )

Java
1
player = player > 0 ? 0 : 1;
0
 Аватар для verylazy
462 / 462 / 71
Регистрация: 26.02.2013
Сообщений: 1,263
14.08.2013, 22:38
Цитата Сообщение от mutagen Посмотреть сообщение
ребята пользуйтесь синтаксисом наконец )

Java
1
player = player > 0 ? 0 : 1;
я конечно извиняюсь, но сам пользуйся таким синтаксисом
вероятно жителям Марса он более понятен, чем землянам, но точно не мне, надеюсь я не один такой

или это был сарказм? тогда я слоу
0
ɐwʎ ɔ vǝmоɔ dиw ɐʚонɔ
 Аватар для tankomaz
443 / 442 / 100
Регистрация: 14.10.2012
Сообщений: 1,146
Записей в блоге: 9
14.08.2013, 23:02
Цитата Сообщение от verylazy Посмотреть сообщение
я конечно извиняюсь, но сам пользуйся таким синтаксисом
вероятно жителям Марса он более понятен, чем землянам, но точно не мне, надеюсь я не один такой

или это был сарказм? тогда я слоу
Вы, земляне, совсем издеваетесь?
player = player > 0 ? 0 : 1;
присвоить переменной player значение 0 если player>0 либо 1, во всех других случаях

я марсианин?
0
23 / 23 / 7
Регистрация: 21.04.2013
Сообщений: 52
15.08.2013, 09:40
почти можно сдавать в продакшн
Кликните здесь для просмотра всего текста

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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
import java.awt.Container;
import java.awt.GridLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
 
import javax.swing.JButton;
import javax.swing.JFrame;
 
public class MyClass {
 
    public static void main(String[] args) {
        Player firstPlayer = new Player("Mike", "O");
        Player secondPlayer = new Player("Ваня", "X");
        Listener gameplay = new Listener(firstPlayer, secondPlayer);
        new MyFrame(gameplay);
    }
}
 
class MyFrame extends JFrame {
    public MyFrame(Listener gameplay) {
        setTitle("TicTacToe");
        setSize(500, 500);
        Container c = getContentPane();
        c.setLayout(new GridLayout(3, 3));
 
        for (int i = 0; i < 9; i++) {
            JButton b = new JButton();
            b.addMouseListener(gameplay);
            c.add(b);
        }
 
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
    }
}
 
class Listener extends MouseAdapter {
    private int actions = 0;
    private boolean isFirstPlayer = true;
    Player firstPlayer;
    Player secondPlayer;
 
    public Listener(Player firstPlayer, Player secondPlayer) {
        this.firstPlayer = firstPlayer;
        this.secondPlayer = secondPlayer;
    }
 
    public void mouseClicked(MouseEvent e) {
        JButton pressedBtn = (JButton) e.getSource();
 
        actions++;
        if (actions == 9) {
            System.out.println("* gg wp go next! *");
        } else if (actions > 9) {
            return;
        }
 
        if (!pressedBtn.isEnabled()) {
            System.out.println("Invalid turn");
            return;
        } else {
            pressedBtn.setEnabled(false);
        }
 
        if (isFirstPlayer) {
            System.out.println("turn of " + firstPlayer.name);
            pressedBtn.setText(firstPlayer.znak);
        } else {
            System.out.println(secondPlayer.name + " make turn");
            pressedBtn.setText(secondPlayer.znak);
        }
 
        isFirstPlayer = !isFirstPlayer;
    }
}
 
class Player {
    String znak;
    String name;
 
    public Player(String name, String znak) {
        this.name = name;
        this.znak = znak;
    }
}
0
 Аватар для Gibby
154 / 154 / 10
Регистрация: 16.10.2012
Сообщений: 354
Записей в блоге: 1
15.08.2013, 10:07
Цитата Сообщение от verylazy Посмотреть сообщение
надеюсь я не один такой
Ты один такой. Тернарный оператор рулит.
0
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
15.08.2013, 10:51
Цитата Сообщение от verylazy Посмотреть сообщение
я конечно извиняюсь, но сам пользуйся таким синтаксисом
Это значит что вы пытаетесь программировать на языке синтаксиса которого вы полностью не знаете.
Если вам не нравится - можно не пользоваться, но если вам на сапорт попадёт чужой код с тернарками или чем посложнее, вот тогда вы себя точно почувствуете марсианином.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.08.2013, 10:51
Помогаю со студенческими работами здесь

Счетчик побед игроков в TicTacToe
Всем доброго времени суток! Недавно я уже обращался на форум за помощью,к счастью проблему удалось решить, но теперь возник еще один вопрос...

TicTacToe, не выводится окно с результатами игры
Добрый день, уважаемые форумчане. Делал по образцу игру крестики-нолики на python через Kivy, все отлично, открывается окно, игра...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru