在J2ME中实现欢迎界面(附源代码)

在J2ME中实现欢迎界面(附源代码)

作者:陈跃峰

出自:http://blog.youkuaiyun.com/mailbomb

 

       在J2ME游戏编写过程中,制作欢迎界面是常见的工作,下面就系统的介绍一下欢迎界面的制作。

       欢迎界面在制作的时候一般有两种实现方式:

1、  按任意键进入系统的主界面。

2、  等待n秒(n<6)以后自动进入主界面

实现的代码分别如下:

//实现按任意键进入主界面

import javax.microedition.lcdui.*;

 

public class WelcomeCanvas extends Canvas{

  //背景图片

  Image bgImage = null;

  Display display;

 

  public WelcomeCanvas(Display display){

    this.display = display;

    //导入图片

    try{

      bgImage = Image.createImage("/res/welcome.png");

    }catch(Exception e){

      Alert a = new Alert("错误","资源文件不存在!",null,AlertType.ERROR);

      a.setTimeout(Alert.FOREVER);

      //显示提示框

      display.setCurrent(a);

    }

  }

 

  protected void paint(Graphics g) {

    //绘制背景图片

    g.drawImage(bgImage,0,0,Graphics.TOP | Graphics.LEFT);

  }

 

  protected void keyPressed(int keyCode){

    //显示需要显示的界面

    display.setCurrent(new MainList());

  }

}

 

 

//实现等待5秒以后自动进入主界面

import javax.microedition.lcdui.*;

 

public class WelcomeCanvas extends Canvas implements Runnable {

  //背景图片

  Image bgImage = null;

  Display display;

 

  public WelcomeCanvas(Display display){

    this.display = display;

    //导入图片

    try{

      bgImage = Image.createImage("/res/welcome.png");

    }catch(Exception e){

      Alert a = new Alert("错误","资源文件不存在!",null,AlertType.ERROR);

      a.setTimeout(Alert.FOREVER);

      //显示提示框

      display.setCurrent(a);

}

//启动线程

Thread thread = new Thread(this);

thread.start();

  }

 

  protected void paint(Graphics g) {

    //绘制背景图片

    g.drawImage(bgImage,0,0,Graphics.TOP | Graphics.LEFT);

  }

 

    public void run(){

      //等待3秒

      try{

          Thread.sleep(5000);

      }catch(Exception e){

 

      }

          //显示需要显示的界面

       display.setCurrent(new MainList());

 

       }

}

J2ME猜数字游戏源码解析与实战开发 猜数字游戏是一种简单而经典的互动游戏,其核心机制如下:系统生成一个1~100之间的随机整数;玩家通过输入猜测数字;系统反馈“猜大了”、“猜小了”或“猜对了”;玩家在限定次数内完成目标,否则游戏失败。该机制虽然简单,但涵盖了输入处理、数据比较、状态判断、反馈输出等基础逻辑,是学习移动游戏开发的理想案例。在游戏开发中,状态管理是控制游戏流程的关键。猜数字游戏可以定义以下几种状态:状态名称描述MENU主菜单状态PLAYING游戏进行中。 阅读详情

相关推荐

j2me源码

j2me源码j2me源码j2me源码

j2meframework源代码

