博文

[转]  MIDP1.0小游戏入门-五子棋1.0(2006-08-07 10:03:00)

摘要:http://www.yuerjv.com/Program/techqrt/JAVA/200602/310.html......

阅读全文(2791) | 评论:0

[转]第5章 MIDP的持久化解决方案—RMS (2006-08-07 09:31:00)

摘要:5.1    初识RMS(Record Management System) 记得曾经有人说,数据库程序员是世界上最不愁找不到工作的职业了。虽然此话无从考究J,不过也从一个方面说明了不论开发什么类型的应用,数据库几乎是一个永恒的话题!在java的体系结构里,我们现在已经有了JDBC这个技术,还有许多就此衍生的概念,许多耳熟能详的术语,EJB, JDO等等,只是,这些都是针对桌面平台或者企业用户的,对于处理能力和存储空间都十分有限的无线设备而言,必须有一种特殊的机制与之适应,MIDP2.0规范里不支持全面的树型文件系统,但为我们提供了这样一种数据持久化机制——记录管理系统(Record Management System RMS)。   记录管理系统就是一个小型的数据库管理系统,它以一种简单的,类似表格的形式组织信息,并存储起来形成持久化存储,以供应用程序在重新启动后继续使用。   RMS提供了Records(记录)和Records Stores(记录仓储)两个概念。   记录仓储(Records Stores)类似于一般关系数据库系统中的表格(TABLE),它代表了一组记录的集合。在相同MIDlet Suite中,每个仓储都拥有自己独一无二的名字,大小不能超过32个Unicode字符,同一个Suite下的MIDlet都可以共享这些记录仓储。   记录是记录仓储的组成元素。记录仓储中含有很多条记录,就如同记录表格是由一行行组成的一样。每条记录代表了一条数据信息。一条记录(Record)由一个整型的RecordID与一个代表数据的byte[]数组两个子元素组成。RecordID是每条记录的唯一标志符,利用这个标志符可以用于从记录仓储中找到对应的一条记录。请注意,由于产生记录号RecordID使用的是一种简单的单增算法。当一条数据记录被分配的时候,它的记录号也就唯一分配了。并且该条记录被删除后,RecordID也不会被使用。所以,仓储中相邻的记录并不一定会有连续的RecordID。   MIDP Suite所使用的RMS空间图可由下图所示:   每一个MIDlet Suite都会有属于自己的一个用于RMS的私有空间。可以通过jad描述文件事先规定Mid......

阅读全文(2814) | 评论:0

[转]6 GAME API 3(2006-08-07 09:30:00)

