五子棋人人对战c五子棋课程设计报告.docx
- 文档编号:29790490
- 上传时间:2023-07-26
- 格式:DOCX
- 页数:30
- 大小:170.22KB
五子棋人人对战c五子棋课程设计报告.docx
《五子棋人人对战c五子棋课程设计报告.docx》由会员分享,可在线阅读,更多相关《五子棋人人对战c五子棋课程设计报告.docx(30页珍藏版)》请在冰豆网上搜索。
五子棋人人对战c五子棋课程设计报告
VC课程设计报告
学院:
理学院
专业班级:
信息与计算科学班
学生:
*****
学生学号:
12345
指导教师:
###
提交时间:
2013年07月02日
成绩:
设计题目:
五子棋人人对战
第1章引言4
第2章任务概述4
2.1问题概述4
2.1.1问题重述4
2.1.2设计目的4
2.2需求分析4
2.2.1基本要求4
2.2.2游戏功能介绍4
第3章概要设计4
3.1功能设计4
3.2程序结构4
3.3基本流程4
第4章程序实现4
4.1主要变量及函数的说明4
4.1.1主要变量4
4.1.2主要函数4
4.2主要功能的实现4
4.2.1类声明4
4.2.2棋盘初始化4
4.2.3开始下棋4
4.2.4判断下棋合法4
4.2.4判断输赢4
第5章结果与总结4
5.1运行结果截图4
5.2总结4
参考文献:
4
第1章引言
通过一学期的课程学习,对
根据课程要求,利用两周时间对所学知识加以巩固学习,用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;i { for(i=1;i {将所有下棋的格线设为空格} } 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 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;i { for(j=1;j { 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;i { 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;i { 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]==
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 五子棋 人人 课程设计 报告