最近学了一点gtk,在学校学了一些C语言,想用所学的东西写一点东西,网上搜了好些,就先从扫雷入手。
参考了很多资料:最后决定参考http://www.gymsaga.com/project/761.html这个仁兄的程序。
本人新手,再编程中会有很多问题,但是编程的乐趣就在于发现问题,解决问题。所以一步一步的向前走吧。
在编程过程中遇到很多细节的问题,现在想写下来:
1:双击已经点开的格子时,如果此格子周围的8个格子里 有一个或者多个格子是空的,那么需要自动的将空格子周围的8个格子继续显示,如果仍然后空格子,那么如此递归下去,注意如果标记了旗子那么不需要显示。(我在编程的时候只是单纯的双击后将8个格子显示出来,没有考虑到空格子的情况)
2:按钮点击后 只有在释放的时候才会处理,按下不做处理,如果是在第一个按钮按下,在第二个按钮释放,那么最后是相当于点击了第二个按钮。
3:左键点击小红旗不处理。
4:判断是否成功的条件:不是雷的所有格子都被点开了,与标记雷的个数无关,同时要注意不管是单击击还是双击操作格子都要在最后加上判断是否成功的函数来进行判断。
5:最大的数字只可能是8。
关于扫雷还有一个问题:
1:第一次一定会点到雷么?
答:网上搜了一下 有人回答说:微软的扫雷肯定是不行的. 如果你第一次点击在雷上, 这个雷会被移到左上角. 如果左上角已经有雷, 程序会从左到右从上到下找下一个空出来的位置。这个可以在自己的游戏里后期扩展一下。现在鼠标点击后才生成雷的分布.做到了鼠标点击的格及其周围的8个格不可能是雷.也就是现在的一来就能开一片。
2:有没有可能第一步就赢了?
答:有可能的。
3:有没有可能是剩下最后两个只能靠运气。
答:有可能的。
关于程序上的一些问题:
1:gtk+如何相应单双机以及右击。答:可以使用gtkEventButton。
2:gtk+如何实现鼠标在按钮上按下,鼠标移到其它位置上松开,不作任何处理。答:我想到是利用按钮的leave和enter信号设一个flag,在enter处理函数中flag置为true,leave里置为false,然后利用flag来进行是否处理其他事情。不知道这个方法对不对。目前是可以用的,以后慢慢在改善。