五子棋程序设计说明书Word格式文档下载.docx

上传人:b****7 文档编号:22172841 上传时间:2023-02-02 格式:DOCX 页数:19 大小:43.13KB
下载 相关 举报
五子棋程序设计说明书Word格式文档下载.docx_第1页
第1页 / 共19页
五子棋程序设计说明书Word格式文档下载.docx_第2页
第2页 / 共19页
五子棋程序设计说明书Word格式文档下载.docx_第3页
第3页 / 共19页
五子棋程序设计说明书Word格式文档下载.docx_第4页
第4页 / 共19页
五子棋程序设计说明书Word格式文档下载.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

五子棋程序设计说明书Word格式文档下载.docx

《五子棋程序设计说明书Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《五子棋程序设计说明书Word格式文档下载.docx(19页珍藏版)》请在冰豆网上搜索。

五子棋程序设计说明书Word格式文档下载.docx

用C语言设计一个五子棋游戏程序,允许游戏者自由选择棋子颜色,实现人人对战和人机对战,利用时间函数设置实现落子倒计时功能

程序应该具有以下基本功能:

1.显示欢迎界面。

2.玩家棋子可选,棋盘范围足够。

3.落子时间倒计时。

设计要求:

1.不同的功能使用不同的函数实现(模块化),对每个函数的功能和调用接口要

注释清楚。

对程序其它部分也进行必要的注释。

3.对系统进行功能模块分析、画出总流程图和各模块流程图。

4.用户界面要求使用方便、简洁明了、美观大方、格式统一。

5.所有程序需在Win-Tc或MicrosoftVisualC++环境调试通过。

3.设计工作任务及工作量的要求〔包括课程设计计算说明书(论文)、图纸、实物样品等〕:

1)课程设计说明书一份;

2)电子文档(说明书、设计程序)一份

4.主要参考文献:

谭浩强《c程序设计》北京大学出版社

5.设计成果形式及要求:

1)课程说明书打印,并装订;

2)必要的程序流程图和程序附录。

6.工作计划及进度:

2011年12月24日~2011年12月26日下达设计任务书,学生熟悉设计内容;

2011年12月27日~2011年12月29日查阅参考资料,确定基本设计方案;

2011年12月29日~2012年01月04日C语言进行程序设计;

2012年01月05日~2012年01月06日完成设计报告;

2012年01月06日答辩;

系主任审查意见:

签字:

年月日

1、课程设计的背景及意义……………....06

2、设计的基本原理………………………06

3、设计的基本过程………………………08

4、设计的结果……………………………10

5、总结和结论…………………………….11

1.设计背景及意义

我们的五子棋程序是在VisualC++环境下运行的。

VisualC++

MicrosoftVisualC++(简称VisualC++、MSVC、VC++或VC)微软公司的C++开发工具,具有集成开发环境,可提供编辑C语言,C++以及C++/CLI等编程语言。

VC++整合了便利的除错工具,特别是整合了微软视窗程式设计(WindowsAPI)、三维动画DirectXAPI,Microsoft.NET框架。

目前最新的版本是MicrosoftVisualC++2010。

VisualC++集成了,于1998发行。

发行至今一直被广泛地用于大大小小的项目开发。

五子棋是一种两人对弈的纯策略型棋类游戏,是起源于中国古代的传统黑白棋种之一。

我们通过对《C语言》以及对《大学计算机基础》的初步学习后,本学期末进行了课程程序设计,设计课题为“五子棋”。

我们小组由6人组成,通过分工与合作并在赵老师的耐心指导下共同完成了此程序设计。

2.设计的基本原理

问题描述

连珠(五子棋)是有两个人在一盘棋上进行对抗的竞技运动。

在对局开始时,先由用户选择哪方先开局,先开局一方将一枚棋子落在一点上,然后由另一方在对方棋周围的交叉点上落子,如此轮流落子,直到某一方首先在棋盘的直线、横线或斜线上形成连续的五子则该方就算获胜。

