如何转换我在下面写下的代码?

时间:2016-05-08 21:03:23

标签: processing

我想用Java编写蛇形游戏并处理IT类,因为我不知道该怎么做,所以我搜索了一个YouTube教程。现在我确实找到了一个,但他使用了按键'' s'' d'' a'移动蛇 - 我另一方面想要使用箭头键。有人可以向我解释我如何转换这段代码:

if (keyPressed == true) {
   int newdir = key=='s' ? 0 : (key=='w' ? 1 : (key=='d' ? 2 : (key=='a' ? 3 : -1)));
}


if(newdir != -1 && (x.size() <= 1 || !(x.get(1) ==x.get(0) + dx[newdir] && y.get (1) == y.get(0) + dy[newdir]))) dir = newdir;
}

这样的事情:

void keyPressed () {
 if (key ==  CODED) {
  if (keyCode == UP) {}
   else if (keyCode == RIGHT) {}
    else if (keyCode == DOWN) {}
     else if (keyCode == LEFT) {}
}

到目前为止,这是我的整个编码:

ArrayList<Integer> x = new ArrayList<Integer> (), y = new ArrayList<Integer> ();
int w = 900, h = 900, bs = 20, dir = 1; // w = width ; h = height ; bs = blocksize ; dir = 2 --> so that the snake goes up when it starts
int[] dx = {0,0,1,-1} , dy = {1,-1,0,0};// down, up, right, left

void setup () {
   size (900,900); // the 'playing field' is going to be 900x900px big
   // the snake starts off on x = 5 and y = 30 
   x.add(5); 
   y.add(30);
}

void draw() {
   //white background
   background (255);

   //
   // grid 
   // vertical lines ; the lines are only drawn if they are smaller than 'w'
   // the operator ++ increases the value 'l = 0' by 1 
   // 
   for(int l = 0 ; l < w; l++) line (l*bs, 0, l*bs, height); 
   //
   // horizontal lines ; the lines are only drawn if they are smaller than 'h'
   // the operator ++ increases the value 'l = 0' by 1 
   //  
   for(int l = 0 ; l < h; l++) line (0, l*bs, width, l*bs);

   //
   // snake
   for (int l = 0 ; l < x.size() ; l++) {
       fill (0,255,0); // the snake is going to be green
       rect (x.get(l)*bs, y.get(l)*bs, bs, bs);    
   }

   if(frameCount%5==0) { // will check it every 1/12 of a second -- will check it every 5 frames at a frameRate = 60
       // adding points
       x.add (0,x.get(0) + dx[dir]); // will add a new point x in the chosen direction
       y.add (0,y.get(0) + dy[dir]); // will add a new point y in the chosen direction
       // removing points
       x.remove(x.size()-1); // will remove the previous point x
       y.remove(y.size()-1); // will remove the previous point y
   }
}

2 个答案:

答案 0 :(得分:1)

很难回答一般问题&#34;我该怎么做?#34;输入问题。 Stack Overflow专为更具体的设计而设计#34;我尝试了X,期望Y,但得到了Z而不是#34;输入问题。话虽这么说,但我会尝试回答:

您将很难尝试在互联网上找到随机代码并尝试在草图中使用它。这不是一个很好的方法。

相反,你需要退后一步,真正考虑你想要发生什么。不要一次接受整个目标,而是尝试将问题分解为更小的步骤,然后逐步采取这些步骤。

第1步:您可以将游戏的状态存储在变量中吗?你可能会存储蛇在蛇的位置上移动的方向等等。

第2步:当您按箭头键时,是否可以编写仅向控制台输出内容的代码?您可以在单独的示例草图中执行此操作,而不是尝试将其直接添加到完整草图中。

第3步:当按下箭头键时,您是否可以将这两个步骤组合并更改草图的状态?也许你改变了蛇的行进方向。

重点是你需要尝试一些,而不是试图复制粘贴随机代码而不是真正了解它。将问题分解为小步骤,然后在遇到问题时发布MCVE该特定步骤。祝你好运。

答案 1 :(得分:0)

您应该查看Java API KeyEvent VK_LEFT。 正如pczeus已经告诉过你的那样,你需要实现对击键的捕获!这可以通过here进行检查(来自this的链接答案)。