展开全部
先建立个J2me工程 在建立个myMIDlet 把这个代码复制进去
package TanChiShe.test;
import javax.microedition.lcdui.Display;
import javax.microedition.midlet.MIDlet;
public class myMIDlet extends MIDlet {
SnakeCanvas displayable = new SnakeCanvas();
public myMIDlet() {
Display.getDisplay(this).setCurrent(displayable);
}
public void startApp() {
}
public void pauseApp() {
}
public void destroyApp(boolean unconditional) {
}
}
在建个class类命名为SnakeCanvas 把以下代码复制上去
package TanChiShe.test;
import java.util.Random;
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Graphics;
/**
* 贪吃蛇游戏
*/
public class SnakeCanvas extends Canvas implements Runnable {
/** 存储贪吃蛇节点坐标,其中第二维下标为0的代表x坐标,第二维下标是1的代表y坐标 */
int[][] snake = new int[200][2];
/** 已经使用的节点数量 */
int snakeNum;
/** 贪吃蛇运动方向,0代表向上,1代表向下,2代表向左,3代表向右 */
int point;
/** 向上 */
private final int KEY_UP = 0;
/** 向下 */
private final int KEY_DOWN = 1;
/** 向左 */
private final int KEY_LEFT = 2;
/** 向右 */
private final int KEY_RIGHT = 3;
/** 游戏区域宽度 */
int width, height;
/** 蛇身单元宽度 */
private final byte snakeWidth = 10;
/** 是否处于暂停状态,true代表暂停 */
boolean isPaused = false;
/** 是否处于运行状态,true代表运行 */
boolean isRun = true;
/** 食物的X坐标 */
int foodX, foodY;
/** 食物的闪烁控制 */
boolean b = true;
public boolean gameOver;
/** Random对象 */
Random r = new Random();
public SnakeCanvas() {
// 初始化
init();
width = getWidth();
height = getHeight();
new Thread(this).start();
}
/**
* 初始化开始数据
*/
private void init() {
// 初始化节点数量
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;
}
protected void paint(Graphics g) {
// 清屏
g.setColor(0xffffff);
g.fillRect(0, 0, width, height);
g.setColor(0);
// 绘制蛇身
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);
}
if (gameOver) {
g.drawString("GAMEOVER", 50, 100, 0);
}
if (isPaused) {
g.drawString("游戏暂停", width / 2, 100, 0);
} else {
g.drawString("正在游戏", width, height, Graphics.BOTTOM
| Graphics.RIGHT);
}
}
private void move(int point) {
// 蛇身移动
for (int i = snakeNum - 1; i > 0; i--) {
snake[i][0] = snake[i - 1][0];
snake[i][1] = snake[i - 1][1];
}
// 第一个单元格移动
switch (point) {
case KEY_UP:
snake[0][1] = snake[0][1] - snakeWidth;
break;
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;
}
}
/**
* 吃掉食物,自身增长
*/
private void eatFood() {
// 判别蛇头是否和食物重叠
if (snake[0][0] == foodX && snake[0][1] == foodY) {
snakeNum++;
getFood();
}
}
/**
* 产生食物 说明:食物的坐标必须位于屏幕内,且不能和蛇身重合
*/
private void getFood() {
while (true) {
foodX = Math.abs(r.nextInt() % (width - snakeWidth + 1))
/ snakeWidth * snakeWidth;
foodY = Math.abs(r.nextInt() % (height - snakeWidth + 1))
/ snakeWidth * 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;
}
}
}
/**
* 判断游戏是否结束 结束条件: 1、蛇头超出边界 2、蛇头碰到自身
*/
private boolean GameOver() {
// 边界判别
if (snake[0][0] < 0 || snake[0][0] > (width - snakeWidth)
|| snake[0][1] < 0 || snake[0][1] > (height - snakeWidth)) {
return true;
}
// 碰到自身
for (int i = 4; i < snakeNum; i++) {
if (snake[0][0] == snake[i][0] && snake[0][1] == snake[i][1]) {
return true;
}
}
return false;
}
/**
* 事件处理
*/
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:
// 暂停和继续
isPaused = !isPaused;
break;
}
repaint();
}
/**
* 线程方法 使用精确延时
*/
public void run() {
try {
while (isRun) {
// 开始时间
Thread.sleep(100);
if (!isPaused) {
// 吃食物
eatFood();
// 移动
move(point);
// 结束游戏
if (GameOver()) {
gameOver = true;
repaint();
break;
}
// 控制闪烁
b = !b;
}
// 重新绘制
repaint();
}
} catch (Exception e) {
}
}
}
最后引入包 Ctrl+Shift+o 在myMIDlet右键Run AS 选择第一个就OK了 完毕
package TanChiShe.test;
import javax.microedition.lcdui.Display;
import javax.microedition.midlet.MIDlet;
public class myMIDlet extends MIDlet {
SnakeCanvas displayable = new SnakeCanvas();
public myMIDlet() {
Display.getDisplay(this).setCurrent(displayable);
}
public void startApp() {
}
public void pauseApp() {
}
public void destroyApp(boolean unconditional) {
}
}
在建个class类命名为SnakeCanvas 把以下代码复制上去
package TanChiShe.test;
import java.util.Random;
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Graphics;
/**
* 贪吃蛇游戏
*/
public class SnakeCanvas extends Canvas implements Runnable {
/** 存储贪吃蛇节点坐标,其中第二维下标为0的代表x坐标,第二维下标是1的代表y坐标 */
int[][] snake = new int[200][2];
/** 已经使用的节点数量 */
int snakeNum;
/** 贪吃蛇运动方向,0代表向上,1代表向下,2代表向左,3代表向右 */
int point;
/** 向上 */
private final int KEY_UP = 0;
/** 向下 */
private final int KEY_DOWN = 1;
/** 向左 */
private final int KEY_LEFT = 2;
/** 向右 */
private final int KEY_RIGHT = 3;
/** 游戏区域宽度 */
int width, height;
/** 蛇身单元宽度 */
private final byte snakeWidth = 10;
/** 是否处于暂停状态,true代表暂停 */
boolean isPaused = false;
/** 是否处于运行状态,true代表运行 */
boolean isRun = true;
/** 食物的X坐标 */
int foodX, foodY;
/** 食物的闪烁控制 */
boolean b = true;
public boolean gameOver;
/** Random对象 */
Random r = new Random();
public SnakeCanvas() {
// 初始化
init();
width = getWidth();
height = getHeight();
new Thread(this).start();
}
/**
* 初始化开始数据
*/
private void init() {
// 初始化节点数量
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;
}
protected void paint(Graphics g) {
// 清屏
g.setColor(0xffffff);
g.fillRect(0, 0, width, height);
g.setColor(0);
// 绘制蛇身
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);
}
if (gameOver) {
g.drawString("GAMEOVER", 50, 100, 0);
}
if (isPaused) {
g.drawString("游戏暂停", width / 2, 100, 0);
} else {
g.drawString("正在游戏", width, height, Graphics.BOTTOM
| Graphics.RIGHT);
}
}
private void move(int point) {
// 蛇身移动
for (int i = snakeNum - 1; i > 0; i--) {
snake[i][0] = snake[i - 1][0];
snake[i][1] = snake[i - 1][1];
}
// 第一个单元格移动
switch (point) {
case KEY_UP:
snake[0][1] = snake[0][1] - snakeWidth;
break;
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;
}
}
/**
* 吃掉食物,自身增长
*/
private void eatFood() {
// 判别蛇头是否和食物重叠
if (snake[0][0] == foodX && snake[0][1] == foodY) {
snakeNum++;
getFood();
}
}
/**
* 产生食物 说明:食物的坐标必须位于屏幕内,且不能和蛇身重合
*/
private void getFood() {
while (true) {
foodX = Math.abs(r.nextInt() % (width - snakeWidth + 1))
/ snakeWidth * snakeWidth;
foodY = Math.abs(r.nextInt() % (height - snakeWidth + 1))
/ snakeWidth * 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;
}
}
}
/**
* 判断游戏是否结束 结束条件: 1、蛇头超出边界 2、蛇头碰到自身
*/
private boolean GameOver() {
// 边界判别
if (snake[0][0] < 0 || snake[0][0] > (width - snakeWidth)
|| snake[0][1] < 0 || snake[0][1] > (height - snakeWidth)) {
return true;
}
// 碰到自身
for (int i = 4; i < snakeNum; i++) {
if (snake[0][0] == snake[i][0] && snake[0][1] == snake[i][1]) {
return true;
}
}
return false;
}
/**
* 事件处理
*/
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:
// 暂停和继续
isPaused = !isPaused;
break;
}
repaint();
}
/**
* 线程方法 使用精确延时
*/
public void run() {
try {
while (isRun) {
// 开始时间
Thread.sleep(100);
if (!isPaused) {
// 吃食物
eatFood();
// 移动
move(point);
// 结束游戏
if (GameOver()) {
gameOver = true;
repaint();
break;
}
// 控制闪烁
b = !b;
}
// 重新绘制
repaint();
}
} catch (Exception e) {
}
}
}
最后引入包 Ctrl+Shift+o 在myMIDlet右键Run AS 选择第一个就OK了 完毕
镭速传输
2024-10-28 广告
2024-10-28 广告
作为深圳市云语科技有限公司的一员,我们推出的FTP替代升级方案,旨在解决传统FTP在安全性、效率、稳定性及管理方面的不足。我们的产品通过采用自主研发的Raysync传输协议,实现高效、安全的文件传输,即使在恶劣网络环境下也能确保传输的稳定性...
点击进入详情页
本回答由镭速传输提供
展开全部
wtk自带的代码都可以运行,你自己新建一个项目,然后将代码复制到项目目录下,刷新.就可以看到代码.打开midlet类,点击运行,可以看见模拟器跳出来了(如果你的配置是正确的!).
wtk自带代码目录: 安装目录\WTK2.5.2\apps 中.
Eclipse目录:工作环境\建立的项目名\ 中
只需要将res 和scr复制过去就可以了!
如果不清楚 hi 我
wtk自带代码目录: 安装目录\WTK2.5.2\apps 中.
Eclipse目录:工作环境\建立的项目名\ 中
只需要将res 和scr复制过去就可以了!
如果不清楚 hi 我
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
简单的网上一大堆,难的5分也求不来
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询