摘要: /**     *  画布重画事件,替代Canvas中的paint()事件, 根据不同的游戏状态(gameState)画出游戏画面     *  本方法由thread每次重新启动, 最后执行flushGraphics()重画缓冲区     */    public synchronized void paintCanvas(Graphics g){               if(gameState == GAME_INIT){            //游戏第一次启动            //设置为全屏模式并清屏            this.setFullScreenMode(true);                       g.setColor(255, 255, 255);            g.fillRect(0, 0, mainWidth, mainHeight);                       if(!COMMAND_ADD_FLAG){  ......

阅读全文(2683) | 评论:0

[转]6 GAME API 2(2006-08-07 09:30:00)

摘要:/*  * Author: Huang ye(www.hyweb.net)  * 代码开源, 引用请注明出处  *  * 创建日期 2005-2-24 */ package net.hyweb;   import javax.microedition.lcdui.*; import javax.microedition.lcdui.game.GameCanvas; import javax.microedition.lcdui.game.*; import javax.microedition.lcdui.game.LayerManager;     import java.util.*;   /**  * @author Huang ye      */   public class SubCanvas extends GameCanvas implements Runnable, CommandListener {       /**      *      * @uml.property name="subMIDlet"      * @uml.associationEnd multiplicity="(0 1)"      */         private Controller controller;        private Graphics  graphics;    private Thread    thread;    private boolean   threadAlive = false;    ......

阅读全文(5168) | 评论:0

[转]6 GAME API 1(2006-08-07 09:27:00)

摘要:6.1    游戏API简介 MIDP 2.0相对于1.0来说,最大的变化就是新添加了用于支持游戏的API,它们被放在javax.microedition.lcdui.game包中。游戏API包提供了一系列针对无线设备的游戏开发类。由于无线设备仅有有限的计算能力,因此许多API的目的在于提高Java游戏的性能,并且把原来很多需要手动编写的代码如屏幕双缓冲、图像剪裁等都交给API间接调用本地代码来实现。各厂家有相当大的自由来优化它们。   游戏API使用了MIDP的低级图形类接口(Graphics,Image,等等)。整个game包仅有5个Class:   GameCanvas 这个类是LCDUI的Canvas类的子类,为游戏提供了基本的“屏幕”功能。除了从Canvas继承下来的方法外,这个类还提供了游戏专用的功能,如查询当前游戏键状态的能力,同步图像输出;这些功能简化了游戏开发并提高了性能。   Layer Layer类代表游戏中的一个可视化元素,例如Sprite或TiledLayer是它的子类;这个抽象类搭好了层(Layer)的基本框架并提供了一些基本的属性,如位置,大小,可视与否。出于优化的考虑,不允许直接产生Layer的子类(不能包外继承)。   LayerManager 对于有着许多Layer的游戏而言,LayerManager通过实现分层次的自动渲染,从而简化了游戏开发。它允许开发者设置一个可视窗口(View Window),表示用户在游戏中可见的窗口; LayerManager自动渲染游戏中的Layer,从而实现期望的视图效果。   Sprite Sprite又称“精灵”,也是一种Layer,可以显示一帧或多帧的连续图像。但所有的帧都是相同大小的,并且由一个Image对象提供。Sprite通过循环显示每一帧,可以实现任意顺序的动画;Sprite类还提供了许多变换(翻转和旋转)模式和碰撞检测方法,能大大简化游戏逻辑的实现。   TiledLayer TiledLayer又称“砖块”,这个类允许开发者在不必使用非常大的Image对象的情况下创建一个大的图像内容。TiledLayer有许多单元格构成,每个单元格能显示由一个单一Image......

阅读全文(2288) | 评论:0

[转]  j2me程序的开发流程(2006-08-07 09:23:00)

摘要:10.1       j2me程序的开发流程 在本章之前所介绍的都是怎么样编写J2ME的源文件(即*.java文件)。因为j2me不同于j2se程序的开发流程,在编写好java源文件后,我们还要继续进行如下工作: l         编译 l         混淆(可选) l         预审核 l         打包 打包后,将获得了一个jar文件。接下来为jar文件编写一个以jad为后缀的描述文件。最后通过各种途径将jar文件、jad描述文件传输到移动设备上运行即可。   10.1.1 开发流程详解 完整的MIDP手机程序开发流程如下表(其中混淆为可选): 流程 工具 输入 输出 编译 javac.exe编译 源文件(*.java) 未混淆的类文件(*.class) 混淆 第三方提供的工具 未混淆的类文件(*.class) 混淆后的类文件(*.class) 预审 preverify.exe预审核 混淆后的类文件(*.class) 经过预先审核的类文件(*.class) 包 jar.exe打包 经过预先审核的类文件(*.class) 包文件(*.jar) 编写描述文件 文本编辑工具   描述文件(*.jad) 安装运行 传输工具 (IR/BT/数据线/OTA) 包文件(*.jar)和 描述文件(*.jad) 在仿真器或手机上正式运行   下面将会介绍每个步骤。当利用集成开发环境(诸如JBuilder、NetBeans、Sun ONE Studio、Eclipse等)时,这些工具不仅可以很快的帮我们建立起代码的主干,而且可以帮助......

阅读全文(2630) | 评论:0

Alert用法(2006-08-06 09:59:00)

摘要:import javax.microedition.lcdui.*;
import javax.microedition.midlet.MIDlet; //made by sword2008@ alert使用 public class AlertDemo extends MIDlet

//private
 private Command showcmd=new Command("SHOW",Command.SCREEN,1);
 private Command exitcmd=new Command("EXIT",Command.EXIT,1);
 private String[] typeStrings={"alarm","confirmation","error","info","warning"};
 private String[] timeoutStrings={"2秒","4秒","8秒","永远"};
 private int SECOND=1000;
 private Display display;
 private boolean firstTime;
 private Form mainForm;   public AlertDemo(){
firstTime=true;
mainForm=new Form("警报设置");} public void startApp(){
display=Display.getDisplay(this);
showOption();}
 
 private void showOption(){
 if(firstTime){
 ChoiceGroup types=new ChoiceGroup("Type",ChoiceGroup.POPUP,typeStrings,null);
 ChoiceGroup timeouts=new ChoiceGroup("Timeout",ChoiceGroup.POPUP,timeoutSt......

阅读全文(9337) | 评论:0

TextBox例子(2006-08-05 20:11:00)

摘要:import javax.microedition.lcdui.*;
import javax.microedition.midlet.MIDlet; //TextBox事例,made by sword2008
public class TextBoxDemo extends MIDlet implements CommandListener
{
//private
 private Display display;
 private ChoiceGroup types;
 private ChoiceGroup options;
 private Form mainform;
 private Command exitcmd=new Command("EXIT",Command.EXIT,1);
 private Command backcmd=new Command("BACK",Command.BACK,1);
 private Command screencmd=new Command("SCREEN",Command.SCREEN,1);
 private boolean firstTime; //label
 String textlabels[]={"字","邮箱","NUMBRIC","DECIMAL","电话","网址",};
 int textBoxType[]={TextField.ANY,TextField.EMAILADDR,TextField.NUMERIC,
      TextField.DECIMAL,TextField.PHONENUMBER,TextField.URL};
  public TextBoxDemo(){
  display=Display.getDisplay(this);
  firstTime=true;
   }    ......

阅读全文(3501) | 评论:0

List与图象载入(2006-08-05 09:55:00)

摘要:import javax.microedition.midlet.*;
import javax.microedition.lcdui.*; public class PhotoMIDlet extends MIDlet implements CommandListener
{
  String list1[]={"王","道","仁"};
  private Command okCommand=new Command("确定",Command.OK,1);
  private Command backCommand=new Command("返回",Command.BACK,1);
  private Command exitCommand=new Command("退出",Command.EXIT,1);
  private List list2=new List("Photo",List.EXCLUSIVE,list1,null);
    private Display display=null;
    private Form form=new Form("Photo");
    private Image img=null;
 public PhotoMIDlet(){
  list2.addCommand(okCommand);
  list2.addCommand(exitCommand);
  list2.setCommandListener(this);
  form.addCommand(okCommand);
  form.addCommand(exitCommand);
  form.setCommandListener(this);
  
}   public void startApp(){
  ......

阅读全文(3092) | 评论:1

[转]第4章  MIDP低级UI的使用2(2006-08-05 08:59:00)

摘要:下面给出一段代码,让大家体会一下如何在实际开发过程当中妥善处理屏幕事件:   import javax.microedition.lcdui.*; import javax.microedition.midlet.*; public class test4 extends Canvas implements CommandListener {         public test4()         {                 setTitle("全屏幕测试") ;                 setTicker(new Ticker("Ticker ")) ;                 addCommand(new Command("全屏幕",Command.SCREEN,1)) ;                 addCommand(new Command("正常",Command.SCREEN,1)) ;                 setCommandListener(this) ;         }     ......

阅读全文(2932) | 评论:0