Ошибка в коде - Java (241047)
Формулировка задачи:
Возникла ошибка при разбиение на два классы, помогите пожалуйста решить эту проблему.
import javax.swing.*; import javax.swing.border.BevelBorder; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; public class Pole extends JFrame implements ActionListener { private static final long serialVersionUID = 1L; public int ButtonsInGame, vin; final int NULL = 0, X = 1, O = (-1); public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { Pole thisClass = new Pole(); thisClass.setVisible(true); } }); } public Pole() { initialize(); } public void initialize() { this.setSize(240, 290); this.setContentPane(getJContentPane()); this.setTitle("Tic-tac-toe"); this.New_Game(); } public JPanel jContentPane = null; public JLabel StatusGame = null; public JPanel getJContentPane() { if (jContentPane == null) { StatusGame = new JLabel(); StatusGame.setHorizontalAlignment(SwingConstants.CENTER); StatusGame.setBackground(Color.black); StatusGame.setDisplayedMnemonic(KeyEvent.VK_UNDEFINED); jContentPane = new JPanel(); jContentPane.setLayout(new BorderLayout()); jContentPane.setBackground(new Color(0, 204, 0)); jContentPane.add(getJPanel(), BorderLayout.NORTH); jContentPane.add(getJPanel1(), BorderLayout.CENTER); jContentPane.add(StatusGame, BorderLayout.SOUTH); } return jContentPane; } public JPanel jPanel = null; public JPanel getJPanel() { if (jPanel == null) { jPanel = new JPanel(); jPanel.setLayout(new FlowLayout()); jPanel.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED)); jPanel.setBackground(new Color(32, 32, 32)); jPanel.add(getNew(), null); } return jPanel; } public JButton New = null; public JButton getNew() { if (New == null) { New = new JButton("Start new game"); New.setBackground(new Color(0, 204, 0)); } return New; } public JButton[] field = null; public JPanel jPanel1 = null; public JPanel getJPanel1() { if (jPanel1 == null) { jPanel1 = new JPanel(new GridLayout(3,3,1,1)); jPanel1.setBackground(new Color(0, 0, 0)); field = new JButton[9]; for(int i=0;i<field.length;i++) { field[i] = new JButton(); setState(i); field[i].setForeground(new Color(0,204,0)); jPanel1.add(field[i]); field[i].setBackground(new Color(0,102,0)); } } return jPanel1; } public void setState(int index, int state) { field[index].setText(toStrTipe(state)); field[index].setEnabled(!(state==1||state==-1)); ButtonsInGame--; } public void actionPerformed(ActionEvent e) { if(e.getSource().equals(New))New_Game(); for(int i=0 ; i<9 ; i++) { if(e.getSource().equals(field[i])) { setState(i, O); set_mass(); vin = lock_winner(); if(vin!=0)StatusGame.setText(who_win(vin)); else { setState(tactica(), X); set_mass(); int ret = lock_winner() ; if(ret>0)StatusGame.setText(who_win(ret)); } } } } }
import java.util.Random; import java.util.Vector; public class Game extends Pole { private static final long serialVersionUID = 1L; public int k[]= new int [9]; public int tactica() { if(ButtonsInGame==9)return 4; if(ButtonsInGame==8) while(true) { switch(getRand(3)) { case 0: if(k[0]==0)return 0; case 1: if(k[2]==0)return 2; case 2: if(k[6]==0)return 6; case 3: if(k[8]==0)return 8; continue; } } if(ButtonsInGame<8) { int res = empty_field(X); if(res!=-1)return res; res = empty_field(O); if(res!=-1)return res; } return rand_field(); } public void New_Game() { for(int i=0;i<9;i++) { setState(i, NULL); field[i].setContentAreaFilled(false); } ButtonsInGame = 9; StatusGame.setText(who_win(3)); int in = tactica(); if(in!=-1)setState(in, X); } public int lock_winner() { if(k[0]+k[1]+k[2]==3||k[0]+k[1]+k[2]==-3) { line(0,1,2); return k[0]; } if(k[0]+k[3]+k[6]==3||k[0]+k[3]+k[6]==-3) { line(0,3,6); return k[0]; } if(k[6]+k[7]+k[8]==3||k[6]+k[7]+k[8]==-3) { line(6,7,8); return k[8]; } if(k[2]+k[5]+k[8]==3||k[2]+k[5]+k[8]==-3) { line(2,5,8); return k[8]; } if(k[0]+k[4]+k[8]==3||k[0]+k[4]+k[8]==-3) { line(0,4,8); return k[4]; } if(k[2]+k[4]+k[6]==3||k[2]+k[4]+k[6]==-3) { line(2,4,6); return k[4]; } if(k[1]+k[4]+k[7]==3||k[1]+k[4]+k[7]==-3) { line(1,4,7); return k[4]; } if(k[3]+k[4]+k[5]==3||k[3]+k[4]+k[5]==-3) { line(3,4,5); return k[4]; } if(ButtonsInGame==0)return 2; return NULL; } public String who_win(int stat) { if(stat==X)return "Win computer" ; if(stat==O)return "You win"; if(stat==2)return "Tandoff"; return null; } public String toStrTipe(int state) { if(state==1)return "X"; if(state==-1)return "O"; return ""; } public void line(int a, int b, int c) { field[a].setContentAreaFilled(true); field[b].setContentAreaFilled(true); field[c].setContentAreaFilled(true); } public int empty_field(int player) { int n = (player==O)?-2:2; if(k[0]+k[1]+k[2]==n) { if(k[0]==0) return 0; if(k[1]==0) return 1; if(k[2]==0) return 2; } else if(k[3]+k[4]+k[5]==n) { if(k[3]==0) return 3; if(k[4]==0) return 4; if(k[5]==0) return 5; } else if(k[6]+k[7]+k[8]==n) { if(k[6]==0) return 6; if(k[7]==0) return 7; if(k[8]==0) return 8; } else if(k[0]+k[3]+k[6]==n) { if(k[0]==0) return 0; if(k[3]==0) return 3; if(k[6]==0) return 6; } else if(k[1]+k[4]+k[7]==n) { if(k[1]==0) return 1; if(k[4]==0) return 4; if(k[7]==0) return 7; } else if(k[2]+k[5]+k[8]==n) { if(k[2]==0) return 2; if(k[5]==0) return 5; if(k[8]==0) return 8; } else if(k[0]+k[4]+k[8]==n) { if(k[0]==0) return 0; if(k[4]==0) return 4; if(k[8]==0) return 8; } else if(k[6]+k[4]+k[2]==n) { if(k[6]==0) return 6; if(k[4]==0) return 4; if(k[2]==0) return 2; } return -1; } public void set_mass() { for(int ii=0;ii<9;ii++) { if(field[ii].getText().equals("X")) k[ii]=X; else if(field[ii].getText().equals("O")) k[ii]=O; else k[ii]=NULL; } } public Random rand = new Random(); public int getRand(int lim){ if(lim<1)return -1; return Math.abs(rand.nextInt(lim)); } public int rand_field(){ Vector <Integer> v = new Vector<Integer>(); for(int i=0;i<9;i++) if(k[i]==0)v.add(i); return v.get(getRand(v.size())); } }
Решение задачи: «Ошибка в коде»
textual
Листинг программы
setState(i);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д