/*
*以下是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贪吃蛇源代码 很适合初学者试用
不错的一个手机课程设计程序,本人局的很不错所以上传上来大家共享
资源名字:基于java+J2ME的贪吃蛇游戏设计与实现(源码+文档)_java_J2ME_贪吃蛇游戏.zip 资源内容:项目全套源码+完整文档 源码说明: 全部项目源码都是经过测试校正后百分百成功运行。 适合场景:相关项目设计
手机游戏贪吃蛇源码,学习j2me必备,画矩形实现
一个简单的J2ME贪吃蛇游戏代码,刚学J2ME的可以参考一下,代码很少只2个类,每个要点均有注译。 整个工程项目上传的,一般配好的直接导入就可以了(eclipse+WTK)。纯代码大小6.7k,在src目录。不行的直接复制粘贴进...
基于J2ME手机游戏开发的主要技术_以_贪吃蛇_游戏为例
本游戏只对程序中定义的按键进行响应 (1)本游戏只对程序中所有定义的按键进行一一响应。比如:2,4,6,8。这4个键,分别控制蛇移动的上下左右四个方向。同时,4,6这两个键也可以用来选择菜单,回车键为确定的...
j2me贪吃蛇的制作思路 j2me贪吃蛇的制作思路
NULL 博文链接:https://smq-java.iteye.com/blog/418968
j2me手机程序eclipse开发基础随书源码,里面有JAVA贪吃蛇游戏、俄罗斯广尝飞行射击等经典小游戏的源码
基于J2ME的贪吃蛇手机游戏开发,课程设计实训报告
基于J2ME的贪吃蛇游戏的开发与实现:J2ME(Java 2 Micro Edition)是一种主要针对消费类电子设备的高度优化的Java运行环境,是Java 2的一个组成部分。当今开发手机 软件、游戏,到嵌入式开发,J2ME都是主流。该文介绍...
基于J2ME的贪吃蛇游戏的开发与实现,强劲的算法,思路清晰,很经典得游戏论文。
JAVA基于J2ME的贪吃蛇游戏源代码 https://blog.csdn.net/dearmite/article/details/131799642 2023年8月验证,无BUG 本系列校训 用免费公开视频,卷飞培训班哈人!打死不报班,赚钱靠狠干! 只要自己有电脑,前后...
J2ME 写的贪吃蛇游戏 通过画布来实现
j2me贪吃蛇游戏源码,j2me贪吃蛇游戏源码,j2me贪吃蛇游戏源码,j2me贪吃蛇游戏源码,j2me贪吃蛇游戏源码
j2me贪吃蛇源码,可以正常运行,对初学者有一定帮助
J2ME 贪吃蛇游戏代码 主要实现贪吃蛇游戏基本功能,额外实现贪吃蛇穿身、穿墙等功能。
j2me 贪吃蛇源码j2me 贪吃蛇源码j2me 贪吃蛇源码j2me 贪吃蛇源码j2me 贪吃蛇源码j2me 贪吃蛇源码