此时,算法结束。

需求分析

(1)输出棋盘界面

(2)要求玩家选择棋子

(3)玩家轮流下棋

(4)判断键盘输入哪个键按规则执行操作

(5)判断谁先落棋

(6)判断赢家

(7)输出结果界面

流程图

开始

玩家选择棋子

输出棋盘界面

O方先输入棋子坐标

刷新棋盘界面

3设计的基本过程

charb[40][40];

voidshow(),再接下来的双for是为塑形:

限定行间距为10<

i<

16,再限定列间距为10<

j<

16或25<

31,用判断语句来塑造图形“双眼”;

当i=21时,限定6<

=j<

=25,当i=22,23,24,25,26,27时同理,用判断语句来塑造“嘴”,最后用双for语句来输出图形。

4设计结果

玩家获胜显示界面截图

5总结与结论

1课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.回顾起此次课程程序设计,至今我仍感慨颇多,从选题到定稿,从理论到实践,在整整两星期的日子里,学到很多很多的的东西,不仅巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。

通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,才能真正提高自己的实际动手能力和独立思考的能力。

在设计的过程中难免会遇到过各种各样的问题,同时在设计的过程中也发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,通过这次课程设计之后,把以前所学过的知识重新温故。

2这次课程设计顺利完成了,在设计中遇到了很多编程问题,最后在赵宇老师的辛勤指导下,终于游逆而解。

同时,在赵宇老师的身上我学得到很多实用的知识,我表示感谢!

同时,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢!

附录

负责人

设计内容

Viodjudge()函数的设计及程序的调试

Voidmove()函数的设计及课程设计说明书的排版制作

Intplaying()函数的设计及程序的调试

Voidshowcheckerboard()函数设计及相关操作

Voidshow()函数的设计及程序的调试

程序源代码:

#include<

>

chara[65][65];

voidshow()//输出获胜图像//

{

inti=0,j=0;

//i为横坐标变量,j为纵坐标变量//

for(i=0;

40;

i++)//对图像数组赋初值//

for(j=0;

j++)

{b[i][j]=46;

}

i++)//对图像数组特定点赋值//

for(j=0;

{

if(i>

10&

&

16)

{if(j>

16||j>

25&

31)

b[i][j]='

O'

;

else

{

if(i==21)

{if(j>

=6&

=35)

b[i][j]='

else

{

if(i==22)

{if(j>

=7&

=34)

b[i][j]='

else

{

if(i==23)

{if(j>

=8&

=33)

b[i][j]='

else

{

if(i==24)

{if(j>

=9&

=31)

b[i][j]='

{

if(i==25)

{if(j>

=10&

=30)

b[i][j]='

else

{

if(i==26)

{if(j>

=12&

=28)

b[i][j]='

else

{

if(i==27)

{if(j>

=14&

=26)

b[i][j]='

else

{

if(i==28)

{if(j>

=17&

=23)

b[i][j]='

}

}

}

}

}

}

}

}

}

for(i=0;

i++)//输出图像数组//

for(j=0;

printf("

%c"

b[i][j]);

printf("

\n"

);

}

voidmove(int*x,int*y)/*移动棋子的方向*///x为上一步棋子横坐标,y为上一步棋子纵坐标//

charb[40];

//为记录棋子将要移动的步伐//

inti,z,flag=1;

//z为某一步的中间变量,flag为标志变量//

gets(b);

//输入要移动的步伐//

i++)

{

z=b[i];

//把b【】的某一步传递给z//

switch(z)//判断移动棋子方向//

case119:

*x=*x-1;

break;

//w键控制棋子上移//

case97:

*y=*y-1;

//a键控制棋子左移//

case115:

*x=*x+1;

//s键控制棋子下移//

case100:

*y=*y+1;

//d键控制棋子右移//

case111:

flag=0;

//o键确定落子//

if(flag==0)break;

//判断某步是否移动完成//

intplaying()/*开始下棋*/

intflag=1,i=0,x=0,y=0,k,l,n=0,m=1;

//flag为记录哪方下棋的标志变量,x,y为a[][]的横纵坐标,m,n分别记录o方,@方的积累步数//

int*p1=&

x,*p2=&

y;

intjudge(intx,inty);

//本函数所用子函数的声明//

voidmove(int*p1,int*p2);

voidshowcheckerboard(intx,inty);

printf("

O方先输入首子坐标:

"

scanf("

%d%d"

&

x,&

y);

//输入首坐标//

a[x][y]='

//首坐标的棋盘位置画棋子//

showcheckerboard(m,n);

//输出更新后的棋盘//

2000;

i++)//改变玩家//

if(flag==1)

flag=0;

flag=1;

for(k=0;

k<

k++)//玩家落子并判断下的棋子是否过界或此处是否有子//

{

if(flag==1)

{printf("

O方下棋\n"

m++;

@方下棋\n"

n++;

move(p1,p2);

if(x>

=1&

x<

=64&

y>

y<

=64)

{

if(a[x][y]==46)break;

else

{if(flag==1)m--;

elsen--;

printf("

此处有子,请继续移子"

continue;

else{if(flag==1)m--;

printf("

此处过界,请继续移子"

if(flag==1)//在a[][]的特定位置更新字符//

a[x][y]='

else

@'

showcheckerboard(m,n);

//更新棋盘//

l=judge(x,y);

//记录谁赢变量//

if(l==1)returnflag;

voidshowcheckerboard(intx,inty)/*画出棋盘*///x,y分别为o方下棋步数,@方下棋步数//

inti,j,w=0;

//i,j为横纵坐标变量//

================================================================================================================\n"

0方累计下棋步数:

%d@方累计下棋步数:

%d\n"

x,y);

65;

i++)//输出横纵坐标//

%2d"

i);

printf("

for(i=1;

if(j==0)

w+=1;

printf("

w);

%2c"

a[i][j]);

intjudge(intx,inty)/*判断各方向五子是否连成一线*///x,y分别为横纵坐标//

{

inti,b,c,d,e,z=1;

//z为标志变量,记录每个方向连棋个数//

for(i=1;

5;

i++)//垂直向下数//

if(a[x][y+i]==a[x][y])

z+=1;

if(z==5)

{return

(1);

elsebreak;

i++)//垂直向上数//

if(a[x][y-i]==a[x][y])

e=z;

z=1;

i++)//水平向右数//

if(a[x+i][y]==a[x][y])

i++)//水平向左数//

if(a[x-i][y]==a[x][y])

b=z;

for(i=1;

i++)//向左下方数//

if(a[x-i][y+i]==a[x][y])

i++)//向右上方数//

if(a[x+i][y-i]==a[x][y])

c=z;

i++)//向左上方数//

if(a[x-i][y-i]==a[x][y])

i++)//向右下方数//

if(a[x+i][y+i]==a[x][y])

d=z;

if(e!

=5&

b!

c!

d!

=5)//判断某个方向五子连棋//

return(0);

voidmain()

intx,y,flag,m=0,n=0,p=0;

//flag为哪方下棋的判断变量,m,n为分别记录双方的步数//

w为上移动,a为左移动,s为下移动,d为右移动,o确定落棋子\n"

=================================================================================================================\n"

玩家1选择棋子:

选0方输入1,选@方输入2\n"

scanf("

%d"

p);

for(x=1;

x++)//棋盘数组初始化//

for(y=1;

y++)

a[x][y]=46;

showcheckerboard(m,n);

//输出棋盘//

flag=playing();

//下棋//

show();

//输出获胜图形//

if(flag==1)//判断哪方获胜//

O方获胜"

else

@方获胜"

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 成人教育 > 远程网络教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1