1、本科毕业设计(20 届)智能五子棋程序设计所在学院 专业班级 电子信息工程 学生姓名 学号 指导教师 职称 完成日期 年 月 I智能五子棋程序设计【摘 要】五子棋是一种两人对弈的纯策略型棋类游戏,应用 C 语言编写程序可以在计算机上实现二人对弈五子棋功能。二人对弈五子棋程序由图像生成、光标移动与落子、判断胜负和系统帮助等子程序构成;程序中应用了结构体、数组、全局变量、按键处理和图形编程等元素和语句。程序通过棋盘和棋子图像生成、二人移子与落子和判断胜负等功能的实现,在计算机上实现了二人五子棋对弈。【关键词】C 语言,五子棋,二人对弈,游戏AbstractGobang is a tradition
2、al checker-type game in which the lining up of five pieces in a straight line scores victory. And C language can accomplish a 2-player gobang on computers. This 2-player gobang program contains 4 main sections, they are, graphics, movement and selection, victory judgment and helping system. Several
3、elements and sentences of C programming language such as structural element, array, global variables, press processing and Graphics Programming are also applied in the program. With the accomplishment of the three main subprograms, namely, checker board and pieces construction, players step-selectio
4、n and victory judgment, a whole program of gobang is established and gobang is available on computers.Key Words c language,five in a Row,the two playersII目 录1. 课题设计的需求分析 .31.1 五子棋的背景 .31.2 程序功能介绍 .31.3 程序整体设计说明 .31.3.1 设计思路 .31.3.2 数据结构设计及用法说明 .41.3.3 程序结构(流程图) .52. 课题设计的概要设计 .82.1 各类头文件,变量及宏定义 .82.
5、2 全局变量 .82.3 各模块的功能及程序说明 .93. 用户手册.94. 功能测试及运行结果 .105. 课题设计总结.116. 致谢 12参考文献 12附录 1431. 课题设计的需求分析1.1 五子棋的背景传统五子棋的棋具与围棋相同,棋子分为黑白两色,棋盘为 1919,棋子放置于棋盘线交叉点上。两人对局,各执一色,轮流下一子,先将横、竖或斜线的 5 个或 5 个以上同色棋子连成不间断的一排者为胜。 因为传统五子棋在落子后不能移动或拿掉,所以也可以用纸和笔来进行游戏。1.2 程序功能介绍程序主窗体设计简洁得体,布局合理,五子棋的基本功能齐全。菜单中的游戏能实现五子棋游戏开始、清盘,当玩家
6、不想玩该局时,可以点击该项重新开始,而且该程序有很好的退出关闭功能。本程序是在一个方阵上通过两人对弈的形式,依次在棋盘上放置两种颜色的棋子分别为黑白两色,哪一方先让五个棋子形成一条直线横、竖和对角线3 个方向,即为获胜,游戏初始运行界面应为如下 1: 游戏操作规则: 1、 按上下左右方向键移动棋子 2、 按空格键确定落棋子 3、 禁止在棋盘外按空格1.3 程序整体设计说明1.3.1 设计思路1) 黑先、白后,从天元开始相互顺序落子。2) 在天元白色的第一手资料为自己的布边,之后双方可任意儿子3) 最先在棋盘横向、竖向、斜向形成连续的相同色五个棋子的一方为胜。 4) 黑棋禁手判负、白棋无禁手。黑
7、手- 包括“三防”四,三 “,四个“长。 ” ”。黑方只能“四、三”胜。5) 如分不出胜负,则定为平局。6) 对局中中途退场均判为负。 47) 五连与禁手同时形成,先五为胜。 1) 长连:在一条直线或斜线上,连续下成五个以上的棋型 2) 活三:在直线或对角线,有三个子,必须捍卫,否则将成为“活四”龙头型成功。三只有下面两种棋型结构: 3) 活四:指在一条直线或斜线上,由连续的四个字所构成的,无论对方怎样防守,只要再走一手棋将必定成为五连的棋型: 4) 四:在一条直线或斜线上,由四个同色子构成的,必须防守否则下一步立刻成为“五连”导致速胜的棋型。活四也是四之一。1.3.2 数据结构设计及用法说明
8、int gPlayOrder; /*指示当前行棋方 */ struct point gCursor; /*光标在棋盘上的位置 */ char gChessBoard1919;/*用于记录棋盘上各点的状态*/ break/*是落子键*/ else /*交换行棋方*/51.3.3 程序结构(流程图)根据程序需求分析结果,可以得出 main()函数流程图 如图 1,Judgeplayer 流程图如图 2,图 32。NYNYYN图 1 main()函数流程图Charchoose10:Printf(“Enter the assig.Strcmp(choose,”.Printf(“Input applic
9、ati.Assignl-addres.Printf(“Too large appli.Print(head);!strcmp(choose,.Printf(“Success!AD.Multiplex结束开始6NYNYYNYY NNY图 2 Judgeplayer 流程图RECT*after.*before.applictionhead.assign=address=-1;before=head;after-sizenext;after-size=ap.after-size=he.Maxblocknum-;Before-next-after-.Maxblocknum=0Multiplexassi
10、gn1=assign;returnassign1;MultiplexAfter-size=after-.Tolower(way)=bBefore-next=after-.A开始7NYNY图 3 Judgeplayer 流程图RECT*before.*after;head=next=N.head-size=back1-si.after!=NULLafter=after-next;before=head;before-next=after-.MultiplexMultiplexA结束82. 课题设计的概要设计2.1 各类头文件,变量及宏定义*加载头文件*/ #include #include #i
11、nclude #include #include /*编译预处理,定义按键码*/ 2#define LEFT 0x4b00 #define RIGHT 0x4d00 #define DOWN 0x5000 #define UP 0x4800 /*若想在游戏中途退出, 可按 Esc 键*/ #define ESC 0x011b /*SPACE 键表示落子*/ #define SPACE 0x3920 /*设置偏移量*/ #define OFFSET 20 #define OFFSET_x 4 #define OFFSET_y 3 2.2 全局变量int statusNN; /*定义的数组,保存状
12、态*/ int step_x,step_y;/*行走的坐标*/ int key ; /*获取按下的键盘的键*/ int flag; /*玩家标志*/92.3 各模块的功能及程序说明case KEYFALLCHESS: 判断落子。void Init(void) 界面初始化,数据初始化。textmode(C40)画棋盘。void DrawCross(int x,int y)确定画棋盘上的交叉点。void DoError(void)落子错误处理。void DoWin(int Order)赢棋处理。switch(direction)判断输赢。void EndGame(void)游戏结束处理。3. 用户
13、手册1. 本程序的运行环境为 DOS 操作系统,执行文件为 five.exe;文件目录下score1.txt 和 score2.txt 是用于玩家的计分文件 34。2. 进入演示程序后,即显示欢迎界面,按任何键进入帮助界面,再按任何键可以进入主界面开始游戏3. 棋子的移动与落子有键盘上按键控制,本程序选取 1P 按键为 W、S、A、D 和空格键,2P 按键为、和回车键,分别代表上移、下移、左移、右移光标和落子。在光标移动的过程中,光标按照玩家按键移动;在玩家按下落子按键后,程序自动调用棋子显示子程序和判断胜负子程序。1P、2P 的落子后,程序会为落子处的数组元素赋一个特定值,用于判定胜负。4.游戏中 esc 键可以直接退出游戏,backspace 键可以操作进行悔棋。5.游戏过程中,如果玩家 1 或者玩家 2 有一方获得胜利后,程序自动将提示哪一方获得了胜利,并将着色构成连珠的 5 个子。6.游戏结束且玩家选择不再继续后,跳出结束界面。退出程序。