• «
  • 1
  • 2
  • 3
  • »
  • Pages: 1/3     Go
级别: 论坛版主
UID: 1652
精华: 2
发帖: 156
威望: 117 点
金钱: 167 RMB
贡献值: 0 点
注册时间: 2005-07-28
最后登录: 2007-01-12
楼主  发表于: 2005-10-06 00:00

 手把手教你写第四个手机程序游戏

图片:
现在我已经完全被手机游戏开发所迷住了.
本身就对写游戏充满着兴趣,没想到J2ME本身就是专门为游戏而开发的
她比J2SE下开发游戏简单的不知有几倍!!!
基本上几个重要的方法她都帮你写好了,比如双缓冲技术,层,砖块,冲撞检测,精灵...等等,真的太帮了!!!

有了J2ME使我如虎添翼,再也不要在J2SE下写底层的东西了:P上面几个技术就几个方法痛痛搞定.实在佩服SUN公司的伟大杰作.

对了告诉大家一个坏消息,在文化学J2ME的时候我看到大家都买了QD手机
QD手机他只支持MIDP 1.0 !!!
所以双缓冲技术,层,砖块,冲撞检测,精灵,如果要实现起来就要自己写方法了
QD不支持MIDP 2.0 ~~~~

-------------------------------------
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

public class onegame extends MIDlet implements CommandListener
{
     private oneCanvas canvas;
     public void startApp()
     {
           if(canvas==null)
           {
                 canvas=new oneCanvas(Display.getDisplay(this));
                 Command exitCommand=new Command("EXIT",Command.EXIT,0);
                 canvas.addCommand(exitCommand);
                 canvas.setCommandListener(this);
           }
           canvas.start();
     }
     public void commandAction(Command c,Displayable d)
     {
           if(c.getCommandType()==Command.EXIT)
           {
                 destroyApp(true);
                 notifyDestroyed();
           }
     }
     public void destroyApp(boolean b)
     {
           canvas.stop();
     }
     public void pauseApp()
     {
     }
}
-------------------------------------
import javax.microedition.midlet.*;
import javax.microedition.lcdui.game.*;
import javax.microedition.lcdui.*;
import java.util.*;
import java.io.*;

