【bitse——sudoku】4.gui

今天尝试做了一下gui,相当于新的项目吧。有一些细节处理的一般。

思路:

C++的应用程序写起来比较复杂。所以与之前项目不同,新建了项目,使用c#来完成。主要分为逻辑和界面两大部分。

界面:

界面的话,因为数独的界面比较格式化,所以使用了网格,datagridview来完成。有利有弊。如果自己设计的话,灵活性更高,但各模块需要从头设计。使用已有控件,操作简单,但效果要稍差一点。正式上线的项目建议自己设计。练手的项目选择已有控件。另外添加两个按钮。一个开始,用于初始化数独。另一个提交,判断解数独的情况。

逻辑:

附加项目,没有详细的要求。所以只实现基本功能。主要包括:生成题目。判断正误。

生成题目:生成题目有多种思路。此处先生成一个终局,再根据题目要求挖空。

生成终局与之前思路差不多。有两点不同。这个项目中没有了不重复的要求。且每次生成一个。所以可以有一些大胆的创新。包括:

通过随机数来生成,虽然可能会有重复题目。但每次运行结果不同,事实上增加了可玩性。

依据一定规则直接生成题目。使用求解算法判断是否有解。但是实现不好容易出现无法求解的情况。

最后实现先生成终局。在每个九宫格中挖去两个空。然后获取一个在范围内的随机数字。再挖去随机数字个空。

判断正误:

这个就比较简单了。判断每一行每一列,每个九宫格有无重复即可。判断重复通过求和,判断是否等于45。

 

结果:

初始界面:

newgame:

submit:

正确提交:

再来一局:

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Sure, I can help with that! Here's the implementation of the Sudoku class with the main() method, validLine() static method, and allLinesValid() static method: ```python class Sudoku: def main(self): # Declare a variable named grid corresponding to a sudoku grid grid = [ [5, 3, 4, 6, 7, 8, 9, 1, 2], [6, 7, 2, 1, 9, 5, 3, 4, 8], [1, 9, 8, 3, 4, 2, 5, 6, 7], [8, 5, 9, 7, 6, 1, 4, 2, 3], [4, 2, 6, 8, 5, 3, 7, 9, 1], [7, 1, 3, 9, 2, 4, 8, 5, 6], [9, 6, 1, 5, 3, 7, 2, 8, 4], [2, 8, 7, 4, 1, 9, 6, 3, 5], [3, 4, 5, 2, 8, 6, 1, 7, 9] ] # Check if the grid is valid print(self.isValid(grid)) @staticmethod def validLine(grid, i): # Check if the line i is valid (i.e. contains exactly once each value from 1 to 9) for j in range(1, 10): if grid[i].count(j) != 1: return False return True @staticmethod def allLinesValid(grid): # Check if all the lines are valid for i in range(0, 9): if not Sudoku.validLine(grid, i): return False return True def isValid(self, grid): # Check if the grid is valid (i.e. each line, column, and block contains exactly once each value from 1 to 9) for i in range(0, 9): # Check if the line i is valid if not Sudoku.validLine(grid, i): return False # Check if the column i is valid column = [grid[j][i] for j in range(0, 9)] if not Sudoku.validLine(column, 0): return False # Check if the block i is valid block = [] for j in range(0, 3): for k in range(0, 3): block.append(grid[(i // 3) * 3 + j][(i % 3) * 3 + k]) if not Sudoku.validLine(block, 0): return False return True ``` To test the implementation, you can create an instance of the Sudoku class and call the main() method: ```python sudoku = Sudoku() sudoku.main() ``` This will output True if the grid is valid, and False otherwise.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值