j2me,为简单的蛇游戏生成食物的随机位置

时间:2014-08-20 14:35:47

标签: java-me

这是我的蛇游戏代码,我需要做的就是为蛇食生成位置,一旦蛇接触到蛇食,它就会重新生成食物的位置〜我真的需要你的家伙救命!!!请好好看看

package snake;

import java.util.Random;
import java.util.Timer;
import java.util.TimerTask;
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Graphics;


public class SnakeCanvas extends Canvas{

private int currentX =getWidth()/2;
private int currentY =getHeight()/2;
private boolean condition = false;
private boolean position = false;
Random rand = new Random();
int randomX=rand.nextInt(180) + 20;
int randomY =rand.nextInt(250) + 20;


private final Midlet midlet;
private int score = 0;

Timer t;

public SnakeCanvas(Midlet midlet)
{


this.midlet = midlet;

t = new Timer();
 t.schedule(new TimerTask() {

public void run() {


if((condition==false)&&(position==false))
{
currentY -= 5 ;
}
if((condition==false)&&(position==true))
{
 currentY += 5 ;
}
if((condition==true)&&(position==false))
{
currentX -= 5 ;
}
if((condition==true)&&(position==true))
{
currentX += 5 ;
}
}
}, 50, 50);
}

public void paint(Graphics g) {
boolean touch=false;
//drawing Background
g.setColor(0x000000);
g.fillRect(0, 0, getWidth(), getHeight());
//drawing snake

g.setColor(0xffffff);
g.fillRoundRect(currentX, currentY, 20, 20, 5, 5);

 //snake food


   g.setColor(234,41,42);
   g.fillRect(randomX,randomY,10,10);
  if((currentX-9<=randomX+4&&currentX+9>=randomX-4)&&(currentY-9<=randomY+4&&currentY+9>=randomY-4)){

    addScore();
   }
 //drawing block
  g.setColor(82,133,190);
  g.fillRect(0, 0, getWidth(), 5);
  g.fillRect(0, getHeight()-5, getWidth(), 5);
  g.fillRect(0, 0, 5, getHeight());
  g.fillRect(getWidth()-5, 0, 5, getHeight());
 if((currentX>=getWidth()-10)||(currentX<5)||(currentY>=getHeight()-5)||(currentY<5))
 midlet.GameOver();
 g.setColor(142,255,17);
 g.drawString("Score : "+score, 8, 7, Graphics.TOP|Graphics.LEFT);
 repaint();

 }

  protected void keyPressed(int keyCode) {
  System.out.println(keyCode);
  switch(keyCode)
 {
case -1:
condition = false;
position = false;
break;
case -2:
condition = false;
position = true;
break;

case -3:
condition = true;
position = false;
break;

case -4:
condition = true;
position= true;
break;
}
repaint();
}

private void addScore() {
    score=score+1;**strong text**

}
private void food(){
Random rand = new Random();
int randomX=rand.nextInt(150) + 20;
int randomY=rand.nextInt(250) + 20;
}

}

1 个答案:

答案 0 :(得分:0)

好。我不知道你是否设法解决了你的问题,但你的代码似乎有些问题。

首先在此代码块的开头:

Private int currentX =getWidth()/2;
private int currentY =getHeight()/2;
private boolean condition = false;
private boolean position = false;
Random rand = new Random();
int randomX=rand.nextInt(180) + 20;
int randomY =rand.nextInt(250) + 20;

^我确定这不会编译,在声明头变量时你不能进行函数调用。

第二

if((condition==false)&&(position==false))
{
currentY -= 5 ;
}
if((condition==false)&&(position==true))
{
 currentY += 5 ;
}
if((condition==true)&&(position==false))
{
currentX -= 5 ;
}
if((condition==true)&&(position==true))
{
currentX += 5 ;
}
}
}, 50, 50);
}

您的块编码风格很糟糕且难以阅读。 http://en.wikipedia.org/wiki/Programming_style#Indentation有很好的指导,掌握这一点,阅读它! 这也适用于您的开关/案例陈述!

最后你的问题:

private void food(){
Random rand = new Random();
int randomX=rand.nextInt(150) + 20;
int randomY=rand.nextInt(250) + 20;
}

^只是生成随机数,但不对它们做任何事情。我猜你的意思是:

private void food(){
Random rand = new Random();
randomX=rand.nextInt(150) + 20;
randomY=rand.nextInt(250) + 20;
}

将全局randomX和randomY设置为新值。

这并没有帮助,因为你实际上并没有在这个类的任何地方调用Food()函数!并且考虑到它是&#34;私人&#34;并且只能由必须出错的类使用。

tl; dr你需要学习更多的编程,但这是一个很好的努力。如果你愿意,我会在评论中给你更多帮助。如果我的回答有帮助,请接受。

菲尼克斯