public class oneCanvas extends GameCanvas implements Runnable
{
     private Display display;
     private int frameWidth,frameHeight;
     private int SpriteWidth,SpriteHeight;
     private int Score;
     private int life;
     private Image back,head;
     private Sprite mySprite;
     private Sprite[] other=new Sprite[4];
     private int[] otherSpeed=new int[4];
     private long delay;
     private boolean deal,sleep;
     private Thread t;
     public oneCanvas(Display d)
     {
           super(true);
           display=d;
           delay=33;
           sleep=false;
           deal=false;
     }
     public void start()
     {
           display.setCurrent(this);
           try
           {
                 back=Image.createImage("/back.png");                    //读入图片
                 head=Image.createImage("/me.png");
                 mySprite=new Sprite(Image.createImage("/m.png"),16,20);
                 mySprite.setPosition(5,100);
                 other[0]=new Sprite(Image.createImage("/a1.png"));
                 other[0].setPosition(32,50);
                 otherSpeed[0]=4;
                 other[1]=new Sprite(Image.createImage("/a2.png"));
                 other[1].setPosition(80,150);
                 otherSpeed[1]=2;
                 other[2]=new Sprite(Image.createImage("/a3.png"));
                 other[2].setPosition(120,180);
                 otherSpeed[2]=-1;
                 other[3]=new Sprite(Image.createImage("/a4.png"));
                 other[3].setPosition(160,10);
                 otherSpeed[3]=-4;
           }
           catch(IOException e)
           {
                 e.printStackTrace();
           }
           life=3;
           Score=0;
           frameWidth=getWidth();
           frameHeight=getHeight();
           t=new Thread(this);
           t.start();
     }
     public void run()
     {
           Graphics g=getGraphics();
           while(!sleep)
           {
                 updraw();
                 draw(g);
                 try
                 {
                       Thread.sleep(delay);
                 }
                 catch(Exception e)
                 {
                       e.printStackTrace();
                 }
           }
     }
     public void stop()
     {
           sleep=true;
     }
     public void updraw()
     {
           if(deal)
           {
                 int keyState=getKeyStates();
                 if((keyState & FIRE_PRESSED) != 0)
                 {
                       mySprite.setPosition(5,100);
                       deal=false;
                       Score=0;
                       life=3;
                 }
                 return;
           }
           int key=getKeyStates();
           if((key & LEFT_PRESSED) != 0)
           {      
                 mySprite.move(-1,0);
                 mySprite.nextFrame();
           }
           else if((key & RIGHT_PRESSED) != 0)
           {
                 mySprite.move(1,0);
                 mySprite.nextFrame();
           }
           else if((key & UP_PRESSED) != 0)
           {
                 mySprite.move(0,-1);
                 mySprite.nextFrame();
           }
           else if((key & DOWN_PRESSED) != 0)
           {
                 mySprite.move(0,1);
                 mySprite.nextFrame();
           }
           bound(mySprite,false);
           
           if(mySprite.getX()>220)
           {
                 Score+=100;
                 mySprite.setPosition(5,100);
           }
           for(int i=0;i<4;i++)
           {
                 other.move(0,otherSpeed);
                 bound(other,true);
                 if(mySprite.collidesWith(other,true))
                 {
                       --life;
                       if(life==0)
                       {
                             deal=true;
                       }
                       else
                             mySprite.setPosition(5,100);
                 }
           }
     }
     public void bound(Sprite s,boolean tf)
     {
           if(tf)           //敵人的
           {
                 if(s.getY() >= frameHeight)
                       s.setPosition(s.getX(),-s.getHeight());
                 else if(s.getY() <= -s.getHeight())
                       s.setPosition(s.getX(),frameHeight);
           }
           else                         //自己的
           {
                 if(s.getX() <= 0)
                       s.setPosition(0,s.getY());
                 if(s.getY() <= 0)
                       s.setPosition(s.getX(),0);
                 else if(s.getY()+s.getHeight() >= frameHeight)
                       s.setPosition(s.getX(),frameHeight-s.getHeight());
           }
     }
     public void draw(Graphics g)
     {
           
           g.drawImage(back,0,0,Graphics.TOP | Graphics.LEFT);
           mySprite.paint(g);
           for(int i=0;i<4;i++)
           {
                 other.paint(g);
           }
           for(int i=1;i<=life;i++)
           {
                 g.drawImage(head,225,200+i*20,Graphics.TOP | Graphics.LEFT);
           }
           if(deal)
           {
                 g.setColor(0,0,0);
                 g.setFont(Font.getFont(Font.FACE_MONOSPACE,Font.STYLE_BOLD,Font.SIZE_LARGE));
                 g.drawString("游戏结束",120,100,Graphics.TOP | Graphics.HCENTER);
                 g.drawString("你的得分是:"+Score,120,150,Graphics.TOP | Graphics.HCENTER);
                 
                 g.drawString("作者:上海黑暗之龙 2005/10/5",120,180,Graphics.TOP | Graphics.HCENTER);
           }
           flushGraphics();
     }
}

-------------------------------------

希望大家看了回贴,你们的回贴就是对我最大的鼓励!
期待下次游戏课程-----<<急速赛车>>
JAVA狂热爱好者
级别: 论坛版主
UID: 1652
精华: 2
发帖: 156
威望: 117 点
金钱: 167 RMB
贡献值: 0 点
注册时间: 2005-07-28
最后登录: 2007-01-12
1楼  发表于: 2005-10-06 00:03
对了我忘了给大家介绍如何玩呢.

