【问题标题】:Java snake gameJava 蛇游戏
【发布时间】:2014-08-11 01:33:11
【问题描述】:

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

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 块图的蛇穿过地图那么我想我可以弄清楚其余的,提前谢谢。

编辑:不再有损坏的代码..

【问题讨论】:

  • 这不是问题,这是愿望。
  • 嗯,是的,我不清楚对不起,我只是想要一个关于如何做到这一点的提示,即使它是在伪代码上,我被卡住了。
  • 你做了什么?你的尝试在哪里?
  • 你具体坚持什么?
  • 这里有太多与问题无关的代码。你坚持的具体部分。你为此尝试了什么算法/块,它是如何执行不正确的?我不知道为什么你会转储所有损坏的代码,而不指定与你的问题实际相关的部分。

标签: java swing paint keylistener repaint


【解决方案1】:

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

在绘画时,您首先绘制背景,然后列出蛇元素。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多