j2meframework 是我一年多之前(大约2005年年底吧)顺手写的一个库,目的是简化自己开发JAVA手机应用程序。都是一些封装性的代码,没什么技术含量。我写的小游戏“扫雷(bombs,http://blog.csdn.net/liigo/archive/2005/12/15/553325.aspx)”和小工具“个人消费管理(MyCosts,http://blog.csdn.net/li

Liigo's blog 3189

几个J2ME手机游戏源代码

几个J2ME手机游戏源代码,包含经典的飞机射击游戏,俄罗斯方块等……

J2ME专区源代码

J2ME专区源代码

mobilechannel的专栏 1422

J2ME开发源码大全

J2ME 源代码 java 源程序,100多个实例源码供你下载哦!!!

j2me游戏源码

本资源属于j2me游戏源码,通过eclipse开发,源码测试可用,禁止商用,只提供学习使用,能否成功运行在于个人技术,如有侵权请联系作者删除,谢谢合作

自己做的J2ME阅读器源代码!

    挺长时间没有更新Blog,因为内容不多,所以总结起来一起更新。    这个东西做了十多天,别人可能也就1天左右,为什么我要那么长?可能是新手的原因吧,而且这段时间课程也比较紧。废话不说。代码上来:import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.InputStream;imp

jlu3389的专栏 3305

J2ME小游戏源代码

小剑士import java.io.ByteArrayOutputStream; import java.io.DataOutputStream; import java.io.IOException; import java.util.Random; import javax.microedition.lcdui.*; import javax.microedition.rms.RecordStore; public class HeroSprite extends ASprite{ public final int LISTENER_LEFT=4; public final int LISTENER_RIGHT=32; public final int LISTENER_UP=2; public final int LISTENER_DOWN=64; public final int LISTENER_FIRE=256; public int dir,hp,maxhp,lv,exp,nextexp,prevexp,itemlv,gold,at,df,mapdir=0; public String MyItem; public boolean isAlive,isAttach,isStop,isBattle,iisBattle,iiisBattle,isStopb,isPause=false;//是否生存以及是否攻击两个判定量 //Sprite HSprite=new Sprite(HeroImage,60,61); public int x,y,luX,luY,ruX,ruY,ldX,ldY,rdX,rdY,stopTime=5,time=0; public Random random=new Random(); public int numEmpty=0; //代表各个方向的常量 public final int DIR_LEFT=2; public final int DIR_DOWN=1; public final int DIR_RIGHT=4; public final int DIR_UP=3; public final int DIR_LU=5; public final int DIR_RU=6; public final int DIR_LD=7; public final int DIR_RD=8; public String DataName; public char itemcode[]={'0','0','0','0','0','0','0','0','0','0','0','0','0'}; //各个方向的图象序列数组 private int up_seq[]={1,2,3,4,5,6,7,8}; private int lu_seq[]={14,15,16,17,18,19,20,21}; private int ru_seq[]={40,41,42,43,44,45,46,47}; private int ld_seq[]={66,67,68,69,70,71,72,73}; private int rd_seq[]={79,80,81,82,83,84,85,86}; private int left_seq[]={92,93,94,95,96,97,98,99}; private int down_seq[]={53,54,55,56,57,58,59,60}; private int right_seq[]={27,28,29,30,31,32,33,34}; public int itemat[]={0,30,70,120,200}; public int itemdf[]={0,20,60,110,190}; private int up[]={0}; private int lu[]={13}; private int ru[]={39}; private int ld[]={65}; private int rd[]={78}; private int left[]={91}; private int down[]={52}; private int right[]={26}; //打斗时候的图象序列数组 public int downb_seq[]={9,10,11,12}; public int upb_seq[]={35,36,37,38}; public int leftb_seq[]={48,49,50,51}; public int rightb_seq[]={61,62,63,64}; private int lub_seq[]={87,88,89,90}; private int rub_seq[]={74,75,76,77}; private int ldb_seq[]={22,23,24,25}; private int rdb_seq[]={100,101,102,103}; public boolean[][] isWalkable; //构造函数 public HeroSprite(Image hImage,int height,int width){ super(hImage,height,width); x=180; y=180; luX=(int)(x/16)+1; luY=(int)(y/16); lv=1; maxhp=160+(lv-1)*40; itemlv=0; gold=0; MyItem="000000000000"; /*for(int i=0;i<12;i++){ itemcode[i]='0'; }*/ //itemcode={'0','0','0','0','0','0','0','0','0','0','0','0','0'}; exp=210; hp=maxhp; at=30; df=20; prevexp=lv*lv*60-(lv-1)*(lv-1)*60+150; nextexp=prevexp+(lv-1)*(lv-1)*60-(lv-2)*(lv-2)*60+150; System.out.print("已装载英雄类"); this.setFrameSequence(down); isAlive=true; System.out.print("英雄类装载完毕"); } public byte[] chgTorms(boolean isFirst) throws IOException{ ByteArrayOutputStream baos=new ByteArrayOutputStream(); DataOutputStream dos=new DataOutputStream(baos); if(itemcode!=null){ MyItem=String.valueOf(itemcode); } dos.writeUTF(String.valueOf(lv));//将具体数据写入流 dos.writeUTF(String.valueOf(itemlv)); dos.writeUTF(String.valueOf(gold)); dos.writeUTF(String.valueOf(MyItem)); dos.writeUTF(String.valueOf(exp)); if(isFirst==false){//如果不是第一次读入数据则计算攻防 at=itemat[itemlv]+(lv-1)*8+30; df=itemdf[itemlv]+(lv-1)*10+20; } baos.close(); dos.close(); numEmpty=0; if(isFirst==false){ for(int i=0;i<itemcode.length;i++){//如果不是第一次读入数据则计算空格数 if(itemcode[i]=='0'){ numEmpty++; } } } return baos.toByteArray(); } public void doMonster(int myhp,int deadlv,RecordStore rs,int recordid){ this.hp=myhp; if(lv<=6){ prevexp=lv*lv*60-(lv-1)*(lv-1)*60+150;//经验值公式 nextexp=prevexp+(lv-1)*(lv-1)*60-(lv-2)*(lv-2)*60+150; }else{ prevexp=lv*(lv-5)*(lv-5)-40*(lv-4)*(lv-4)+150; nextexp=prevexp+50*(lv+1)*(lv-4)*(lv-4)-40*(lv-3)*(lv-3)+150; } if(deadlv!=0){ exp=exp+deadlv*15+random.nextInt()%5;//怪物死亡时候等级和经验值的换算公式,nextexp下一等级需要的经验,deadlv被杀死怪物的等级 if(exp>=nextexp){//目前设定的最高等级为11级 if(lv<12){ lv++; } at=itemat[itemlv]+(lv-1)*8+30; df=itemdf[itemlv]+(lv-1)*10+20; maxhp=160+(lv-1)*40; hp=maxhp; } try{ rs.setRecord(recordid,chgTorms(false),0,chgTorms(false).length); }catch(Exception e){System.out.println(e);} isBattle=false; } } private void getNowHanglie(){//获得主角的行列数值 luX=(int)(x/16)+1; luY=(int)(y/16); ruX=(int)((x+40)/16)+1; ruY=luY; ldX=luX; ldY=(int)((y+40)/16); rdX=ldX; rdY=ldY; } public void chgMapbool(boolean[][] newbool){ this.isWalkable=newbool; } public void doMove(int keyState){ //System.out.println(ldX+","+ldY); if(hp<=0){ this.isAlive=false; } if(this.isAlive){ getNowHanglie(); if(isPause==false){ switch(keyState){ case LISTENER_UP: if(dir!=DIR_UP){//如果按下UP键时之前的状态不是朝UP的话,则改变状态 dir=DIR_UP; this.setFrameSequence(up_seq); } if(isWalkable[ldX][ldY-1] && isWalkable[rdX][rdY-1]){//对下一步的判断 if(isBattle==true){//按下UP键时候如果是打斗状态则转化为UP奔跑帧 this.setFrameSequence(up_seq); isBattle=false; } if(isStop==true){//如果是停止状态也转化为UP奔跑帧 this.setFrameSequence(up_seq); isStop=false; } y=y-5;//坐标变化 this.nextFrame();//帧变化 } break; case LISTENER_DOWN: if(dir!=DIR_DOWN){ dir=DIR_DOWN; this.setFrameSequence(down_seq); } if(isBattle==true){ this.setFrameSequence(down_seq); isBattle=false; } if(isStop==true){ this.setFrameSequence(down_seq); isStop=false; } if(isWalkable[ldX][ldY+1] && isWalkable[rdX][rdY+1]){ y=y+5; this.nextFrame(); } break; case LISTENER_LEFT: if(dir!=DIR_LEFT){ dir=DIR_LEFT; this.setFrameSequence(left_seq); } if(isBattle==true){ this.setFrameSequence(left_seq); isBattle=false; } if(isStop==true){ this.setFrameSequence(left_seq); isStop=false; } if(isWalkable[ldX-1][ldY]){ x=x-5; this.nextFrame(); } break; case LISTENER_RIGHT: if(dir!=DIR_RIGHT){ dir=DIR_RIGHT; this.setFrameSequence(right_seq); } if(isBattle==true){ this.setFrameSequence(right_seq); isBattle=false; } if(isStop==true){ this.setFrameSequence(right_seq); isStop=false; } if(isWalkable[rdX+1][rdY]){ x=x+5; this.nextFrame(); } break; case LISTENER_LEFT+LISTENER_UP: if(dir!=DIR_LU){ dir=DIR_LU; this.setFrameSequence(lu_seq); } if(isBattle==true){ this.setFrameSequence(lu_seq); isBattle=false; } if(isStop==true){ this.setFrameSequence(lu_seq); isStop=false; } if(isWalkable[ldX-1][ldY] && isWalkable[ldX][ldY-1] && isWalkable[rdX][rdY-1]){ x=x-3; y=y-3; this.nextFrame(); } break; case LISTENER_RIGHT+LISTENER_UP: if(dir!=DIR_RU){ dir=DIR_RU; this.setFrameSequence(ru_seq); } if(isBattle==true){ this.setFrameSequence(ru_seq); isBattle=false; } if(isStop==true){ this.setFrameSequence(ru_seq); isStop=false; } if(isWalkable[ldX][ldY-1] && isWalkable[rdX][rdY-1] && isWalkable[rdX+1][rdY]){ x=x+3; y=y-3; this.nextFrame(); } break; case LISTENER_LEFT+LISTENER_DOWN: if(dir!=DIR_LD){ dir=DIR_LD; this.setFrameSequence(ld_seq); } if(isBattle==true){ this.setFrameSequence(ld_seq); isBattle=false; } if(isStop==true){ this.setFrameSequence(ld_seq); isStop=false; } if(isWalkable[ldX-1][ldY] && isWalkable[ldX][ldY+1] && isWalkable[rdX][rdY+1]){ x=x-3; y=y+3; this.nextFrame(); } break; case LISTENER_RIGHT+LISTENER_DOWN: if(dir!=DIR_RD){ dir=DIR_RD; this.setFrameSequence(rd_seq); } if(isBattle==true){ this.setFrameSequence(rd_seq); isBattle=false; } if(isStop==true){ this.setFrameSequence(rd_seq); isStop=false; } if(isWalkable[rdX+1][rdY] && isWalkable[ldX][ldY+1] && isWalkable[rdX][rdY+1]){ x=x+3; y=y+3; this.nextFrame(); } break; case 0: if(isBattle==false){ isStop=true; switch(dir){ case DIR_DOWN: this.setFrameSequence(down); break; case DIR_LEFT: this.setFrameSequence(left); break; case DIR_UP: this.setFrameSequence(up); break; case DIR_RIGHT: this.setFrameSequence(right); break; case DIR_LU: this.setFrameSequence(lu); break; case DIR_RU: this.setFrameSequence(ru); break; case DIR_RD: this.setFrameSequence(rd); break; case DIR_LD: this.setFrameSequence(ld); break; } } break; case LISTENER_FIRE: if(mapdir==1){ switch(dir){ case 1: if(isBattle==false){ this.setFrameSequence(downb_seq); } break; case 2: if(isBattle==false){ this.setFrameSequence(leftb_seq); } break; case 3: if(isBattle==false){ this.setFrameSequence(upb_seq); } break; case 4: if(isBattle==false){ this.setFrameSequence(rightb_seq); } break; case DIR_LU: if(isBattle==false){ this.setFrameSequence(lub_seq); } break; case DIR_LD: if(isBattle==false){ this.setFrameSequence(ldb_seq); } break; case DIR_RU: if(isBattle==false){ this.setFrameSequence(rub_seq); } break; case DIR_RD: if(isBattle==false){ this.setFrameSequence(rdb_seq); } break; } isBattle=true; break; } } if(isBattle==true){ //如果是打斗状态 if(this.getFrame()==2){//如果是打斗状态的第二帧 iiisBattle=true;//打中状态置于真 }else{ iiisBattle=false; } this.nextFrame(); } if(iiisBattle && isBattle){ iisBattle=true; }else{ iisBattle=false; } dx=x; dy=y; } }else{ if(this.exp>150){ this.exp=this.exp-150; }else this.exp=0; } } }

[转载]在J2ME中实现游戏功能选择界面(附源代码)

在J2ME中实现游戏功能选择界面(附源代码)在J2ME游戏中,显示了欢迎界面以后,就应该显示游戏的功能选择界面,实现该界面的方式主要有两种: 1、 使用高级用户界面中的List来进行实现2、 使用Canvas类来自己绘制一个...

congji3817的博客 155

J2ME制作简单的界面

//Create a J2ME MIDP Midlet Suite //Create a J2ME Midlet : Menu package Net.Snail.zm; import javax.microedition.lcdui.Display; import javax.microedition.midlet.MIDlet; import javax.microedition.midlet.MIDletStateChangeException; public class Menu extends MIDlet { face FACE = new face(); public Menu() { } protected void destroyApp(boolean arg0) throws MIDletStateChangeException { } protected void pauseApp() { } protected void startApp() throws MIDletStateChangeException { Display.getDisplay(this).setCurrent(FACE); } } ************************************************ package Net.Snail.zm; import java.io.IOException; import javax.microedition.lcdui.Canvas; import javax.microedition.lcdui.Graphics; import javax.microedition.lcdui.Image; public class face extends Canvas { private final int UP=-1; private final int DOWN=-2; private final int LEFT=-3; private final int RIGHT=-4; Image img,img2; int keyCode; int x=67,y=73; public face(){ this.setFullScreenMode(true); } protected void paint(Graphics g){ g.setColor(255,255,255); g.fillRect(0, 0, getWidth(), getHeight()); try { img=Image.createImage("/pic.png"); img=Image.createImage("/pic2.png"); } catch(IOException ex){ ex.printStackTrace(); } g.drawImage(img, 0, 0, 0); g.drawImage(img2, 75, 75, 0); } protected void keyPressed(int key){ if(key==DOWN){ if(y==217){ y=217; }else y+=36; } if(key==UP){ if(y==73){ y=73; }else y-=36; } if(key==RIGHT){ x=67; } if(key==LEFT){ x=67; } repaint(); } }

JAVA欢迎界面

JAVA欢迎界面,是用java开发的欢迎界面,欢迎下载!!!!!!!!!!!!!!!!!!!!!!!

在J2ME中实现游戏功能选择界面(附源代码)

在J2ME中实现游戏功能选择界面(附源代码)作者:陈跃峰出自:http://blog.csdn.net/mailbomb        在J2ME游戏中,显示了欢迎界面以后,就应该显示游戏的功能选择界面,实现该界面的方式主要有两种:1、  使用高级用户界面中的List来进行实现2、  使用Canvas类来自己绘制一个功能选择界面为了达到更强的游戏表现效果,经常在开发过程中使用第二种方式来实现游戏功

爪哇米工作室陈跃峰的移动开发博客 3516

服务器能效测试工具BenchSEE使用方法简介

BenchSEE是由中国标准化研究院开发的一款针对服务器产品能效测试的基准软件。BenchSEE基准的设计参考了全球众多服务器厂家、芯片厂家、能效认证机构和IT节能领域科研机构的意见,旨在满足服务器市场应用对能效测评的需求。BenchSEE基准负载工具支持的服务器类型包括:机架服务器、刀片服务器多节点服务器和机柜服务器等,服务器可以配的最大外理器个数包括:1P,2P和4P等。测试基准涵盖服务器关键部件:CPU,内存和存储介质三大基础部件。

MQWYY3的博客 4223

终极J2ME-Loader指南:在Android上重温经典Java游戏

J2ME-Loader是一款专为Android设备打造的J2ME模拟器,让你能够在现代智能手机上流畅运行经典的Java ME游戏。无论是怀旧的《街头格斗2011》还是经典的《刺客信条2》移动版,这款免费工具都能帮你轻松实现跨平台游戏体验。 ## 📱 什么是J2ME-Loader? J2ME(Java 2 Micro Edition)是早期移动设备上广泛使用的应用开发平台,许多经典手机游戏都基

gitblog_00490的博客 853

【Hadoop】开发插件安装

前言 Eclipse 是一个开放源代码的、基于 Java 的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是Eclipse 附带了一个标准的插件集,包括 Java 开发工具(Java Development Tools,JDT)。 Eclipse的插件机制是轻型软件组件化架构。在客户机平台上,Eclipse使用插件来提供所有的附加功能,例如支持Java...

weixin_44039347的博客 3209

水下探测小白必看:单波束vs多波束声呐,5分钟搞懂核心区别

本文为水下探测新手清晰解析了单波束与多波束声呐的核心区别。单波束声呐如同精准的“手电筒”,进行逐点扫描,适用于定点测深和目标探测;而多波束声呐则像“聚光灯”,能一次性覆盖一个扇区,高效获取海底地形三维信息,是海底测绘和水下三维建模的理想选择。文章通过生动的比喻和对比表格,帮助读者快速理解两者原理、效率差异及适用场景。

linux6sysadmin的博客 1049

J2EE、J2SE和J2ME的应用

随着Internet网络的迅速发展,基于互联网的企业应用要求软件平台具有开放性、分布性和平台无关性.于是就相继出现了RPC/COM/CORBA等技术,但这些技术在实际应用中存在着许多不足和局限.它们的特定协议难以通过防火墙,因而不适于Web上的应用开发.为了进一步开发基于Web的

Acmey的专栏 875

Frida Stalker实战:如何用指令级追踪破解OLLVM混淆的AES算法

本文深入探讨了如何使用Frida Stalker进行指令级追踪,破解经过OLLVM混淆的AES算法。通过动态分析技术,逆向工程师可以精准识别控制流平坦化等混淆手段,还原算法逻辑,特别适用于移动安全领域的加密算法分析。文章提供了详细的配置指南、核心机制解析和实战案例,帮助读者掌握对抗高级代码混淆的有效方法。

weixin_29325955的博客 478
上一篇: 10种最不健康的生活方式(转)
下一篇: 在J2ME中实现游戏功能选择界面(附源代码)
java2000_test
博客等级 码龄19年 10粉丝 320原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值