Witam, pozwoliłem sobie założyć temat, ale jestem początkującym programistą i próbuję poprawić program(który zapożyczyłem z bloga) pod kątem tego, że w czasie gry można nadpisać postawiony symbol tzn. na polu postawiony jest X i klikam w to pole i zmienia się na O. Czy mógłby ktoś pomóc i powiedzieć co zmienić, ponieważ próbowałem na kilka sposobów i nie działa, a jestem ciekaw rozwiązania.
Rozumiem, że odbywa się to gdzieś w metodzie:
public void actionPerformed(ActionEvent e)
dziękuję za pomoc :) !
package kolkoikrzyzyk;
import java.awt.Dimension;
import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class KolkoIKrzyzyk extends JFrame{
public static void main(String[] args) {
KolkoIKrzyzyk kik = new KolkoIKrzyzyk();
kik.setMinimumSize(new Dimension(400, 400));
kik.setDefaultCloseOperation(EXIT_ON_CLOSE);
kik.setResizable(false);
kik.setTitle("Gra w Kółko i Krzyzyk");
JPanel plansza = new JPanel();
plansza.setLayout(new GridLayout(3,3));
Element a[][]= new Element[3][3];
int wyniki[][]= new int[3][3];
for(int i=0;i<3;i++)
{
for(int j=0;j<3;j++)
{
a[i][j]= new Element();
wyniki[i][j]=0;
}
}
for(int i=0;i<3;i++)
{
for(int j=0;j<3;j++)
{
a[i][j].addActionListener(new ElementsListener(a, wyniki, plansza));
plansza.add(a[i][j]);
}
}
kik.add(plansza);
kik.setVisible(true);
}
}
public class Element extends JButton{
int stan=0;
public Element() {
}
@Override
public void paint(Graphics g) {
super.paint(g);
if(stan == 1)
{
g.drawLine(0, 0, 160, 150);
g.drawLine(130, 0, 0, 120);
}
else if(stan==2)
{
g.drawOval(10, 10, 110, 110);
}
}
}
package kolkoikrzyzyk;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
public class ElementsListener implements ActionListener{
private Element[][] elemenst;
private int[][] ints;
JPanel plansza;
public ElementsListener(Element[][] el, int[][] w, JPanel p) {
elemenst=el;
ints=w;
plansza=p;
}
private boolean sprawdz(int a, boolean t)
{
if(a==1){
//===== poziom
if(ints[0][0]==1 && ints[0][1]==1 && ints[0][2]==1) {
if(t) JOptionPane.showMessageDialog(null, "Wygrales!!");
return true;
}
if(ints[1][0]==1 && ints[1][1]==1 && ints[1][2]==1) {
if(t) JOptionPane.showMessageDialog(null, "Wygrales!!");
return true;
}
if(ints[2][0]==1 && ints[2][1]==1 && ints[2][2]==1) {
if(t) JOptionPane.showMessageDialog(null, "Wygrales!!");
return true;
}
}
if(a==2){
//==== pion dla usera
if(ints[0][0]==1 && ints[1][0]==1 && ints[2][0]==1) {
if(t) JOptionPane.showMessageDialog(null, "Wygrales!!");
return true;
}
if(ints[0][1]==1 && ints[1][1]==1 && ints[2][1]==1) {
if(t) JOptionPane.showMessageDialog(null, "Wygrales!!");
return true;
}
if(ints[0][2]==1 && ints[1][2]==1 && ints[2][2]==1) {
if(t) JOptionPane.showMessageDialog(null, "Wygrales!!");
return true;
}
if(ints[0][0]==1 && ints[1][1]==1 && ints[2][2]==1) {
if(t) JOptionPane.showMessageDialog(null, "Wygrales!!");
return true;
}
if(ints[0][2]==1 && ints[1][1]==1 && ints[2][0]==1) {
if(t) JOptionPane.showMessageDialog(null, "Wygrales!!");
return true;
}
if(ints[0][2]==2 && ints[1][1]==2 && ints[2][0]==2) {
if(t) JOptionPane.showMessageDialog(null, "Wygral komputer!!");
return true;
}
if(ints[0][0]==2 && ints[0][1]==2 && ints[0][2]==2) {
if(t) JOptionPane.showMessageDialog(null, "Wygral komputer!!");
return true;
}
if(ints[1][0]==2 && ints[1][1]==2 && ints[1][2]==2) {
if(t) JOptionPane.showMessageDialog(null, "Wygral komputer!!");
return true;
}
if(ints[2][0]==2 && ints[2][1]==2 && ints[2][2]==2) {
if(t) JOptionPane.showMessageDialog(null, "Wygral komputer!!");
return true;
}
//========== w dol to pion
if(ints[0][0]==2 && ints[1][0]==2 && ints[2][0]==2) {
if(t) JOptionPane.showMessageDialog(null, "Wygral komputer!!");
return true;
}
if(ints[0][1]==2 && ints[1][1]==2 && ints[2][1]==2) {
if(t) JOptionPane.showMessageDialog(null, "Wygral komputer!!");
return true;
}
if(ints[0][2]==2 && ints[1][2]==2 && ints[2][2]==2) {
if(t) JOptionPane.showMessageDialog(null, "Wygral komputer!!");
return true;
}
if(ints[0][0]==2 && ints[1][1]==2 && ints[2][2]==2) {
if(t) JOptionPane.showMessageDialog(null, "Wygral komputer!!");
return true;
}
}
return false;
}
@Override
public void actionPerformed(ActionEvent e) {
Element source = (Element) e.getSource();
int x = 0,y = 0;
boolean koniec = false;
for(int i=0;i<3;i++)
{
for(int j=0;j<3;j++)
{
if(elemenst[i][j]== source)//
{
x=i;
y=j;
break;
}
}
}
elemenst[x][y].stan=1;
ints[x][y]=1;
koniec = sprawdz(1, true);
if(koniec)
{
for(int i=0;i<3;i++)
{
for(int j=0;j<3;j++)
{
elemenst[i][j].stan=0;
ints[i][j]=0;
}
}
plansza.repaint();
}
Random rn = new Random();
int rn1=0,rn2=0;
int time=0;
if(koniec == false) {
while(true)
{
time++;
rn1=rn.nextInt(3);
rn2=rn.nextInt(3);
if(time>70)
{
koniec=true;
break;
}
if(elemenst[rn1][rn2].stan == 0) {
elemenst[rn1][rn2].stan=2;
ints[rn1][rn2]=2;
break;
}
else {
continue;
}
}
}
plansza.repaint();
koniec=sprawdz(2, true);
boolean end=true;
for(int i=0;i<3;i++)
{
for(int j=0;j<3;j++)
{
if(ints[i][j]==0) end = false;
}
}
if(sprawdz(1, false)==false && sprawdz(2, false)==false && end == true) {
JOptionPane.showMessageDialog(null, "Remis!");
koniec=true;
}
if(koniec)
{
for(int i=0;i<3;i++)
{
for(int j=0;j<3;j++)
{
elemenst[i][j].stan=0;
ints[i][j]=0;
}
}
plansza.repaint();
koniec=false;
}
}}