height = getHeight();//高度为屏幕高度 new Thread(this).start();
}
初始化节点数量。 snakeNum = 7; 初始化节点数据。
for (int i = 0; i < snakeNum; i++) { snake[i][0] = 100 - snakeWidth * i; snake[i][1] = 40; }
初始化移动方向。 point = KEY_DOWN; 初始化食物坐标。 foodX = 100; foodY = 100;
5.4.4 设置屏幕背景颜色为粉红色
设置屏幕
Canvas是个画布,graphics是只画笔,主要用于实现在Canvas画布上绘制图画。
protected void paint(Graphics g) {} 清屏并设置屏幕背景为粉色
其中,粉色的RGB代码为0xffcccc,格式为(0xRRGGBB) g.setColor(0xffcccc);
5.4.5 设置画笔颜色为红色,并绘制贪吃蛇蛇身及食物
设置画笔为红色,红色的RGB代码为0xff0000。
g.fillRect(0, 0, width, height); g.setColor(0xff0000);
绘制蛇身
for (int i = 0; i < snakeNum; i++) {
g.fillRect(snake[i][0],
snake[i][1],
snakeWidth,
snakeWidth); } 绘制食物 if (b) {
}
g.fillRect(foodX, foodY, snakeWidth, snakeWidth);
5.4.6 食物的产生及其产生位置的限制条件
食物的坐标必须位于屏幕内,且不能和蛇身重合 private void getFood() { while (true) { + 1)) + 1))
/ snakeWidth * snakeWidth;
/ snakeWidth * snakeWidth;
foodX = Math.abs(r.nextInt() % (width - snakeWidth
foodY = Math.abs(r.nextInt() % (height - snakeWidth
boolean b = true;
for (int i = 0; i < snakeNum; i++) {
if (snake[i][0] == foodX && snake[i][1] == foodY) {
}
}
b = false; break;
if (b) { } }
break;
5.4.7 蛇身的移动
private void move(int point) {}; 蛇身移动
for (int i = snakeNum - 1; i > 0; i--) { }
第一个单元格移动 switch (point) { case KEY_UP:
snake[0][1] = snake[0][1] - snakeWidth; break;
snake[i][0] = snake[i - 1][0]; snake[i][1] = snake[i - 1][1];
case KEY_DOWN:
snake[0][1] = snake[0][1] + snakeWidth; break;
case KEY_LEFT:
snake[0][0] = snake[0][0] - snakeWidth;
break;
case KEY_RIGHT: }
snake[0][0] = snake[0][0] + snakeWidth; break;
5.4.8 手机按键功能实现
其中用手机键盘中的上、下、左、右键来控制贪吃蛇的移动,用中间键来控制实现暂停功能。程序最后增加了repaint(),即刷屏功能,用来更新游戏数据。
public void keyPressed(int keyCode) { int action = getGameAction(keyCode);
switch (action) {
case UP:
point = KEY_UP; break; case DOWN:
point = KEY_DOWN; break; case LEFT:
point = KEY_LEFT; break; case RIGHT:
point = KEY_RIGHT; break; case FIRE:
相关推荐: