Новичок
Профиль
Группа: Участник
Сообщений: 2
Регистрация: 31.3.2011
Репутация: нет Всего: нет
|
Здравствуйте, уважаемые знатоки Java! Пишу вот по какому поводу. Моя задача - составить программу, моделирующую квадратное поле из 16 клеток. На поле случайным образом расположены препятствия двух типов и персонаж, способный перемещаться (один шаг - одна клетка). Препятствия первого типа он поглощает, второго должен уметь обходить. Я написал программу без использования графического интерфейса. В качестве поля у меня выступает двумерный массив. По умолчанию он заполнен нулями. Случайным образом в момент создания объекта на поле размещаются препятствия первого (1) и второго (2) типа. Персонаж (3) - это объект класса наследника поля. | Код | public class Area { int Field[][]=new int[4][4]; //массив, моделирующий поле размером 4*4 Area() { //конструктор по умолчанию, заполняющий поле нулями, т.е. пустыми клетками int i1; int i2; for (i1=0;i1<4;i1++) { for (i2=0;i2<4;i2++){ Field[i1][i2]=0; } } }
Area(int dust, int barrier){ //конструктор, заполняющий поле указанным количеством препятствий int i1; int i2; for (i1=0;i1<4;i1++) { for (i2=0;i2<4;i2++){ Field[i1][i2]=0; } } this.SetDust(dust); this.SetBarrier(barrier); } void ShowArea() { //вывод массива на экран int i1; int i2; for (i1=0;i1<4;i1++) { for (i2=0;i2<4;i2++){ System.out.print(Field[i1][i2]+" "); } System.out.println(); } }
void SetDust(int num) { //генерация "пыли" для указанного количества клеток поля int i; int x; int y; for (i=0;i<num;i++) { x=(int)((Math.random()*4)+1); //случайное значение в диапазоне 1-4 y=(int)((Math.random()*4)+1); Field[x-1][y-1]=1; //для координат на поле необходимо отнять 1, так как это элементы массива, где нумерация начинается с 0 } }
void SetBarrier(int num) {//генерация указанного количества барьеров int i; int x; int y; for (i=0;i<num;i++) { x=(int)((Math.random()*4)+1); y=(int)((Math.random()*4)+1); if (Field[x-1][y-1]!=1) Field[x-1][y-1]=2; //проверяем, не занята ли пылью ячейка else { Field[x-1][y-1]=1; i=i-1; //если занята, цикл должен иметь на одну итерацию больше }
} }
public static void main(String[] args) { Area MainField = new Area(5,2); //создаем поле Cleaner Walle = new Cleaner(MainField); //создаем персонаж MainField.ShowArea(); //вывод на экран поля for (int a=1;a<=20;a++) { //20 шагов Walle.moveCleaner(MainField); System.out.println(); MainField.ShowArea(); } } }
class Cleaner extends Area { int Clx; //переменные, хранящие адрес ячейки пылесоса int Cly; int direction; int tempx; int tempy;
Cleaner(Area a){ direction=1; Clx =(int)((Math.random()*4)+1); Cly=(int)((Math.random()*4)+1); Clx = Clx-1; Cly = Cly-1; a.Field[Clx][Cly]=3; } void GetPosition(){ //вывод на экран текстовой информации о расположении пылесоса System.out.println("x = "+(Clx+1)); System.out.println("y = "+(Cly+1)); }
void moveCleaner(Area a) { //перемещение step(direction); if ((tempx>3)||(tempx<0)) //проверка новой клетки на наличие барьера либо конца поля { this.ChangeDirection(); moveCleaner(a); } else if ((tempy>3)||(tempy<0)) { this.ChangeDirection(); moveCleaner(a); } else if (a.Field[tempx][tempy]==2) { this.ChangeDirection(); moveCleaner(a); } else { //шаг с заменой предыдушей ячейки на пустую a.Field[Clx][Cly]=0; Clx=tempx; Cly=tempy; a.Field[Clx][Cly]=3; } }
void ChangeDirection() { //смена направления хода случайным образом direction = (int)((Math.random()*4)+1); } void step(int direction){ //варианты шага для выбранного направления switch(direction){ case 1: { tempx=Clx+1; tempy=Cly; break; } case 2: { tempx=Clx-1; tempy=Cly; break; }
case 3: { tempx=Clx; tempy=Cly-1; break; }
case 4: { tempx=Clx; tempy=Cly+1; break; } } } }
|
Программа работает - выводит на экран массив. После каждого шага тройка (персонаж) перемещается, удаляет единицы, заменяя их нулями и обходит двойки. Но теперь мне нужно сделать графическую версию. Опыта работы с GUI в NetBeans у меня нет, ранее из визуального программирования изучал только Visual Basic. Я создал новый проект, в нем - jFrame с шестнадцатью jLabel-ами. Каждому jLabel присвоил картинку по умолчанию (для 0, т.е. пустой ячейки). Получилось такое поле:  Теперь я хотел бы связать их с предыдущей программой, т.е. как я понимаю, при старте программы должен срабатывать механизм сравнения для каждого лейбла и соответствующего ему элемента массива. Т.е, если элемент массива равен 0 - картинка для пустой ячейки поля, если равен 1 - для препятствия, 3 - картинка персонажа. При нажатии кнопки "Шаг" - перерисовка поля. Подскажите мне, пожалуйста, куда и как можно прикрутить два класса из неграфической программы и где разместить обработчики событий для начальной инициализации объектов и перерисовки поля при каждом шаге. Заранее спасибо за помощь. Вот код, который сгенерировал NetBeans для графического поля: | Код | /* * To change this template, choose Tools | Templates * and open the template in the editor. */
/* * MainFrame.java * * Created on 01.04.2011, 13:35:27 */
/** * * @author Privat */ public class MainFrame extends javax.swing.JFrame {
/** Creates new form MainFrame */ public MainFrame() { initComponents(); }
/** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code"> private void initComponents() {
jButton1 = new javax.swing.JButton(); jButton2 = new javax.swing.JButton(); jButton3 = new javax.swing.JButton(); jLabel1 = new javax.swing.JLabel(); jLabel2 = new javax.swing.JLabel(); jLabel3 = new javax.swing.JLabel(); jLabel4 = new javax.swing.JLabel(); jLabel5 = new javax.swing.JLabel(); jLabel6 = new javax.swing.JLabel(); jLabel7 = new javax.swing.JLabel(); jLabel8 = new javax.swing.JLabel(); jLabel9 = new javax.swing.JLabel(); jLabel10 = new javax.swing.JLabel(); jLabel11 = new javax.swing.JLabel(); jLabel12 = new javax.swing.JLabel(); jLabel13 = new javax.swing.JLabel(); jLabel14 = new javax.swing.JLabel(); jLabel15 = new javax.swing.JLabel(); jLabel16 = new javax.swing.JLabel();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jButton1.setLabel("Start"); jButton1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton1ActionPerformed(evt); } });
jButton2.setLabel("Step");
jButton3.setLabel("Exit"); jButton3.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton3ActionPerformed(evt); } });
jLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Images/0.png"))); // NOI18N jLabel1.setText("jLabel1");
jLabel2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Images/0.png"))); // NOI18N jLabel2.setText("jLabel2");
jLabel3.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Images/0.png"))); // NOI18N jLabel3.setText("jLabel3");
jLabel4.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Images/0.png"))); // NOI18N jLabel4.setText("jLabel4");
jLabel5.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Images/0.png"))); // NOI18N jLabel5.setText("jLabel5");
jLabel6.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Images/0.png"))); // NOI18N jLabel6.setText("jLabel6");
jLabel7.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Images/0.png"))); // NOI18N jLabel7.setText("jLabel7");
jLabel8.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Images/0.png"))); // NOI18N jLabel8.setText("jLabel8");
jLabel9.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Images/0.png"))); // NOI18N jLabel9.setText("jLabel9");
jLabel10.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Images/0.png"))); // NOI18N jLabel10.setText("jLabel10");
jLabel11.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Images/0.png"))); // NOI18N jLabel11.setText("jLabel11");
jLabel12.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Images/0.png"))); // NOI18N jLabel12.setText("jLabel12");
jLabel13.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Images/0.png"))); // NOI18N jLabel13.setText("jLabel13");
jLabel14.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Images/0.png"))); // NOI18N jLabel14.setText("jLabel14");
jLabel15.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Images/0.png"))); // NOI18N jLabel15.setText("jLabel15");
jLabel16.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Images/0.png"))); // NOI18N jLabel16.setText("jLabel16");
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addGap(90, 90, 90) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 121, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel5, javax.swing.GroupLayout.PREFERRED_SIZE, 121, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel9, javax.swing.GroupLayout.PREFERRED_SIZE, 121, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel13, javax.swing.GroupLayout.PREFERRED_SIZE, 121, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabel2, javax.swing.GroupLayout.PREFERRED_SIZE, 121, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel6, javax.swing.GroupLayout.PREFERRED_SIZE, 121, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel10, javax.swing.GroupLayout.PREFERRED_SIZE, 121, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel14, javax.swing.GroupLayout.PREFERRED_SIZE, 121, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addGroup(layout.createSequentialGroup() .addComponent(jLabel3, javax.swing.GroupLayout.PREFERRED_SIZE, 122, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jLabel4, javax.swing.GroupLayout.PREFERRED_SIZE, 121, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addComponent(jLabel11, javax.swing.GroupLayout.PREFERRED_SIZE, 121, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jLabel12, javax.swing.GroupLayout.PREFERRED_SIZE, 121, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(layout.createSequentialGroup() .addComponent(jLabel7, javax.swing.GroupLayout.PREFERRED_SIZE, 121, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jLabel8, 0, 0, Short.MAX_VALUE))) .addGroup(layout.createSequentialGroup() .addComponent(jLabel15, javax.swing.GroupLayout.PREFERRED_SIZE, 121, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jLabel16, javax.swing.GroupLayout.PREFERRED_SIZE, 121, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 1, javax.swing.GroupLayout.PREFERRED_SIZE))) .addGap(85, 85, 85)) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addGap(171, 171, 171) .addComponent(jButton1, javax.swing.GroupLayout.DEFAULT_SIZE, 61, Short.MAX_VALUE) .addGap(89, 89, 89) .addComponent(jButton2) .addGap(85, 85, 85) .addComponent(jButton3, javax.swing.GroupLayout.DEFAULT_SIZE, 54, Short.MAX_VALUE) .addGap(163, 163, 163)) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addGap(31, 31, 31) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel2) .addComponent(jLabel3) .addComponent(jLabel1) .addComponent(jLabel4)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel6) .addComponent(jLabel7) .addComponent(jLabel5) .addComponent(jLabel8, javax.swing.GroupLayout.PREFERRED_SIZE, 120, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel9) .addComponent(jLabel10) .addComponent(jLabel11) .addComponent(jLabel12)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel13) .addComponent(jLabel14) .addComponent(jLabel15) .addComponent(jLabel16)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 35, Short.MAX_VALUE) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jButton3) .addComponent(jButton2) .addComponent(jButton1)) .addGap(24, 24, 24)) );
pack(); }// </editor-fold>
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { Area MainField = new Area(5,2); Cleaner Walle = new Cleaner(MainField);
}
private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) { System.exit(0); }
/** * @param args the command line arguments */
public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new MainFrame().setVisible(true); } }); }
// Variables declaration - do not modify private javax.swing.JButton jButton1; private javax.swing.JButton jButton2; private javax.swing.JButton jButton3; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel10; private javax.swing.JLabel jLabel11; private javax.swing.JLabel jLabel12; private javax.swing.JLabel jLabel13; private javax.swing.JLabel jLabel14; private javax.swing.JLabel jLabel15; private javax.swing.JLabel jLabel16; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel3; private javax.swing.JLabel jLabel4; private javax.swing.JLabel jLabel5; private javax.swing.JLabel jLabel6; private javax.swing.JLabel jLabel7; private javax.swing.JLabel jLabel8; private javax.swing.JLabel jLabel9; // End of variables declaration
}
|
Это сообщение отредактировал(а) Joey12 - 1.4.2011, 14:44
|