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

Крестики-Нолики

26.07.2013, 00:53. Показов 4044. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет. Столкнулся с проблемой в скрипте. Не могу правильно присвоить каждой кнопки значение "x" или "o". Как исправить?

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
import javax.swing.*;
 
import java.awt.*;
import java.awt.event.*;
 
public class my4 {
 
    public static void main(String[] args) {
        MyFrame frame = new MyFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}
 
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].setText(s[i]);
         b[i].addMouseListener(new MouseAdapter(){
             public void mouseClicked(MouseEvent e){
                
                player ++;                       //
                if(player > 1) player = 0;       //Определение игрока
                  System.out.println(player);    //
                
                if(player == 0) {znak ="x"; b[i].setText(znak);}  //  Здесь ошибка
                if(player == 1) {znak = "o"; b[i].setText(znak);}     //
                System.out.println(znak);
             }
         });
         c.add(b[i]);
        }
 }
}
Знаю что нельзя так с внутреней переменной "i" поступать, но подругому не знаю как. Прошу совета. Спасибо
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.07.2013, 00:53
Ответы с готовыми решениями:

Создание web-апплета Крестики-нолики
Здравствуйте, всем! Создал тему в общей ветке, так как не знаю к какому разделу ее отнести. Я только учусь программированию на Java. Читаю...

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

Крестики-нолики
нужно переделать данный проект для поля 5х5, победа 3 в ряд

3
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
26.07.2013, 02:53
вы в новом анонимном классе орудуете переменными
Java
1
b[i]
а откуда ему знать что это за переменные и де они взялись, он ему могут быть видны только будучи final или будучи переданые ему как параметр например в конструкторе, но в таком случе не получится делать анонимным, надо будет экстендить его своим MouseAdapter-ом

ну и вообще, зачем вам так много листенеров на каждой кнопке, нельзя чтоль раздать всем 1 и тот же, операции то выполняемые одни и те же?
0
1 / 1 / 0
Регистрация: 19.07.2013
Сообщений: 121
26.07.2013, 15:24  [ТС]
а каким образом можно передать значение в слушатель?
0
23 / 23 / 7
Регистрация: 21.04.2013
Сообщений: 52
13.08.2013, 15:36
привет. если у нас всегда размер поля 3х3 и нет начальных значений полей, то можно и избавиться от массивов.
вот улучшенный вариант - основан на том, что мы всегда знаем, какая именно кнопка была нажата через e.getSource().

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
package def;
 
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 my4 {
 
    public static void main(String[] args) {
        Player firstPlayer = new Player("Mike", "O");
        Player secondPlayer = new Player("Ваня", "X");
        Listener gameplay = new Listener(firstPlayer, secondPlayer);
        MyFrame frame = new MyFrame(gameplay);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}
 
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);
        }
    }
}
 
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();
        if (actions > 8) {
            return;
        }
        if (!pressedBtn.isEnabled()) {
            System.out.println("Invalid turn");
            return;
        }
        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);
        }
        pressedBtn.setEnabled(false);
        if (++actions > 8)
            System.out.println("* gg wp go next! *");
        isFirstPlayer = !isFirstPlayer;
    }
}
 
class Player {
    String znak;
    String name;
 
    public Player(String name, String znak) {
        this.name = name;
        this.znak = znak;
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.08.2013, 15:36
Помогаю со студенческими работами здесь

Крестики нолики
Из ряда: &quot;Старые песни о главном&quot;. Посмотрел по поиску темы, не нашел что надо. Может кто-то идею подкинет, как реализовывать. Я не могу...

Крестики-нолики
Здравствуйте, уважаемые форумчане! Нужна помощь в реализации всем известной игры крестики-нолики. Как я ее себе представляю: создать панель...

Крестики-нолики
Помогите доделать программу: 1.Добавьте на верхнюю панель класса TicTacToe две надписи для подсчета выигрышей и проигрышей. Для этого...

Крестики-нолики
помогите пожалуйста подправить программу крестики нолики чтоб она выполняла следущее: 1. Реализация серверной и клиентской части 2....

Крестики нолики
подскажите как с точки зрения свинга лучше делать? мне нужно задавать имя и порт и адрес я создам панель, и постоянно буду делать...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
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 и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru