C++三字连珠报告.docx

上传人:b****2 文档编号:18856687 上传时间:2023-04-24 格式:DOCX 页数:19 大小:197.43KB
下载 相关 举报
C++三字连珠报告.docx_第1页
第1页 / 共19页
C++三字连珠报告.docx_第2页
第2页 / 共19页
C++三字连珠报告.docx_第3页
第3页 / 共19页
C++三字连珠报告.docx_第4页
第4页 / 共19页
C++三字连珠报告.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

C++三字连珠报告.docx

《C++三字连珠报告.docx》由会员分享,可在线阅读,更多相关《C++三字连珠报告.docx(19页珍藏版)》请在冰豆网上搜索。

C++三字连珠报告.docx

C++三字连珠报告

 

C++课程设计报告

(2010--2011年度第二学期)

三子连珠游戏的设计与实现

专业

计算机

学生姓名

班级

BM计算机092

学号

指导教师

王榕

完成日期

2011年7月7日

三子连珠游戏的设计与实现

1概述

课程设计目的

1、巩固并加深学生对C++语言程序设计知识的理解;

2、培养学生面向对象的程序设计思想,使学生认识面向过程和面向对象两种设计方法的区别;

3、进一步掌握和应用VC++集成开发环境;

4、提高运用C++语言解决实际问题的能力;

5、初步掌握开发小型实用软件的基本方法,能独立设计、实现具有实际功能的小系统;

6、掌握书写程序设计开发文档的能力(书写课程设计实验报告)。

课程设计内容

课题名称:

三子连珠游戏

说明:

模仿五子棋的形式,有一方三子连成一线即获胜。

要求:

1)玩家可以设置棋盘的大小。

2)加入悔棋的功能,要求任一方可以在对方下棋后悔改一步,即将对方当前步和本方上一步删除,本方重新下棋。

2系统需求分析

系统目标

该程序模仿五子棋的形式,有一方三子连成一线即获胜。

主体功能

两方下棋,系统设置为3*3格式,具有判断越界,判断合理性和判断平局能力,在输赢确定后输出总结信息。

开发环境

MicrosoftVisualC++

3系统概要设计

系统的功能模块划分

(1)初始化棋盘模块(InitialBoard):

此模块功能是按照代码所规定的变量n,使棋盘成为n*n的大小,并把棋盘的主界面输出给操作者看。

(2)下棋模块(PlayTurn):

这部分是对越界和合理性规则进行判断。

越界是下棋超越规定的边界,合理性是下棋是否下到已存在棋子的位子。

(3)判断输赢模块(JudgePlay):

此模块是对棋子是否连成一线规则进行判断。

连成一线则赢棋。

(4)判断平局模块(GetFull):

这部分是对棋盘是否布满棋子进行检查

(5)判断退出模块:

这是一个不可缺少的重要模块,这个部分根据用户自己的意愿进行重新开始和不再开始的选择。

三子连珠游戏系统

初始化棋盘模块

下棋模块

判断输赢模块

判断平局模块

退出模块

判断越界

判断合理

 

图3-1系统主要功能模块

 

系统流程图

 

输出总结信息

结束

 

图3-2系统流程图

4系统详细设计

初始化棋盘模块设计

此模块功能是按照我所编写的代码中规定的变量nSize的值n,使棋盘成为n*n的大小,并把棋盘的主界面输出给操作者看。

我首先定义了静态全局变量achBoard[3][3],以及静态函数PrintBoard(void),

其次我定义了两个全局整型nSize=3和nDraw=0,

再次用嵌套FOR循环完成在achBoard[3][3]所有位子填入“”。

④在输出棋盘上就非常容易了,在函数PrintBoard(void)用输出流cout逐条逐句输出。

 

图4-1初始化棋盘

下棋模块设计

①首先定义静态函数PlayTurn(void)

②其次定义两个整型nRow和nCol

③用输出流cout输出提示:

“请输入棋盘坐标(X,Y):

④用输入流cin输入:

nRownCol

(1)当输入的nRow>nSize或者nCol>nSize时,判断为超出边界,直接重新输入(调用while

(1),它作用为重新开始下棋)。

(2)若不满足以上条件,则判断achBoard[nRow-1][nCol-1]是不是“”,若不是“”,则重新输入(调用while

(1)),否则在坐标处放上棋子。

 

开始

nSize=3

输入nRow,nCol

nRow>nSize或者nCol>nSize

achBoard[nRow-1][nCol-1]!

=''

在座标处放上棋子

结束

Y

N

Y

N

 

图4-2下棋流程图

判断输赢模块

根据以下情况判断

表4-1

achBoard[0][0]==chSort&&achBoard[1][1]==chSort&&achBoard[2][2]==chSort

赢棋

①赢的一方nWin+1

②输的一方

nLose+1

achBoard[2][0]==chSort&&achBoard[1][1]==chSort&&achBoard[0][2]==chSort

achBoard[0][0]==chSort&&achBoard[1][0]==chSort&&achBoard[2][0]==chSort

achBoard[0][1]==chSort&&achBoard[1][1]==chSort&&achBoard[2][1]==chSort

achBoard[0][2]==chSort&&achBoard[1][2]==chSort&&achBoard[2][2]==chSort

achBoard[0][0]==chSort&&achBoard[0][1]==chSort&&achBoard[0][2]==chSort

achBoard[1][0]==chSort&&achBoard[1][1]==chSort&&achBoard[1][2]==chSort

