Jump to 0 top | 1 navigation | 2 content | 3 extra information (sidebar) | 4 footer | 5 toolbar


Content

让我们从游戏开始──点灯(1)

一次上班无聊,把同事的手机拿来打游戏,发现有个叫“点灯”的小游戏,开始不太在意,玩了一会儿以后发现非常有趣,想想很久没有写过程序了,便决定用这个来练练手。
关于游戏
点灯游戏规则非常简单,简单到什么人都可以一学就会。但是简单的规则并不意味着游戏也简单,这恰恰就是我所喜欢的,在简单中充满变化。因为规则简单,我在这里就不多说了。
[swf]http://games.wuhan.cc/flash/flash/flash_swf/3015.swf,1400,550,7,#FFFFFF[/swf]
这个是网上找到的,所不同的就是他在开始的时候有些灯已经点亮了。让我们简化一下,4×4的正方形,一开始所有灯都是关闭状态,我们的目的就是把所有的灯都打开。等我们把这个简化的问题解决了,在来看看这个大的问题。

一些理论
这个游戏真是让人恼火啊,为了让程序能够解出答案,我们需要想想这个游戏到底是什么。
也许我们应该这样看这个游戏:这16个格子是16个开关,每个开关控制着灯泡的状态。如果一个开关的状态改变,那么其所在格子与相邻格子的灯泡状态反转。 这样我们就可以初始化一个4×4,全部是0的数组,表示所有开关全部是关闭的,当某一格的开关打开,我们就把这格变成1。而且我们可以发现,某一格的开关 状态变化偶数次,那么灯泡的状态和最初的状态是一样的(0->1->0)。那么我们用0和1来表示开关的状态是成立的。
好了,现在我们有个一个新的问题:如何从开关状态得到灯泡的状态?问题其实很简单,从上面我们知道,某一格的灯泡受到
自己所在的格子与周围四格的影响(我们为了简单称这些格子叫“影响格”),由于一开始灯泡是关闭的,而且只有两种状态(灯亮,灯灭),所以我们可以知道:对于某一格的灯泡,如果影响格内有奇数个开关打开,这格灯泡就被点亮,反之关闭。
天,我的文笔实在太差,写这些理论真是很痛苦,也不知道有多少人能看懂。
现在我们开始写程序吧。

  • No ratings
  • No ratings
  • No ratings
  • No ratings
  • No ratings
  • 0 ratings

Leave a comment


Already have a login?