/*
*以下是MySnakeCanvas.java源码
*/
package com.ming;
import java.util.Random;
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Graphics;
/*
* 一个简单的贪吃蛇小游戏
*/
public class MySnakeCanvas extends Canvas implements Runnable, CommandListener {
//蛇身长度
int snakeSize;
//蛇身宽度
int snakeWidth;
//蛇头坐标
int snakeHeadX,snakeHeadY;
//蛇身坐标
int[] snakeX=new int[100];
int[] snakeY=new int[100];
//蛇运动方向
String fx;
//间隔时间
int spaceTime;
//食物坐标
int foodX,foodY;
//分数
int score;
//控制游戏的暂停与继续
boolean isSpace;
//控制游戏胜负
boolean isLose=false;
boolean isWin=false;
//初始化一个线程
private Thread thread;
Command startC=new Command("开始", Command.OK, 1);
Command spaceC=new Command("暂停", Command.CANCEL, 1);
Random rdm=new Random();
public MySnakeCanvas(){
addCommand(startC);
addCommand(spaceC);
//添加监听器
setCommandListener(this);
initGame();
}
//游戏初始化
public void initGame(){
score=0;
snakeSize=5;
snakeWidth=6;
snakeHeadX=getWidth()/2;
snakeHeadY=getHeight()/2-1;
//暂停时间,根据spaceTime改变游戏难度,spaceTime值越小,蛇的移动速度越快
spaceTime=300;
isSpace=true;
fx="left";
for (int i = 0; i < snakeSize; i++) {
snakeX[i]=snakeHeadX+snakeWidth*i;
snakeY[i]=snakeHeadY;
}
getNewFood();
}
//获取一个随机食物
public void getNewFood(){
do {
foodX=rdm.nextInt(getWidth()/snakeWidth)*snakeWidth;
foodY=rdm.nextInt(getHeight()/snakeWidth)*snakeWidth;
} while (isBadFood());
}
//判断食物是否符合规定(若食物与蛇身重合则视为违规)
public boolean isBadFood(){
for (int i = 0; i < snakeSize; i++) {
if (foodX==snakeX[i]&&foodY==snakeY[i]) {
return true;
}
}
return false;
}
//移动蛇的位置
public void moveSnake(){
//指定蛇头坐标(将蛇身的第一个节点设为蛇头)
snakeX[0]=snakeHeadX;
snakeY[0]=snakeHeadY;
//蛇身跟随蛇头移动(将蛇蛇身的后一个节点移动到前一个节点的坐标位置)
for (int i = snakeSize; i >0; i--) {
snakeX[i]=snakeX[i-1];
snakeY[i]=snakeY[i-1];
}
//移动蛇头
if (fx=="left") {
snakeHeadX-=snakeWidth;
}else if (fx=="right") {
snakeHeadX+=snakeWidth;
}else if (fx=="up") {
snakeHeadY-=snakeWidth;
}else if (fx=="down") {
snakeHeadY+=snakeWidth;
}
//重新指定蛇头位置
snakeX[0]=snakeHeadX;
snakeY[0]=snakeHeadY;
//测试位置偏差
//System.out.println("foodX:"+foodX+"*********snakeHeadX:"+snakeHeadX);
//System.out.println("foodY:"+foodY+"*********snakeHeadY:"+snakeHeadY);
//System.out.println();
if (snakeHeadX==foodX&&snakeHeadY==foodY) {
eatFood();
}
if (snakeHeadX>getWidth()||snakeHeadY>getHeight()||snakeHeadX<0||snakeHeadY<0) {
youLose();
}
for (int i = 1; i < snakeSize; i++) {
if (snakeHeadX==snakeX[i]&&snakeHeadY==snakeY[i]) {
youLose();
}
}
//过关条件
if (snakeSize>100) {
youWin();
}
repaint();
}
public void eatFood(){
snakeSize++;
score+=5;
getNewFood();
repaint();
}
public void youLose(){
//提示消息
System.out.println("you Lose");
isLose=true;
isWin=false;
}
public void youWin(){
//提示消息
System.out.println("you Win");
isLose=false;
isWin=true;
//进入下一关
}
public void commandAction(Command c, Displayable d) {
// TODO Auto-generated method stub
if (c==startC) {
//开始
isSpace=false;
thread=new Thread(this);
thread.start();
}else if (c==spaceC) {
//暂停
isSpace=true;
}
}
public void run() {
// TODO Auto-generated method stub
while (!isSpace) {
moveSnake();
try {
//线程暂停
Thread.sleep(spaceTime);
} catch (Exception e) {
// TODO: handle exception
}
}
}
//根据按键操作改变蛇的相对运动方向
protected void keyPressed(int keyCode) {
//方向 上 下 左 右
switch(getGameAction(keyCode)) {
case Canvas.LEFT:
if (fx!="right") {fx="left";}
break;
case Canvas.RIGHT:
if (fx!="left") {fx="right";}
break;
case Canvas.DOWN:
if (fx!="up") {fx="down";}
break;
case Canvas.UP:
if (fx!="down") {fx="up";}
break;
}
}
protected void paint(Graphics g) {
// TODO Auto-generated method stub
//清屏
g.setColor(0xffffff);
g.fillRect(0, 0, getWidth(), getHeight());
g.setColor(0x111111);
g.fillRect(foodX, foodY, snakeWidth,snakeWidth );
g.setColor(0x333333);
for (int i = 0; i < snakeSize ; i++) {
g.fillRect(snakeX[i], snakeY[i], snakeWidth,snakeWidth );
}
if (isLose) {
//清屏
g.setColor(0xffffff);
g.fillRect(0, 0, getWidth(), getHeight());
g.setColor(0xff00000);
g.drawString("You Lose!", getWidth()/2, getHeight()/2, Graphics.TOP|Graphics.LEFT);
}
if (isWin) {
//清屏
g.setColor(0xffffff);
g.fillRect(0, 0, getWidth(), getHeight());
g.setColor(0xff00000);
g.drawString("You Win!", getWidth()/2, getHeight()/2, Graphics.TOP|Graphics.LEFT);
}
g.drawString("score:"+score, 10, 10, Graphics.TOP|Graphics.LEFT);
}
}
//////////////////////////////////////////////////////////////
/*
*以下是MyAction.java源码
*/
package com.ming;
import javax.microedition.lcdui.Display;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
public class MyAction extends MIDlet {
Display display;
protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
// TODO Auto-generated method stub
}
protected void pauseApp() {
// TODO Auto-generated method stub
}
protected void startApp() throws MIDletStateChangeException {
// TODO Auto-generated method stub
display=Display.getDisplay(this);
MySnakeCanvas msc=new MySnakeCanvas();
display.setCurrent(msc);
}
}
分享到:
相关推荐
《J2ME贪吃蛇游戏源代码解析及学习指南》 贪吃蛇是一款经典的游戏,深受全球玩家喜爱。在移动设备领域,J2ME(Java Micro Edition)平台曾是开发移动应用的重要选择,其中就包括了贪吃蛇这个游戏。本文将深入解析...
**J2ME课程设计——贪吃蛇** J2ME(Java Micro Edition)是Java平台的一个重要分支,主要用于嵌入式设备和移动设备的开发,如早期的智能手机和平板电脑。在J2ME平台上进行课程设计,可以让我们学习到Java语言的基础...
资源名字:基于java+J2ME的贪吃蛇游戏设计与实现(源码+文档)_java_J2ME_贪吃蛇游戏.zip 资源内容:项目全套源码+完整文档 源码说明: 全部项目源码都是经过测试校正后百分百成功运行。 适合场景:相关项目设计
《J2ME游戏开发:贪吃蛇源码解析与学习指南》 在移动设备的早期时代,J2ME(Java 2 Micro Edition)是开发移动应用程序的主流平台,尤其在手机游戏领域,J2ME更是占据了一席之地。其中,贪吃蛇游戏作为经典的小型...
- **J2ME贪吃蛇项目分析与说明.doc**:这可能是一个详细的项目文档,包含了游戏设计思路、技术实现细节以及可能的改进点。对于学习者来说,这是一个很好的参考资料。 - **GuttlerMIDlet.1**:看起来像一个MIDlet...
1. **JAVA贪吃蛇游戏**:贪吃蛇游戏是早期手机游戏中非常流行的一款。它通常基于一个简单的二维网格,蛇会根据用户输入的方向移动,吃掉食物会使蛇变长。理解这个游戏的源码可以帮助学习基本的图形绘制、事件处理和...
一个简单的J2ME贪吃蛇游戏代码,刚学J2ME的可以参考一下,代码很少只2个类,每个要点均有注译。 整个工程项目上传的,一般配好的直接导入就可以了(eclipse+WTK)。纯代码大小6.7k,在src目录。不行的直接复制粘贴进...
基于J2ME手机游戏开发的主要技术_以_贪吃蛇_游戏为例
本游戏只对程序中定义的按键进行响应 (1)本游戏只对程序中所有定义的按键进行一一响应。比如:2,4,6,8。这4个键,分别控制蛇移动的上下左右四个方向。同时,4,6这两个键也可以用来选择菜单,回车键为确定的...
【标题】"j2me的贪吃蛇,Netbean编译运行",揭示了这个项目是基于Java 2 Micro Edition(J2ME)平台开发的一个经典游戏——贪吃蛇,而开发工具是NetBeans IDE。这是一个针对移动设备或嵌入式系统的轻量级应用程序,...
【基于J2ME的贪吃蛇手机游戏开发】 在移动技术快速发展的时代,J2ME(Java Micro Edition)作为一款轻量级的Java平台,广泛应用于移动设备和嵌入式系统的应用程序开发。本项目旨在利用J2ME技术,设计并实现一款经典...
### 基于J2ME的贪吃蛇游戏的开发与实现 #### J2ME概述 J2ME(Java 2 Platform, Micro Edition)是一种专为消费类电子产品设计的Java平台,它为移动设备提供了高度优化的运行环境。作为Java 2的一个重要组成部分,...
### 基于J2ME的贪吃蛇游戏的开发与实现 #### 一、引言 《基于J2ME的贪吃蛇游戏的开发与实现》这篇论文深入探讨了如何利用Java 2 Micro Edition (J2ME) 开发平台来实现经典的贪吃蛇游戏。随着移动通信技术的发展,...
**J2ME贪吃蛇原程序详解** Java 2 Micro Edition (J2ME) 是一种针对小型设备,如移动电话和嵌入式系统的Java平台。它由两部分组成:KVM(K Virtual Machine)和MIDP(Mobile Information Device Profile)。在本...
总结,制作一个J2ME贪吃蛇游戏需要理解游戏逻辑、图形渲染、用户交互、音频处理等多个方面,这将是一个锻炼编程技能和理解移动设备限制的好项目。通过实践,你不仅能掌握J2ME编程,还能提高解决问题和项目管理的能力...
【J2ME贪吃蛇源码详解】 J2ME,全称Java 2 Micro Edition,是Java平台的一个子集,主要用于开发移动设备、嵌入式系统等小型设备上的应用程序。这个"j2me贪吃蛇源码"是针对J2ME平台设计的一款经典游戏——贪吃蛇的...
JAVA基于J2ME的贪吃蛇游戏源代码 https://blog.csdn.net/dearmite/article/details/131799642 2023年8月验证,无BUG 本系列校训 用免费公开视频,卷飞培训班哈人!打死不报班,赚钱靠狠干! 只要自己有电脑,前后...
**贪吃蛇游戏简介** 贪吃蛇是一款经典的电子游戏,起源于1976年的"Blockade",随后在各种平台如诺基亚手机上流行起来。在J2ME(Java Micro Edition)平台上,开发者可以利用Java语言为移动设备开发这款小游戏。J2ME...
J2ME 写的贪吃蛇游戏 通过画布来实现