`

利用J2ME制作的手机游戏----贪吃蛇

    博客分类:
  • J2ME
 
阅读更多

在此附上游戏画布的的代码及完成后的产品

package com.xiang.game.graph;


import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Gauge;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.TextField;

import com.xiang.game.api.object.Crawler;
import com.xiang.game.api.object.SingleNode;
import com.xiang.game.api.object.Snake;
import com.xiang.game.api.object.SnakeInit;
import com.xiang.game.util.GameConstant;
import com.xiangqi.control.Navigator;

public class MyCanvas extends Canvas implements CommandListener {
	private Snake snake;
	private Crawler crawler;
	private static Displayable instance;
	//0表示还在游戏,1表示游戏失败结束,2表示游戏成功结束
	private int gameover = 0; 

	TextField url = null;

	Gauge volume = null;
	
	private String gameoveralert = "";
	
	synchronized public static Displayable getInstance() {

		if (instance == null) {
			instance = new MyCanvas();
		}

		return instance;

	}

	private MyCanvas() {
		if(this.getWidth()/10 > this.getHeight()/10)
			GameConstant.mapSize =  this.getHeight()/10;
		else
			GameConstant.mapSize =  this.getWidth()/10;
		setTitle("游戏");
		addCommand(new Command("规则介绍", Command.HELP, 1));
		addCommand(new Command("返回", Command.BACK, 1));
		setCommandListener(this);
		snake = SnakeInit.init();
		crawler = new Crawler(snake);
		//启动多线程
		drawSnakeByThread();
	}

	public void commandAction(Command c, Displayable d) {

		Navigator.flow(c.getLabel());

	}
	protected void keyPressed(int keyCode) {
		if(gameover!=1){
		if(getGameAction(keyCode) == Canvas.UP || getGameAction(keyCode) == Canvas.DOWN
				|| getGameAction(keyCode) == Canvas.LEFT || getGameAction(keyCode) == Canvas.RIGHT)
			if(!SnakeInit.ifGoingTouchTheSide(getGameAction(keyCode), snake)){
				//判断蛇不能往身体的反方向行走,true为反方向行走
				snake = SnakeInit.eatOrGo(snake, crawler, getGameAction(keyCode));
			}else{
				//碰到边界游戏结束
				gameover = 1;
			}
		repaint();
		}
	}

	protected void paint(Graphics g) {
		if(gameover == 0){
		g.setColor(255, 255, 255);
		g.fillRect(0,0,this.getWidth(),this.getHeight());
		g.setColor(0, 0, 0);
		for (int i = 0; i < GameConstant.mapSize + 1; i++) {
			// 绘制X线
			g.drawLine(0, i * GameConstant.singleSize, GameConstant.mapSize * GameConstant.singleSize, i
					* GameConstant.singleSize);
			// 绘制Y线
			g.drawLine(i * GameConstant.singleSize, 0, i * GameConstant.singleSize, GameConstant.mapSize
					* GameConstant.singleSize);
		}
		g.setColor(140, 101, 240);
		
		SingleNode[] snakeTemplate = snake.getSnakeTemplate();
		for (int i = 0; i < snakeTemplate.length; i++) {
			SingleNode singleNode = snakeTemplate[i];
			g.fillRect(singleNode.getxCoordinate() * 10 + 1, singleNode.getyCoordinate() * 10 + 1, 10 - 1, 10 - 1);
		}
	
		g.fillRect(crawler.getxCoordinate() * 10 + 1, crawler.getyCoordinate() * 10 + 1, 10 - 1, 10 - 1);
		}else {
			g.drawString(gameoveralert, 50, 50, 0);
		}
	}
	
	public void drawSnakeByThread(){
		Thread backgroundThread = new Thread(
				new Runnable() {
					public void run() {
						while(gameover == 0){
							if(!SnakeInit.ifGoingTouchTheSide(SnakeInit.getDirectionByNode(snake), snake)){
								//判断蛇不能往身体的反方向行走,true为反方向行走
//								snake = SnakeInit.eatOrGo(snake, crawler, SnakeInit.getDirectionByNode(snake));
								int direction = SnakeInit.getDirectionByNode(snake);
								if(!SnakeInit.getIfGostraight(direction, snake)){
									if(SnakeInit.ifTouchTheCrawler(snake, crawler, direction)){
										snake = SnakeInit.eat(direction,snake);
										crawler = new Crawler(snake);
									}else {
										snake = SnakeInit.move(direction, snake);
									}
								}else{
									if(SnakeInit.ifTouchTheCrawler(snake, crawler, direction)){
										snake = SnakeInit.eat(direction,snake);
									}else{
										//如果为反方向,则直接保持前进方向,不做任何操作,由多线程操作移动
//										snake = SnakeInit.goStraight(snake);
									}
								}
								repaint();
								try {
									Thread.sleep(200);
								} catch (InterruptedException e) {
									e.printStackTrace();
								}
								if(snake.getSnakeTemplate().length == GameConstant.maxLength) gameover = 2;
							}else{
								//碰到边界游戏结束
								gameover = 1;
							}
						}
						
						if(gameover  == 1){
							gameoveralert = "游戏失败,下次再努力!";
						}else if(gameover == 2){
							gameoveralert = "恭喜你,成功过关!";
						}
						repaint();
							
					}
				}		
				);
			backgroundThread.start();
	}

}

 不懂得请详询  QQ:526151410;成品和源代码在附件里,源代码加密,请详询

分享到:
评论

相关推荐

    基于J2ME的手机游戏-贪吃蛇游戏毕业设计(源代码+论文)

    【作品名称】:基于J2ME的手机游戏-贪吃蛇游戏【毕业设计】(源代码+论文) 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍...

    J2ME手机游戏--数独

    J2ME手机游戏--数独

    j2me手机游戏--贪吃蛇实现代码

    《J2ME手机游戏开发:贪吃蛇实现详解》 J2ME,全称为Java 2 Micro Edition,是Java平台的一个子集,主要用于移动设备、嵌入式设备上的应用程序开发,包括手机游戏。本篇文章将深入探讨如何使用J2ME开发一款经典的...

    j2me----api

    j2me----api j2me----api j2me----api j2me----api j2me----api j2me----api j2me----api j2me----api j2me----api j2me----api

    J2ME游戏源码---泡泡堂

    J2ME是Java平台的一个子集,专为资源有限的移动设备如手机、PDA等设计,因此在移动游戏开发领域有着广泛的应用。 在这款泡泡堂游戏中,我们可以学习到以下几个关键知识点: 1. **J2ME架构**:了解J2ME的基本结构,...

    J2ME游戏源码---bubble breaker

    Java 2 Micro Edition(J2ME)是Java平台的一个子集,主要用于开发在移动设备、嵌入式系统等资源有限的环境中的应用程序,特别是手机游戏。"J2ME游戏源码---bubble breaker"是一个基于J2ME的游戏项目,它是一个经典...

    J2ME手机游戏开发--五子棋

    【标题】:“J2ME手机游戏开发--五子棋” 在移动设备技术发展初期,J2ME(Java 2 Micro Edition)是用于开发移动应用程序,尤其是手机游戏的主流平台之一。本项目是一个基于J2ME技术实现的五子棋游戏,展现了...

    计算机毕业设计-JAVA-基于J2ME的手机游戏开发-贪吃蛇

    本文在介绍J2ME及其体系结构的基础上,以贪吃蛇游戏为实例,描述了借助J2ME的MIDlet类库开发手机游戏的过程。 关键词:手机游戏; MIDP应用程序; 永久性数据 说明:运行此文件需要安装jre1.4以上,在解压贪吃蛇...

    贪吃蛇J2ME-手机游戏

    不错的贪吃蛇游戏源码,又兴趣的下去看看。 又加进了背景,对初学的人比较容易接受。

    j2me休闲小游戏--飞机

    【标题】:“j2me休闲小游戏--飞机” 【描述】中的知识点: 1. **J2ME**: 这个标题表明游戏是基于Java 2 Micro Edition(J2ME)开发的。J2ME是一个Java平台,主要用于移动设备和嵌入式系统,如手机、PDA和家用电器...

    基于J2ME平台的手机游戏贪吃蛇程序的设计与实现

    ### 基于J2ME平台的手机游戏贪吃蛇程序的设计与实现 #### 一、课题背景与意义 随着移动通信技术的迅速发展以及智能手机的普及,移动应用特别是手机游戏已经成为人们日常生活中不可或缺的一部分。Java作为一种跨...

    JAVA游戏编程之二----j2me MIDlet 手机游戏入门开发--贪吃蛇_1_工程代码

    本教程将带你入门J2ME MIDlet(Mobile Information Device Profile)的手机游戏开发,以制作经典的“贪吃蛇”游戏为例。MIDlet是J2ME中的一个核心概念,它是一种轻量级的Java应用程序,专门设计用于移动电话和其他...

    基于J2ME的Java游戏--五子棋的开发

    五子棋游戏在J2ME环境下开发,能够充分利用其跨平台特性和轻量级特性,使游戏适应多种设备。 第二章:系统设计与实现 2.1 系统架构 本五子棋游戏主要由两大部分组成:人机对战模式和联网对战模式。人机对战模式下...

    JAVA基于J2ME的手机游戏(贪吃蛇)开发(LW+源代码).zip

    JAVA基于J2ME的手机游戏(贪吃蛇)开发(LW+源代码). JAVA基于J2ME的手机游戏(贪吃蛇)开发(LW+源代码). JAVA基于J2ME的手机游戏(贪吃蛇)开发(LW+源代码). JAVA基于J2ME的手机游戏(贪吃蛇)开发(LW+源代码). ...

    j2me 手机游戏-跑跑卡丁车

    总的来说,j2me手机游戏《跑跑卡丁车》是一款利用Java ME技术开发的移动竞速游戏,展现了J2ME在小屏幕设备上开发游戏的可能性和魅力。通过精心的设计和优化,游戏在保持趣味性的同时,也能在有限的硬件条件下流畅...

    J2ME版贪吃蛇游戏

    【标题】"J2ME版贪吃蛇游戏" 涉及的知识点: J2ME(Java Micro Edition)是Java平台的一个子集,主要用于嵌入式设备和移动设备的开发,如早期的智能手机和平板电脑。这个标题表示我们将讨论一个使用J2ME技术实现的...

    J2ME练习--贪吃蛇

    在J2ME的世界里,我们可以利用它来创建各种有趣的游戏,其中之一就是经典的“贪吃蛇”游戏。本篇文章将深入探讨如何使用J2ME技术开发一个简单的贪吃蛇游戏。 首先,我们需要理解J2ME的基本架构。J2ME由配置和...

Global site tag (gtag.js) - Google Analytics