Java蛇游戏

时间:2014-06-20 10:05:45

标签: java swing paint keylistener repaint

好的开始我必须承认有无数的蛇问题,尽管每个程序员即使新手或专家也不同地编写代码,所以我决定开另一个案例,

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条瓷砖蛇穿过地图然后我想我可以弄清楚其余部分,先谢谢。

编辑:不再破坏代码..

1 个答案:

答案 0 :(得分:1)

您可以使用StackLinkedList。现在随着蛇头的每次移动,你将它的位置(x,y)添加到列表的开头,如果列表中有更多的元素作为蛇的长度,则删除最后一个元素。

在绘画时,你首先绘制背景,然后将列表元素绘制成蛇。