当前位置: 代码迷 >> Java相关 >> [分享]我写的贪吃蛇,大家可以看一下
  详细解决方案

[分享]我写的贪吃蛇,大家可以看一下

热度:374   发布时间:2006-06-25 18:52:24.0
if(dir!=Direction.WEST)
dir=Direction.EAST;
}

else if(code==KeyEvent.VK_LEFT){
if(dir!=Direction.EAST)
dir=Direction.WEST;
}

else if(code==KeyEvent.VK_UP){
if(dir!=Direction.SOUTH)
dir=Direction.NORTH;
}

else if(code==KeyEvent.VK_DOWN){
if(dir!=Direction.NORTH)
dir=Direction.SOUTH;
}
楼主能否说名下这些代码的意思啊?不好意思啊,由于我的是1.4版本的,看不到效果......
----------------解决方案--------------------------------------------------------
上面的代码的意思是判断才不能转向,如果蛇向上走的话,那么就不能把方向改为向下,只能向左,向右
其它的也是一样的

还有,这里的WEST等不是boolean,而是一个Direction 的对象
这个程序里用了很多1.5里面的新特性,所以你最好还是下载个1.5版本的来用一用
----------------解决方案--------------------------------------------------------
不错不错,
----------------解决方案--------------------------------------------------------

看不懂,不过还是要谢谢斑竹啊```


----------------解决方案--------------------------------------------------------

楼主,不好意思啊.我把你的代码当中的蛇给抽出来了......
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
public class Snake extends JFrame
{
private int sleep=400;
public int loc;
private MySnake ms;
public Snake()
{
Container c=getContentPane();

ms=new MySnake();

setSize(800,600);
setLocation(400,300);
show();

addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});

new Thread(new Runnable()
{
public void run()
{
while(true)
{
try
{
Thread.sleep(sleep);
}
catch (Exception e)
{
return;
}
repaint();
}
}
}).start();
}

public void paint(Graphics g)
{
addKeyListener(new KeyAdapter()
{
public void keyPressed(KeyEvent e)
{
loc=e.getKeyCode();
}
});
super.paint(g);
ms.move(loc);
ms.drawMe(g);
}

public static void main(String args[])
{
new Snake();
}
}
class MySnake
{
private ArrayList list,array;
private Rectangle rec;
private int block=20;
private int bolckSpace=2;
private int j=0;
public MySnake()
{
list=new ArrayList();
array=new ArrayList();
list.add(new Rectangle(10,20,20,20));
list.add(new Rectangle(10+22,20,20,20));
list.add(new Rectangle(10+44,20,20,20));
}
public void move(int x)
{
if(x==40)
{
rec=(Rectangle)list.get(0);
Rectangle rec1=new Rectangle(rec.x,rec.y+(block+bolckSpace),rec.width,rec.height);
list.add(j,rec1);
}
else if(x==38)
{
rec=(Rectangle)list.get(0);
Rectangle rec1=new Rectangle(rec.x,rec.y-(block+bolckSpace),rec.width,rec.height);
list.add(j,rec1);
}
else if(x==37)
{
rec=(Rectangle)list.get(0);
Rectangle rec1=new Rectangle(rec.x-(block+bolckSpace),rec.y,rec.width,rec.height);
list.add(j,rec1);
}
else if(x==39)
{
rec=(Rectangle)list.get(0);
Rectangle rec1=new Rectangle(rec.x+(block+bolckSpace),rec.y,rec.width,rec.height);
list.add(j,rec1);
}
if(isEat())
{
}
else
list.remove(list.size()-1);
}
public boolean isEat()
{
return false;
}
public void drawMe(Graphics g)
{
g.setColor(Color.RED);
for(int i=0;i<list.size();i++)
{
rec=(Rectangle)list.get(i);
g.fillRect(rec.x,rec.y,rec.width,rec.height);
}
list.remove(list.size()-1);
}
};
在这句代码上:list.remove(list.size()-1);如果不用键盘控制的话,这条蛇会自动的消亡......
因为我没有1.5版本......所以我自己把你的程序抽来改去...不好意思啊.....
我不知道楼主的蛇会不会自动的消亡呢?还是用什么方法给控制了节奏.......请楼主指教下.....


----------------解决方案--------------------------------------------------------
还有Rectangle rec1=new Rectangle(rec.x+(blockWidth+blockSpace),rec.y,rec.width,rec.height);
我总以为,这句代码只会运行一下,就是当我点右键的时候,蛇只能想右动一下,然后原地踏步,为什么会连续的动呢?
----------------解决方案--------------------------------------------------------
因为有一个线程一直在控制着蛇,
这个程序当然也包括了判断蛇是否已经死的情况
比如,蛇碰到四周的壁会死掉,蛇碰到自己也会死掉
----------------解决方案--------------------------------------------------------
斑竹做的果然不错,顶一下!
----------------解决方案--------------------------------------------------------

斑竹,我分析一下,是否是这样的呢?list.remove(list.size()-1);主要是这句话吧,每一次只移除最后一个元素,然后重画第一个元素,让蛇看起来象动一样,是吗?


----------------解决方案--------------------------------------------------------
你的理解是对的,
就是在动的时候,把第一个位置加上,把最后一个位置减去
这样看上去就像在动一样了
----------------解决方案--------------------------------------------------------
  相关解决方案