2013-04-27 3 views
0

Я пытаюсь запрограммировать игру с линкором и использовать оператор if для вызова класса BatShip3, который будет генерировать два JFrames с интерактивными сетками для размещения линкоров. Я попытался реализовать свой код два раза в методе, создавая новые переменные для каждого из них, но я не могу понять, что происходит не так. Когда я выбираю игровой режим, он создает оба окна, давая им черный фон, но второй не имеет на нем сетки. Любые указатели?Два JFrames с сетками в одном классе

package batship2; 

import java.awt.Color; 
import java.awt.Container; 
import java.awt.GridLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 

/** 
* 
* @author William 
*/ 
public class BatShip3 extends JFrame implements ActionListener{ 


    public JButton buttons [][] = new JButton [100][100]; 
    public JPanel panel; 
    public JButton clicks [][] = new JButton [100][100]; 
    public JPanel canvas; 
    Container contentArea = getContentPane(); 
    Container contentArea2 = getContentPane(); 

    public void BatShip3(){ 
      JFrame window1 = new JFrame("Window 1");{ 
        setSize (800, 600); 
        setVisible (true); 
        setBackground (Color.black); 
        setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); 

        panel = new JPanel(); 
        GridLayout experimentLayout = new GridLayout(100, 100); 
        panel.setLayout (experimentLayout); 
        panel.setBackground(Color.black); 

        for(int rows = 0; rows <100 ; rows++){ 
         for(int cols = 0; cols < 100 ; cols++){ 
          buttons [rows][cols] = new JButton(); 
          buttons [rows][cols].setBackground(Color.blue); 
          buttons [rows][cols].addActionListener(this); 
          panel.add(buttons [rows][cols]); 
         }  
        } 
        contentArea.add(panel); 
        window1.setContentPane(contentArea); 
    }   


     JFrame window2 = new JFrame("Window 2");{ 
      window2.setSize (800, 600); 
      window2.setVisible (true); 
      window2.setBackground (Color.black); 
      window2.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); 

      canvas = new JPanel(); 
      GridLayout experimentLayout2 = new GridLayout(100, 100); 
      canvas.setLayout (experimentLayout2); 
      canvas.setBackground(Color.black); 

      for(int rows1 = 0; rows1 <100 ; rows1++){ 
       for(int cols1 = 0; cols1 < 100 ; cols1++){ 
        clicks [rows1][cols1] = new JButton(); 
        clicks [rows1][cols1].setBackground(Color.blue); 
        clicks [rows1][cols1].addActionListener(this); 
        canvas.add(clicks [rows1][cols1]); 
       }  
      } 
       contentArea2.add(canvas); 
       window2.setContentPane(contentArea2); 
       } 
       } 
    public void actionPerformed(ActionEvent ev){ 

     for(int rows = 0; rows < 100 ; rows++){ 
      for(int cols = 0 ; cols < 100 ; cols++){ 
       if(ev.getSource() == buttons [rows][cols]){    
         buttons[rows][cols].setBackground(Color.green); 
       } 
      } 
     } 
     for(int rows1 = 0; rows1 < 100 ; rows1++){ 
      for(int cols1 = 0 ; cols1 < 100 ; cols1++){ 
       if(ev.getSource() == clicks [rows1][cols1]){ 

        clicks[rows1][cols1].setBackground(Color.green); 
       } 
      } 
     } 
}} 
+0

Я не могу прочитать отформатированный код. Я уверен, что вы не пишете код, который остается оправданным, поэтому не ожидайте, что мы его прочтем. – camickr

+0

Извините. Трудно понять, как на самом деле опубликовать код здесь. Я исправлю это. – user2325795

ответ

1

Определить классы моделей, описывающие игру «Броненосец». Вот что я подумал через несколько минут.

package com.ggl.battleship.model; 

import java.util.List; 

public class BattleshipGame { 
    private int numberOfPlayers; 
    private int widthOfBattleshipGrid; 
    private List<BattleshipGrid> grids; 
} 

.

package com.ggl.battleship.model; 

import java.util.List; 

public class BattleshipGrid { 
    private List<Ship> ships; 
    private Cell[][] grid; 
} 

.

package com.ggl.battleship.model; 

import java.awt.Point; 
import java.util.List; 

public class Ship { 
    private int length; 
    private String name; 
    private List<Point> cellLocations; 
} 

.

package com.ggl.battleship.model; 

import java.awt.Point; 

public class Cell { 
    private boolean isHit; 
    private Point coordinates; 
} 

Вы можете создать все подходящие геттеры, сеттеры и методы рисования.

Определите один или несколько классов представлений, которые создают JFrame и JPanel. JPanel рисует классы моделей.

Создать один экземпляр вида класса JFrame для игрока 1, а другой экземпляр для игрока 2.

+0

У меня должна быть игра «Три варианта», «Человек против человека», «Человек против ИИ», «AI против AI». Могу я просто взять это, но изменить переменные (т. Е.: Cell1, cell2, cell3 ect ...) для каждого игрового режима? – user2325795

+0

Просто добавьте режим в класс BattleshipGame. Вам все равно придется писать методы, которые делают эти поля доступными для представления и контроллера. Прочитайте эту статью, чтобы увидеть, как создается приложение Swing. http://java-articles.info/articles/?p=196 –

Смежные вопросы