鉴于前一周学习javaME技术,还是超有感想的,感觉到在javaME中的很多思维和javaSE中的差不多,我按照起初学习的javaSE的方法一步步学习javaME,因为javaME主要是做手机的移动开发,这里面就不对javaME环境配置介绍了,因为网上有很全面的的介绍。对于j2ME我们接触最多是按钮(Command)所以我也是从这开始学习的,再学习CommandListener、LIst、textbox还有表单元。在API工具中我也学习了线程,这里面的线程和J2SE中的差不多,只是调用方式不同而已,不过都是extends Thread,但是在j2ME中药implements Runnable而已。还是比较容易些。最近学习到了Canvas绘图。就制作了一个拼图游戏。
一、拼图前思考
1、首先是拼图是一幅整体图片,但是我们拼图时是不同图块一个个拼接起来的,我们要怎么来出来呢?是用多个小图片拼接起来还是用一幅大图呢?
2、手机上的上下左右该怎么控制图片间的调用?
3、各个小图片怎么打乱?
4、怎么判断最终结果?
二、拼图过程
带着这些问题开始寻找答案,一步步实现。
针对问题1:
学习了Canvas,就可以重新绘制图形,如果界面引入很多张小图操作起来也非常麻烦而且需要的程序代码页需要很多,我就将多幅图片封装成为Image然后进行平均切割,然后通过数组进行存储图片的,把图片放到了数组中通过数组就可以直接调用
int[][] map = {{00,01,02,03},{10,11,12,13},
{20,21,22,23},{30,31,32,33}};
这个也为以后的打乱图片提供的帮助。在接下来就是图片的切割与图片有规律的存放到数组中,我这里面采用的是4*4的图片拼图,所以高度与宽度都采用原图形的四分之一。然后再确定坐标,合理的不重叠的叠放图片。
protected void paint(Graphics g) {
gra = g;
g.setColor(255, 255, 255);
g.fillRect(0, 0, this.getWidth(), this.getHeight());
for(int x =0;x<4;x++){
for(int y=0 ; y<4;y++){
if(map[x][y]!=33){
//获取编号的第一位数
int xSegment = map[x][y]/10;
//获取编号的第2位数
int ySegment = map[x][y]%10;
//画到界面左上角
g.drawRegion(img, xSegment*edge, ySegment*edge, edge, edge, Sprite.TRANS_NONE,x*edge, y*edge,Graphics.LEFT|Graphics.TOP);
}
}
}
}
运用上诉代码进行图片的切割。
针对问题2
键盘的控制就是如何来控制哪个方向的图像移动到空白处,然后在边界处不让图片移动。所以就按照图像的布局进行安排调用。调用了SWITCH来进行方向键的选择判断。
//键盘按钮,用来移动
protected void keyPressed(int keyCode){
int action = this.getGameAction(keyCode);
int xOf = -1;
int yOf = -1;
for(int x=0;x<4;x++){
for(int y =0;y<4;y++){
if(map[x][y]==33){
xOf = x;
yOf = y;
break;
}
}
}
switch(action){
case GameCanvas.UP:
if(yOf!=3){
this.swap(xOf, yOf, xOf, yOf3+1);
}
break;
case GameCanvas.DOWN:
if(xOf!=0){
this.swap(xOf, yOf, xOf, yOf-1);
}
break;
case GameCanvas.LEFT:
if(xOf!=3){
this.swap(xOf, yOf, xOf+1, yOf);
}
break;
case GameCanvas.RIGHT:
if(xOf!=0){
this.swap(xOf, yOf, xOf-1, yOf);
}
repaint();
}
}
针对问题3
之前已经将图片存放到数组中了,所以我们只需要对数组进行改变,但是由于是随机打乱我们就必须用到Random函数,交换足够的个数。我这里就运用到了for循环。
void initMap(){
Random rnd = new Random();
int temp,x1,x2,y1,y2;
//将地图数组打乱
for(int i=0;i<100;i++){
x1 = rnd.nextInt(4);
x2 = rnd.nextInt(4);
y1 = rnd.nextInt(4);
y2 = rnd.nextInt(4);
temp = map[x1][y1];
map[x1][y1] = map[x2][y2];
map[x2][y2] = temp;
}
this.repaint();
}
针对问题4
想法是就是正常遍历数组的顺序,如果顺序不发生变化就拼接成功。按照常理也是这样的,但是功能还没有,总是报错还在调试。
三、拼图现结果
下面是实现的图片打乱:
这是实现基本的移动功能:
四、工程待续
上面还有很多要完善,首先实现一个拼图成功的判断,然后增添一个选项譬如可以实现4*4样式和5*5样式等,添加一个时间计时功能,判定谁的时间少。时间仓促完成效果还不是特理想了哦。。
- 大小: 69.8 KB
- 大小: 230.4 KB
分享到:
相关推荐
简单的手机拼图游戏,用的是J2ME开发的。 在手机上实验过 能用
简单的手机拼图游戏 ZhuJieMian.java 可运行的主程序 Record.java 记录模块 Saverecord.java保存 Tile.java图片分割
J2ME手机拼图游戏毕业论文.doc
超的手机拼图游戏毕业论文附测试代码.doc
手机趣味拼图游戏的开发 介绍了一个基于JZ ME 的手机趣味拼图游戏开发的全过程 , 从游戏前的准备到主要类和接口的实现, 最后运行、调试和打包。
用eclipse做的 Java手机拼图小游戏
简单,可以作为j2me 初学者,参考
使用ktoolbar开发 经典的中国古代益智游戏。
能实现自动开局.随机生成一个开局.. 能通过按虚拟手机方向键使每个拼图移动.能记录移动多少步,记录移动方向便于自动完成游戏.希望对学习手机编程的朋友有用....
java j2me 手机游戏 源代码 可以运行
改拼图游戏可以选择拼图难度,支持3X3 4X4 5X5的难度,打乱是利用算法随机打乱的,可以记录玩家拼图所花时间最后存入数据库作为排行榜依据,并且有回放功能
源码质料 是很好的学习源码 需要的朋友请下载喝 谢谢光临 希望此资源对你有帮助
html5微信手机过关拼图游戏源码下载
这款java拼图游戏可以在手机上运行。源文件需要用eclipse打开,在eclipse左侧资源管理器中右键导入,然后选择现有项目到工作区中,点下一步,在选择根目录中选择压缩包解压后的目录,单击完成即可。 用eclipse...
这是用j2me做的手机拼图,功能很简单,但对初学者还是有一定的帮助的。
里面是游戏的源代码,有注释,是个学习的好素材。 美女拼图,顾名思义,就是使用美女作为素材,拼出一个美女出来。此次的素材使用名画中的大美女。一饱你的眼福。... 赶快下载这款手机拼图游戏代码吧!
Android完整版拼图游戏。可在不同手机上运行。