我想用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
}
}
答案 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的链接答案)。