程序设计训练
=================
这些是THU2017年小学期程序设计训练的大作业。包含数独游戏、联网国际跳棋游戏以及人物信息检索系统。
Table of Contents
=================
* [Week 1: Sudoku Game](#week-1-sudoku-game)
* [简介](#简介)
* [基本功能](#基本功能)
* [游戏生成算法](#游戏生成算法)
* [参考资料](#参考资料)
* [Week 2: Internet Draughts](#week-2-internet-draughts)
* [简介](#简介-1)
* [基本功能](#基本功能-1)
* [Week 3: 人物信息检索](#week-3-人物信息检索)
* [简介](#简介-2)
## Week 1: Sudoku Game
### 简介
Sudoku 是一款利用 Qt 实现的数独游戏,提供了多达 10 个难度的关卡选择,同时还有丰富的功能来帮助玩家更加高效地求解数独问题,例如候选数、高亮相同数字、高亮选中的行列、撤销当前操作以及提示等功能。玩家还可以手动输入数独题目利用 Sudoku 帮助求解。
除了传统 9x9 的数独游戏以外,还提供了更高难度的 16x16 的数独游戏。
![](https://github.com/miskcoo/programming-training/blob/sudoku/sudoku/doc/sudoku-3c.png?raw=true)
### 基本功能
Sudoku提供了多个方便的按钮:
* **新游戏**:玩家可以开始一局新的游戏。
* **重玩**:玩家可以重新开始本局游戏。
* **暂停**:玩家可以暂停该局游戏(即暂停计时)。
* **提示**:如果当前已经确定的数都是正确的,玩家将会得到一个未填空格的正确数字;如果当前已经确定的数和答案矛盾,导致整个数独无解,那么所有与答案矛盾的数字将会被粗体标出。
* **清除**:清除当前选中格子的所有数字。
* **撤销**:撤销前一步的操作,以及取消撤销(最多可支持 50 步撤销)。
同时可以通过菜单来实现多达 10 种难度的游戏选择,可以求解任意用户输入的数独问题。
玩家在空格中填入的数字分为确定数(采用正常大小的字体表示)以及候选数(采用小号字体表示)。确定数只能存在一个,候选数可以存在多个,并且确定数和候选数不能同时存在。
玩家可以通过多种方式进行格子的选择:
* 鼠标直接点击格子进行选中。
* 键盘方向键来进行当前选中格子的切换。
* Tab键快速切换到下一个格子。
玩家可以用鼠标右键点击格子来对其进行标记。
玩家在选中一个格子之后,如果该格子的数字已经确定,那么所有与该数相同的数将会被加粗显示,以方便确认是否满足数独的条件。同时,所有与该格在相同行或列的格子都会被高亮显示。此外,无论该格子数字确定与否,右侧数字列表中该格子的所有数都会被加粗。
玩家可以通过多种方式在空格中填入数字:
* 键盘直接输入数字将填入对应的确定数,如果 Ctrl 键被按下,那么填入的将会是候选数。
* 鼠标点击右侧数字列表填入。使用鼠标左键点击将会填入确定数,右键点击则会填入候选数。
玩家也可以通过多种方式在空格中填入数字:
* 键盘删除键删除格子中的一个数字。
* 鼠标点击右侧数字列表已经选中的数进行删除。
* “清除”功能键来清除该格子所有的数字。
### 游戏生成算法
我们认为一个数独游戏的难度可以根据行列空格数的最大值以及给定数字的数量来确定。行列空格数的最大值越小玩家拥有的信息量就越多,同样给定数字越多玩家也能获得更多的信息。
在我们的难度中,最简单的关卡给出的数字至少有 50 个,并且行列空格数不会超过 4 个。然而,在最困难的关卡中,最少只会给出 20 个数字,并且可能会有某些行或列全部是空格。在最简单和最困难中间这两个影响难度的因素平滑过渡。
为了生成一个满足条件的数独,可以按照以下步骤来实现:
1. 在空白棋盘随机填入数十个数。
2. 利用求解算法获得一个合法解,如果不存在合法解,转到 1。
3. 生成一个随机的格子排列。
4. 按照这个序列来尝试一个个删除所填入的数字,如果删除后能保证解唯一并且满足之前的条件,那么就删除,否则不删除。
5. 如果删除了足够的数字,则返回。否则跳到 1。
为了实现快速的数独问题求解,我们利用 Dancing Link 来优化搜索。
### 参考资料
[1]: XUE, Y.H., JIANG, B.B., Li, Y., YAN, G.F. and SUN, H.F., 2009. Sudoku puzzles generating: From easy to evil. Mathematics in practice and theory, 21(000).
[2]: Knuth, D.E., 2000. Dancing links. arXiv preprint cs/0011047.
## Week 2: Internet Draughts
### 简介
Draughts 是一款利用 Qt 实现的国际跳棋游戏,支持双人在线对战。国际跳棋是十分古老的智力游戏之一,其规则是在 10x10 的棋盘内,黑白双方各执 20 子,通过斜向移动、跳吃等手段吃掉对方更多的棋子。最终吃掉对方所有棋子或者使对方无法移动的一方获得胜利。
![](https://github.com/miskcoo/programming-training/blob/draughts/draughts/doc/img5.png?raw=true)
国际跳棋的基本规则是,黑方先行,并且所有棋子均只能斜向移动,因此整个棋盘只有深色位置可以有棋子。它有几条基本的吃子以及前进规则:
* **能吃子就必须吃**:如果有多个棋子以及多条路径都可以吃子,那么必须吃最多的棋子。如果多有条路径可以吃到相同个数的棋子,那么可以任意选择一条。
* **土耳其打击**:如果吃多子,那么被吃棋子在整个吃子过程结束后才被撤出棋盘。
* **普通棋子前进**:对于普通棋子,只能向前方对角线方向前进一格。
* **普通棋子跳吃**:对于普通棋子,只要对角线方向最近的黑格有敌方棋子,并且该棋子后最近的一格有空位,那么就可以跳到后方空位并且吃掉对应敌方棋子。
* **升王**:任何棋子在最后一步停在对方底线则称为王棋。
* **王棋前进**:对于王棋,只要对应方向有空位,可以向任意对角线方向前进后退任意步数。
* **王棋跳吃**:对于王棋,在跳吃的时候可以无时距离,并且停在被吃棋子后任意空格处。
### 基本功能
我们的游戏实现在当前是自己的回合时,所有可以移动的棋子会被以绿色标出。当选中某个可移动棋子时,其本身以及下一步能够移动到的位置会被以黄色标出。
由于有连跳以及能吃子就多吃的规则,在存在多条可选路径时,如果只标明最终可达位置,可能会造成困惑以及存在无法选择相同可达位置但不同走棋路线的困难。因此,我们允许玩家一步一步进行走棋,以便选择路径。
## Week 3: 人物信息检索
### 简介
这是一个利用 Django 搭建的一个人物信息检索系统,大约从 Wikipedia 爬取了 10000 个人物信息,并且提取了其中 Infobox 的对应信息。
对于爬取的信息,我们重新组织了其显示的格式并且提供了一个搜索页面,允许根据关键词对其进行搜索,并且还可以根据原先信息的特定字段(如Born,Name,Nationality等)进行关键字查询。搜索结果按照匹配的关键字个数从高到底排序后进行显示,同时匹配的关键字将会被高亮标出。另外,如果结果过多将会分页进行显示。
![](https://github.com/miskcoo/programming-training/blob/wiki-index/wiki-index/doc/turing-1.png?raw=true)
![](https://github.com/miskcoo/programming-training/blob/wiki-index/wiki-index/doc/turing-4.png?raw=true)
![avatar](https://i-avatar.csdnimg.cn/a62a6262a09240bda4fc42fa97a5a2b2_2403_86849624.jpg!1)
嵌入式大圣
- 粉丝: 6347
- 资源: 792
最新资源
- 昆仑通态MCGS与欧姆龙E5CC温控器通讯程序:实现设定温度、读取温度、报警设定与上下限管理功能,稳定可靠接线与参数设置指南,昆仑通态触摸屏与三台欧姆龙E5CC温控器通讯程序:设定温度、读取实际温度、
- 针对多传感器与时滞系统的信息融合与状态估计:基于Kalman滤波器的序列协方差交叉融合方法探索,针对多传感器与时滞系统的信息融合与状态估计:基于Kalman滤波器的序列协方差交叉融合方法探讨,信息融合
- MATLAB R2018A稀疏多通道盲反褶积算法实现:带自定义参数与效果增强的改进算法,MATLAB R2018A中稀疏多通道盲反褶积算法的优化实践与参数设置,MATLAB环境下一种稀疏多通道盲反褶积
- 人工势场法路径规划:自调参数避障策略与双车道势能图输出,基于人工势场法的双车道路径规划与避障系统:参数自调势能图输出,人工势场法,可刀 人工势场法路径规划加避障,自己改编,定义双车道,车道中心线具有斥
- Matlab中EMplanner注释版代码的优化研究-采用动态规划(DP)进行轨迹规划并独特整合资源管理包,EMplanner的改进版Matlab代码:基于DP动态规划的轨迹规划算法,不依赖QP优化
- 洪水灾害精准预测模型:基于机器学习算法的Kerala洪水暴雨内涝预测系统及多技能服务解决方案 ,基于Kerala数据集的洪水暴雨内涝预测模型:利用机器学习算法实现精确预测与附源码服务,洪水暴雨内涝预测
- 基于Qt Creator 5.11.3的TCP/UDP Socket通信实现跨平台文字、图片、文件、语音实时传输系统 ,基于Qt Creator 5.11.3开发的多功能通信软件:实现TCP/UDP
- 花60元钱购买的2款非常精美的html代码-纯html无框架的app落地页下载代码-非常ok-非常好用
- 永磁同步电机全速无传感器矢量控制:从高频注入启动到改进型SMO切换技术,抑制转速抖动,永磁同步电机全速无传感器矢量控制:从高频注入启动到改进型SMO切换技术,抑制转速抖动,永磁同步电机的全速度范围无传
- PWM控制下的半桥与全桥LLC谐振变换器仿真研究:软开关实现与波形分析(基于Matlab Simulink模型),PWM控制下的半桥与全桥LLC谐振变换器仿真研究:软开关实现与波形分析(基于Matla
- 汇川中型PLC纯ST语言双轴同步设备实战教程:原生codesys功能块与伺服运动控制,汇川中型PLC纯ST语言双轴同步设备实战教程:原生codesys功能块与伺服运动控制,汇川中型plc+纯ST语言双
- 两级三相光伏并网逆变器控制仿真模型:Matlab Simulink下的MPPT控制策略探究,包括扰动观察法与电导增量法,寻求好友共同研究 ,两级三相光伏并网逆变器控制仿真模型:Matlab Simul
- 探究格子玻尔兹曼方法(LBM)在多孔介质中水气分布规律的数值模拟-基于D3Q19模型的研究,基于格子玻尔兹曼LBM方法的D3Q19模型研究多孔介质水气分布规律,格子玻尔兹曼 LBM 多孔介质水气分布
- 基于多种优化算法的生物地理优化器BBO在多层感知器MLP训练中的应用与比较研究,基于多种优化算法的生物地理优化器BBO在多层感知器MLP训练中的应用与比较研究,基于matlab的生物地理的优化器(BB
- 永磁同步电机旋转高频信号注入法优化零低速无位置控制性能:低噪声损耗优势仿真研究,永磁同步电机旋转高频信号注入法零低速无位置控制性能优化仿真研究:噪声与损耗显著降低,永磁同步电机旋转高频信号注入法零低速
- 基于分布式驱动电动汽车路面附着系数估计的高级模型:采用无迹卡尔曼与容积卡尔曼滤波的高效估计方法,基于分布式驱动电动汽车路面附着系数估计:无迹与容积卡尔曼滤波的高效应用,基于分布式驱动电动汽车的路面附着
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback-tip](https://img-home.csdnimg.cn/images/20220527035111.png)