import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
public class AppMain extends MIDlet{
public MyCanvas mc;
public AppMain()
{
mc=new MyCanvas();
}
public void startApp()
{
Display.getDisplay(this).setCurrent(mc);
}
public void pauseApp()
{}
public void destroyApp(boolean f)
{}
import java.io.DataInputStream;
import java.io.InputStream;
import javax.microedition.lcdui.*;
public class MyCanvas extends Canvas implements Runnable{
public Image offScreen;
public Graphics offg;
public int screenWidth;
public int screenHeight;
public static final int GS_LOGO=1;//logo状态
public static final int GS_MainMENU=2; //主菜单状态
public static final int GS_CHAT=3;//对话绘制状态
public static final int GS_GAMING=4;//游戏状态
public static final int GS_GameMENU=5; //游戏中菜单状态
public static final int GS_LoadMap=6; //游戏中菜单状态
public int sleeptime;
public int gameState=GS_LOGO;
public int count=0;
public Image imlogo;
public Image imMainMenu;
public Image immap;
public Image implayer;
public int mappx;
public int mapnowcol;
public int px=16,py=32;
public static final int P_UP=0;
public static final int P_DOWN=1;
public static final int P_LEFT=2;
public static final int P_RIGHT=3;
public static final int P_STOP=-1;
public int playerdir=P_STOP;
public int oldPlayDir=P_DOWN;
public int nowframe=0;
public String chat[]={
"在公园2009年",
"一位来自XXX的年轻人",
"准备寻找xxx",
"他必须完成xxx任务",
"同时",
"XXX可以协助他",
"准备出发了。。。。"
};
public int map01[][];
public int chatIndex=0;
public DataInputStream dis;
public int processLength;//总进度长度
public int nowprocess;
public int maprow,mapcol;
public int playermove[][]=
{
{0,1,2},//up
{6,7,8},//down
{9,10,11},//left
{3,4,5}//right
};
public MyCanvas()
{
screenWidth=this.getWidth();
screenHeight=this.getHeight();
offScreen=Image.createImage(screenWidth, screenHeight);
offg=offScreen.getGraphics();
imlogo=this.loadImage("/sp1.png");
imMainMenu=this.loadImage("/mainMenu.png");
implayer=this.loadImage("/walk.png");
Thread t=new Thread(this);
t.start();
}
//加载地图
public void LoadMap(int level)
{ this.immap=null;
this.immap=this.loadImage("/mapitem0"+level+".png");
//加载地图数组
this.map01=null;
System.gc();
InputStream is=this.getClass().getResourceAsStream("/map0"+level+".dat");
dis=new DataInputStream(is);
try{
int row=dis.readByte();
int col=dis.readByte();
maprow=row;
mapcol=col;
map01=new int[row][col];
this.processLength=row*col;
this.nowprocess=0;
// for(int i=0;i<row;i++)
// { for(int j=0;j<col;j++)
// {int k=dis.readShort();
// map01[i][j]=k;
// System.out.print(" "+k);
// }
// System.out.println();
// }
}catch(Exception t ){t.printStackTrace();}
}
public Image loadImage(String file)
{Image im=null;
try{
im=Image.createImage(file);
}catch(Exception g ){
System.out.println(file+"加载错误");
}
return im;
}
public void paint(Graphics g)
{//贴图
g.drawImage(offScreen, 0, 0, 0);
}
public void drawMap()
{
for(int i=0;i<19;i++)
{
for(int j=mapnowcol;j<mapnowcol+15;j++)
{ int k=map01[i][j]-1;
offg.setClip((j-mapnowcol)*16, i*16, 16, 16);
int movex=k%5*16;
int movey=k/5*16;
offg.drawImage(this.immap, (j-mapnowcol)*16-movex, i*16-movey, 0);
}
}
offg.setClip(0, 0, screenWidth, screenHeight);
}
public void drawPlayer()
{ offg.setClip(px, py, 16, 24);
if(playerdir!=-1)
offg.drawImage(implayer, px-this.playermove[playerdir][nowframe]*16, py, 0);
else
offg.drawImage(implayer, px-this.playermove[oldPlayDir][0]*16, py, 0);
}
public void drawNPC()
{}
public void drawChat()
{
offg.setColor(0x000000);
offg.fillRect(0, 0, screenWidth, screenHeight);
offg.setColor(0xffffff);
if(chatIndex<=6)
offg.drawString(chat[chatIndex],20, 50, 0);
}
public void drawLogo()
{offg.setColor(0xFFFFFF);
offg.fillRect(0, 0, screenWidth, screenHeight);
int lw=imlogo.getWidth();
int lh=imlogo.getHeight();
offg.drawImage(imlogo, (screenWidth-lw)/2, (screenHeight-lh)/2, 0);
}
public void drawLoading()
{offg.setColor(0xFFFFFF);
offg.fillRect(0, 0, screenWidth, screenHeight);
offg.setColor(0xFF0000);
offg.drawString("游戏载入中...",20, 20, 0);
offg.drawRect(20, 80, 200, 40);
int nowlength=(this.nowprocess*100/this.processLength)*2;
offg.fillRect(20, 80, nowlength, 40);
}
public void drawMainMenu(){
offg.setColor(0xFFFFFF);
offg.fillRect(0, 0, screenWidth, screenHeight);
int lw=imMainMenu.getWidth();
int lh=imMainMenu.getHeight();
offg.drawImage(imMainMenu, (screenWidth-lw)/2, (screenHeight-lh)/2, 0);
offg.setColor(0xFF0000);
offg.drawString("按任意键进入游戏",20, 200, 0);
}
public void keyPressed(int n)
{
switch(this.gameState)
{case MyCanvas.GS_MainMENU:
this.gameState=MyCanvas.GS_CHAT;
break;
case MyCanvas.GS_CHAT:
if(this.chatIndex<7){chatIndex++;}
else{
chatIndex=0;
LoadMap(1);
this.gameState=MyCanvas.GS_LoadMap;
}
break;
case MyCanvas.GS_GAMING:
switch(this.getGameAction(n))
{case Canvas.UP:
playerdir=MyCanvas.P_UP;
oldPlayDir=playerdir;
break;
case Canvas.DOWN:
playerdir=MyCanvas.P_DOWN;
oldPlayDir=playerdir;
break;
case Canvas.LEFT:
playerdir=MyCanvas.P_LEFT;
oldPlayDir=playerdir;break;
case Canvas.RIGHT:
playerdir=MyCanvas.P_RIGHT;
oldPlayDir=playerdir;break;
}
}
}
public void keyReleased(int n)
{
if(this.gameState==MyCanvas.GS_GAMING){
playerdir=MyCanvas.P_STOP;
}
}
public void run()
{
while(true)
{//处理游戏逻辑
switch(this.gameState)
{case MyCanvas.GS_LOGO:
count++;
if(count>=10){
this.gameState=MyCanvas.GS_MainMENU;
count=0;
}
break;
case MyCanvas.GS_LoadMap:
try{
this.nowprocess++;
if(nowprocess<this.processLength)
{
int k=dis.readShort();
map01[nowprocess/maprow][nowprocess%maprow]=k;
}else{
this.gameState=MyCanvas.GS_GAMING;
}
}catch(Exception e){
}
break;
case MyCanvas.GS_GAMING:
nowframe=(++nowframe)%3;
switch(playerdir)
{case MyCanvas.P_UP:
py-=8;
break;
case MyCanvas.P_DOWN:
py+=8;
break;
case MyCanvas.P_LEFT:
px-=8;
break;
case MyCanvas.P_RIGHT:
if(this.px<this.screenWidth/2)
{px+=8;
}else{
mapnowcol++;
}
break;
}
}
//处理屏幕绘制
switch(this.gameState)
{
case MyCanvas.GS_LoadMap:
drawLoading();
break;
case MyCanvas.GS_LOGO:
drawLogo();
break;
case MyCanvas.GS_MainMENU:
drawMainMenu();
break;
case MyCanvas.GS_CHAT:
drawChat();//绘制对话
break;
case MyCanvas.GS_GAMING:
drawMap();//绘制场景
drawPlayer();//绘制人物
drawNPC();//绘制NPC
break;
}
//处理FPS
if(this.gameState==MyCanvas.GS_LoadMap)
sleeptime=1;
else
sleeptime=200;
try{Thread.sleep(sleeptime);}catch(Exception e){}
repaint();
serviceRepaints();
}
}
}
分享到:
相关推荐
《J2MERPG 游戏》是一款基于J2ME技术开发的手机角色扮演游戏。作为一款初试身手的作品,它展示了开发者对Java Micro Edition(J2ME)平台的理解与运用,尤其是在游戏开发领域的实践。J2ME是Java平台的一个子集,专为...
这个“J2meRPG游戏框架源码”提供了一个基础结构,帮助开发者快速创建自己的J2ME RPG游戏。通过研究和理解这些源码,我们可以学习到以下几个核心知识点: 1. **图形渲染**:在J2ME平台上,图形通常使用LWUIT...
在这个标题为“j2meRPG手游代码”的项目中,我们可以看到一个基于J2ME开发的角色扮演游戏(RPG)的实现。下面,我们将深入探讨其中的关键组成部分和实现机制。 1. **战斗场景**:战斗场景是RPG游戏的核心部分,通常...
笔者以前是做J2EE的,一个月前由于兴趣所致开始利用业余时间学习J2ME游戏开发。在网上看了一通教程后,便准备动手一边学一边做一个简单的rpg游戏。虽然起点比较高,但感觉游戏难度越大,遇到的问题也就越多。这样在...
2023年第三届长三角数学建模c题考试题目,可下载练习
随着人工智能技术的飞速发展,越来越多的学生和研究人员开始利用AI技术来辅助他们的毕业设计。本教程旨在指导读者如何开发一个基于人工智能的毕业设计辅助系统,帮助学生更高效地完成毕业设计任务。
yolo系列算法目标检测数据集,包含标签,可以直接训练模型和验证测试,数据集已经划分好,包含数据集配置文件data.yaml,适用yolov5,yolov8,yolov9,yolov7,yolov10,yolo11算法; 包含两种标签格:yolo格式(txt文件)和voc格式(xml文件),分别保存在两个文件夹中; yolo格式:<class> <x_center> <y_center> <width> <height>, 其中: <class> 是目标的类别索引(从0开始)。 <x_center> 和 <y_center> 是目标框中心点的x和y坐标,这些坐标是相对于图像宽度和高度的比例值,范围在0到1之间。 <width> 和 <height> 是目标框的宽度和高度,也是相对于图像宽度和高度的比例值
文件1
分布式应用运行时的落地实践.pdf
席卡制作模版会议较多的单位,经常要打印席卡,本模版可以解决燃眉之急
大模型下的多模态智能风控落地实践.pdf
游戏
Alibaba Dragonwell 是一款免费的 OpenJDK 发行版,其提供长期支持,包括性能增强和安全修复
内容概要:本文详细介绍了多个数据库应用系统的开发教学案例,旨在培养学生的复杂问题解决能力。每个案例均包括系统背景、功能模块、ER图设计、关系模式转换和实际编码等内容。涉及的具体系统包括实验耗材管理信息系统、创新项目管理信息系统、宿舍管理信息系统、学生成绩管理系统、党员管理信息系统和学生信息管理系统等。 适合人群:计算机专业学生、数据库课程教师及数据库开发爱好者。 使用场景及目标:适用于高校的数据库课程教学,帮助学生掌握数据库系统的设计与开发方法,提高其实际开发能力和解决问题的能力。 其他说明:文章不仅提供了详细的开发步骤,还包括了评分标准和格式要求,便于教师评估学生的作品。同时,文章提供的多种案例覆盖了不同的应用场景,使学生能够更好地理解和应用所学的知识。
# 基于ARM平台的钢琴游戏系统 ## 项目简介 本项目是一个基于ARM平台的钢琴游戏系统。游戏利用开源代码进行修改,旨在为用户提供一种在开发板上模拟弹奏钢琴的体验。用户可以通过触摸屏或鼠标点击键盘按键来播放音乐,体验类似于真实钢琴的触感。此项目主要面向对计算机编程、嵌入式系统以及音乐有兴趣的用户。 ## 项目的主要特性和功能 1. 真实模拟钢琴键盘游戏提供了类似真实钢琴的键盘布局,用户可以通过触摸或点击来模拟弹奏。 2. 多功能触摸输入除了基本的键盘操作,游戏还支持触摸输入其他功能,如音量调节、曲目选择等。 3. 音效反馈每次按键都会产生相应的音效反馈,为用户带来真实的弹奏体验。 4. 图形界面优化游戏界面设计简洁明了,易于用户操作。 5. 多线程处理游戏采用多线程技术处理屏幕绘制、音频播放等任务,确保流畅运行。 6. 开源代码修改基于开源代码进行修改和优化,提高了系统的稳定性和兼容性。 ## 安装使用步骤(假设用户已下载本项目的源码文件)
ASP.NET采购评审专家管理系统源码 功能描述:1.系统登录:通过输入用户及密码登录系统(密码经过加密处理); 2.业务管理: (1)专家管理、添加专家信息、编辑专家信息、删除专家信息; (2)专家抽取、抽取项目列表、创建项目抽取(设置抽取人数,专家类型,随机抽取)、查看抽取记录; (3)类型管理、添加类型、编辑类型、删除类型; 3.系统管理: (1)管理员管理、添加管理员、编辑管理员信息、删除管理员信息; (2)系统操作日志、删除日志记录、导出excel日志文件。 (3)短信发送记录。(4)短信回复记录。
ASP.NET图书商城电子商务网站源码 一、源码特点 1、图书商城电子商务网站源码采用三层架构开发,购物车功能,主要参考了petshop的设计架构、使用了 Asp.net2.0中很多MemberShip、master等新功能。 2、采用三层架构开发,购物车功能,主要参考了petshop的设计架构、使用了Asp.net2.0中很多MemberShip、master等新功能。 二、功能介绍 1、前台集成了产品在线展示,用户注册、在线调查、在线投稿 2、后台有类别管理\图书管理\订单管理\会员管理\配送范围管理\邮件列表\广告管理\友情链接管理等 3、后台添加图书时自动生成缩略图和文字水印
keil5工程-stm32f103rct6
Java版ssm企业工资管理系统源码 运行环境:jdk 1.8 项目技术:jsp+mysql+Spring+mybatis 运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以 IDE环境:Eclipse,IDEA都可以 tomcat环境:tomcat9.0 硬件环境:windows7/8/10 1G内存以上 主要功能说明:管理员角色包含一下功能:管理员登录,员工管理,部门管理,岗位管理,职称管理 工龄奖金管理,工资项管理,考勤管理,工资查询,统计图表等功能。 员工角色包含:员工登录,个人信息管理,考勤管理,工资详情等功能。
Java医院人事管理系统源码 项目描述: java web医院HR后台管理系统(增加shiro) 运行环境:jdk7+tomcat7+mysql+MyEclipse+maven 使用技术:spring+spring mvc+mybatis+bootstrap+jquery+jsp+shiro