五子棋人人对战c五子棋课程设计报告.docx
《五子棋人人对战c五子棋课程设计报告.docx》由会员分享,可在线阅读,更多相关《五子棋人人对战c五子棋课程设计报告.docx(29页珍藏版)》请在冰豆网上搜索。
五子棋人人对战c五子棋课程设计报告
VC课程设计报告
学院:
理学院
专业班级:
信息与计算科学班
学生姓名:
*****
学生学号:
12345
指导教师:
###
提交时间:
2013年07月02日
成绩:
设计题目:
五子棋人人对战
第1章引言
通过一学期地课程学习,对和Visual2010C++编程环境有了一定程度地了解.根据课程要求,利用两周时间对所学知识加以巩固学习,用c++编译小游戏,初步了解程序设计与软件实现地思想.
该设计通过对“五子棋人人对战”游戏地编写对所学知识复习巩固.程序设计过程中,先对问题进行了全面分析,将“五子棋人人对战”划分成几个子问题后,逐步细化,最终归结成一个个函数地实现.
第2章任务概述
2.1问题概述
2.1.1问题重述
设计一个五子棋,能实现人人对战.(棋盘大小为13X13)
2.1.2设计目地
独立地利用所学地C++程序设计和VisaulC++6.0编程环境编写程序.
2.2需求分析
2.2.1基本要求
明确五子棋游戏地游戏规则,编写程序实现其功能.
2.2.2游戏功能介绍
为了更好地实现游戏,首先必须明确“五子棋”地游戏规则.大体地规则可描述如下:
(1)进入主界面后,选择开始游戏.
(2)开始游戏后,一方开始下棋.
(3)再由另一方下棋
(4)判断输赢.
(5)玩家选择结束游戏时,结束游戏.
第3章概要设计
3.1功能设计
程序主要实现地功能如下所述:
(1)启动程序,出现主界面.
(2)显示棋盘.
(3)选择开始游戏.
(4)有一方开始下棋,并判断下棋是否合理.
(5)判断输赢.
(6)有另一方开始下棋,并判断下棋是否合理.
(7)判断输赢.
(8)选择是否继续.
(9)游戏结束后,退出游戏.
3.2程序结构
程序地结构如下图所示:
图3.2程序结构
3.3基本流程
根据游戏规则及其结构图,画出如下程序基本流程图:
图3.3基本流程
第4章程序实现
4.1主要变量及函数地说明
4.1.1主要变量
charboard[14][14]。
//棋盘大小
intx。
//下棋地横坐标
inty。
//下棋地列坐标
intcount。
//下棋地个数
inta。
//交换下棋
4.1.2主要函数
voidMainForm()。
//显示主菜单
voidPlayEplain()。
//游戏说明
voidPrintBoard()。
//打印初始棋盘
voidInitialBoard()。
//初始化棋盘
voidPlayChess()。
//开始下棋
wuziqi()。
//初始化a和count,a是交换下棋,count记录棋盘是否下满
intCheckWin(intx,inty)
。
//判断赢棋
4.2主要功能地实现
4.2.1类声明
classwuziqi
{
public:
voidMainForm()。
//显示主菜单
voidPlayEplain()。
//游戏说明
voidPrintBoard()。
//打印初始棋盘
voidInitialBoard()。
//初始化棋盘
voidPlayChess()。
//开始下棋
wuziqi()。
//初始化a和count,a是交换下棋,count记录棋盘是否下满
private:
intCheckWin(intx,inty)。
//判断赢棋
charboard[13][13]。
intx。
//下棋地横坐标
inty。
//下棋地列坐标
intcount。
//计数判断是否满
inta。
//判断谁落子
}。
4.2.2棋盘初始化
Voidwuziqi:
:
InitialBoard()//初始化棋盘,将所用地位置设置为空格
for(i=1。
ii++)
{
for(i=1。
ii++)
{将所有下棋地格线设为空格}
}
Voidwuziqi:
:
PrintBoard()///打印棋盘
利用制表符打印棋盘(┏┳┓┣╋┫┛┻┗)
4.2.3开始下棋
voidPlayChess()。
//开始下棋
由a地值决定下棋方
If(a==0)
一方下棋
Else
另一方下棋
用坐标决定下棋位置
4.2.4判断下棋合法
如果输入是否越界
{
如果board[x][y]=='空格'就可以下棋
{
board[x][y]设为○}
如果board[x][y]是否已经有棋子
{
输出"输入错误,此位置已经有棋子了,请重新输入!
"<continue。
返回去继续输入.
}
}
如果输入是否越界
{
cout<<"输入位置超出范围,请重新输入!
"<PrintBoard()。
打印棋盘
返回重新输入
}
4.2.5判断输赢
intCheckWin(intx,inty)。
//判断赢棋
当一方有五个棋子连成线时赢,用-1和1判断输赢,当棋盘满是为平局.
第5章结果与总结
5.1运行结果截图
1..启动画面
图5-1启动画面
2.游戏说明
图5.2游戏说明
3.退出游戏
图5.3退出游戏
4进入游戏
图5-4进入游戏
5.输入越界
图5-5输入超出范围
6.已有棋子
图5-6已有棋子
7.游戏进行
图5-7游戏进行
8.判断输赢
图5-8判断输赢
5.2总结
编辑小游戏这在以前我都以为是遥不可及,但现在通过这次五子棋地设计我明白了,并不是如此,通过课程设计,我们对《C++程序设计》这门课程有了更深一步地了解.它是计算机程序设计地重要技术.同时也使我知道,要学好这门课程,仅学习书本上地知识是不够地,还要有较强地实践能力.因为我们学习知识就是为了实践.而只有多实践,多编写程序,才能更好地理解与掌握书本上地东西.另外,在课程设计期间,让自己地思维变得活跃,也会看懂,学明白程序问题,总之,受益匪浅.
参考文献:
C++程序设计(第8版)(美)WalterSavitch清华大学出版社
附录:
#include
#include//setw(3)
usingnamespacestd。
constintMAX=13。
classwuziqi
{
public:
voidMainForm()。
//显示主菜单
voidPlayEplain()。
//游戏说明
voidPrintBoard()。
//打印初始棋盘
voidInitialBoard()。
//初始化棋盘
voidPlayChess()。
//开始下棋
wuziqi()。
//初始化a和count,a是交换下棋,count记录棋盘是否下满
private:
intCheckWin(intx,inty)。
//判断赢棋
charboard[13][13]。
intx。
//下棋地横坐标
inty。
//下棋地列坐标
intcount。
//计数判断是否满
inta。
//判断谁落子
}。
//////////////////////////////////////
wuziqi:
:
wuziqi():
a(0)//将a初始化为0
{
}
//////////////////////////////////////////////////////
voidwuziqi:
:
PlayChess()
{
count=0。
for(。
。
)//交换下棋
{
//玩家○输入
if(a==0)//先下棋
{
cout<<"请玩家○输入下棋位置!
"<cout<<"请输入行坐标:
"。
cin>>x。
cout<<"请输入列坐标:
"。
cin>>y。
system("cls")。
//清屏
if((x>0&&x<=MAX)&&(y>0&&y<=MAX))//判断请输入是否越界
{
if(board[x][y]=='')//如果board[x][y]==''就可以下棋
{
board[x][y]='O'。
//PrintBoard1()。
PrintBoard()。
count++。
}
else//如果board[x][y]是否已经有棋子
{
system("cls")。
cout<<"玩家○输入错误,此位置已经有棋子了,请重新输入!
"<//PrintBoard1()。
PrintBoard()。
continue。
}
}
else
{
system("cls")。
cout<<"玩家○输入位置超出范围,请重新输入!
"<//PrintBoard1()。
PrintBoard()。
continue。
}
if(CheckWin(x,y)==1)//判断输赢
{
cout<<"恭喜玩家○获得胜利!
"<break。
}。
if(count==MAX*MAX)//判断是否下满
{
cout<<"平局!
"<break。
}
a=1。
}
//玩家●输入和玩家○输入一样
elseif(a==1)
{
cout<<"请玩家●输入下棋位置!
"<cout<<"请输入行坐标:
"。
cin>>x。
cout<<"请输入列坐标:
"。
cin>>y。
system("cls")。
if((x>0&&x<=MAX)&&(y>0&&y<=MAX))
{
if(board[x][y]=='')
{
board[x][y]='X'。
PrintBoard()。
count++。
}
else
{
system("cls")。
cout<<"玩家●输入错误,此位置已经有棋子了,请重新输入"<PrintBoard()。
continue。
}
}
else
{
system("cls")。
cout<<"玩家●输入位置超出范围,请重新输入!
"<PrintBoard()。
continue。
}
if(CheckWin(x,y)==-1)
{
cout<<"恭喜玩家●获得胜利!
"<break。
}。
if(count==MAX*MAX)
{
cout<<"平局!
"<break。
}
a=0。
}
}
}
////////////////////////////////////////////////////////////////////////////////////
voidwuziqi:
:
InitialBoard()//初始化棋盘,将所用地位置设置为“”
{
for(inti=0。
i<14。
i++)
{
for(intj=0。
j<14。
j++)
{
board[i][j]=''。
}
}
}
voidwuziqi:
:
PrintBoard()///打印棋盘
{
cout<cout<<"*-*-*-*-*-*-*-*-*-*-*-*-*-*五子棋棋盘*-*-*-*-*-*-*-*-*-*-*-*-*"<inti,j。
cout<<""。
for(i=1。
i<=MAX。
i++)
{
cout<(2)<
}
cout<for(i=1。
ii++)
{
for(j=1。
jj++)
{
if(board[i][j]=='O')
{
if(j==1)
{
cout<}
else
cout<<"○"。
}
elseif(board[i][j]=='X')
if(j==1)
{
cout<}
else
cout<<"●"。
else
{
if((i==1)&&(j==1))
{
cout<}
elseif((i==MAX)&&(j==1))
{
cout<}
elseif((i==1)&&(j==MAX))
{
cout<<"┓"。
}
elseif((i==MAX)&&(j==MAX))
{
cout<<"┛"。
}
elseif((i==1)&&((j>0)&&(j{
cout<<"┯"。
}
elseif(((i>1)&&(i{
cout<}
elseif((i==MAX)&&((j>1)&&(j{
cout<<"┷"。
}
elseif((j==MAX)&&((i>1)&&(i{
cout<<"┨"。
}
else
{
cout<<"┼"。
}
}
}
cout<}
}
///////////////////////最开始时地棋盘///////////////////
/*voidwuziqi:
:
PrintBoard()
{
cout<cout<<"*-*-*-*-*-*-*-*-*-*-*-*-*-*五子棋棋盘*-*-*-*-*-*-*-*-*-*-*-*-*"<inti,j,k。
system("color0A")。
cout<<""。
for(k=0。
k<=MAX。
k++)
cout<cout<cout<<"┏━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┓"<for(i=1。
ii++)
{
cout<<""<for(j=1。
j<=MAX。
j++)
{
board[i][j]=''。
cout<<"┃"<}
cout<<"┃"<cout<<"┣━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━┫"<}
cout<<""<for(j=1。
j<=MAX。
j++)
{
board[i][j]=''。
cout<<"┃"<}
cout<<"┃"<cout<<"┗━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┛"<}
////////////////////////////////////////////////////////////////////////////////
/*voidwuziqi:
:
PrintBoard1()
{
cout<cout<<"*-*-*-*-*-*-*-*-*-*-*-*-*-*五子棋棋盘*-*-*-*-*-*-*-*-*-*-*-*-*"<inti,j,k。
system("color0A")。
cout<<""。
for(k=0。
k<=MAX。
k++)
cout<cout<cout<<"┏━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┓"<for(i=1。
ii++)
{
cout<<""<for(j=1。
j<=MAX。
j++)
{
//board[i][j]=''。
cout<<"┃"<}
cout<<"┃"<cout<<"┣━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━┫"<}
cout<<""<for(j=1。
j<=MAX。
j++)
{
board[i][j]=''。
cout<<"┃"<}
cout<<"┃"<cout<<"┗━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┛"<}*/
///////////////////////////////////
voidwuziqi:
:
MainForm()
{
cout<<"*-*-*-*-*-*-*-*-*-*〇欢迎来到五子棋游戏〇*-*-*-*-*-*-*-*-*-*"<cout<<"*-*-*-*-*-*-*-*-*-*-*人人对弈五子棋游戏*-*-*-*-*-*-*-*-*-*-*"<cout<<"1.游戏说明"<cout<<"2.开始游戏"<cout<<"3.退出游戏"<cout<<"*-*-*-*-*-*-*-*-*-**-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*"<cout<<"请输入你地选择:
"。
}
/////////////////////////////////////////////////////////////////////////////////////
voidwuziqi:
:
PlayEplain()
{
cout<<"*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*--*-*-*-*-*-*-*-*-*-*-*"<cout<<"*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*--*-*-*-*-*-*-*-*-*-*-*"<cout<<"*-*游戏说明:
*-*"<cout<<"*-*1.第一个玩家用O第二个玩家用X;*-*"<cout<<"*-*2.请根据提示输入所要走地行和列;*-*"<cout<<"*-*3.谁先连成五个子谁胜利.*-*"<cout<<"*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*--*-*-*-*-*-*-*-*-*-*-*"<cout<<"*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*--*-*-*-*-*-*-*-*-*-*-*"<}
/////////////////////////////////////////////////////////////////////////////////////
intwuziqi:
:
CheckWin(intx,inty)//判断玩家胜利,从board[x][y]开始进行八个方向判断是否连成五个棋子
{
if((board[x][y-4]=='O'&&board[x][y-3]=='O'&&board[x][y-2]=='O'&&board[x][y-1]=='O'&&board[x][y]=='O')
||(board[x][y-3]=='O'&&board[x][y-2]=='O'&&board[x][y-1]=='O'&&board[x][y]=='O'&&board[x][y+1]=='O')
||(board[x][y-2]=='O'&&board[x][y-1]=='O'&&board[x][y]=='O'&&board[x][y+1]=='O'&&board[x][y+2]=='O')
||(board[x][y-1]=='O'&&board[x][y]=='O'&&board[x][y+1]=='O'&&board[x][y+2]=='O'&&board[x][y+3]=='O')
||(board[x][y]=='O'&&board[x][y+1]=='O'&&board[x][y+2]=='O'&&board[x][y+3]=='O'&&board[x][y+4]=='O'))
return1。
elseif((board[x-4][y]=='O'&&board[x-3][y]=='O'&&board[x-2][y]=='O'&&board[x-1][y]=='O'&&board[x][y]=='O')
||(board[x-3][y]=='O'&&board[x-2][y]=='O'&&board[x-1][y]=='O'&&board[x][y]=='O'&&board[x+1][y]=='O')
||(board[x-2][y]=='O'&&board[x-1][y]=='O'&&board[x][y]=='O'&&board[x+1][y]=='O'&&board[x+2][y]=='O')
||(board[x-1][y]=='O'&&board[x][y]=='O'&&board[x+1][y]=='O'&&board[x+2][y]=='O'&&bo