1、八皇后问题课程设计八皇后问题课程设计 1 1 设计背景设计背景 1 11 1 课程设计的目的课程设计的目的 本课程设计的目的在于提高学生对数据结构和 C+语言课程的运用能力, 并能使学生加 深对数据结构和编程工作的理解。 书本知识转化成个人能力, 最终还是要靠不断地付诸实践, 课程设计恰为这种时间提供了一个很好的平台。 1.21.2 课程设计任务与要求课程设计任务与要求 程序启动后显示一张 8*8 的棋盘, 然后游戏者可以用坐标输入方式在棋盘上布下棋子。 如果布下的棋子合法,则增加 10 分并可以继承布下一个棋子。如果布下的棋子不合法,给 出游戏者的得分数。 若无错误布下 8 颗棋子,则给与满
2、分 100 分。 (由于本学期我们尚未学习图形界面的有关类 容,所以课程设计中的有关图形界面的内容进行了修改。 ) 游戏规则要求不能在同一行或同一列或同一条对角线上放置二个或二个以上的棋子, 但每行都必须放置一个棋子。 2 2 程序的实现过程程序的实现过程 2.12.1 设计思想、算法及实现要点设计思想、算法及实现要点 程序编写都是由简单到复杂的,接到任务以后,就在脑子里有了一个大概的框架。一个 while(1)的打循环里嵌套一个界面输入程序,通过用户不断地输入来控制游戏的循环的继 续和跳出,并且在设计一个自动跳出的判断语句。这样,玩家就能在循环体里不断布棋,直 到玩家想终止游戏或者游戏过关成
3、功。 关于下棋系统, 首先要处理的就是棋盘, 我把棋盘用赋值为 0 或 1 的二维数组来模拟国 际象棋棋盘。 0 代表无棋子,1 代表已下的棋子。这样就比较方便我以后判断棋盘横竖斜有且只有一个棋 子,只需将横竖斜的元素累加,结果等于 1 即可。 由于没有真正的图形界面,下棋的方法就只能依靠用户输入横竖坐标了,输入坐标后, 系统自动将该坐标位置的元素赋值为 1。 关于打分细则,我的设计是给一个基准分 20 分,正确下一个棋就加 10 分,这样,当游 戏过关时恰好是 100 分。 具体到实际编程时,又考虑到,游戏程序的可玩性问题,我又在之前的的简单框架上补 充了悔棋的功能,并且能一次性悔多步棋子,
4、这样,打分细则又改变了: 起评分 20 分下对一颗棋子奖励 10 分,若要悔棋,悔棋一步扣除 15 分。由于栈的特点 是先进后出,后进先出,正好符合后下的棋子先悔,先下的棋后悔,于是我就很自然的想到 建立一个简单栈来存储每一步玩家所走的棋子。栈的内容很简单,只有压入和弹出的函数, 没有过多防范数组越界、溢出等错误的处理。出错问题由程序员负责。 剩下的就简单了,用一个 int 类型的数记录悔棋次数,评分系统就做好了。 2.2 2.2 程序的函数程序的函数 程序主要有这几个函数构成 void display()用来输出模拟的八皇后 8*8 棋盘; void display(int ,int)这是对上一个函数的重载,这样就允许先将一个特定位置的元素赋值为 1,然后在输出;bool deal()对棋盘进行横、竖、斜等方面的处理,将棋盘的横、竖、斜三条 线上元素求和, 当这些和里面有值大于 1 时, 说明至少有一对换后发生冲突, 此时返回 false, 反之则返回 true; void Main()是整个游戏的核心函数,里