나는 (나에게 적어도) 이라는 이상한 상황이있다.
뱀을 다시 쓰려고하는데, 이동이 아주 잘되고, 1 세그먼트를 지우고 1 (x + 1 - 1 = x?)을 추가했지만 뱀이 사라지는 반면 뱀은 사라집니다. Arraylist는 동일한 크기를 유지합니다 (인쇄).스네이크 재 작성 시도 - 스네이크 자체가 먹는다
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.*;
import java.util.ArrayList;
class Snake extends JPanel implements Runnable {
int x,y;
boolean horizontal;
ArrayList<Point> position = new ArrayList<Point>();
byte dir = 3;
public Snake(JFrame parent) {
for(int i = 0; i < 5; i++)
position.add(new Point(i*5 + 10, 10));
parent.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
byte change = dir;
switch (e.getKeyCode()) {
case KeyEvent.VK_DOWN:
change = 4;
break;
case KeyEvent.VK_UP:
change = 1;
break;
case KeyEvent.VK_LEFT:
change = 2;
break;
case KeyEvent.VK_RIGHT:
change = 3;
break;
}
changeDirection(change);
}
});
System.out.println("starting thread");
new Thread(this).start();
}
private void changeDirection(byte change) {
if(change != dir && (change - 2 != dir || change + 2 != dir)) {
dir = change;
}
}
public void run() {
for(int i = 0; i != -1; i++){
try {
move();
this.repaint();
Thread.sleep(1000);
}
catch (InterruptedException e) {
System.out.println("INTERRUPTED");
}
}
}
private void move() {
System.out.println(position.size());
Point toAdd = position.get(position.size() - 1);
position.remove(0);
if(dir == 1)
toAdd.y -= 5;
else if(dir == 2)
toAdd.x -= 5;
else if(dir == 3)
toAdd.x += 5;
else if(dir == 4)
toAdd.y += 5;
if(toAdd.x < 0) toAdd.x = 150;
else if(toAdd.x > 150) toAdd.x = 0;
if(toAdd.y < 0) toAdd.y = 150;
else if(toAdd.y > 150) toAdd.y = 0;
position.add(toAdd);
}
public void paintComponent(Graphics g) {
g.clearRect(0,0,150,150);
for(Point p : position)
g.drawRect(p.x, p.y, 5, 5);
}
public static void main(String[] args) {
Snake snake;
JFrame f = new JFrame("Snake");
f.setSize(150, 150);
f.add((snake = new Snake(f)));
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setResizable(false);
f.setVisible(true);
}
}
: 그것을 짧은, 콘도, 올바른 예를 만들기 위해,
private void move() {
System.out.println(position.size());
Point toAdd = position.get(position.size() - 1);
position.remove(0);
if(dir == 1)
toAdd.y -= 5;
else if(dir == 2)
toAdd.x -= 5;
else if(dir == 3)
toAdd.x += 5;
else if(dir == 4)
toAdd.y += 5;
if(toAdd.x < 0) toAdd.x = 150;
else if(toAdd.x > 150) toAdd.x = 0;
if(toAdd.y < 0) toAdd.y = 150;
else if(toAdd.y > 150) toAdd.y = 0;
position.add(toAdd);
}
그러나 :
뱀의 위치를 계산하는 기능 (나는 그것을 일으키는 생각) 운동이 내가 구현하려고 시도한 첫 번째 사건이었습니다. 아직 충돌 감지/음식에 이르지 않았으므로 여기에 의문의 여지가 없습니다.
내 질문은 :
왜 뱀은 ArrayList에없는 동안 감소하고 나는 그것을 고칠 수있는 방법, 즉 전면 세그먼트를 제외하고 사라지는 뱀을 중지한다?
@downvoter 설명 부탁드립니다. – 11684
누군가 이것이 내게 왜 진짜 질문이 아닌지 설명해 주시겠습니까? 마지막 단락은 매우 명확한 질문입니다. 생각하기에, 그것을 찾기가 어렵지 않고, 지나치게 넓지도 않고, 단지 '너무 지역화되어있을 수 있습니다.'그러나 많은 사람들이 여기에있을 것입니다. 멀리있는 질문이 있습니다. 그래서 더 많은 현지화. – 11684
나는 수사적이거나 불완전하다고하지는 않을 것이다. 심지어 SSCCE를 제공했다. 그리고 그것은 현재의 형태로, 내 코드를보고 의심 할 바없이 어리석은 실수를하는 사람이 합리적으로 대답 할 수있다. – 11684