软件作业五子棋程序设计2.docx
《软件作业五子棋程序设计2.docx》由会员分享,可在线阅读,更多相关《软件作业五子棋程序设计2.docx(14页珍藏版)》请在冰豆网上搜索。
![软件作业五子棋程序设计2.docx](https://file1.bdocx.com/fileroot1/2023-1/2/af55cf92-6ee5-420c-8767-01d294420b01/af55cf92-6ee5-420c-8767-01d294420b011.gif)
软件作业五子棋程序设计2
目录
一、内容摘要
二、前言
三、概述
3.1、C语言介绍
3.2、C语言特色
3.3、C语言特点
3.4、C语言语法
3.5、开发环境
四、需求分析
4.1、五子棋发展史
4.2、五子棋功能说明
五、设计分析
5.1重点模块分析
5.2流程设计
六、程序代码.
七、游戏调试
八、总结
一、内容摘要
随着互联网迅速的发展,网络游戏已经成为人们普遍生活中不可或缺的一部分,它不仅能使人娱乐,也能够开发人的智力,就像下文所主要讲的五子棋游戏一样能挖掘人们聪明的才干与脑袋的机灵程度。
本游戏程序能实现两个人对阵下棋,并且程序中能自定义游戏的时间并且也能智能的判定游戏的获胜方和游戏的结束与否,实现两方进行博弈。
二、前言
电脑已经深入到日常工作和生活的方方面面,比如文字处理、信息管理、辅助设计、图形图像处理、教育培训以及游戏娱乐等。
Windows系统的推出使电脑从高雅的学术殿堂走入了寻常百姓家,各行各业的人们无须经过特别的训练就能够使用电脑完成许许多多复杂的工作。
然而,虽然现在世界上已经充满了花样繁多的各种软件,但它们依然不能满足用户的各种特殊需要,人们还不得不开发适合自己特殊需求的软件。
作为一名学生,在系统的学习了C语言之后,用它编了一些小程序。
这次课程设计,我就想将学过的C语言中的各种技术综合起来,编写一个小游戏,既对自己学过的技能进行一次检验,也能系统地将学过的知识复习巩固。
三、概述
C语言是一种计算机程序设计语言。
它既具有高级语言的特点,又具有汇编语言的特点。
它由美国贝尔研究所的D.M.Ritchie于1972年推出。
1978后,C语言已先后被移植到大、中、小及微型机上。
它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。
它的应用范围广泛,具备很强的数据处理能力,不仅仅是在软件开发上,而且各类科研都需要用到C语言,适于编写系统软件,三维,二维图形和动画。
具体应用比如单片机以及嵌入式系统开发。
3.1、C语言介绍
C语言的祖先是BCPL语言。
1967年,剑桥大学的MartinRichards对CPL语言进行了简化,于是产生了BCPL(BasicCombinedProgrammingLanguage)语言。
1970年,美国贝尔实验室的KenThompson。
以BCPL语言为基础,设计出很简单且很接近硬件的B语言(取BCPL的首字母)。
并且他用B语言写了第一个UNIX操作系统。
在1972年,美国贝尔实验室的D.M.Ritchie在B语言的基础上最终设计出了一种新的语言,他取了BCPL的第二个字母作为这种语言的名字,这就是C语言。
3.2、C语言特色
1.C是高级语言。
它把高级语言的基本结构和语句与低级语言的实用性结合起来。
C语言可以像汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元。
2.C是结构式语言。
结构式语言的显著特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。
这种结构化方式可使程序层次清晰,便于使用、维护以及调试。
C语言是以函数形式提供给用户的,这些函数可方便的调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。
3.C语言功能齐全。
具有各种各样的数据类型,并引入了指针概念,可使程序效率更高。
而且计算功能、逻辑判断功能也比较强大,可以实现决策目的的游戏。
4.C语言适用范围大。
适合于多种操作系统,如Windows、DOS、UNIX等等;也适用于多种机型。
C语言对编写需要硬件进行操作的场合,明显优于其它高级语言,有一些大型应用软件也是用C语言编写的。
3.3、C语言特点
简洁紧凑、灵活方便
C语言一共只有32个关键字,9种控制语句,程序书写形式自由,区分大小写。
把高级语言的基本结构和语句与低级语言的实用性结合起来。
C语言可以像汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元。
运算符丰富
C语言的运算符包含的范围很广泛,共有34种运算符。
C语言把括号、赋值、强制类型转换等都作为运算符处理。
从而使C语言的运算类型极其丰富,表达式类型多样化。
灵活使用各种运算符可以实现在其它高级语言中难以实现的运算。
数据类型丰富
C语言的数据类型有:
整型、实型、字符型、数组类型、指针类型、结构体类型、共用体类型等。
能用来实现各种复杂的数据结构的运算。
并引入了指针概念,使程序效率更高。
另外C语言具有强大的图形功能,支持多种显示器和驱动器。
且计算功能、逻辑判断功能强大。
同时对于不同的编译器也有各种编辑方式。
C是结构式语言
结构式语言的显著特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。
这种结构化方式可使程序层次清晰,便于使用、维护以及调试。
C语言是以函数形式提供给用户的,这些函数可方便的调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。
语法限制不太严格,程序设计自由度大
虽然C语言也是强类型语言,但它的语法比较灵活,允许程序编写者有较大的自由度。
允许直接访问物理地址,对硬件进行操作
由于C语言允许直接访问物理地址,可以直接对硬件进行操作,因此它既具有高级语言的功能,又具有低级语言的许多功能,能够像汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元,可用来写系统软件。
生成目标代码质量高,程序执行效率高
一般只比汇编程序生成的目标代码效率低10%~20%。
适用范围大,可移植性好
C语言有一个突出的优点就是适合于多种操作系统,如MS-DOS、UNIX、MicrosoftWindows以及Linux;也适用于多种机型。
C语言效率高,可移植性好,并具备很强的数据处理能力,因此适于编写系统软件,三维,二维图形和动画,它也是数值计算的高级语言。
缺点
1.C语言的缺点主要表现在数据的封装性上,这一点使得C在数据的安全性上有很大缺陷,这也是C和C++的一大区别。
2.C语言的语法限制不太严格,对变量的类型约束不严格,影响程序的安全性,对数组下标越界不作检查等。
从应用的角度,C语言比其他高级语言较难掌握。
3.4、C语言语法
如果一个变量名后面跟着一个有数字的中括号,这个声明就是数组声明。
字符串也是一种数组。
它们以ASCII的NUL作为数组的退出。
要特别注意的是,方括内的索引值是从0算起的。
指针
如果一个变量声明时在前面使用*号,表明这是个指针型变量。
换句话说,该变量存储一个地址,而*(此处特指单目运算符*,下同。
C语言中另有双目运算符*)则是取内容操作符,意思是取这个内存地址里存储的内容。
指针是C语言区别于其他同时代高级语言的主要特征之一。
指针不仅可以是变量的地址,还可以是数组、数组元素、函数的地址。
通过指针作为形式参数可以在函数的调用过程得到一个以上的返回值(不同于return(z)这样的仅能得到一个返回值。
指针是一把双刃剑,许多操作可以通过指针自然的表达,但是不正确的或者过分的使用指针又会给程序带来大量潜在的错误。
字符串
C语言的字符串其实就是char型数组,所以使用字符串并不需要引用库。
但是C标准库确实包含了一些用于对字符串进行操作的函数,使得它们看起来就像字符串而不是数组。
使用这些函数需要引用头文件;。
文件输入/输出
在C语言中,输入和输出是经由标准库中的一组函数来实现的。
在ANSI/ISOC中,这些函数被定义在头文件;中。
标准输入/输出
有三个标准输入/输出是标准I/O库预先定义的:
stdin标准输入
stdout标准输出
stderr输入输出错误
3.5、开发环境
常用的C语言IDE(集成开发环境)有MicrosoftVisualC++,Dev-C++,Code:
:
Blocks,BorlandC++,WatcomC++,BorlandC++Builder,GNUDJGPPC++,Lccwin32CCompiler3.1,HighC,TurboC,C-Free,win-tc,xcode(macosx)等。
对于一个初学者,MicrosoftVisualC++是一个比较好的软件。
界面友好,功能强大,调试也很方便。
这是微软出的一个C语言集成开发环境(IDE),主要有:
VC++6.0、VS2005.VS2008.VS2010等,分为企业版和学生版等。
对于初学者VC++6.0是比较容易上手的,但其对标准支持的不好可能使人养成不良的编程习惯。
在unix/linux操作系统上,学习c语言一般使用vim/emacs来编辑源文件,使用gcc来编译源文件,使用make程序来管理编译过程。
其他编译器如CodeBlocks10.05(跨平台linux/windows开源免费支持高达29种不同的项目)、dev-c++(开源免费)、turbo、c-free5.0、codelite(开源免费)、eclipse(开源免费基于Java扩展平台)……
四、需求分析
4.1、五子棋的发展史
五子棋是起源于中国古代的传统黑白棋种之一。
现代五子棋日文称之为“连珠”,英译为“Renju”,英文称之为“Gobang”或“FIR”(FiveinaRow的缩写),亦有“连五子”、“五子连”、“串珠”、“五目”、“五目碰”、“五格”等多种称谓。
五子棋不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。
五子棋既有现代休闲的明显特征“短、平、快”,又有古典哲学的高深学问“阴阳易理”;它既有简单易学的特性,为人民群众所喜闻乐见,又有深奥的技巧和高水平的国际性比赛;它的棋文化源渊流长,具有东方的神秘和西方的直观;既
有“场”的概念,亦有“点”的连接。
它是中西文化的交流点,是古今哲理的结晶。
对于五子棋与围棋的关系有两种说法,一说早于围棋,早在“尧造围棋”之前,民间就已有五子棋游戏;一说源于围棋,是围棋发展的一个分支。
在中国的文化里,倍受人们的青睐。
古代的五子棋的棋具与围棋相同,纵横各十七道。
五子棋大约随围棋一起在我国南北朝时先后传入朝鲜、日本等地。
4.2、五子棋的功能说明
4.2.1五子棋特点及规则
五子棋的娱乐性强、规则简单、易学、流行性广,普通人不需长时间专门训练即可自如行棋,因此极受大众喜欢。
五子棋规则为:
1.棋盘:
采用像围棋盘一样的棋盘,本系统采用18路的棋盘。
2.下法:
两人分别执黑白两色棋子,轮流在棋盘上选择一个无子的交叉点落子,无子的交叉点又被称为空点。
3.输赢判断:
黑、白双方有一方的五个棋子在横、竖或斜方向上连接成一线即为该方赢。
4.2.2操作界面需求
操作界面如下图,画面简单易懂:
游戏的操作界面
五、设计分析
5.1、重点模块分析
本程序最重要的就是能够自动判定黑白两方各个方向上的棋子是否连了五个相同颜色的棋子,怎么做到这点呢?
这个要通过privateintcheckCount(intxChange,intyChange,intcolor)方法来判定,然后通过privatebooleancheckWin()方法判定获胜方(具体方法后边会写出,供读者了解分析)。
其次本程序关键的一点就是可以模拟游戏中的按钮来自定义游戏的时间,从而增加本游戏的可控性,智能性,同时增强游戏玩家的趣味性和刺激。
5.2、程序流程
六、程序代码
#include
#defineN14
charstate[N][N];
voidinit(void);
voidprintState(void);
boolisWin(boolisBlack,intx,inty);
boolisLevelWin(boolisBlack,intx,inty);
boolisVerticalWin(boolisBlack,intx,inty);
boolisLeftInclinedWin(boolisBlack,intx,inty);
boolisRightObliqueWin(boolisBlack,intx,inty);
boolisWin(boolisBlack,intx,inty)
{
returnisLevelWin(isBlack,x,y)
||isVerticalWin(isBlack,x,y)
||isLeftInclinedWin(isBlack,x,y)
||isRightObliqueWin(isBlack,x,y);
}
boolisLevelWin(boolisBlack,intx,inty)
{
charc=isBlack?
'@':
'O';
intcount;
while(y>0&&state[x][y]==c)
{
y--;
}
count=0;
if(state[x][y]==c)count=1;
y++;
while(y{
count++;
if(count==5)
{
returntrue;
}
y++;
}
returnfalse;
}
boolisVerticalWin(boolisBlack,intx,inty)
{
charc=isBlack?
'@':
'O';
intcount;
while(x>0&&state[x][y]==c)
{
x--;
}
count=0;
if(state[x][y]==c)count=1;
x++;
while(x{
count++;
if(count==5)
{
returntrue;
}
x++;
}
returnfalse;
}
boolisLeftInclinedWin(boolisBlack,intx,inty)
{
charc=isBlack?
'@':
'O';
intcount;
while(x>0&&y>0&&state[x][y]==c)
{
y--;
x--;
}
count=0;
if(state[x][y]==c)count=1;
x++;
y++;
while(x{
count++;
if(count==5)
{
returntrue;
}
x++;
y++;
}
returnfalse;
}
boolisRightObliqueWin(boolisBlack,intx,inty)
{
charc=isBlack?
'@':
'O';
intcount;
while(x>0&&y{
y++;
x--;
}
count=0;
if(state[x][y]==c)count=1;
x++;
y--;
while(x=0&&state[x][y]==c)
{
count++;
if(count==5)
{
returntrue;
}
x++;
y--;
}
returnfalse;
}
voidinit(void)
{
inti,j;
for(i=0;i{
for(j=0;j{
state[i][j]='*';
}
}
}
voidprintState(void)
{
inti,j;
printf("%3c",'');
for(i=0;iprintf("%3d",i);
printf("\n");
printf("-----------------------------------------------------\n");
for(i=0;i{
printf("%3d",i);
for(j=0;j{
printf("%3c",state[i][j]);
}
printf("\n");
}
}
intmain(void)
{
intx,y;
boolisBlack=true;
init();
printf("------------------\n");
printState();
while
(1)
{
printf("please%squicksnip\n",(isBlack?
"black":
"white"));
printf("example:
(1-2)\n");
scanf("%d-%d",&x,&y);
if(state[x][y]=='@'||state[x][y]=='O')
{
printf("thispositiontohavepieces\n");
continue;
}
state[x][y]=(isBlack?
'@':
'O');
printState();
if(isWin(isBlack,x,y))
{
printf("%swin\n",(isBlack?
"black":
"white"));
break;
}
isBlack=!
isBlack;
}
return0;
}
七、游戏调试
游戏调试界面
游戏运行
游戏运行界面
八、总结
通过本次论文设计,我初步学会了论文设计的基本方法,学会了怎样去借鉴别人的方法和经验,知道如何去查找资料和整合处理这些资料的能力,这为以后的大学毕业设计论文打下了一个初步的基础使我收益最大的是享受到了一种成功的喜悦,在这两个星期之中从开始的确定论文题目,然后是上网和上图书馆查找资料,编写C语言原程序,然后是进行编译,这个环节是一个非常痛苦和艰难的,常常会因为一小点的错误而在编译失败与再次修改的漫漫循环之路中,但失败的越多,对人的考验就越多,在编译运行成功之后的享受成功的喜悦也就越多,另外在调试程序的过程中不断的思考和运用已经学到的知识,这对于自己是有很大的提高的。
------王政
通过本次C程序课程设计,我觉得对自己提高很大:
克服了的偷懒的毛病,这在我以后的学习和工作中的心理定位与调节有很大的帮助。
我感受到了编程是一项非常烦琐周密的活动,他不但需要一个人周密的思考问题的能力,处理问题的能力,还需要团队的合作,还有有足够的耐心和严谨治学的作风,来不得半点马虎。
------刘正华