achBoard[2][0]==chSort&&achBoard[2][1]==chSort&&achBoard[2][2]==chSort

不满足以上情况

进入判断平局模块

表4-3判断输赢情况

判断平局模块

首先定义静态函数GetFull(void),

再次根据整型nSize为限用嵌套FOR循环来判断是否有“”。

 

i=0

i<3

J=0,j<3,1=j+1

achBoard[0][0]不是“”

成立则往下,否则需要再次放棋子

J=1,j<3,2=j+1

achBoard[0][1]不是“”

J=2,j<3,3=j+1

achBoard[0][2]不是“”

J=3,j=3

1=i+1

I=1

I<3

J=0,j<3,1=j+1

achBoard[1][0]不是“”

成立则往下,否则需要再次放棋子

J=1,j<3,2=j+1

achBoard[1][1不是“”

J=2,j<3,2=j+1

achBoard[1][2]不是“”

J=3,j=3

2=i+1

I=2

I<3

J=0,j<3,2=j+1

achBoard[2][0]不是“”

成立则往下,否则需要再次放棋子

J=1,j<3,2=j+1

achBoard[2][1]不是“”

J=2,j<3,2=j+1

achBoard[2][2]不是“”

成立则棋盘放满,平局,nDraw+1。

.

不成立则需要再次放入棋子

J=3,j=3

3=i+1

I=3

I=3

进入判断退出模块

表4-3判断平局步骤

I

N

Y

 

J

achBoard[i][j]!

=""

J++

Y

N

Y

N

平局

另一方下棋模块和判断输赢模块

 

图4-4判断平局流程图

退出模块

首先定义字符串strChoice,其次用输出流cout输出:

“是否继续”

最后当用输入流输入的strChoice是“Y”或者“y”的时候,重新开始一局棋,否则输出总结信息。

是否继续

strChoice=“Y”或者“y”

重新开始棋局

不符合以上

输出X赢nWin输nLose平nDraw

输出O赢nWin输nLose平nDraw

表4-5判断退出情况

图4-5判断退出N情况

5测试

测试方案

输入各种正确或错误在数据,观察各种数据时程序反映在结果。

测试结果

1.初始化棋盘:

x方下棋,请输入

图5-2初始化棋盘

2.输入棋子位子(正确的):

23

图5-3输入23棋盘

3.输入xy位子(错误――越界):

34

图5-4输入34棋盘

4.输入xy位子(错误――重复,不合理,此处已有棋子):

23

(当棋盘满了后,情景与这里一样)

图5-5输入23棋盘

方输入位子(正确):

32

图5-6输入32棋盘

6.X方输入位子(正确):

22

图5-7输入22棋盘

7.O方输入位子(正确):

33

图5-8输入33棋盘

8.X方输入位子(正确):

21

此时,系统判断出x方有三子连成一线,x方胜利!

并询问是否继续(Y/N)

图5-9输入21棋盘

9.输入Y则重新开始

图5-10输入Y棋盘

6小结

首先感谢王蓉老师对我们的教导,她对我完成这个实验提供了很多意见和建议,让我受益匪浅。

本次试验名为三子棋,其实验代码在类的定义和函数模块化方面非常值得学习,程序的功能分成几个模块,用各种定义参数传递,简显易懂。

程序的模块和注释都很明确,方便以后修改,利于其他人的阅读理解。

参考文献

[1]谭浩强.C程序设计(第三版)[M].北京:

清华大学出版社,2005.

[2]谭浩强.C程序设计题解与上机指导(第三版)[M].北京:

清华大学出版社,2005.

附录

附录1源程序清单

#include

#include

usingnamespacestd;

classCGobang1步输入要下棋的格子的x,y坐标,按Enter键\n";

cout<<"\t2.有1方首先3个棋子连成一线即判获胜\n";

cout<<"\t3.当棋子布满棋盘但仍无获胜方即为平局\n";

cout<<"\方先行\n";

cout<<"\n\n\t\t请按任意键开始下棋!

\n\n";

}

intJudgePlay(CGobang&SideX,CGobang&SideO)//每下1步要进行输赢的判断,有结果则返回1

{

if())//X方获胜

{

();

();

return1;

}

elseif())//O方获胜

{

();

();

return1;

}

else

return0;

}

voidPlay(CGobang&SideX,CGobang&SideO)//开始一局游戏

{

while

(1)

{

CGobang:

:

PrintBoard();//输出棋盘

();//X方下棋

if(JudgePlay(SideX,SideO))//判断输赢

break;

if(CGobang:

:

GetFull())//判断是否平局

{

CGobang:

:

Draw();

break;

}

CGobang:

:

PrintBoard();//输出棋盘

();//O方下棋

if(JudgePlay(SideX,SideO))//判断输赢

break;

if(CGobang:

:

GetFull())//判断是否平局

{

CGobang:

:

Draw();

break;

}

}

}

intmain(void)

{

CGobangSideX('X'),SideO('O');//定义两个棋子类对象,分别代表X方与O方

PrintRule();

();

stringstrChoice;

do

{

CGobang:

:

InitialBoard();//初始化棋盘

Play(SideX,SideO);//开始下一局

cout<<"是否继续(Y/N)";

cin>>strChoice;

}while(strChoice=="Y"||strChoice=="y");

();

();

cout<<"\n\n\t欢迎再次使用三子连珠游戏!

"<

return0;

}

 

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

当前位置:首页 > 小学教育 > 语文

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

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