你控制着屏幕上的小猪,你的任务是穿过马路到另一边,马路上有许多怪物,
你要控制你自己的小猪不被碰到,一共你有3条命,每过一次关,加100分.
JAVA狂热爱好者
级别: 新手上路
UID: 1740
精华: 0
发帖: 9
威望: 3 点
金钱: 27 RMB
贡献值: 0 点
注册时间: 2005-08-04
最后登录: 2007-02-24
2楼  发表于: 2005-10-07 21:31
怎么都是MIDP2.0 的 没有MIDP1.0的游戏例子? 毕竟S40的手机是MIDP1.0的
级别: 新手上路
UID: 3958
精华: 0
发帖: 7
威望: 2 点
金钱: 11 RMB
贡献值: 0 点
注册时间: 2005-10-16
最后登录: 2005-11-15
3楼  发表于: 2005-10-17 11:38
把图片也发上来吧
级别: 新手上路
UID: 3958
精华: 0
发帖: 7
威望: 2 点
金钱: 11 RMB
贡献值: 0 点
注册时间: 2005-10-16
最后登录: 2005-11-15
4楼  发表于: 2005-10-17 17:28

 编译以后出现了一些错误,如何解决

符号: 方法 move(int,int[])
位置: 类 javax.microedition.lcdui.game.Sprite[]
          other.move(0,otherSpeed);
              ^
C:\WTK22\apps\MyGame\src\oneCanvas.java:128: 无法将 oneCanvas 中的 bound(javax.microedition.lcdui.game.Sprite,boolean) 应用于 (javax.microedition.lcdui.game.Sprite[],boolean)
          bound(other,true);
          ^
C:\WTK22\apps\MyGame\src\oneCanvas.java:129: 找不到符号
符号: 方法 collidesWith(javax.microedition.lcdui.game.Sprite[],boolean)
位置: 类 javax.microedition.lcdui.game.Sprite
          if(mySprite.collidesWith(other,true))
                  ^
C:\WTK22\apps\MyGame\src\oneCanvas.java:167: 找不到符号
符号: 方法 paint(javax.microedition.lcdui.Graphics)
位置: 类 javax.microedition.lcdui.game.Sprite[]
          other.paint(g);
              ^
4 错误
com.sun.kvem.ktools.ExecutionException
Build failed
级别: 新手上路
UID: 3958
精华: 0
发帖: 7
威望: 2 点
金钱: 11 RMB
贡献值: 0 点
注册时间: 2005-10-16
最后登录: 2005-11-15
5楼  发表于: 2005-11-08 15:46
版主看看上面的问题呀。
级别: 论坛版主
UID: 1652
精华: 2
发帖: 156
威望: 117 点
金钱: 167 RMB
贡献值: 0 点
注册时间: 2005-07-28
最后登录: 2007-01-12
6楼  发表于: 2005-11-08 21:59
我运行的好好的呀:P
我还有些图片资源没上传.
JAVA狂热爱好者
级别: 新手上路
UID: 3958
精华: 0
发帖: 7
威望: 2 点
金钱: 11 RMB
贡献值: 0 点
注册时间: 2005-10-16
最后登录: 2005-11-15
7楼  发表于: 2005-11-10 17:45
能不能把文件压缩包传上来,版主。
级别: 论坛版主
UID: 1652
精华: 2
发帖: 156
威望: 117 点
金钱: 167 RMB
贡献值: 0 点
注册时间: 2005-07-28
最后登录: 2007-01-12
8楼  发表于: 2005-11-10 23:01
好的,只要回我贴的人,我会尽力满足你们的一切要求:P
附件: my_onegame.rar (200 K) 下载次数:120
JAVA狂热爱好者
级别: 新手上路
UID: 3958
精华: 0
发帖: 7
威望: 2 点
金钱: 11 RMB
贡献值: 0 点
注册时间: 2005-10-16
最后登录: 2005-11-15
9楼  发表于: 2005-11-11 14:54
运行成功。I jump。谢谢。
  • «
  • 1
  • 2
  • 3
  • »
  • Pages: 1/3     Go