我做的第一个J2ME游戏---贪吃蛇,源码公开,支持一下J2ME论坛。

mituzhishi 2005-07-28 02:46:21
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
import javax.microedition.lcdui.*;

public class mainMidlet extends MIDlet {

public mainMidlet() {
super();
}

protected void startApp() throws MIDletStateChangeException {
Display.getDisplay(this).setCurrent(myCanvas);
}

protected void pauseApp() {
}

protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
}

private gameCanvas myCanvas = new gameCanvas();
}



public class Food {

public Food() {
super();
}

public int getRowNum() {
return rowNum;
}

public int getColNum() {
return colNum;
}

public void setRowNum(int rowNum) {
this.rowNum = rowNum;
}

public void setColNum(int colNum) {
this.colNum = colNum;
}

private int rowNum = 25;

private int colNum = 22;

}



public interface Directions {
public static final int UPWARD = 2;

public static final int LEFTWARD = 4;

public static final int RIGHTWARD = 6;

public static final int DOWNWARD = 8;
}



import java.util.Vector;

public class Snake implements Directions {

public Snake() {
super();
snakeGrids.addElement(new snakeGrid(1, 1));
snakeGrids.addElement(new snakeGrid(1, 2));
snakeGrids.addElement(new snakeGrid(1, 3));
}

public void addGrid(int rowNum, int colNum) {
snakeGrids.addElement(new snakeGrid(rowNum, colNum));
}

public void removeLastGrid() {
snakeGrids.removeElementAt(0);
}

public int getDirection() {
return direction;
}

public void setDirection(int direction) {
if (!(this.direction + direction == 10)) {
this.direction = direction;
}
}

public int getLength() {
return snakeGrids.size();
}

public snakeGrid getGrid(int i) {
return (snakeGrid) (snakeGrids.elementAt(i));
}

public snakeGrid getFirstGrid() {
return (snakeGrid) (snakeGrids.lastElement());
}

class snakeGrid {
public snakeGrid(int rowNum, int colNum) {
this.rowNum = rowNum;
this.colNum = colNum;
}

public int getRowNum() {
return rowNum;
}

public int getColNum() {
return colNum;
}

int rowNum = 1;

int colNum = 1;
}

private Vector snakeGrids = new Vector();

private int direction = RIGHTWARD;

}



import java.util.Random;

import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Graphics;

public class gameCanvas extends Canvas implements Runnable, Directions {

public gameCanvas() {
super();
new Thread(this).start();
}

protected void paint(Graphics g) {
g.setColor(255, 255, 255);
g.fillRect(0, 0, width, height);
g.setColor(0, 0, 0);
g.drawString("Grady Snake", 90, 10, Graphics.TOP | Graphics.LEFT);
g.drawRect(10, 30, width - 20, height - 39);
for (int i = 0; i < snake.getLength(); i++) {
g.fillRect(snake.getGrid(i).getColNum() * 5 + 5, snake.getGrid(i)
.getRowNum() * 5 + 25, 5, 5);
}
g.setColor(0, 255, 0);
g.fillRect(food.getColNum() * 5 + 5, food.getRowNum() * 5 + 25, 5, 5);
}

public void run() {
while (true) {
processSnake();
repaint();
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}

}
}

public void processSnake() {
int rowAdd = 0;
int colAdd = 0;
int rowNum = 1;
int colNum = 1;
switch (snake.getDirection()) {
case UPWARD:
rowAdd = -1;
break;
case DOWNWARD:
rowAdd = 1;
break;
case LEFTWARD:
colAdd = -1;
break;
case RIGHTWARD:
colAdd = 1;
break;
}
rowNum = snake.getFirstGrid().getRowNum() + rowAdd;
colNum = snake.getFirstGrid().getColNum() + colAdd;
if (rowNum == 0) {
rowNum = 50;
} else if (rowNum == 51) {
rowNum = 1;
}
if (colNum == 0) {
colNum = 44;
} else if (colNum == 45) {
colNum = 1;
}
snake.addGrid(rowNum, colNum);
if (rowNum == food.getRowNum() && colNum == food.getColNum()) {
eated = true;
randFood();
}
if (eated) {
eated = false;
} else {
snake.removeLastGrid();
}
}

public void randFood() {
food.setRowNum(new Random().nextInt(50) + 1);
food.setColNum(new Random().nextInt(44) + 1);
for (int i = 0; i < snake.getLength(); i++) {
if (food.getRowNum() == snake.getGrid(i).getRowNum()
&& food.getColNum() == snake.getFirstGrid().getColNum()) {
randFood();
}
}
}

public void keyPressed(int keyCode) {
switch (getGameAction(keyCode)) {
case Canvas.UP:
snake.setDirection(UPWARD);
break;
case Canvas.DOWN:
snake.setDirection(DOWNWARD);
break;
case Canvas.LEFT:
snake.setDirection(LEFTWARD);
break;
case Canvas.RIGHT:
snake.setDirection(RIGHTWARD);
break;
case 0:
switch (keyCode) {
case Canvas.KEY_NUM2:
snake.setDirection(UPWARD);
break;
case Canvas.KEY_NUM8:
snake.setDirection(DOWNWARD);
break;
case Canvas.KEY_NUM4:
snake.setDirection(LEFTWARD);
break;
case Canvas.KEY_NUM6:
snake.setDirection(RIGHTWARD);
break;
}
break;
}
}

private int width = this.getWidth();

private int height = this.getHeight();

private Snake snake = new Snake();

private boolean eated = false;

private Food food = new Food();

}



不需要图片,直接可运行 :)
...全文
173 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
learnner 2005-07-28
  • 打赏
  • 举报
回复
我看了的,没有说你抄,是提醒你,有空可以看看对比一下,提高提高啊
topig 2005-07-28
  • 打赏
  • 举报
回复
没有任何意义
mituzhishi 2005-07-28
  • 打赏
  • 举报
回复
楼上的大哥,我不是抄它的,我可不敢欺骗群众。
learnner 2005-07-28
  • 打赏
  • 举报
回复
j2me开发包里带有贪吃蛇这个游戏的例子
xueyong1203 2005-07-28
  • 打赏
  • 举报
回复
:)

13,100

社区成员

发帖
与我相关
我的任务
社区描述
Java J2ME
社区管理员
  • J2ME社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