关于j2me实现拼图游戏的算法实现
来源:互联网 发布:python adb命令 编辑:程序博客网 时间:2024/05/19 02:16
0 1 2 3
4 5 6 7
8 9 10 11
12 13 14
因为前些日子做了一些简单的益智游戏,所以涉及了一些算法上的问题,本来以为这些小游戏非常简单,但也为了效率的确令我小头痛了一下。
开始很快的写玩拼图游戏,玩了玩发现有时候会无解,到论坛看了看,好多人在探讨如何验证拼图无解,大概就是矩阵的逆序数+数眼的奇偶性判断。
正痛苦的时候老付跟我说,你回忆一下咱小时候玩拼图怎么玩的呢,我说我拼不好的话就给它们都扣下来再按上,他说都是完整的拼图手动随意打乱的。
果然啊,其实如果是拼图游戏不必如此费力还要去验证是否有解,如果是生成的整齐矩阵,手动打乱的话必然能保证有解。
初始化时,根据随机数去让图块4方向填补空位。循环100次就ok了。
部分代码如下:
- //4X4的数组
- public static final int game1[][]={
- {0,1,2,3},
- {4,5,6,7},
- {8,9,10,11},
- {12,13,14,15}
- };
- //得到顺序2维数组
- public int [][] get2arry(int arry[][]){
- arry=null;
- arry=new int[4][4];
- for(int i=0;i<arry.length;++i){
- for(int j=0;j<arry[i].length;++j){
- arry[i][j]=i*4+j;
- }
- }
- return arry;
- }
- //初始化图块数组
- public void InitMy() {
- if (buffergame == null) {
- int index = 0;
- int bufferInt = 0;
- buffergame = this.get2arry(buffergame);
- while (true) {
- for (int i = 0; i < buffergame.length; ++i) {
- for (int j = 0; j < buffergame[i].length; ++j) {
- if (buffergame[i][j] == 0) {
- bufferInt = t.getRandomNumber(0, 2000);
- if (bufferInt < 500) {
- if (i == 3) {
- break;
- }
- buffergame[i][j] = buffergame[i +
- 1][j];
- buffergame[i + 1][j] = 0;
- ++index;
- } else if (bufferInt < 1000) {
- if (i == 0) {
- break;
- }
- buffergame[i][j] = buffergame[i -
- 1][j];
- buffergame[i - 1][j] = 0;
- ++index;
- } else if (bufferInt < 1500) {
- if (j == 3) {
- break;
- }
- buffergame[i][j] = buffergame[i][j +
- 1];
- buffergame[i][j + 1] = 0;
- ++index;
- } else {
- if (j == 0) {
- break;
- }
- buffergame[i][j] = buffergame[i][j -
- 1];
- buffergame[i][j - 1] = 0;
- ++index;
- }
- }
- }
- }
- if (index > 200) {
- break;
- }
- // int pos1, pos2;
- // for (int i = 0; i < buffergame.length; ++i) {
- // for (int j = 0; j < buffergame[i].length; ++j) {
- // while (true) {
- // pos1 = t.getRandomNumber(0, 3);
- // pos2 = t.getRandomNumber(0, 3);
- // if (buffer[pos1][pos2] != 100) {
- // buffergame[i][j] = buffer[pos1][pos2];
- // buffer[pos1][pos2] = 100;
- //// System.out.println("buffergame[" + i +
- //// "][" + j + "]==" +
- //// buffergame[i][j]);
- // break;
- // }
- // }
- // }
- // }
- // //如果奇偶性不同 从新生成
- // if(this.TestArry(buffergame)){
- // if(Type.isprint)
- // System.out.println("有解");
- // break;
- // }else{
- // if(Type.isprint)
- // System.out.println("无解");
- // }
- // }
- }
- }
- if (Type.isprint)
- System.out.println("Init is ok!!");
- }
- 关于j2me实现拼图游戏的算法实现
- as3实现的拼图游戏
- Qt5实现简单的拼图游戏
- 关于点阵字库在J2ME的实现。
- j2me 实现连连看的算法
- j2me 拼图游戏
- JAVA实现拼图游戏
- JAVA实现拼图游戏
- Javascript实现拼图游戏
- js实现拼图游戏
- 使用JavaFx实现拼图游戏
- Javascript: 实现拼图游戏
- 拼图游戏---java实现
- j2me 扑克发牌算法实现
- 从拼图游戏开始(四)_IDA*算法求解Java实现
- 拼图游戏的算法
- 拼图游戏的算法
- J2ME插值算法实现图片的放大缩小
- 软件设计师考试大纲
- [VB.NET]有谁用vb.net做过工作流页面表单生成器的?
- [VB.NET]两个socket通讯问题,人在线等
- [VB.NET]如何识别文本文件的编码?
- [VB.NET]怎样把cvs文件倒入数据库中
- 关于j2me实现拼图游戏的算法实现
- JBuilder2006 配置 JDBC驱动
- [VB.NET]哪个大虾教我怎么实现登陆是输入验证码,用VB.NET写的
- UliPad Learning Notes
- [VB.NET]如何设置随机数的种子
- 求解
- [VB.NET]请问在VB.net中怎样判断一个字符串是否是另一个字符串的子字符串?
- 2008.12.29 进公司第一次感到工作开展受挫
- bnu1283 缺考的学生 C语言版