Snake Game控件有助于Java /处理

时间:2018-01-07 15:20:29

标签: keyboard processing

我目前正在处理一个基本的蛇形游戏,我希望蛇不会朝着它正在移动的相反方向移动。

每当我向相反方向按下时,蛇就会停止,但我希望游戏忽略按键。

if (keyCode == DOWN && direction != "up"){
 if (frameCount % framespeed == 0){
ypos += speed; 
}
direction = "down";
}
if (keyCode == UP && direction != "down"){
 if (frameCount % framespeed == 0){
ypos -= speed;
}
direction = "up";
}
if (keyCode == RIGHT && direction != "left"){
 if (frameCount % framespeed == 0){
xpos += speed; 
}
direction = "right";
}
if (keyCode == LEFT && direction != "right"){
 if (frameCount % framespeed == 0){
xpos -= speed; 
}
direction = "left";
}

忽略frameCount

2 个答案:

答案 0 :(得分:0)

首先,您不应使用==!=来比较String值。您需要使用equals()功能。您已经提到过您在评论中尝试了此操作,但请更新您的帖子以添加新的MCVE。请注意,这应该是你的完整蛇游戏。它应该是一个最小的例子。例如,想出一个简单的草图,在屏幕上显示方向(在文本中,而不是移动的东西)。使用箭头键更改方向。这样做就不会改变相反的方向。

你需要考虑的另一件事是,如果蛇朝上,用户可以向右按,然后按向下以反转蛇的方向。如果他们足够快,那么它将比你的帧速率快,并且蛇会反转方向。

有很多方法可以解决这个问题,Stack Overflow实际上并不是为一般的“我该怎么做”这类问题而设计的。这是针对具体的“我试过X,期待Y,但得到Z intsead”类型的问题。所以请break your problem down into smaller stepsdebug your code,以便您准确了解正在发生的事情。如果您仍然无法理解,请在新问题帖子中发布MCVE,我们将从那里开始。祝你好运。

答案 1 :(得分:-2)

int [] x = new int [91];

int [] y = new int [91];

int dx = 1;

int dy = 0;

boolean moveX = false;

float ax = 350;

float ay = 250;

int points = 0;

void setup(){

大小(700,500);

smooth();

frameRate(2000);

x [0] = 20;

for(int i = 0; i <90; i ++){

x[i+1]=x[i]+1;

}

for(int i = 0; i <91; i ++){

y[i]=100;

}

}

void draw(){

background(#A3B8E0);

elli();

movement();

apple();

meet();

points();

}

void elli(){

填充(#59F046);

strokeWeight(1);

行程(#0B6200);

for(int i = 0; i <91; i = i + 15){

ellipse(x[i],y[i],30,30);

}

eyesnears();

for(int i = 0; i <90; i ++){

x[i]=x[i+1];

}

for(int i = 0; i <90; i ++){

y[i]=y[i+1];

}

x [90] = x [90] + dx;

y [90] = y [90] + dy;

}

void eyesnears(){

填充(#FCFC4A);

行程(#EAA800);

ellipse(x [90] -4,y [90] -5,7,7);

椭圆(x [90] + 6,y [90] -5,7,7);

ellipse(x [90] -8,y [90] -20,7,5);

椭圆(x [90] + 10,y [90] -20,7,5);

strokeWeight(3);

line(x [90] -6,y [90] -18,x [90] -4,y [90] -15);

line(x [90] + 7,y [90] -18,x [90] + 5,y [90] -15);

strokeWeight(1);

fill(#FFB08B);

arc(x [90] + 1,y [90] + 3,10,10,radians(0),radians(180));

}

无效运动(){

if(keyPressed){

if(keyCode == UP && moveX == false){

 dy=-1;


 dx=0;


 moveX=true;

}

if(keyCode == DOWN && moveX == false){

 dy=1;



 dx=0;



 moveX=true;

}

if(keyCode == LEFT && moveX == true){

 dx=-1;



 dy=0;



 moveX=false;

}

if(keyCode == RIGHT && moveX == true){

 dx=1;



 dy=0;



 moveX=false;

}

}

if(x [90] <= 14){

x[90]=width-15;

}

if(y [90] <= 14){

y[90]=height-15;

}

if(x [90]> = width-14){

x[90]=15;

}

if(y [90]> = height-14){

y[90]=15;

}

}

void apple(){

fill(#FF0000);

noStroke();

ellipse(ax,ay,40,40);

fill(#3BE802);

ellipse(ax-5,ay-25,16,10);

行程(#9D5100);

strokeWeight(5);

line(ax + 5,ay-25,ax,ay-14);

}

void Meet(){

if(abs(x [90] -ax)<33 && abs(y [90] -ay)<33){

ax = random(width);

ay = random(height);    ax = constrain(ax,25,width-25);

ay = constrain(ay,25,height-25);

points = points + 1;

}

}

void points(){

textSize(25);

textAlign(CENTER);

填充(#9D5100);

text(“您的积分:” + points,600,25);

}