好的开始我必须承认有无数的蛇问题,尽管每个程序员即使新手或专家也不同地编写代码,所以我决定开另一个案例,
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JFrame;
public class Game1 extends JFrame {
float x;
float y;
int[][] tileKati = new int[30][30];
int keyCode;
int body;
boolean Right = true;
boolean Left = false;
boolean Up = false;
boolean Down = false;
boolean Running = false;
public class AL extends KeyAdapter{
public void keyPressed(KeyEvent e){
keyCode = e.getKeyCode();
if((keyCode == e.VK_LEFT) && (!Right)){
Left=true;
Down=false;
Up=false;
Running=true;
}
if((keyCode == e.VK_RIGHT) && (!Left)){
Right=true;
Down=false;
Up=false;
Running=true;
}
if((keyCode == e.VK_UP) && (!Down)){
Up=true;
Left=false;
Right=false;
Running=true;
}
if((keyCode == e.VK_DOWN) && (!Up)){
Down=true;
Left=false;
Right=false;
Running=true;
}
}
public void keyReleased(KeyEvent e){
}
}
public Game1(){
addKeyListener(new AL());
setTitle("Snake");
setSize(960,960);
setResizable(false);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
x=0;
y=0;
for(int x=0;x<30;x++){
for(int y=0;y<30;y++){
tileKati[x][y] = 0;
}
}
}
public void paint(Graphics g)
{
state();
if(Running==true)
{
if(x<0)
{
x=30;
}
if(x>30)
{
x=0;
}
if(y<0)
{
y=30;
}
if(y>30)
{
y=0;
}
}
tileKati[(int)x][(int)y] = 1;
for(int x=0;x<30;x++)
{
for(int y=0;y<30;y++)
{
if(tileKati[x][y] == 0)
{
g.setColor(Color.black);
g.drawRect(x*32, y*32, 32, 32);
}
if(tileKati[x][y]== 1)
{
g.setColor(Color.cyan);
g.fillRect(x*32, y*32, 32, 32);
}
}
}
repaint();
}
public void move(){
if(Right){
x+= 0.01;
}
if(Left){
x-=0.01;
}
if(Up){
y-=0.01;
}
if(Down){
y+=0.01;
}}
public void state(){
if(Running){
move();
}
repaint();
}
public static void main(String[] args){
new Game1();
}
}
所以我的问题如下,当我的蛇超过3个瓷砖(x或y)时,我想开始画我的瓷砖并清除“地图”的其余部分,所以我可以制作一条3条瓷砖蛇穿过地图然后我想我可以弄清楚其余部分,先谢谢。
编辑:不再破坏代码..
答案 0 :(得分:1)
您可以使用Stack
或LinkedList
。现在随着蛇头的每次移动,你将它的位置(x,y)添加到列表的开头,如果列表中有更多的元素作为蛇的长度,则删除最后一个元素。
在绘画时,你首先绘制背景,然后将列表元素绘制成蛇。