`

J2ME贪吃蛇源代码——200行左右,包含详细注释

阅读更多

//文件名:SnakeMIDlet .java

package snake;

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

public class SnakeMIDlet extends MIDlet {
SnakeCanvas displayable = new SnakeCanvas();
public SnakeMIDlet() {
Display.getDisplay(this).setCurrent(displayable);
}

public void startApp() {}

public void pauseApp() {}

public void destroyApp(boolean unconditional) {}

}

//文件名:SnakeCanvas.java

package snake;

import java.util.*;
import javax.microedition.lcdui.*;

/**
* 贪吃蛇游戏
*/
public class SnakeCanvas extends Canvas implements Runnable{
/**存储贪吃蛇节点坐标,其中第二维下标为0的代表x坐标,第二维下标是1的代表y坐标*/
int[][] snake = new int[200][2];
/**已经使用的节点数量*/
int snakeNum;
/**贪吃蛇运动方向,0代表向上,1代表向下,2代表向左,3代表向右*/
int direction;
/*移动方向*/
/**向上*/
private final int DIRECTION_UP = 0;
/**向下*/
private final int DIRECTION_DOWN = 1;
/**向左*/
private final int DIRECTION_LEFT = 2;
/**向右*/
private final int DIRECTION_RIGHT = 3;

/**游戏区域宽度*/
int width;
/**游戏区域高度*/
int height;

/**蛇身单元宽度*/
private final byte SNAKEWIDTH = 4;

/**是否处于暂停状态,true代表暂停*/
boolean isPaused = false;
/**是否处于运行状态,true代表运行*/
boolean isRun = true;

/**时间间隔*/
private final int SLEEP_TIME = 300;

/**食物的X坐标*/
int foodX;
/**食物的Y坐标*/
int foodY;
/**食物的闪烁控制*/
boolean b = true;

/**Random对象*/
Random random = new Random();

public SnakeCanvas() {
//初始化
init();
width = this.getWidth();
height = this.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;
}
//初始化移动方向
direction = DIRECTION_RIGHT;
//初始化食物坐标
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);
}
}

private void move(int direction){
//蛇身移动
for(int i = snakeNum - 1;i > 0;i--){
snake[i][0] = snake[i - 1][0];
snake[i][1] = snake[i - 1][1];
}

//第一个单元格移动
switch(direction){
case DIRECTION_UP:
snake[0][1] = snake[0][1] - SNAKEWIDTH;
break;
case DIRECTION_DOWN:
snake[0][1] = snake[0][1] + SNAKEWIDTH;
break;
case DIRECTION_LEFT:
snake[0][0] = snake[0][0] - SNAKEWIDTH;
break;
case DIRECTION_RIGHT:
snake[0][0] = snake[0][0] + SNAKEWIDTH;
break;
}
}
/**
* 吃掉食物,自身增长
*/
private void eatFood(){
//判别蛇头是否和食物重叠
if(snake[0][0] == foodX && snake[0][1] == foodY){
snakeNum++;
generateFood();
}
}
/**
* 产生食物
* 说明:食物的坐标必须位于屏幕内,且不能和蛇身重合
*/
private void generateFood(){
while(true){
foodX = Math.abs(random.nextInt() % (width - SNAKEWIDTH + 1))
/ SNAKEWIDTH * SNAKEWIDTH;
foodY = Math.abs(random.nextInt() % (height - SNAKEWIDTH + 1))
/ SNAKEWIDTH * SNAKEWIDTH;
boolean b = true;
for(int i = 0;i < snakeNum;i++){
if(foodX == snake[i][0] && snake[i][1] == foodY){
b = false;
break;
}
}
if(b){
break;
}
}
}

/**
* 判断游戏是否结束
* 结束条件:
* 1、蛇头超出边界
* 2、蛇头碰到自身
*/
private boolean isGameOver(){
//边界判别
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 = this.getGameAction(keyCode);
//改变方向
switch(action){
case UP:
if(direction != DIRECTION_DOWN){
direction = DIRECTION_UP;
}
break;
case DOWN:
if(direction != DIRECTION_UP){
direction = DIRECTION_DOWN;
}
break;
case LEFT:
if(direction != DIRECTION_RIGHT){
direction = DIRECTION_LEFT;
}
break;
case RIGHT:
if(direction != DIRECTION_LEFT){
direction = DIRECTION_RIGHT;
}
break;
case FIRE:
//暂停和继续
isPaused = !isPaused;
break;
}
}

/**
* 线程方法
* 使用精确延时
*/
public void run(){
try{
while (isRun) {
//开始时间
long start = System.currentTimeMillis();


if(!isPaused){
//吃食物
eatFood();
//移动
move(direction);

//结束游戏
if(isGameOver()){
break;
}

//控制闪烁
b = !b;
}
//重新绘制
repaint();

long end = System.currentTimeMillis();

//延时
if(end - start < SLEEP_TIME){
Thread.sleep(SLEEP_TIME - (end - start));
}
}
}catch(Exception e){}
}
}

广告:如果觉得文章对你有帮助,请在MVB评选中投我一票,谢谢!投票地址:
分享到:
评论

相关推荐

    j2me贪吃蛇源代码

    首先,我们来看标题中的"j2me贪吃蛇源代码",这表明我们将讨论的是一款使用Java 2 Micro Edition语言编写的经典游戏——贪吃蛇。J2ME是一个为小型设备如手机和嵌入式设备提供Java运行环境的平台,它的轻量级特性使得...

    J2ME贪吃蛇源代码

    【标题】"J2ME贪吃蛇源代码"揭示了这个压缩包中包含的是一个用Java 2 Micro Edition (J2ME)开发的贪吃蛇游戏的完整源代码。J2ME是Java平台的一个子集,主要用于嵌入式设备和移动设备的开发,如早期的手机和PDA。这个...

    J2me贪吃蛇源代码

    【J2ME贪吃蛇源代码详解】 J2ME(Java 2 Micro Edition)是Java平台的一个子集,主要用于移动设备、嵌入式系统和其他计算设备的开发。它提供了跨平台的能力,使得开发者可以用Java编写一次,到处运行。在本案例中,...

    J2ME 贪吃蛇 源代码

    【J2ME 贪吃蛇 源代码】是一个基于Java 2 Micro Edition (J2ME) 平台开发的经典游戏项目。J2ME 是Java的一种轻量级平台,主要用于移动设备和嵌入式设备上的应用程序开发,如手机、智能手表等。这个项目的描述表明,...

    j2me贪吃蛇游戏源代码

    【J2ME贪吃蛇游戏源代码解析】 J2ME,全称为Java 2 Micro Edition,是Java平台的一个子集,主要用于开发移动设备、嵌入式设备上的应用程序。这款“贪吃蛇”游戏源代码是基于J2ME编写的,旨在提供一个在手机客户端上...

    J2ME扫雷源代码 J2ME扫雷源代码

    J2ME扫雷源代码J2ME扫雷源代码J2ME扫雷源代码J2ME扫雷源代码J2ME扫雷源代码J2ME扫雷源代码J2ME扫雷源代码J2ME扫雷源代码J2ME扫雷源代码J2ME扫雷源代码J2ME扫雷源代码J2ME扫雷源代码

    J2ME贪吃蛇原程序

    在本教程中,我们将深入探讨一个基于J2ME开发的经典游戏——贪吃蛇的源代码,这是一个很好的学习实例,它包含了详细的注释,代码结构清晰易懂。 1. **游戏架构** 贪吃蛇游戏通常包含以下几个核心组件: - 游戏...

    SnakeMIDlet.zip_J2me 贪吃蛇 代码_j2me snake_snake j2me_贪吃蛇

    《J2ME贪吃蛇游戏源代码解析及学习指南》 贪吃蛇是一款经典的游戏,深受全球玩家喜爱。在移动设备领域,J2ME(Java Micro Edition)平台曾是开发移动应用的重要选择,其中就包括了贪吃蛇这个游戏。本文将深入解析...

    j2me贪吃蛇的制作思路

    在本文中,我们将深入探讨如何使用Java 2 Micro Edition(J2ME)技术来创建一个经典的游戏——贪吃蛇。J2ME是一个适用于移动设备和嵌入式系统的Java平台,它允许开发者创建丰富的应用程序和游戏。 一、环境搭建 ...

    J2ME贪吃蛇源程序 面向对象设计思想

    **J2ME贪吃蛇源程序 - 面向对象设计思想** J2ME(Java Micro Edition)是一种轻量级的Java平台,主要用于移动设备和嵌入式系统。在这个平台上开发游戏,如“贪吃蛇”,是学习Java编程和理解面向对象设计思想的良好...

    简单的J2ME代码 贪吃蛇

    一个简单的J2ME贪吃蛇游戏代码,刚学J2ME的可以参考一下,代码很少只2个类,每个要点均有注译。 整个工程项目上传的,一般配好的直接导入就可以了(eclipse+WTK)。纯代码大小6.7k,在src目录。不行的直接复制粘贴进...

    j2me贪吃蛇源程序

    【标题】"j2me贪吃蛇源程序"揭示了这个压缩包中包含的是一个基于Java 2 Micro Edition (J2ME)平台开发的贪吃蛇游戏的源代码。J2ME是Java的一个子集,专门用于嵌入式设备和移动设备的编程,如早期的手机和掌上电脑。...

    java基于J2ME的游戏开发——贪吃蛇论文.docx

    "java基于J2ME的游戏开发——贪吃蛇论文" J2ME(Java 2 Micro Edition)は、近年来随着各种不同设备、尤其是移动通信设备的飞速发展而诞生的新的开发技术。J2ME 是Java平台的微型版,专门为资源有限的设备设计,...

    j2me贪吃蛇源码

    这个"j2me贪吃蛇源码"是针对J2ME平台设计的一款经典游戏——贪吃蛇的实现。对于初学者来说,研究这段源码不仅可以了解游戏的基本逻辑,还能深入理解J2ME编程的基础知识。 1. **J2ME环境搭建** 在开始学习源码前,...

    J2ME 贪吃蛇

    综上所述,J2ME贪吃蛇游戏的开发涉及了移动应用开发的基础,包括游戏逻辑设计、图形绘制、事件处理、碰撞检测等多个方面,对于学习J2ME和游戏编程具有很好的实践价值。通过这个游戏,开发者可以深入理解移动设备上的...

    J2ME版贪吃蛇游戏

    - **J2ME贪吃蛇项目分析与说明.doc**:这可能是一个详细的项目文档,包含了游戏设计思路、技术实现细节以及可能的改进点。对于学习者来说,这是一个很好的参考资料。 - **GuttlerMIDlet.1**:看起来像一个MIDlet...

    j2me项目-贪吃蛇源代码

    《贪吃蛇》是一款经典的游戏...总之,这个J2ME项目的贪吃蛇源代码是一个很好的学习资源,适合那些想要进入移动游戏开发领域的初学者。通过实际动手操作,可以加深对J2ME编程的理解,并逐步掌握构建简单移动游戏的技巧。

    J2me 游戏源代码

    描述中提到的“多个j2me游戏源代码”暗示了这个压缩包可能包含了多种不同类型的J2ME游戏,如益智、动作、冒险或休闲等。这些游戏可能具有不同的复杂度,适合不同程度的开发者学习。"游戏简单易学"意味着这些源代码...

Global site tag (gtag.js) - Google Analytics