[html5游戏开发]数独游戏-完整算法

本文介绍了如何使用lufylegend.js引擎将数独游戏移植到浏览器上,并详细讲解了游戏的算法实现,包括数字打乱、确保数独规则的正确性以及检查数字正确性的方法。同时,展示了开始界面和选择界面的创建过程。
摘要由CSDN通过智能技术生成

在中国数独游戏似乎没那么流行,但是在日本这个游戏非常受欢迎,在通勤的电车上,经常能看到一些人一个手拿着一本数独游戏的书,另一个手拿着一支铅笔,就这么一路计算着。现在我用lufylegend.js引擎来将这款游戏搬到浏览器上来,游戏界面如下图所示。

 

游戏分为两个阶段,第一个阶段,是比较简单的玩法,只需要横,竖,没有重复的数字就可以了,另一个高级阶段,还需要保证每一个小的九宫格内的数字也不重复。想挑战一下的朋友,可以点击下面的游戏链接试一下自己能通过几关。

http://lufylegend.com/demo/sudoku

和之前的推箱子游戏一样,一共6关,游戏里也有排名系统,每过一关可以上传自己的成绩,跟大家比拼一下。

 制作开始

一,首先,你需要下载lufylegend.js引擎

下面是我在博客的lufylegend-1.6发布帖

http://blog.csdn.net/lufy_legend/article/details/8593968

 

下面一步步来进入开发正题。

二,游戏算法

这个游戏,我们首先要解决的就是数字如何打乱的问题,因为不但要把数字打乱,还要保证这些数字被打乱后,依然符合数独的规则,然后在打乱的数字中隐藏一部分,就可以开始游戏了。

我们先来看一组数字

可以看到,在这组数字中,它的横,竖列上的数字都是不重复的。我们如何来把它的顺序打乱呢?不难看出,如果我们只把它的每一行打乱,那么它的完整性是不受影响的。同样,我们只把它的每一列进行打乱,它也是不会受到影响的。所以,要打乱它只需要以行和列为单位进行打乱就行了,算法如下。

[javascript] view plaincopy

1.  function randomNum01(lv){  

2.      var i,j,list = new Array(),result = new Array();  

3.      for(i=0;i<9;i++){  

4.          list.push([1,2,3,4,5,6,7,8,9]);  

5.          for(j=0;j.5?-1:1;});  

6.      var rand = new Array(0,1,2,3,4,5,6,7,8).sort(function(a,b){ return Math.random()>.5?-1:1;});  

7.      for(i=0;i<9;i++){  

8.          for(j=0;j<9;j++){  

9.              result[i].push(list[i][rand[j]]);  

10.         }  

11.     }  

12.   

13.     for(i=0;i<9;i++){  

14.         for(j=0;j>> 0;  

15.             result[i][ran1] = 0;  

16.             ran1 = Math.random()*9 >>> 0;  

17.             result[ran1][i] = 0;  

18.         }  

19.     }  

20.     return result;  

21. }  




上面的函数,我首先生成了一组有规律的数字,然后按照行和咧进行打乱,最后,随机拿掉一些数字。

下面再看另一组数字。

这种情况下,我们还要保证每个小九宫格内的数字的完整性,又要怎么做呢?在这里我有一种偷懒的算法,看下面的图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值