五子棋课程设计论文(附代码)
绝世美人儿
828次浏览
2021年01月18日 14:51
最佳经验
本文由作者推荐
护肤品排行榜前十名-小学四年级作文大全
1
、
需求分析
1.1
、
课题背景和意义
五子棋一种两人对弈的纯策略型棋类游戏 ,由古代的传统黑白棋演化而来,
相传起源于四千多年前的尧帝时期,
比围棋的历史还要悠久,
可能早在
“尧
造围棋”之前,民间就已有五子棋游戏。迅速发展于日本,流行于欧美。 容
易上手,
老少皆宜,
而且趣味横生,
引人入胜;
不仅能增强思维能 提高智力,
而且富含哲理,
有助于修身养性。
有关早期五子棋的文史资料与围棋有相似
之处,
因为古代五子棋的棋具与围棋是完全相同的。
在上古的神话传说中有
“ 女娲造人,伏羲做棋”一说,
《增山海经》中记载:
“休舆之山有石焉,名
曰帝台之棋 ,五色而文状鹑卵。
”李善注引三国魏邯郸淳《艺经》中曰:
“棋
局,纵横各十七道, 合二百八十九道,白黑棋子,各一百五十枚”
。这段虽
没明讲是何种棋类,
但至少知道 远古就以漂亮的石头为棋子。
因而规则简单
的五子棋也可能出自当时,
并是用石子作棋 子。
亦有传说,
五子棋最初流行
于少数民族地区,以后渐渐演变成围棋并在炎黄子孙后 代中遍及开来。
五子棋是一种益智的游戏,
他可以提高人们的反应能力。
尤 其是在开发人们
的智力方面,很受人们的欢迎。
《数据结构课程设计》是一门实践性 的计算机课程,为了学好这门课程,必
须在掌握理论知识的同时,加强上机实践。通过这次课程设计,要 求掌握较
大程序的设计方法,相应数据结构的选择应用、算法的设计及其实现和性能
分析等方面 中加深对课程基本内容的理解。同时,在设计方法以及上机操作
等基本技能和科学作风方面受到比较系统 和严格的训练。
1.2
、课题要求
1.2.1
、设计一个
20*20
大小的棋盘进行和电脑对战游戏
1.2.2
、实现电脑智能和玩家对战,能实现智能攻防,迅速对局势作出判断并下
棋
.
1.3
、软件格式规定
1
1.3.1
、输入形式:玩家输入棋子要下位置的纵横坐标,棋子下到相应的位置
< br>1.3.2
、程序所能达到的的功能:实现
20
行
20
列的棋 盘,电脑能对局势作出判
断并正确下棋对玩家做出攻防
1.3.3
、程序能更新到当前局势
1.4
、设计目标
1.4.1
、软件名称:五子棋游戏
1.4.2
、制作平台及调试 工具:
Win32
;
Microsoft visual studio 2010
1.4.3
、运行环境:系统:
dos/winxp/win7
1.4.4
、性能特点:软件体积小,高效快捷,实用性好,兼容性好。
2
、设计概要:
2.1
、问题解决思路
2.1 .1
、
初始化模块:
即屏幕初始化,
显示
20*20
格的棋 盘。
系统默认玩家先下,
电脑后下
2.1.2
、棋盘模块:显示棋 盘和棋子,棋盘设计为
20*20
格的二维平面图,背景
颜色为蓝色,棋子为黑白色。
2.1.3
、
判断模块:
判断上下左右左上右上左下右下是否有五 个颜色相同的颜色,
如果有就游戏结束,显示胜利方,否则,游戏双方继续落子。而当棋盘已
满 ,即数组空间已满的时候,结束程序,显示和局。
2.2
、相关函数介绍说明
const char outstr[11][4]={}
//
定义组成棋盘的字符
void jushi()
//
判断局势的函数
void computer(int a[20][20])
//
电脑落子的函数
memset(cm,0,sizeof(cm));
//
清除旧棋盘的函数
int a[20][20]={}
//
组成棋盘的函数
int
judge(intx,inty,int
sum){}
//
判断胜负的函数
system
(
2f
//
控制棋盘颜色的函数
system (
2
2.3
、主程序流程及函数调用说明
Main
()
图
1
3
初始化,欢迎界面,棋盘
调用函数,判断所下棋的位置
是否合法
更新棋盘,记录最新局势
调用函数,电脑判断棋手局势,
做出反映
直到有一方胜利,
显示胜利提示,
并结束
2.4
、
各函数调用情况
2.4.1
、
utst r[]
数组
,
以调用
inta[][]
数组,组成棋盘界面及相关的 界面操作方法。
2.4.2
、
memset()
函数,以调用xiazi
数组函数,对下棋位置做出判断,看此位置
是否合法,更新棋盘。
< br>2.4.3
、
mputer
()函数,调用
a
数组,电脑根据 棋手下的棋做出判断并做出回
应。
2.4.4
、一步棋都要更新棋盘,所以 都要调用到
outstr[]
数组
,
调
inta[]
然后调 用
computer
()函数,电脑做出下棋判断。
3
、详细设计
3.1
、棋盘的实现,用
for
循 环实现列号的输出,过定义
outstr[][]
数组,调用
inta
数组, 实现棋盘的显示。通过循环调用
int a[][]
数组,输出相应的字符,实
现棋
盘
。
while
(
)
循
环
,
输
入
所
要
下
子
的
坐
标
并
作
出
相
应
判
断
。
3.2
、智 能对玩家所下的棋子做出判断,并智能地做出反应,实现攻防,与玩家
对战。
4
3.3
、循环调用
outstr[][]
数组和
int a
数组,更新棋盘,显示最新局势。
3.4
、
int
judge(intx,inty,int
sum)
判断胜负的函数。运用
for
结构和
if
结构实现判
断,或横、或竖、或斜,有相同的五个颜色的 棋子就胜利。
3.5
、有一方胜利或棋盘满子,游戏结束,显示相关和局或胜利信息。
4
、调试分析
5
表
1
、调试过程情况表
序号
1
时间
2013-4-15
出现问题
在做棋盘时,
没考虑到下子后棋
盘的显示问题
2
2013-4-17
在输入列号时显示错误,
数字占
用棋盘位置
3
2013-4-18
没考虑到两个子下到同一个位
置的情况
4
2013-4-20
没考虑到棋盘下满棋子,
而没有
分胜负的情况
增加了下棋函数的功能,
让它进
行判断有没棋子
用函数判断到棋盘蛮子就和局,
游戏结束
解决问题
定义了一个数组储存字符,
然后
调用它
把数字
9
以后的用函数转为字母
5
、用户使用说明
5.1
、运行
Debug
文件 夹里的五子棋应用程序,显示棋盘界面。
5.2
、按照提示输入棋盘的纵横坐标,纵横坐标间要有空格,然后按回车键。
5.3
、
五颗棋连成一线,
横着,
竖着,
斜着都可以,
谁先下到五颗棋,
谁就胜利。
5.4
、棋盘满棋子,算和局。
6
、测试结果
6.1.1
、打开游戏界面,按提示输入横纵坐标:
图
2
6
6.1.2
、如果输入不存在的坐标,则会提示重新输入:
图
3
6.2
、如果你输入的位置已有子,则提示重新输入:
图
4
7
6.3
、输入错误的信息时,如
we 4rtr
:
图
5
6.4
、电脑会根据玩家所下的棋做出判断,下
好每一步棋。
图
6
8
6.5
、只要有实力,玩家也能够打败电脑的。
图
7
参考文献
[1]
廉师友编著 ,
C++
面向对象程序设计简明教程,
西安电子科技大学出版社,
1998
[2]
李师贤等编著,面向对象程序设计基础,高等教育出版社,
1998
[3]
谭浩强编著,
C++
程序设计,清华大学出版社,
2004
附录
#include
#include
using namespace std;
const char outstr[11][4]={
┌
┬
┐
├
┼
┤
└
┴
┘
○
●
int cm[20][20],xiazi[20][20];
9
intc,d;
void jushi() //
这是判断落子重要性的函数
{ int x,y,i,m,n,lianzi1=0,lianzi2=0,life=0;
memset(cm,0,sizeof(cm));
for(x=0;x<=19;x++)
for(y=0;y<=19;y++)
{
if(xiazi[x][y]==0)
{
for(m=-1;m<=1;m++)
for(n=-1;n<=1;n++)
{
if(m!=0 || n!=0)
{
for(i=1;i<=4;i++)
{
if(
x+i*m>=0
&&x+i*m<=19
&&y+i*n>=0
&&y+i*n<=19
&&xiazi[x+i*m][y+i*n]==1 )
{lianzi1++;}
else if(xiazi[x+i*m][y+i*n]==0)
{life++; break;}
else
{break;}}
for(i=-1;i>=-4;i--)
{
if(
x+i*m>=0
&&x+i*m<=19
&&y+i*n>=0
&&y+i*n<=19
&&xiazi[x+i*m][y+i*n]==1
)
{lianzi1++;}
else if(xiazi[x+i*m][y+i*n]==0)
{life++; break;}
10