в классе "math" есть метод "p" отвечаюший за движение персонажа
перед движением он проверяет то место куда пойдет
но почемуто это работает не во все направления
с 2х сторон черного квадрата он не может пройти а с 2х других может
package test3;import java.awt.Color; import java.awt.Graphics; import java.awt.event.ActionEvent;
import javax.swing.AbstractAction; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel;
public class maen { public static void main(String[]args){ draw d=new draw(); math m=new math(); m.setplace(); JFrame f=new JFrame(); f.setVisible(true); f.setSize(200,200); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setContentPane(d);
//-------------------------------------------------------------------- JButton b1=new JButton(new AbstractAction() { public void actionPerformed(ActionEvent arg0) { m.p(1); d.rp(); } }); JButton test=new JButton(); JButton b2=new JButton(new AbstractAction() { public void actionPerformed(ActionEvent arg0) { m.p(2); d.rp(); } }); JButton b3=new JButton(new AbstractAction() { public void actionPerformed(ActionEvent arg0) { m.p(3); d.rp(); } }); JButton b4=new JButton(new AbstractAction() { public void actionPerformed(ActionEvent arg0) { m.p(4); d.rp(); } }); //-------------------------------------------------------------------- f.add(b1); f.add(b2); f.add(b3); f.add(b4); }
} class draw extends JPanel{ math m=new math(); public void rp(){ repaint(); } public void paintComponent(Graphics g){ for(int x=0;x<10;x++){ for(int y=0;y<10;y++){ g.setColor(Color.blue); g.fillRect((x*10)+20,(y*10)+20,10,10); if(m.xy[x][y]>0){ switch(m.xy[x][y]){ case 1: g.setColor(Color.red); g.fillRect((x*10)+20,(y*10)+20,10,10); break; case 2: g.setColor(Color.BLACK); g.fillRect((x*10)+20,(y*10)+20,10,10); break; }
} } } }
} class math{ static int[][] xy=new int[10][10];
int x=4; int y=8; public void setplace(){ this.xy[6][6]=2; this.xy[3][3]=2; } public void p(int bv){ int x=this.x; int y=this.y; int xb=x; int yb=y; int xp=x++; int yp=y++; int xm=x--; int ym=y--; switch(bv){ case 1: if(xy[xp][y]<2) this.x--; break; case 2: if(xy[xm][y]<2) this.x++; break; case 3: if(xy[x][yp]<2) this.y--; break; case 4: if(xy[x][ym]<2) this.y++; break; } System.out.println(this.x+" "+this.y); this.xy[xb][yb]=0; this.xy[this.x][this.y]=1; System.out.println("xym"+xy[xm][y]+xy[x][ym]+xy[x][y]); System.out.println("xyp"+xy[xp][y]+xy[x][yp]+xy[x][y]); }
}
public void p( int bv ) {
int start_x = x;
int start_y = y;
int x_plus = x+1;
int y_plus = y+1;
int x_minus = x-1;
int y_minus = y-1;
switch ( bv ) {
case 1://LEFT
if ( x_minus < 0 )
return;
if ( xy[x_minus][y] < 2 )
this.x = x_minus;
break;
case 2://RIGHT
if ( x_plus > 9 )
return;
if ( xy[x_plus][y] < 2 )
this.x = x_plus;
break;
case 3://UP
if ( y_minus < 0 )
return;
if ( xy[x][y_minus] < 2 )
this.y = y_minus;
break;
case 4://DOWN
if ( y_plus > 9 )
return;
if ( xy[x][y_plus] < 2 )
this.y = y_plus;
break;
}
this.xy[start_x][start_y] = 0;
this.xy[this.x][this.y] = 1;
}
PS: Давайте переменным человекопонятные наименования; направления движения можно оформить в виде enum
а; имена классов принято писать с заглавной.
PPS: Чем проще и примитивнее выглядит код - тем лучше: ваш стиль написания трудночитаем( именно этот метод ), т.к. чтобы понять какое значение вы хотите присвоить приходится пробегать глазами весь код выше, при этом учитывая что использовался постинкремент. Всё это осложняет поиск ошибки и хотя скорее всего она была проста, было легче переписать чем разобраться.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Не раз встречался с аннотацией @hide в JavadocИзвестно что эта аннотация запрещает доступ к методу после релиза (доступ всё так же можно получить...
ЗдравствуйтеК сожалению возникла потребность реализовать Drag And Drop в desktop приложении, на Swing
Можно ли у элемента FAB сделать заливку границ по периметру кнопки другим цветом? Можно ли задать ширину границы?