`
明子健
  • 浏览: 576870 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

J2ME_贪吃蛇

    博客分类:
  • Java
阅读更多
/*
 *以下是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);
	}

}


2
0
分享到:
评论

相关推荐

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

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

    J2ME课程设计_贪吃蛇

    **J2ME课程设计——贪吃蛇** J2ME(Java Micro Edition)是Java平台的一个重要分支,主要用于嵌入式设备和移动设备的开发,如早期的智能手机和平板电脑。在J2ME平台上进行课程设计,可以让我们学习到Java语言的基础...

    基于java+J2ME的贪吃蛇游戏设计与实现(源码+文档).zip

    资源名字:基于java+J2ME的贪吃蛇游戏设计与实现(源码+文档)_java_J2ME_贪吃蛇游戏.zip 资源内容:项目全套源码+完整文档 源码说明: 全部项目源码都是经过测试校正后百分百成功运行。 适合场景:相关项目设计

    Snake(j2me).rar_j2me_j2me snake_j2me 游戏 源码_snake

    《J2ME游戏开发:贪吃蛇源码解析与学习指南》 在移动设备的早期时代,J2ME(Java 2 Micro Edition)是开发移动应用程序的主流平台,尤其在手机游戏领域,J2ME更是占据了一席之地。其中,贪吃蛇游戏作为经典的小型...

    J2ME版贪吃蛇游戏

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

    j2me_eclipse_souce_java_www2678.zu.com_

    1. **JAVA贪吃蛇游戏**:贪吃蛇游戏是早期手机游戏中非常流行的一款。它通常基于一个简单的二维网格,蛇会根据用户输入的方向移动,吃掉食物会使蛇变长。理解这个游戏的源码可以帮助学习基本的图形绘制、事件处理和...

    简单的J2ME代码 贪吃蛇

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

    基于J2ME手机游戏开发的主要技术_以_贪吃蛇_游戏为例.pdf

    基于J2ME手机游戏开发的主要技术_以_贪吃蛇_游戏为例

    基于J2ME的贪吃蛇游戏设计

    本游戏只对程序中定义的按键进行响应 (1)本游戏只对程序中所有定义的按键进行一一响应。比如:2,4,6,8。这4个键,分别控制蛇移动的上下左右四个方向。同时,4,6这两个键也可以用来选择菜单,回车键为确定的...

    j2me的贪吃蛇,Netbean编译运行

    【标题】"j2me的贪吃蛇,Netbean编译运行",揭示了这个项目是基于Java 2 Micro Edition(J2ME)平台开发的一个经典游戏——贪吃蛇,而开发工具是NetBeans IDE。这是一个针对移动设备或嵌入式系统的轻量级应用程序,...

    基于J2ME的贪吃蛇手机游戏开发

    【基于J2ME的贪吃蛇手机游戏开发】 在移动技术快速发展的时代,J2ME(Java Micro Edition)作为一款轻量级的Java平台,广泛应用于移动设备和嵌入式系统的应用程序开发。本项目旨在利用J2ME技术,设计并实现一款经典...

    基于J2ME的贪吃蛇游戏的开发与实现代码

    ### 基于J2ME的贪吃蛇游戏的开发与实现 #### J2ME概述 J2ME(Java 2 Platform, Micro Edition)是一种专为消费类电子产品设计的Java平台,它为移动设备提供了高度优化的运行环境。作为Java 2的一个重要组成部分,...

    基于J2ME的贪吃蛇游戏的开发与实现( 论文)

    ### 基于J2ME的贪吃蛇游戏的开发与实现 #### 一、引言 《基于J2ME的贪吃蛇游戏的开发与实现》这篇论文深入探讨了如何利用Java 2 Micro Edition (J2ME) 开发平台来实现经典的贪吃蛇游戏。随着移动通信技术的发展,...

    J2ME贪吃蛇原程序

    **J2ME贪吃蛇原程序详解** Java 2 Micro Edition (J2ME) 是一种针对小型设备,如移动电话和嵌入式系统的Java平台。它由两部分组成:KVM(K Virtual Machine)和MIDP(Mobile Information Device Profile)。在本...

    j2me贪吃蛇的制作思路

    总结,制作一个J2ME贪吃蛇游戏需要理解游戏逻辑、图形渲染、用户交互、音频处理等多个方面,这将是一个锻炼编程技能和理解移动设备限制的好项目。通过实践,你不仅能掌握J2ME编程,还能提高解决问题和项目管理的能力...

    j2me贪吃蛇源码

    【J2ME贪吃蛇源码详解】 J2ME,全称Java 2 Micro Edition,是Java平台的一个子集,主要用于开发移动设备、嵌入式系统等小型设备上的应用程序。这个"j2me贪吃蛇源码"是针对J2ME平台设计的一款经典游戏——贪吃蛇的...

    JAVA基于J2ME的贪吃蛇游戏源代码

    JAVA基于J2ME的贪吃蛇游戏源代码 https://blog.csdn.net/dearmite/article/details/131799642 2023年8月验证,无BUG 本系列校训 用免费公开视频,卷飞培训班哈人!打死不报班,赚钱靠狠干! 只要自己有电脑,前后...

    J2ME手机游戏贪吃蛇的简单代码

    **贪吃蛇游戏简介** 贪吃蛇是一款经典的电子游戏,起源于1976年的"Blockade",随后在各种平台如诺基亚手机上流行起来。在J2ME(Java Micro Edition)平台上,开发者可以利用Java语言为移动设备开发这款小游戏。J2ME...

    J2ME游戏贪吃蛇游戏

    J2ME 写的贪吃蛇游戏 通过画布来实现

Global site tag (gtag.js) - Google Analytics