基于c语言五子棋小游戏--本科生毕业设计
- 格式:doc
- 大小:1.23 MB
- 文档页数:40
基于C语言的五子棋游戏设计发布时间:2021-06-30T02:32:16.169Z 来源:《现代电信科技》2021年第4期作者:郭彦芳[导读] 五子棋是一种容易上手,老少皆宜,而且趣味横生,引人入胜的游戏。
该游戏设计可以使用C语言编写实现,以便深入理解C语言的程序应用。
(重庆工业职业技术学院重庆 401120)摘要:五子棋是一种两人对弈的纯策略型棋类游戏,应用C语言编写程序可以在计算机上实现二人对弈五子棋的功能。
二人对弈五子棋程序由欢迎界面、游戏棋盘界面、光标移动与落子、判断胜负、悔棋功能、提供音效等子程序构成;整个程序中应用了结构体、数组、全局变量、按键处理和图形编程等元素和语句。
程序通过棋盘和棋子图像生成、二人移动落子和判断胜负等功能的实现,在计算机上实现二人对弈的效果。
关键词:C语言;五子棋;二人对弈五子棋是一种容易上手,老少皆宜,而且趣味横生,引人入胜的游戏。
该游戏设计可以使用C语言编写实现,以便深入理解C语言的程序应用。
一、游戏功能分析本程序设计为人与人对弈,一方执黑棋,一方执白棋,轮流走棋,每方都试图在游戏结束前让自己的棋子五子相连,首先实现五子相连的一方获胜。
程序执行过程中要求棋盘、棋子时时可见,游戏界面信息提示轮到何方下棋,可以通过键盘上的按键移动光标,再按Enter 键摆放棋子,并且每次落子都有系统声音,同时可以提供悔棋功能。
整个程序的测试在Dev-C++软件环境下进行。
二、游戏模块组成根据功能需求,将程序分为界面显示、玩家操作、音效提供、胜负判断4个模块,以下分析各模块的需求。
1、界面显示模块程序开始运行时,显示制作者和给出欢迎及退出界面;游戏开始后要求生成18x18的棋盘图像,并棋盘上方显示欢迎信息“欢迎玩五子棋”,棋盘下方游戏显示应该轮到甲方或者乙方落子,棋盘左右显示双方操作方式,进行过程中,要求实时显示棋盘上已落下的棋子,甲方为白点,乙方为白圈;分出胜负后,要求给出游戏结束画面,并且询问用户是否需要继续游戏。
五子棋小游戏一.需求分析现在有越来越多的人使用电脑,而且五子棋的受众广泛但实体棋操作较为繁琐且平时较难实现,所以电脑版的五子棋游戏应运而生。
大家对于这个小游戏的需求如下:首先,设计这个游戏最基本的就是实现玩家之间对战,玩家可以通过某些操作来实现对战功能;有时候可能由于时间等原因,玩家可能需要保存游戏,此时需要一个“保存”功能;有时候可能玩家由于失误会走错棋,此时就需要“悔棋”功能;有时候玩家可能觉得这局游戏玩的非常不好,这时候就需要“重新开始游戏”功能;玩家在玩过游戏之后有可能想保存游戏记录便于以后分析此时就需要“排行榜”功能;有些玩家在玩游戏时喜欢听音乐,这时候就需要在下棋时可以播放背景音乐的功能;最基本的通过输入坐标来实现落子的操作方式很繁琐而且很不方便,这时候就可以将落子机制改为更直观的光标移动模式。
二.设计思路1.玩家对战功能:在玩家对战功能中,玩家可以通过按方向键来移动光标、按空格来实现落子,最终在横或竖或斜方向上达成五个相同颜色的棋子来获得胜利。
基本思路:(1)使用二维数组保存棋局。
(2)由于要使用光标,所以使用输出缓冲器。
(3)打印棋盘。
主要使用Print()函数来算出棋盘并将缓冲器内容输出。
其余为其中调用的辅助函数。
chessPrint()是打印交点坐标的字符的函数;getCurse()是打印光标的函数;write()函数是用来向缓冲器里面写入字符串的函数;ln()函数是负责将缓冲器写入位置提行的函数;Display()函数是将缓冲器中内容输出到屏幕的函数。
(4)下子,在后文有详细介绍。
(5)胜负平判断调用Check()函数进行四个方向的检查,检查是否有五子连珠。
判断完毕后输出结果(如果存在结果)文档中;在游戏开始界面,只要按“2”选择“load board”就可以装载指定名称的游戏。
基本思路:调用saveGame()函数将当前棋局的相关信息全部保存到结构体变量saveChess中,并将其中的内容全部保存到文件里。
⽤C语⾔实现五⼦棋⼩游戏简介本次五⼦棋使⽤的是光标控制移动,通过按空格键(键值32)来落⼦,实现游戏的。
我们额外⽤到的头⽂件有:#include<getch.h> 通过调⽤getch()函数来识别上下左右以及空格的操作。
#include<stdlib.h> 采⽤ system(“clear”);清理屏幕,实现视觉上的⾛动效果。
include<stdbool.h>stdbool.h 头⽂件对布尔类型进⾏了模拟返回 true false⼤致思路需要的数据:(全局)1、定义棋盘⼆维数组 15* 15 空位置 ' * '2、定义棋⼦⾓⾊变量⽩棋为 ' $ ' ⿊棋为 ' @ '3、定义变量⽤于记录下棋的位置业务逻辑:(实现成⼀个个函数)是否需要初始化for( ; ; ){ 1、清理屏幕、打印棋盘 2、落⼦ 坐标合法、该位置不能有棋⼦,否则继续落⼦ 3、判断是否五⼦连珠 4、交换⾓⾊}代码#include<stdio.h>#include<stdlib.h>#include<stdbool.h>#include<getch.h>//定义棋盘char board[15][15];//⾓⾊char role='@';//落⼦坐标char key_x=7,key_y=7;//棋盘初始化void init_board(void){for(int i=0;i<15;i++){for(int j=0;j<15;j++){board[i][j]='*';}}}//打印棋盘void show_board(void){system("clear");for(int i=0;i<15;i++){for(int j=0;j<15;j++){printf(" %c",board[i][j]);printf("\n");}}//落⼦void get_key(void){for(;;){printf("\33[%d;%dH",key_x+1,2*key_y+2);//光标位置,(key_y+1)*2是因为列与列之间有空格 switch(getch()){case 183:key_x>0 && key_x--;break; //上,改变光标位置值case 184:key_x<14 && key_x++;break; //下case 185:key_y<14 && key_y++;break; //右case 186:key_y>0 && key_y--;break;//左case 32: //空格if('*'==board[key_x][key_y])//如果落⼦位置为空,落⼦{board[key_x][key_y]=role;return;}}}}//记录落⼦位置某个⽅向,连⼦的个数int count_board(int go_x,int go_y){int count=0;for(int x=key_x+go_x,y=key_y+go_y;x>=0 && y>=0 && x<15 && y<15;x+=go_x,y+=go_y){if(board[x][y]==board[key_x][key_y]){count++;}else{break;}}return count;}//判断五⼦连珠,是否胜利bool is_win(void){if(count_board(0,-1)+count_board(0,1)>=4){return true;}if(count_board(-1,-0)+count_board(1,0)>=4){return true;}if(count_board(-1,-1)+count_board(1,1)>=4){return true;}if(count_board(1,-1)+count_board(-1,1)>=4){return true;}return false;}int main(int argc,const char* argv[]){//初始化棋盘init_board();for(int i=0;i<255;i++){//清屏,打印棋盘show_board();//落⼦get_key();//是否五⼦连珠if(is_win())system("clear");show_board();printf("游戏结束,%c赢了\n",role); return 0;}//交换⾓⾊role=role=='@'?'$':'@';}}效果图以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
五子棋游戏程序设计(C语言实现)一、设计任务与目标设计两个人对战的五子棋游戏,游戏开始界面是显示游戏的规则,然后让用户输入命令以确定游戏是否开始,如果用户确定开始,那么要显示棋盘,接下来到了最重要的几步,两个玩家交替落子,当连续五个棋子在一条直线上时,一方赢棋,游戏结束。
其中,有些问题就是平时基本的输入输出问题,例如:游戏规则,可以直接打印。
棋盘的显示也是一般的图形输出问题,但是稍微复杂一些。
需要改进的地方和达到的目标是:1、游戏的初始界面显示的是游戏规则,当玩家确定开始的时候要清除界面来显示棋盘。
2、棋盘和棋子的显示,界面(棋子和棋盘)容易分辨,这要从颜色和图形上加以区分。
3、要求一方用‘W’(上)、‘S’(下)、‘A’(左)、‘D’(右),另一方用‘↑’、‘↓’、‘←’、‘→’来移动光标,再分别用‘Z’和‘空格’键确定落子。
4、当一方走棋时,另一方的按键应该设置为无效。
5、游戏进行时打印提示信息,当一方赢棋后,要显示赢棋的字符,并询问玩家是否继续开始。
6、可以随时退出游戏或重新开始游戏。
二、方案设计与论证首先设置游戏的初始界面,采用白色背景和红色前景,这可以调用‘conio.h’库函数实现打印游戏规则。
询问玩家是不是开始游戏,通过选择Y\N来确定。
其中会遇到这样的问题:当玩家输入的不是‘Y(y)’或者‘N(n)’时应该怎么办呢?如果采用scanf函数来接收命令,这样会显示一个不满足要求的字符,于是可以用getch函数来接收命令,判断输入的字符是否为‘Y(y)’和‘N(n)’,如果是再显示出来。
为了界面的简洁,进入游戏前先清除屏幕,调用‘system()’函数来实现。
然后打印棋盘,可以把背景设置为湖蓝色,这样棋盘和棋子更容易分辨。
游戏开始后棋盘用黑色显示,这样易于区分。
具体的思路是:由于棋盘是网格状的,所以选择一个基本图形字符串‘十’,通过循环打印而构成一张大图。
接下来确定落子的位置,这需要通过改变光标的位置来实现,考虑到是在vc6.0环境下编译文件,c语言中的有些库函数并不支持,所以选择了’gotoxy()’函数并结合‘window.h’下的函数,通过键盘按键控制达到光标移动功能。
c语言五子棋课程设计报告一、前言五子棋作为一种智力游戏,在我国有着悠久的历史和广泛的群众基础。
本次设计的目的是使用C语言实现五子棋游戏,通过此次课程设计,学生将掌握C语言的编程思想和开发方法,同时了解五子棋游戏的规则和策略。
二、五子棋游戏规则五子棋游戏是在15*15的棋盘上进行,由黑白双方轮流落子,先将五个同色棋子连成一条线的一方获胜。
落子的位置必须为空,不能与已有的棋子重叠。
黑方先手,白方后手。
下图为五子棋棋盘示意图。
三、五子棋游戏实现本次课程设计采用C语言实现五子棋游戏,主要包括棋盘的绘制、落子的判断和胜负的判断等功能。
1.棋盘的绘制棋盘的绘制采用双重循环实现,将15*15的棋盘分成225个小格,其中包括14个横线和14个竖线,以及4个角上的点。
通过循环输出字符实现棋盘的绘制。
2.落子的判断落子的判断主要包括鼠标的点击和棋子的绘制两个部分。
当鼠标点击棋盘上的一个位置时,程序会根据当前轮到哪方落子来绘制相应颜色的棋子,并将该位置的状态改为已有棋子。
同时,程序会检查当前落子是否符合规则,即该位置是否为空,如果不为空则重新等待鼠标点击。
3.胜负的判断胜负的判断主要包括横向、纵向、斜向和反斜向四个方向。
通过判断当前落子位置在这四个方向上的连续棋子数是否达到五个来确定胜负。
如果达到五个,则程序会弹出相应的提示框,显示胜利方。
四、总结通过本次课程设计,学生掌握了C语言的编程思想和开发方法,同时了解了五子棋游戏的规则和策略。
本次设计主要包括棋盘的绘制、落子的判断和胜负的判断等功能。
希望本次课程设计能够增强学生的编程能力和对五子棋游戏的理解。
郑州科技学院课程设计论文基于C#的五子棋游戏的设计与实现1 引言 (1)1.1 五子棋介绍 (1)2 软件架构 (1)3 五子棋设计说明 (1)3.1 主要成员变量说明 (2)3.2 回溯栈元素类——StackElement (2)3.3 棋子点属性类——qzdianshuxing (3)3.4 主要成员函数说明 (3)3.5 实现人机对弈的主要函数 (5)3.6 实现菜单功能的函数 (19)3.6 程序运行界面 (22)4 心得体会 (231)1 引言1.1 五子棋介绍五子棋是起源于中国古代的传统黑白棋种之一。
现代五子棋日文称之为“連珠”,英译为“Renju”,英文称之为“Gobang”或“FIR”(Five in a Row的缩写),亦有“连五子”、“五子连”、“串珠”、“五目”、“五目碰”、“五格”等多种称谓。
五子棋不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。
五子棋既有现代休闲的明显特征“短、平、快”,又有古典哲学的高深学问“阴阳易理”;它既有简单易学的特性,为人民群众所喜闻乐见,又有深奥的技巧和高水平的国际性比赛;它的棋文化源渊流长,具有东方的神秘和西方的直观;既有“场”的概念,亦有“点”的连接。
它是中西文化的交流点,是古今哲理的结晶。
2 软件架构软件的总体架构如图2.1:图2.1 软件架构3 五子棋设计说明人机对战人人对战主界面游戏控制游戏模式重新开始退出声音控制悔棋开始3.1 主要成员变量说明1)选择游戏模式标志——m_renren用来表示当前玩家选择游戏的情况,当m_renren为false时,表示人机对战;为true时,表示人人对弈。
2)游戏开始标志——begin用来判断当前游戏是否开始3)音效标志——sound在下棋过程中,判断是否需要声音,当sound为true时,表示玩家需要声音,否则的话,玩家不需要声音。
4)谁先下的标志——first这个标志只对人机对弈时有效。
c课程设计五子棋游戏一、教学目标本课程的目标是让学生掌握五子棋游戏的基本规则和技巧,能够独立进行游戏,并理解游戏的算法和逻辑。
知识目标包括了解五子棋的历史和背景,掌握游戏的规则和技巧,理解游戏的算法和逻辑。
技能目标包括能够独立进行游戏,能够分析游戏局势,能够制定游戏策略。
情感态度价值观目标包括培养学生的团队合作精神,培养学生的竞技精神,让学生理解胜负的重要性。
二、教学内容本课程的教学内容主要包括五子棋的基本规则和技巧,游戏的算法和逻辑,以及游戏中的团队合作和竞技精神。
具体包括五子棋的历史和背景,游戏的规则和技巧,如何分析游戏局势和制定游戏策略,以及如何在游戏中展现团队合作和竞技精神。
三、教学方法本课程将采用讲授法、讨论法、案例分析法和实验法等多种教学方法。
通过讲授法,让学生掌握五子棋的基本规则和技巧;通过讨论法,让学生深入理解游戏的算法和逻辑;通过案例分析法,让学生学会分析游戏局势和制定游戏策略;通过实验法,让学生在实际游戏中体验团队合作和竞技精神。
四、教学资源本课程的教学资源包括教材、参考书、多媒体资料和实验设备。
教材和参考书将提供五子棋的基本规则和技巧,游戏的算法和逻辑,以及游戏中的团队合作和竞技精神的相关知识。
多媒体资料将提供五子棋游戏的示例和案例,帮助学生更好地理解游戏的相关知识。
实验设备将用于让学生在实际游戏中体验团队合作和竞技精神。
五、教学评估本课程的评估方式包括平时表现、作业和考试。
平时表现主要评估学生的出勤、课堂参与度和团队合作表现。
作业包括练习题和游戏设计项目,评估学生对五子棋规则和技巧的掌握程度,以及游戏的算法和逻辑的应用能力。
考试包括期中和期末考试,评估学生对课程知识的全面理解和应用能力。
评估方式应客观、公正,能够全面反映学生的学习成果。
六、教学安排本课程的教学安排将在每周的一节课进行,共计10节课。
教学进度将按照教学大纲进行,确保在有限的时间内完成教学任务。
教学时间将安排在下午或晚上,考虑学生的作息时间。
c课程设计五子棋游戏一、课程目标知识目标:1. 让学生掌握五子棋的基本规则和棋谱,理解其蕴含的数学原理;2. 培养学生对博弈论的基本认识,了解五子棋游戏中的策略与决策;3. 引导学生运用计算机编程实现五子棋游戏,掌握相关算法和编程技巧。
技能目标:1. 培养学生运用逻辑思维和分析问题的能力,提高解决问题的策略选择和决策能力;2. 培养学生的团队协作能力,学会与他人共同分析问题、探讨解决方案;3. 提高学生的计算机编程能力,能够独立完成五子棋游戏的简单设计与实现。
情感态度价值观目标:1. 培养学生对五子棋游戏的兴趣,激发他们学习数学和计算机编程的热情;2. 培养学生勇于面对挑战、克服困难的精神,增强自信心;3. 培养学生遵守游戏规则,树立公平竞争的意识,培养良好的竞技道德。
课程性质:本课程以五子棋游戏为载体,结合数学和计算机编程知识,培养学生的逻辑思维、分析问题和团队协作能力。
学生特点:考虑到学生所在年级,他们对基本数学原理和计算机编程有一定了解,具备一定的独立思考和解决问题的能力。
教学要求:在教学过程中,注重理论与实践相结合,充分调动学生的积极性,引导他们通过自主探究和合作学习,达到课程目标。
同时,注重对学生的个性化指导,提高他们的学习效果。
通过本课程的学习,使学生能够将所学知识应用于实际生活,培养他们的创新意识和实践能力。
二、教学内容1. 五子棋基本规则与棋谱:包括棋盘布局、棋子走法、胜利条件等,结合数学原理分析棋局变化。
- 教材章节:第二章 简单博弈论2. 博弈论基本概念:介绍博弈论的基本要素,如参与者、策略、支付函数等,探讨五子棋游戏中的策略选择。
- 教材章节:第三章 博弈论基础3. 计算机编程实现五子棋游戏:学习运用编程语言(如Python)实现五子棋游戏,包括界面设计、算法实现等。
- 教材章节:第四章 计算机编程与算法4. 五子棋算法分析:讲解常用的五子棋算法,如极大极小值搜索、α-β剪枝等,提高游戏AI的智能程度。
毕业论文(设计)题目五子棋游戏的设计与实现姓名王勇学号**********所在院(系)数学与计算机科学学院专业班级信息与计算科学1101班指导教师拓守恒完成地点陕西理工学院2015年5 月18日五子棋游戏的设计与实现作者:王勇(陕理工学院数学与计算机科学学院信息与计算科学专业1101班,陕西汉中 723000)指导教师:拓守恒[摘要]五子棋是起源于我国古代的黑白棋种之一,是一种简单的娱乐性较强的大众游戏,深受广大玩家的喜爱,但同时作为比赛,五子棋游戏还有着深奥的技巧。
本系统的实现采用了C语言的模块化的程序设计方式,用Visual C++ 6.0软件来实现程序的编译运行。
实现黑白两方分别落子,通过棋盘上方的棋盘动态信息提示,轮流落子,本系统中游戏的每一个功能在程序中都是一个相对独立的模块,比如,棋盘模块,棋子模块,选择游戏模式模块,悔棋模块等等在程序中都是独立的,但它们之间通过逻辑关系的链接又构成了一个可以使游戏正常运行的程序。
为实现游戏的双人对战模式和人机对战模式,并使得游戏尽量的简单化,本系统需要达成以下目标:设计一个简洁的游戏初始界面;制定合法规则,使游戏能公正的进行,并且可以断定胜;支持人机对战模式,可以是电脑通过人工智能和合法规则选出最优落子位置;可以悔棋,在玩家落子落错位置时,可按下悔棋键进行悔棋。
[关键词]五子棋,游戏设计,C语言,双人对战,人机对战,人工智能Designer and implementation of gobang gameAuthor: wangyong(Grade11,Class 1, Major in Information and computing science, Mathematics and computer science Dept.Shaanxi University of Technology, Hanzhong 723000,Shaanxi)Tutor: Tuo shouhengAbstract:Gobang is one of the black and white kind of originated in ancient China, is a simple and entertaining stronger mass games, loved by the majority of players, but at the same time as the game, gobang game with profound skills.The implementation of this system has adopted C of modular program design method, using Visual C + + 6.0 software to realize the program compiler running. Implementation of black and white two parties move later, respectively, by the board at the top of the dynamic message board, take turns to move later, this game in the system each function in the program is a relatively independent modules, such as, the board module, pawn module, select game mode module, back module and so on in the program are independent, but the link through the logical relationship between them and form a can make the normal operation of the game program.In order to realize the double mode and man-machine game mode, and make the game as far as possible the simplification, the system needs to achieve the following goals: design a simple game of initial interface;the legal rules, can make the game fair, and you can call;support the man-machine mode, can be a computer by artificial intelligence and legal rules to select the optimal move later;can take back, fall in the players move later fault location, can press the back button to back.Key words:gobang,Game design,The C Programming Language ,Double against,The man-machine against,Artificial intelligence(AI)目录1.绪论 (1)1.1 引言 (1)1.2 研究的背景及意义 (1)1.2.1研究背景 (1)1.2.2研究意义 (1)1.3 基本目标及主要内容 (1)2.系统开发环境的介绍及选择 (1)2.1 C语言 (1)2.2开发及运行环境 (2)3.需求分析 (2)3.1总体需求分析 (2)3.2可行性分析 (2)3.2.1技术可行性分析 (2)3.2.2经济可行性分析 (2)3.2.3操作可行性分析 (2)3.3功能分析 (2)4.概要设计 (3)4.1五子棋特点与规则 (3)4.2流程图 (3)4.3双人模式 (5)4.4人机模式 (5)4.5智能算法 (5)4.6悔棋流程 (6)4.7输赢判断 (6)5.详细设计 (6)5.1画出游戏界面 (6)5.2画出棋子 (8)5.3设置棋局规则 (10)5.3.1落子规则 (10)5.3.2悔棋规则 (11)5.3.3输赢规则 (11)5.4实现双人对战 (12)5.5悔棋功能 (12)5.6判断输赢 (14)5.7退出游戏 (16)5.8实现人机对战 (16)5.8.1先手设置界面 (16)5.8.2电脑智能落子 (17)5.8.3可以悔棋、退出 (21)5.8.4显示输赢 (21)5.9各模块之间的衔接 (21)6.总结 (24)致谢 (25)参考文献 (26)1.绪论1.1 引言随着社会经济和科学技术的发展,计算机已经深入到人们日常工作和生活的方方面面,各种各样的程序软件也逐渐进入大众的生活,比如在闲暇时间的娱乐生活也开始变得被网络电子游戏等所充斥。
河北农业大学现代科技学院毕业论文(设计)题目:基于VC++的五子棋程序设计与实现摘要C++语言是一种面向对象的语言,尽管在当前,可视化语言发展迅速,普及很快,但C++语言作为一种基础的语言,它的有时依然存在,甚至有时它是不可替代的,特别是和硬件接口技术相联系的软件。
五子棋游戏是一种简单大众的游戏,自计算机实现以来,深受广大电脑玩家的喜爱,现在流行的五子棋游戏软件大多缺乏美观的界面,和容易的操作方法,电脑的AI值也不是很高。
本文通过C++语言在计算机图形方面的编程,设计了五子棋游戏软件,使该软件具有还算美观和操作简单的界面,在人机对战时,分为低级,中级和专家级,加大对游戏的乐趣,当然也可以实行人人对战。
本游戏是以C++语言作为开发工具,采用搜索算法设计最优落子点开发的游戏软件。
本文就是介绍五子棋软件设计的全过程。
关键字C++语言面向对象最优落子AbstractC + + language is an object-oriented language, although in the current, visual language developed rapidly, spread quickly, but the C + + language as a basic language, it is sometimes still exists, and sometimes it is irreplaceable, especially with hardware interface technology associated software. V olkswagen backgammon game is a simple game, since the computer to realize, the majority of PC gamers love, now popular backgammon game software lacks most beautiful interface, and easy method of operation, AI value of the computer is not very high. In this paper, C + + programming language in computer graphics, design a backgammon game software, so that the software has the appearance and operation is fairly simple interface, the man-machine war, divided into low, intermediate and expert level, increase the game fun, of course, can also be implemented for all war. This game is based on C + + language as a development tool, the search algorithm design optimal point developed game software. This article is to introduce the whole process of backgammon software design. Keyword C++ language Object-oriented the optimal initial目录1绪论 (5)1.1五子棋的简介 (5)1.2 Visual C++的介绍 (6)1.3 开发环境及运行环境 (6)1.3.1 开发环境 (6)1.3.2 运行环境 (6)2 系统分析 (7)2.1系统调研 (7)2.2可行性分析 (7)2.3 技术可行性分析 (7)3软件架构 (9)3.1 棋盘类 (9)3.1.1主要成员变量 (9)3.2 主要成员函数说明 (9)3.2.1 清空棋盘 (9)3.2.2 绘制棋子 (9)3.2.3 左键消息 (10)3.2.4 绘制棋盘 (10)3.2.5 对方落子完毕 (10)3.2.6 胜负的判断 (10)3.3 游戏模式类 (10)3.3.1主要成员变量 (10)3.3.2主要成员函数 (11)3.4 资源编辑 (11)3.5消息说明 (13)3.5.1落子消息 (14)3.5.2声音消息 (14)3.5.3提示消息 (14)3.5.4悔棋消息 (14)3.5.5输赢消息 (14)3.5.6再次开局消息 (14)4主要算法 (15)4.1判断胜负 (15)4.2人机对弈算法 (16)4.2.1获胜组合 (16)4.2.2落子后处理 (16)4.2.3查找棋盘空位 (16)4.2.4落子打分 (17)4.2.5防守策略 (17)4.2.6选取最佳落子 (17)5 软件实现 (18)5.1游戏运行 (18)6补充说明 (21)7结论 (22)致谢 (23)1绪论1.1五子棋的简介五子棋是起源于中国古代的传统黑白棋种之一。
五子棋小游戏
一.需求分析
现在有越来越多的人使用电脑,而且五子棋的受众广泛但实体棋操作较为繁琐且平时较难实现,所以电脑版的五子棋游戏应运而生。
大家对于这个小游戏的需求如下:首先,设计这个游戏最基本的就是实现玩家之间对战,玩家可以通过某些操作来实现对战功能;有时候可能由于时间等原因,玩家可能需要保存游戏,此时需要一个“保存”功能;有时候可能玩家由于失误会走错棋,此时就需要“悔棋”功能;有时候玩家可能觉得这局游戏玩的非常不好,这时候就需要“重新开始游戏”功能;玩家在玩过游戏之后有可能想保存游戏记录便于以后分析此时就需要“排行榜”功能;有些玩家在玩游戏时喜欢听音乐,这时候就需要在下棋时可以播放背景音乐的功能;最基本的通过输入坐标来实现落子的操作方式很繁琐而且很不方便,这时候就可以将落子机制改为更直观的光标移动模式。
二.设计思路
1.玩家对战功能:在玩家对战功能中,玩家可以通过按方向键来移动光标、按空格来实现落子,最终在横或竖或斜方向上达成五个相同颜色的棋子来获得胜利。
基本思路:
(1)使用二维数组保存棋局。
(2)由于要使用光标,所以使用输出缓冲器。
(3)打印棋盘。
主要使用Print()函数来算出棋盘并将缓冲器内容输出。
其余为其中调用的辅助函数。
chessPrint()是打印交点坐标的字符的函数;getCurse()是打印光标的函数;write()函数是用来向缓冲器里面写入字符串的函数;ln()函数是负责将缓冲器写入位置提行的函数;Display()函数是将缓冲器中内容输出到屏幕的函数。
(4)下子,在后文有详细介绍。
(5)胜负平判断
调用Check()函数进行四个方向的检查,检查是否有五子连珠。
判断完毕后输出结果(如果存在结果)
2.保存游戏和装载游戏功能:在游戏过程中,只要按“1”键就可以保存游戏到指定名称的文档中;在游戏开始界面,只要按“2”选择“load board”就可以装载指定名称的游戏。
基本思路:
调用saveGame()函数将当前棋局的相关信息全部保存到结构体变量saveChess中,并将其中的内容全部保存到文件里。
加载时将结构体变量里的数据全部读出,赋给当前棋局相关信息变量,之后正常运行游戏即可。
3.悔棋功能:在游戏过程中,只要按“2”键就可以返回到上一步的局面。
基本思路:
玩家对战时,每个玩家每次成功落子之后,棋盘的相关信息就会被记录到一个结构体数组里。
每次悔棋时,就调用一个函数把储存在结构体数组里的上一回合的信息全部赋给当前棋局信息变量。
4.重新开始游戏功能:在游戏过程中,只要按“3”键就可以初始化棋局,重新开始游戏。
基本思路:
玩家对战时每一次重新开始游戏就调用runGame()函数,并返回当前玩家信息。
人机对战时每一重新开始游戏就调用自身,并返回当前玩家信息。
5.排行榜功能:在一局游戏结束时,按照提示输入“1”则可以将自己的名字及成绩保存到排行榜文件中。
在游戏开始界面,只要按“3”就可以查看排行榜。
(排行榜按照步数由小到大,棋色又白到黑排序)
基本思路:
一局游戏结束时调用inList()函数,inList()函数又调用addList()函数,将关于棋局的部分信息保存到文件。
关于排序设置了单独的函数sortList()函数,其在addList()里面被调用。
此处使用了结构体数组,按照其中的“步数”成员将结构体数组中的元素进行“冒泡排序”。
这里比较特别的是,每次都是先将要加入的内容写到文件末尾,再将文件中所有内容读出后进行排序,最后再将排好序的内容全部写入文件。
6.背景音乐功能:在游戏过程中会一直循环播放音乐,带给玩家不一样的享受。
基本思路:
使用Windows.h头文件,并加上相关指令
再调用PlaySoundA()函数就可以实现循环播放背景音乐。
7.使用光标定位棋子:使用方向键控制光标移动方向,使用空格键来实现落子,带给玩家比坐标落子更高级的体验,更加方便快捷。
(此处使用了以前没用到的
,调用getch()函数,为了不需要键入回车。
)
基本思路:
光标实现:使用缓冲器将棋盘交点的间隔都填充内容,光标用制表符表示,其余为空格。
方向键移动光标:
防止越界:
空格落子:
8.简单的人机对战:主要防御型的AI,主要针对对手的棋型来安排战术,有时会选择进攻。
基本思路:
判断对手是否有2,3,4子连珠,如果有,电脑会在两头下子;如果没有,若己方在一侧存在3子或4子连珠,电脑会在后面补子;如果以上情况均未出现,电脑会随机在对手单子周边落子。
其余基本功能同人人对战,但是不支持保存和读取棋局功能。
按照奇偶数来判断是该电脑走子还是玩家走子。
电脑执黑则会有不同的初始化方法。
三.用户手册
1.如何运行程序
2.如何开始游戏(包括玩家对战和人机对战)
3.如何退出游戏
4.如何进行游戏
5.如何保存当前游戏(仅支持玩家对战)
6.如何读取已保存的游戏(仅支持玩家对战)
7.如何重新开始游戏(支持人机和玩家对战)
8.如何保存记录(支持人机和玩家对战,不加区分)
9.如何调取记录进行查看(支持人机和玩家对战,不加区分)
10.如何查看游戏规则
11.如何了解设计师相关信息
12.如何悔棋(支持人机和玩家对战)
1.如何运行程序
第一步,打开VS2012,点击“打开项目”。
第二步,选择“高级五子棋”项目,点击“打开”
第三步,使用快捷键“Ctrl+F5”,开始运行程序,进入游戏开始界面。
2.如何开始游戏
按照开始界面中的提示操作即可,从键盘输入“1”即可开始玩家对战或人机对战(输入“1”为玩家对战,输入“2”为人机对战,人机对战时可以选择电脑的颜色)。
输入“1”之后的效果:
再输入“2”之后的效果:
再输入“1”之后的效果:
再输入“2”之后的效果:
3如何退出游戏
此处分两种情况:第一种是在开始界面,可以通过键盘输入“0”来实现退出游戏(此时会有退出界面);第二种是在游戏过程中,可以通过按“Esc”键来直接退出游戏(此时没有退出界面)。
第一种:
输入“0”之后的结果:
第二种:
按“Esc”之后的效果:
4.如何进行游戏
玩家可以通过按“↑”“↓”“←”“→”来实现光标的移动,通过按空格键来在没有棋子的位置实现落子。
初始:
按空格之后的效果:
按“→”之后的效果:
5.如何保存当前游戏
在游戏过程中,玩家可以通过按“1”来实现游戏的保存。
按“1”之后的效果:
6.如何读取已保存的游戏
在游戏开始界面,可以通过从键盘输入“2”来装载曾经保存过的游戏。
输入“2”之后的效果:
7.如何重新开始游戏
在游戏过程中,按“3”可以实现游戏的重新开始。
初始:
按“3”之后的效果:
8.如何保存记录
在一局游戏结束后,会有如下文字提示:
输入“1”后的效果:
9.如何调取记录进行查看
在游戏开始界面,可以通过键盘输入“3”来查看排行榜内容。
10.如何查看游戏规则
在游戏开始界面可以通过键盘输入“4”来查看游戏规则。
11.如何了解设计师相关信息
在游戏开始界面输入“5”即可了解设计师相关信息。
12.如何悔棋
在游戏过程中,可以按“2”来实现悔棋,即恢复到上一步的状态。
初始:
按“2”之后的效果:
四.总结
通过本次五子棋大作业,我初步掌握了运用之前学过的知识去开拓未知领域的能力、借鉴与发展能力、自学能力等多项技能。
总的来说我感觉这次大作业的难度是比较大的,这其中会面临很多选择,这恰恰是考验我们能力的地方。
例如,“排行榜”功能就可以选择是使用链表来做还是使用结构体数组来做。
我一开始的思路是使用链表来做,但是由于我链表的相关知识掌握的不是很熟练所以屡屡受挫,最终我决定改变思路,使用结构体数组来做,果然要容易一些,我也成
功的实现了排行榜功能。
再比如,好多同学都是选用EasyX来实现鼠标控制,我本来一开始也想尝试,但是后来经过努力发现这种模式的难度对我来说偏高,所以我借鉴了一下网上的一些五子棋源代码,最终决定使用光标这种比坐标略强、比鼠标略弱的操作模式。
这样的例子在开发过程中还有很多,在这里我就不一一列举了。
总而言之,我从这次大作业中收获了很多专业知识,更重要的是我掌握很多以前没有的能力。