博文
我学习J2ME手机游戏问题QQ解答(2006-09-11 10:26:00)
摘要:_BAT_姜维(14923349) 09:47:18java.unit.*;z怎怎么不存在? _BAT_姜维(14923349) 09:47:31e:\WTK22\apps\test2\src\test2.java:4: package java.unit does not existimport java.unit.*;^ 人肉小炒(418138484) 09:47:54Jdk配置了没有 _BAT_姜维(14923349) 09:50:06不清楚啊我在网吧上就下了JDK和WTK两个就来搞了 人肉小炒(418138484) 09:48:54 _BAT_姜维(14923349) 09:50:28如果是配置那我不担心回宿舍他就好了 人肉小炒(418138484) 09:49:30肯定是没配置了设置下jdk路径就好了 _BAT_姜维(14923349) 09:51:22OK _BAT_姜维(14923349) 09:58:29Uncaught exception java/lang/NullPointerException.这是什么异常? 人肉小炒(418138484) 09:57:18空指针 _BAT_姜维(14923349) 09:58:59can le 人肉小炒(418138484) 09:57:49? _BAT_姜维(14923349) 10:00:06import javax.microedition.midlet.MIDlet;import javax.microedition.lcdui.*;import javax.microedition.lcdui.game.*;//import java.unit.*;import java.io.*;
//简单的canvas by sword2008@程序之巢
public class test2 extends MIDlet{ private Display display;
public test2(){ }
public void startApp(){ new test(Display.getDisplay(this)).start();}
public void paus......
J2ME 简单的动画Canvas-ken街头霸王(2006-09-11 10:18:00)
摘要:import javax.microedition.midlet.MIDlet;import javax.microedition.lcdui.*;import javax.microedition.lcdui.game.*;//import java.unit.*;import java.io.*;
//简单的动画canvas by sword2008@程序之巢
public class test2 extends MIDlet{ private Display display;
public test2(){ }
public void startApp(){ new test(Display.getDisplay(this)).start();}
public void pauseApp(){ }
public void destroyApp(boolean unkowmn){ }
class test extends GameCanvas implements Runnable{////////////////////////////////////// private Display display; private long frameDelay; private boolean sleeping;// private Random rand; private Sprite ken;////////////////////////////////////// public test(Display d){ super(true); display=d; frameDelay=30; }//========================================== public void start(){ display.setCurrent(this);// rand=new Random(); try{ken= new Sprite(Image.......
J2ME伪高手先锋开讲—扫雷游戏的设计[专](2006-09-01 17:14:00)
摘要:J2ME伪高手先锋开讲——扫雷游戏的设计 首先我要装得像高手一样,来假装把系统稍微分析一下。 一般,按照java得开发模式,这种程序一般是分为三个模块来开发。 如下三个: 一个程序运作的主文件,也就是一个midlet的继承; 一个界面的表示类,也就是一个canvas的继承,界面上应该有些菜单,如new、exit 什么的,那就应该要 implements一个 commandListener消息监听类(大家可以把java的消息监听理解为一个线程,一直像倭寇那样对看得顺眼的东西虎视耽耽,当然这里指的是他所能触及到的消息,当收到消息的时候,会调用一个抽象函数public void commandAction(Command c, Displayable d),而这个抽象函数使得我们可以通过对他的实现来处理收到的消息,即消息响应) 最后一个当然就是与界面无关的逻辑单元了,在这里我们定义整个游戏的逻辑,做到逻辑与界面分开。这是我学java的最大收获,呵呵。 首先正式开始第一讲 <扫雷游戏的逻辑> 我的设想是,扫雷的地图一般是一个矩形,因为,圆形屏幕的手机看起来蛮变态的,没有必要迁就他,所以,我用一个a*b的二维数组就完全可以表示整个地图。 有了地图以后地图里面的类容自然就有一部分是表示地雷啦,既然这样,那不如就这样<废话来的,小朋友不要学> /** * 20 标志该位置为地雷 * <=10的数字表示未翻开的方块及周围的地雷数目 * >=10的数字表示已翻开的方块及周围的地雷数目 * */ 表示方法就出来了,逻辑也明朗起来了。 我要将某个块翻开,只要将他加上10就可以了。 Java编程第一步,当然是先要class啊 package games; import java.util.Random; import java.lang.Math; class gamelogic { /**表示一个10*10的棋盘*/ private int[][] pan = new int; private Random random;//一个随机变量,主要作用是用来指定哪些位置为地雷 private int BombNum = 0; //统计地雷总数 /**游戏是否结束*/ private boolean GameOver; 接下来就是要初始化地图了,地图首先要扔......
[原创]J2ME 移动的格子(2006-08-28 10:02:00)
摘要:import javax.microedition.midlet.MIDlet;import javax.microedition.lcdui.*;
//made by sword2008·程序之巢//游戏第一课 画格子public class Gofirst1 extends MIDlet{
public Gofirst1(){ } public void startApp(){ Display.getDisplay(this).setCurrent(new First1()); } public void pauseApp(){} public void destroyApp(boolean unkown){}
}
class First1 extends Canvas{ private int color; private int forOneTime=0; private Graphics g; private int startX=getWidth()/4-40;//起点坐标和终点坐标非常重要,格子剩下的是分成等分 private int startY=getHeight()/4-40; private int nowX=startX,nowY=startY;
public void paint(Graphics g){
if(forOneTime==0){ color=g.getColor(); g.setColor(255,255,255); g.fillRect(0,0,getWidth(),getHeight()); g.setColor(255,0,0); g.drawRect(startX,startY,200,200);&nb......
J2ME简单的格子(2006-09-05 15:00:00)
摘要:import javax.microedition.midlet.MIDlet;import javax.microedition.lcdui.*;
//made by sword2008·程序之巢
//http://blog.programfan.com/blog.asp?author=qq14923349
//游戏第一课 画格子public class Gofirst1 extends MIDlet{
public Gofirst1(){ } public void startApp(){ Display.getDisplay(this).setCurrent(new First1()); } public void pauseApp(){} public void destroyApp(boolean unkown){}
}
class First1 extends Canvas{ private int color; private int startX=getWidth()/4-40;//起点坐标和终点坐标非常重要,格子剩下的是分成等分 private int startY=getHeight()/4-40;
public void paint(Graphics g){ color=g.getColor(); g.setColor(255,255,255); g.fillRect(0,0,getWidth(),getHeight()); g.setColor(255,0,0); g.drawRect(startX,startY,200,200); drawline(g); &n......
MIDP1.0小游戏入门-五子棋1.1 [转] (2006-08-11 13:38:00)
摘要:作者:yinowl2005年1月1.1版注:完善了游戏输赢的判断,由于考虑的比较匆忙,没有非常仔细地考量算法的优劣程度,目的主要对游戏的输赢进行一种实现,嵌入到程序中,给大家做为一个参考,由于其他内容和1.0版完全相同,我就把输赢实现这一节提到最前面,后面再补上所有的内容。游戏输赢最后要说的是判断游戏的输赢。我的思路是,每次在玩家着棋(按下5)时,判断棋局的输赢,然后用一个 Alert 显示哪一方赢了以及当前的比分,返回后开始新的一局。判断的逻辑是,在当前所下的棋子的0/180度、90/270度、45/225度、135/315度四个方向上分别往两头按照由近至远的顺序判断各5个棋子是否是当前下棋方的棋子,如果是则累加到一个变量上,如果在到达5之前出现“否”的情况,则中止在这一方向或这一角度的判断,变量归1(应为当前棋子肯定是当前下棋方下完的棋子)并进行下一个方向或角度。在判断是否是当前方时,用当前 isPlayer1 变量和棋子对象的 isPlayer1 变量进行比交。源代码如下: int player1win,player2win; protected synchronized void keyPressed(int keyCode) { ... else if (action == Canvas.FIRE) { if(chesses[selectedY][selectedX]==null){&n......
[转]贪吃蛇游戏的MIDP实现 (2006-08-11 12:56:00)
摘要:概述 相信大家都玩过Nokia手机上的贪吃蛇游戏。在该游戏中,玩家操纵一条贪吃的蛇在迷宫里行走,贪吃蛇按玩家所按的方向键折行,蛇头吃到各种食物(比如大力丸)后,会有各种反应(比如蛇身变长),如果贪吃蛇碰上墙壁或者自身的话,就GameOver了(当然也可能是减去一条生命)。要实现该游戏其实并不麻烦,关键就是要找到一个合适的核心算法。本文就给出一个参考实现,你可以基于该demo做扩展。要说明的一点是:本文只演示最核心的算法,要实现一个完整的游戏,你还需要做很多的扩展,重构。
实例代码 该程序包括3个java文件。一个是SnakeMIDlet,另外2个分别是一个Canvas(SnakeCanvas)和一个代表贪吃蛇的类Snake
SnakeMIDlet.java
import javax.microedition.lcdui.Display;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
/**
* @author Jagie
*/
public class SnakeMIDlet extends MIDlet {
protected void startApp() throws MIDletStateChangeException {
// TODO Auto-generated method stub
Display.getDisplay(this).setCurrent(new SnakeCanva......
可以运行的简单Canvas游戏菜单(2006-08-10 15:30:00)
摘要://by sword2008@程序之巢//网上的那些错误基本上改正import javax.microedition.midlet.MIDlet;import javax.microedition.lcdui.*;
public class menucanvas extends MIDlet
{ public menucanvas(){}
public void startApp(){ Display.getDisplay(this).setCurrent(new Can());} public void pauseApp(){} public void destroyApp(boolean unkowmn){}
}
class Can extends Canvas{//焦点 private int selected=0; private int preferwidth=-1; private int preferheight=-1; public static final int[] options = {0,1,2,3}; public static final String[] labels={"新游戏","设置","高分","退出"};
public Can(){ selected = options[0]; Font f=Font.getDefaultFont(); for(int i = 0;i<labels.length;i++){ int temp = f.stringWidth(labels[i]);//计算字符串的宽度 if(temp > preferwidth){ preferwidth = temp; } preferwidth = preferwi......
[转]j2me中使用canvas制作简单的游戏菜单(2006-08-07 10:24:00)
摘要:我们知道midp的图形用户界面分为两类,分别是高级图形用户界面和低级用户界面。一般来讲高级图形用户界面类使用起来比较方便,可移植性强,但是程序员对他的控制能力也很低,因为它们的界面表现是由底层控制的,而不是我们控制的。相比高级ui类,低级ui类则使用起来更难一些,但是控制能力更强,可以做出自己需要的界面。 canvas和graphics是我们必须熟练使用的两个类,分别代表了画布和画笔(事实上更丰富,姑且这么比喻)。而我们则是画画的人,而指导我们如何下笔的就是java doc了,再加上勤奋努力一定可以画出不错的界面。比如tabbed菜单,二级菜单等。这里我们讲述一个简单菜单的制作方式。 在画菜单的时候,需要考虑两面的问题,第一是计算相对位置,让菜单能够尽可能适应更多的机型,尽量少使用绝对值。例如画下面的菜单的时候 我们应该计算菜单的每个条目的高度,这些可以有font的高度算出,当然你可以给条目留一些padding的距离。还应该计算条目的最宽值,毕竟每个条目的字数不一样。这样基本知道了整个菜单占的空间。最后还需要计算菜单在屏幕的位置。菜单的绘制如下所示:
public void paint(graphics g){ /清除屏幕 int color = g.getcolor(); g.setcolor(0xffffff); g.fillrect(0,0,getwidth(),getheight()); g.setcolor(color); /计算整个菜单的高度,宽度和(x,y) int rectwidth = preferwidth; int rectheight = preferheight * labels.length; int x = (getwidth()-rectwidth)/2; int y = (getheight()-rectheight)/2; /画矩形 g.drawrect(x,y,rectwidth,rectheight); for(int i = 1;i<labels.length;i++){ g.drawline(x,y+preferheight*i,x+rectwidth,y+preferheight*i); } /画菜单选项,并根据selected的值判断焦点 for(int j = 0;j<labels.leng......
简单的Canvas(2006-08-07 10:10:00)
摘要:import javax.microedition.midlet.MIDlet;import javax.microedition.lcdui.*;
//简单的canvas by sword2008@程序之巢
public class test2 extends MIDlet{ private Display display;
public test2(){ display=Display.getDisplay(this); }
public void startApp(){ display.setCurrent(new test());}
public void pauseApp(){ }
public void destroyApp(boolean unkowmn){ }
class test extends Canvas{ public void paint(Graphics g){ g.setColor(255,255,0); g.fillRect(0,0,getWidth(),getHeight()); int c=g.getColor(); int d=g.getDisplayColor(g.getColor()); System.out.println("当前画面的颜色为:"+Integer.toHexString(c));
System.out.println("当前画面的R值为:"+g.getRedComponent());
System.out.println("当前画面的G值为:"+g.getGreenComponent());
System.out.println("当前画面的B值为:"+g.getBlueComponent());
 ......
