黑白棋课程设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
攀枝花学院课程设计
题目:黑白棋游戏
院(系):数学与计算机学院
年级专业: 2014级软件工程
*名:***
学号: ************ 指导教师:**
二〇一五年一月十日
攀枝花学院教务处制
攀枝花学院本科学生课程设计任务书
课程设计(论文)指导教师成绩评定表
摘要
黑白棋,又叫反棋(Reversi)、奥赛罗棋(Othello)、苹果棋或翻转棋。黑白棋在西方和日本很流行。游戏通过相互翻转对方的棋子,最后以棋盘上谁
的棋子多来判断胜负。
棋子:黑白棋棋子每颗由黑白两色组成,一面白,一面黑,共64个(包括棋盘中央的4个)。棋子呈圆饼形。
棋盘:黑白棋棋盘由64格的正方格组成,游戏进行时棋子要下在格内。棋盘可分为“角”、“边”以及黑白棋“中腹”。现今的棋盘多以8x8较为普遍。
棋钟:正式的比赛中可以使用棋钟对选手的时间进行限制。非正式的对局
中一般不使用棋钟。
黑白棋的棋盘是一个有8*8方格的棋盘。下棋时将棋下在空格中间,而不
是像围棋一样下在交叉点上。开始时在棋盘正中有两白两黑四个棋子交叉放置,黑棋总是先下子。
下子的方法把自己颜色的棋子放在棋盘的空格上,而当自己放下的棋子在横、竖、斜八个方向内有一个自己的棋子,则被夹在中间的全部翻转会成为自
己的棋子。
并且,只有在可以翻转棋子的地方才可以下子。
如果玩家在棋盘上没有地方可以下子,则该玩家对手可以连下。双方都没
有棋子可以下时棋局结束,以棋子数目来计算胜负,棋子多的一方获胜。在棋
盘还没有下满时,如果一方的棋子已经被对方吃光,则棋局也结束。将对手棋
子吃光的一方获胜。
每个“翻转棋”游戏开始时,棋盘上已经交叉放好了四颗棋子。其中两颗
是黑棋,另两颗是白棋。黑棋总是先走。
当您的棋子在某一直线方向包围了对手的棋子时,就可以翻转这些棋子的
颜色,使它们成为您方的颜色。例如,如果您执黑棋,并且看到在一排白棋的
某一端是一颗黑棋,那么当您将一颗黑棋放在这一排的另一端时,所有的白棋都将翻转并变为黑棋!所有的直线方向均有效:水平、垂直和斜线方向。
走棋的唯一规则是只能走包围并翻转对手的棋子。每一回合都必须至少翻转一颗对手的棋子。
按规则不能再走棋时,这一回合弃权。计算机会自动将控制权交给对方。关键词黑白棋反棋(Reversi)奥赛罗棋(Othello)苹果棋翻转棋
目录
摘要 .......................................................................................................................................... I
1 需求分析 (1)
1.1 需求概述 (1)
1.2 需求环境 (1)
1.3 功能描述 (1)
2 概要设计 (2)
2.1 程序设计思路 (2)
2.2 程序流程图 (2)
3 详细设计 (3)
3.1 程序源代码 (3)
3.1.1代码功能 (3)
3.1.2 所有源代码 (3)
4 测试与运行 (11)
结束语 (16)
1 需求分析
1.1 需求概述
(1)收集资料,全面分析课题,分解问题,形成中体编程思路;
(2)深入分析各个小问题,编写个部分程序模块;
(3)对于设计中用到的关键函数,要联系实际问题进行具体介绍;
(4)上机调试,确保程序能正确运行;
(5)设计完成后提交课程设计报告;
1.2 需求环境
本课程设计需要的设备为硬件要求和软件配置要求具体要求如下:
①硬件要求:一台计算机。
②软件配置:WINDOWS、C/VC++6.0。
1.3 功能描述
编写一个《黑白棋游戏》的C程序,包括以下功能:
初始状态:在一个8*8的棋盘中央交叉排放黑白棋子各两枚,白棋先走。
(1)每个棋手下棋时,摆子的位置必须是以自己的棋子能包围住对方一个或多个棋子,被包围住的对方棋子将成为自己的棋子。包围的方向可以是上下左右以及斜线8个方向,只要能连成一线即可。
(2)当轮到某一个棋手下子,但是他没有可以包围对方棋子的位置时,他必须停步,让对方走棋,直到他可以走为止。
(3)当棋盘上一方的棋子为0或者下满64格,游戏结束,棋子少者输。
2 概要设计
2.1 程序设计思路
(1)首先设计程序进入界面。
(2)在说明玩家和电脑各自的棋子。
(3)详细说明黑白棋的规则。并指引玩家开始游戏。(4)初始棋盘。
(5)设计黑白棋程序的主体。
2.2 程序流程图
3 详细设计
3.1 程序源代码
3.1.1 代码功能
#include
#include
#define SIZE 8 //定义SIZE的值为8//
void display(char board[][SIZE]); //显示,输出函数//
int valid_moves(char board[][SIZE],int moves[][SIZE],char player); //该函数将前一数组各项复制到后一数组当中。主要用于黑白棋的人工智能。//
void make_move(char board[][SIZE],int row,int col,char player); //该函数用于玩家的下棋位置行列的输入//
void computer_move(char board[][SIZE],int moves[][SIZE],char player);
int get_score(char board[][SIZE],char player); //计算比赛结果//
int best_move(char board[][SIZE],int moves[][SIZE],char player);
3.1.2 所有源代码
#include