Witam, chce zrobic gre Tic Tac Toe Gracz vs. Computer. Probowalem z Math.random ale nic nie wyszlo.Wiec mam Pytanie jak to zrobic ?

- Rejestracja:prawie 9 lat
- Ostatnio:prawie 9 lat
- Postów:4
public class TTTCOMP implements ActionListener {
// JButton b1 = new JButton("");
// JButton b2 = new JButton("");
// JButton b3 = new JButton("");
// JButton b4 = new JButton("");
// JButton b5 = new JButton("");
// JButton b6 = new JButton("");
// JButton b7 = new JButton("");
// JButton b8 = new JButton("");
// JButton b9 = new JButton("");
JButton b[] = new JButton[9];
JFrame frame;
int count = 0;
String s = "";
int a;
boolean win = false;
public TTTCOMP() {
frame = new JFrame();
frame.setLayout(new GridLayout(3, 3));
frame.setSize(300, 300);
frame.setLocationRelativeTo(null);
// frame.add(b1);
// frame.add(b2);
// frame.add(b3);
// frame.add(b4);
// frame.add(b5);
// frame.add(b6);
// frame.add(b7);
// frame.add(b8);
// frame.add(b9);
for (int i = 0; i < 9; i++) {
b[i] = new JButton();
b[i].addActionListener(this);
frame.add(b[i]);
}
// b1.addActionListener(this);
// b2.addActionListener(this);
// b3.addActionListener(this);
// b4.addActionListener(this);
// b5.addActionListener(this);
// b6.addActionListener(this);
// b7.addActionListener(this);
// b8.addActionListener(this);
// b9.addActionListener(this);
frame.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
count++;
if (count == 1 || count == 3 || count == 5 || count == 7 || count == 9) {
s = "X";
} else {
if (count == 2 || count == 4 || count == 6 || count == 8 || count == 10) {
}
}
if (e.getSource() == b[0]) {
b[0].setText(s);
a = (int) ((Math.random() * 10));
b[a].setText("O");
b[0].setEnabled(false);
b[a].setEnabled(false);
} else if (e.getSource() == b[1]) {
b[1].setText(s);
a = (int) ((Math.random() * 10) + 1);
if (a == 0 || a == 2) {
a = (int) ((Math.random() * 10) + 1);
}
b[a].setText("O");
b[1].setEnabled(false);
b[a].setEnabled(false);
} else if (e.getSource() == b[2]) {
b[2].setText(s);
b[2].setEnabled(false);
// b4.setText("O");
// b4.setEnabled(false);
} else if (e.getSource() == b[3]) {
b[3].setText(s);
b[3].setEnabled(false);
// b3.setText("O");
// b3.setEnabled(false);
} else if (e.getSource() == b[4]) {
b[4].setText(s);
b[4].setEnabled(false);
// b6.setText("O");
// b6.setEnabled(false);
} else if (e.getSource() == b[5]) {
b[5].setText(s);
b[5].setEnabled(false);
// b5.setText("O");
// b5.setEnabled(false);
} else if (e.getSource() == b[6]) {
b[6].setText(s);
b[6].setEnabled(false);
// b8.setText("O");
// b8.setEnabled(false);
} else if (e.getSource() == b[7]) {
b[7].setText(s);
b[7].setEnabled(false);
// b7.setText("O");
// b7.setEnabled(false);
} else if (e.getSource() == b[8]) {
b[8].setText(s);
b[8].setEnabled(false);
// b8.setText("O");
// b8.setEnabled(false);
}
if (b[0].getText() == b[1].getText() && b[1].getText() == b[2].getText() && b[0].getText() != "") {
win = true;
} else if (b[3].getText() == b[4].getText() && b[4].getText() == b[5].getText() && b[3].getText() != "") {
win = true;
} else if (b[6].getText() == b[7].getText() && b[7].getText() == b[8].getText() && b[6].getText() != "") {
win = true;
} else if (b[0].getText() == b[3].getText() && b[3].getText() == b[6].getText() && b[0].getText() != "") {
win = true;
} else if (b[1].getText() == b[4].getText() && b[4].getText() == b[7].getText() && b[1].getText() != "") {
win = true;
} else if (b[2].getText() == b[5].getText() && b[5].getText() == b[8].getText() && b[2].getText() != "") {
win = true;
} else if (b[0].getText() == b[4].getText() && b[4].getText() == b[8].getText() && b[0].getText() != "") {
win = true;
} else if (b[2].getText() == b[4].getText() && b[4].getText() == b[6].getText() && b[2].getText() != "") {
win = true;
} else {
win = false;
}
if (win == true) {
if (s.equals("X")) {
JFrame frame1 = new JFrame();
JLabel label1 = new JLabel(new ImageIcon(getClass().getResource("/Images/winx.png")));
frame1.setVisible(true);
frame1.setSize(230, 290);
frame1.setLocationRelativeTo(null);
frame1.setResizable(false);
frame1.add(label1);
} else {
if (s.equals("O")) {
JFrame frame1 = new JFrame();
JLabel label1 = new JLabel(new ImageIcon(getClass().getResource("/Images/wino.png")));
frame1.setVisible(true);
frame1.setSize(230, 290);
frame1.setLocationRelativeTo(null);
frame1.setResizable(false);
frame1.add(label1);
}
}
} else if (count == 5 && win == false) {
JFrame frame1 = new JFrame();
JLabel label1 = new JLabel(new ImageIcon(getClass().getResource("/Images/un.jpg")));
frame1.setVisible(true);
frame1.setSize(230, 290);
frame1.setLocationRelativeTo(null);
frame1.setResizable(false);
frame1.add(label1);
}
}
public static void main(String[] args) {
new TTTCOMP();
}
}






- Rejestracja:ponad 10 lat
- Ostatnio:7 miesięcy
- Postów:597
Weź rozplanuj sobie jakoś aplikację - podziel wszystko na klasy, metody, ponieważ nie trudno się pogubić w tym. Każda klasa z małą odpowiedzialnością. Np. po każdym ruchu uruchamiaj metodę sprawdzającą czy wynik został zrealizowany w jakiejś klasie etc. Wracając do algorytmu grania z komputerem. Możesz do tablicy jednowymiarowej wprowadzać pola, które są wolne i tam losować indeks tej tablicy to będzie ruch komputera. Takie losowa gra komputera. Możesz skorzystać z prostego algorytmu komputera - http://www.algorytm.org/praktyka/kolko-krzyzyk/kolko-krzyzyk-j.html . Możesz również wykorzystać nieco bardziej rozbudowane algorytmy jak min-max jak to kolega wyżej ujął czy jego rozwinięcie alfa-beta - jednakże są to algorytmy trochę bardziej skomplikowane i odnoszą się do gier dwuosobowych.

- Rejestracja:prawie 17 lat
- Ostatnio:prawie 5 lat
Można też wprowadzić szczątkową "inteligencję" komputera. Jeśli komputer ma ruch wygrywający, to go wykonuje, jeśli nie ma ruchu wygrywającego ale człowiek ma ruch wygrywający, to komputer blokuje człowieka. Dopiero w trzeciej kolejności losowane jest posunięcie.
https://pl.wikipedia.org/wiki/Algorytm_min-max
Algorytm min-max
http://neverstopbuilding.com/minimax
Tic Tac Toe Understanding The MiniMax Algorithm
http://eduinf.waw.pl/inf/utils/002_roz/p012.php
gra kolko i krzyzyk z uzyciem algortymu minimax (komentarze po polsku)