안녕하세요 저는 최근에 뱀 게임을 개발하기 시작했습니다. 나는 움직이는 물체와 그것을 먹기위한 점이있는 시작 단계에있다. 그러나 나의 주요 쟁점은 뱀이 점을 먹었는지 어떻게 확인할 수 있는가? 어떻게 내가 그것을 사라지게 할 수 있는가?
도움이 될 것입니다.스네이크 게임 Java GUI
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.*;
import java.awt.*;
import java.util.Random;
import javax.swing.JPanel;
public class Gui extends JPanel implements ActionListener,KeyListener{
Random rnd= new Random();
int pointx=100 + (int)(Math.random() * ((400- 100) + 1));;
int pointy=100 + (int)(Math.random() * ((300 - 100) + 1));
private String text;
Timer tm = new Timer(5, this);
int x = 300, y = 178, velx = 0, vely = 0;
public Gui()
{
tm.start();
addKeyListener(this);
setFocusable(true);
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.green);
g.fillRect(x, y, 35, 15);
g.setColor(Color.BLACK);
g.fillOval(pointx,pointy, 20,20);
}
public void keyPressed(KeyEvent e)
{
int c = e.getKeyCode();
if (c == KeyEvent.VK_LEFT)
{
velx = -1;
vely = 0;
}
if (c == KeyEvent.VK_UP)
{
velx = 0;
vely = -1;
}
if (c == KeyEvent.VK_RIGHT)
{
velx = 1;
vely = 0;
}
if (c == KeyEvent.VK_DOWN)
{
velx = 0;
vely = 1;
}
}
public void actionPerformed(ActionEvent e)
{
x += velx;
y += vely;
repaint();
borders(e);
}
public void borders(ActionEvent e) {
if (x < 0) {
velx = 0;
x = 0;
JOptionPane
.showMessageDialog(null, "you hit the borders you lost!");
System.exit(0);
}
if (x > 530) {
velx = 0;
x = 530;
JOptionPane
.showMessageDialog(null, "you hit the borders you lost!");
System.exit(0);
}
if (y < 0) {
velx = 0;
y = 0;
JOptionPane
.showMessageDialog(null, "you hit the borders you lost!");
System.exit(0);
}
if (y > 330) {
velx = 0;
y = 330;
JOptionPane
.showMessageDialog(null, "you hit the borders you lost!");
System.exit(0);
}
}
public static void main(String[] args)
{
JFrame frame = new JFrame("gui");
frame.add(new Gui());
frame.setVisible(true);
frame.setSize(600, 400);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
뱀과 "대상"의 "머리"에 대한 참조를 유지해야합니다. 머리와 표적이 같은 지점에 있으면 먹은 후에는 "치료"를 새 위치로 재설정하거나 "null"로 설정하고 다음 페인트 사이클에서 그래픽을 업데이트 할 수 있습니다. 뱀이 스스로 빠져 나갔는지 탐지하는데도 비슷한 기술을 사용해야합니다. – MadProgrammer
나는 아주 빨리 읽을 수있다. 뱀의 x와 y를 읽은 것 같다. x와 y를 비교하지 않은 이유는 무엇인가? 그들이 똑같다면 뱀이 그 지점을 지나가고 있다는 것을 압니다. 그런데 코드가 약간 혼란 스럽습니다. 포인트를 만들 때 pointx와 pointy를 어디에서 사용할 수 있는지 보지 못합니다 ... 나는 잠시 멈춰서서 구조를 다시 생각해야한다고 생각합니다. 계획. 뱀의 "음식"을 나타내는 클래스 "포인트"를 만들 수 있습니다. 다음 당신은 많은 포인트에 의해 형성된 클래스 스네이크와 그것을 이동하는 방법이 필요합니다 (마지막 포인트를 가져 와서 첫 번째 뒤에 넣습니다) 등등 .. – Gianmarco