《五子棋人人对战-c++五子棋课程设计报告(共24页).doc》由会员分享,可在线阅读,更多相关《五子棋人人对战-c++五子棋课程设计报告(共24页).doc(24页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上VC课程设计报告学 院:理学院专业班级:信息与计算科学 班学生姓名:*学生学号:12345指导教师:#提交时间:2013年 07 月 02 日成 绩:设计题目: 五子棋人人对战 目录第1章 引言44444444444444444444444444第1章 引言通过一学期的课程学习,对和Visual2010 C+编程环境有了一定程度的了解。根据课程要求,利用两周时间对所学知识加以巩固学习,用c+编译小游戏,初步了解程序设计与软件实现的思想。该设计通过对“五子棋人人对战”游戏的编写对所学知识复习巩固。程序设计过程中,先对问题进行了全面分析,将“五子棋人人对战”划分成几个子问
2、题后,逐步细化,最终归结成一个个函数的实现。第2章 任务概述2.1问题概述2.1.1问题重述设计一个五子棋,能实现人人对战。(棋盘大小为13X13)2.1.2设计目的独立地利用所学的C+程序设计和Visaul C+6.0编程环境编写程序。2.2需求分析2.2.1基本要求明确五子棋游戏的游戏规则,编写程序实现其功能。2.2.2游戏功能介绍为了更好地实现游戏,首先必须明确“五子棋”的游戏规则。大体的规则可描述如下:(1) 进入主界面后,选择开始游戏。(2) 开始游戏后,一方开始下棋。(3) 再由另一方下棋(4) 判断输赢。(5) 玩家选择结束游戏时,结束游戏。第3章 概要设计3.1功能设计程序主要
3、实现的功能如下所述:(1)启动程序,出现主界面。(2)显示棋盘。(3)选择开始游戏。(4)有一方开始下棋,并判断下棋是否合理。(5)判断输赢。(6)有另一方开始下棋,并判断下棋是否合理。(7)判断输赢。(8)选择是否继续。(9)游戏结束后,退出游戏。3.2程序结构程序的结构如下图所示: 图3.2程序结构 3.3基本流程根据游戏规则及其结构图,画出如下程序基本流程图: 图3.3基本流程第4章 程序实现4.1主要变量及函数的说明4.1.1主要变量char board1414; /棋盘大小int x; /下棋的横坐标int y; /下棋的列坐标int count; /下棋的个数int a; /交换下
4、棋4.1.2主要函数void MainForm(); /显示主菜单void PlayEplain(); /游戏说明void PrintBoard(); / 打印初始棋盘 void InitialBoard(); /初始化棋盘void PlayChess(); /开始下棋 wuziqi(); /初始化a和count,a是交换下棋,count记录棋盘是否下满int CheckWin(int x,int y); /判断赢棋4.2主要功能的实现4.2.1 类声明class wuziqipublic:void MainForm(); /显示主菜单 void PlayEplain(); /游戏说明void
5、 PrintBoard(); /打印初始棋盘 void InitialBoard(); /初始化棋盘void PlayChess(); /开始下棋 wuziqi(); /初始化a和count,a是交换下棋,count记录棋盘是否下满private:int CheckWin(int x,int y); /判断赢棋char board1313; int x; /下棋的横坐标int y; /下棋的列坐标int count; /计数判断是否满int a; /判断谁落子;4.2.2棋盘初始化Void wuziqi:InitialBoard() /初始化棋盘,将所用的位置设置为空格for(i=1;iMXA
6、;i+)for(i=1;iMXA;i+)将所有下棋的格线设为空格Void wuziqi:PrintBoard() /打印棋盘 利用制表符打印棋盘( )4.2.3开始下棋void PlayChess(); /开始下棋由a 的值决定下棋方If(a=0)一方下棋Else另一方下棋用坐标决定下棋位置4.2.4判断下棋合法如果输入是否越界 如果boardxy= 空格就可以下棋 boardxy 设为 如果boardxy是否已经有棋子 输出 输入错误,此位置已经有棋子了,请重新输入!endl; continue;返回去继续输入。 如果输入是否越界 cout 输入位置超出范围,请重新输入!endl;Print
7、Board();打印棋盘返回重新输入4.2.5判断输赢int CheckWin(int x,int y); /判断赢棋当一方有五个棋子连成线时赢,用-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+程序设计这门有了更深一步的
8、了解。它是程序设计的重要技术。同时也使我知道,要学好这门,仅学习书本上的知识是不够的,还要有较强的实践能力。因为我们学习知识就是为了实践。而只有多实践,多编写程序,才能更好的理解与掌握书本上的东西。另外,在课程设计期间,让自己的思维变得活跃,也会看懂,学明白程序问题,总之,受益匪浅。参考文献:C+程序设计(第8版)(美)Walter Savitch 清华大学出版社附录:#include#include /setw(3)using namespace std;const int MAX=13;class wuziqipublic:void MainForm(); /显示主菜单 void Play
9、Eplain(); /游戏说明void PrintBoard(); /打印初始棋盘 void InitialBoard(); /初始化棋盘void PlayChess(); /开始下棋 wuziqi(); /初始化a和count,a是交换下棋,count记录棋盘是否下满private:int CheckWin(int x,int y); /判断赢棋char board1313; int x; /下棋的横坐标int y; /下棋的列坐标int count; /计数判断是否满int a; /判断谁落子;/wuziqi:wuziqi():a(0) /将a初始化为0/void wuziqi:PlayC
10、hess()count=0;for(;) /交换下棋 /玩家输入if(a=0) /先下棋cout请玩家输入下棋位置!endl; coutx; couty;system(cls); /清屏if(x0&x0&y=MAX) /判断请输入是否越界if(boardxy= ) /如果boardxy= 就可以下棋boardxy=O; / PrintBoard1();PrintBoard();count+;else /如果boardxy是否已经有棋子 system(cls);cout 玩家输入错误,此位置已经有棋子了,请重新输入!endl;/PrintBoard1();PrintBoard();continu
11、e;else system(cls);cout 玩家输入位置超出范围,请重新输入!endl;/PrintBoard1();PrintBoard();continue;if(CheckWin(x,y)=1) /判断输赢cout 恭喜玩家获得胜利!endlendl;break; if(count=MAX*MAX) /判断是否下满cout平局!endl;break;a=1;/玩家输入和玩家输入一样else if(a=1)cout请玩家输入下棋位置!endl; coutx; couty;system(cls);if(x0&x0&y=MAX)if(boardxy= )boardxy=X;PrintBoa
12、rd();count+;else system(cls);cout 玩家输入错误,此位置已经有棋子了,请重新输入endl;PrintBoard();continue;else system(cls);cout 玩家输入位置超出范围,请重新输入!endl;PrintBoard();continue;if(CheckWin(x,y)=-1)cout 恭喜玩家获得胜利!endl;break;if(count=MAX*MAX)cout平局!endl;break;a=0;/void wuziqi:InitialBoard()/初始化棋盘,将所用的位置设置为“ ”for(int i=0;i14;i+)fo
13、r(int j=0;j14;j+)boardij= ;void wuziqi:PrintBoard()/打印棋盘coutendl;cout*-*-*-*-*-*-*-*-*-*-*-*-*-*五子棋棋盘*-*-*-*-*-*-*-*-*-*-*-*-*endl;int i,j;cout ;for(i=1;i=MAX;i+)coutsetw(2)i;coutendl;for( i=1;iMAX+1;i+)for( j=1;jMAX+1;j+)if(boardij=O)if(j=1)coutsetw(20)i;elsecout; else if(boardij=X) if(j=1)coutsetw
14、(20)i;elsecout;elseif(i=1)&(j=1)coutsetw(20)1;else if(i=MAX)&(j=1)coutsetw(20)MAX; else if(i=1)&(j=MAX) cout; else if(i=MAX)&(j=MAX) cout0)&(jMAX) cout1)&(iMAX)&(j=1) coutsetw(20)i1)&(jMAX) cout1)&(iMAX) cout; else cout; coutendl;/最开始时的棋盘/*void wuziqi:PrintBoard()coutendl;cout*-*-*-*-*-*-*-*-*-*-*-*
15、-*-*五子棋棋盘*-*-*-*-*-*-*-*-*-*-*-*-*endl;int i,j,k;system(color 0A); cout ;for(k=0;k=MAX;k+)coutsetw(4)k;coutendl; cout endl;for( i=1;iMAX;i+)cout setw(3)i;for(j=1;j=MAX;j+) boardij= ;cout boardij; coutendl;cout endl;cout setw(3)13;for(j=1;j=MAX;j+) boardij= ; cout boardij; coutendl; cout endl;/*void
16、wuziqi:PrintBoard1()coutendl;cout*-*-*-*-*-*-*-*-*-*-*-*-*-*五子棋棋盘*-*-*-*-*-*-*-*-*-*-*-*-*endl;int i,j,k;system(color 0A); cout ;for(k=0;k=MAX;k+)coutsetw(4)k;coutendl; cout endl;for( i=1;iMAX;i+)cout setw(3)i;for(j=1;j=MAX;j+) / boardij= ;cout boardij; coutendl;cout endl;cout setw(3)13;for(j=1;j=MA
17、X;j+) boardij= ; cout boardij; coutendl; cout endl;*/void wuziqi:MainForm() cout *-*-*-*-*-*-*-*-*-*欢迎来到五子棋游戏 *-*-*-*-*-*-*-*-*-*endlendl; cout*-*-*-*-*-*-*-*-*-*-*人人对弈五子棋游戏*-*-*-*-*-*-*-*-*-*-*endl;cout 1.游戏说明 endl;cout 2.开始游戏 endl;cout 3.退出游戏 endl; cout*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
18、-*-*-*-*-*-*-*endl;cout请输入你的选择:;/void wuziqi:PlayEplain()cout*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*endl; cout*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*endl; cout*-* 游戏说明: *-*endl; cout*-* 1.第一个玩家用O第二个玩家用X; *-*endl; cout*-* 2.请根据提示输入所要走的行和列; *-*endl; cout
19、*-* 3.谁先连成五个子谁胜利。 *-*endl; cout*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*endl; cout*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*endl;/int wuziqi:CheckWin(int x,int y) /判断玩家胜利,从boardxy开始进行八个方向判断是否连成五个棋子 if(boardxy-4=O&boardxy-3=O&boardxy-2=O&boardxy-1=O&boardxy=
20、O) |(boardxy-3=O&boardxy-2=O&boardxy-1=O&boardxy=O&boardxy+1=O) |(boardxy-2=O&boardxy-1=O&boardxy=O&boardxy+1=O&boardxy+2=O) |(boardxy-1=O&boardxy=O&boardxy+1=O&boardxy+2=O&boardxy+3=O) |(boardxy=O&boardxy+1=O&boardxy+2=O&boardxy+3=O&boardxy+4=O) return 1; else if(boardx-4y=O&boardx-3y=O&boardx-2y=O
21、&boardx-1y=O&boardxy=O)|(boardx-3y=O&boardx-2y=O&boardx-1y=O&boardxy=O&boardx+1y=O)|(boardx-2y=O&boardx-1y=O&boardxy=O&boardx+1y=O&boardx+2y=O)|(boardx-1y=O&boardxy=O&boardx+1y=O&boardx+2y=O&boardx+3y=O)|(boardxy=O&boardx+1y=O&boardx+2y=O&boardx+3y=O&boardx+4y=O)return 1;else if(boardx-4y-4=O&boardx
22、-3y-3=O&boardx-2y-2=O&boardx-1y-1=O&boardxy=O)|(boardx-3y-3=O&boardx-2y-2=O&boardx-1y-1=O&boardxy=O&boardx+1y+1=O)|(boardx-2y-2=O&boardx-1y-1=O&boardxy=O&boardx+1y+1=O&boardx+2y+2=O)|(boardx-1y-1=O&boardxy=O&boardx+1y+1=O&boardx+2y+2=O&boardx+3y+3=O)|(boardxy=O&boardx+1y+1=O&boardx+2y+2=O&boardx+3y+
23、3=O&boardx+4y+4=O)return 1;else if(boardx+4y-4=O&boardx+3y-3=O&boardx+2y-2=O&boardx+1y-1=O&boardxy=O)|(boardx+3y-3=O&boardx+2y-2=O&boardx+1y-1=O&boardxy=O&boardx-1y+1=O)|(boardx+2y-2=O&boardx+1y-1=O&boardxy=O&boardx-1y+1=O&boardx-2y+2=O)|(boardx+1y-1=O&boardxy=O&boardx-1y+1=O&boardx-2y+2=O&boardx-3y
24、+3=O)|(boardxy=O&boardx-1y+1=O&boardx-2y+2=O&boardx-3y+3=O&boardx-4y+4=O) return 1; else if(boardxy-4=X&boardxy-3=X&boardxy-2=X&boardxy-1=X&boardxy=X)|(boardxy-3=X&boardxy-2=X&boardxy-1=X&boardxy=X&boardxy+1=X)|(boardxy-2=X&boardxy-1=X&boardxy=X&boardxy+1=X&boardxy+2=X)|(boardxy-1=X&boardxy=X&boardx
25、y+1=X&boardxy+2=X&boardxy+3=X)|(boardxy=X&boardxy+1=X&boardxy+2=X&boardxy+3=X&boardxy+4=X) return -1; else if(boardx-4y=X&boardx-3y=X&boardx-2y=X&boardx-1y=X&boardxy=X)|(boardx-3y=X&boardx-2y=X&boardx-1y=X&boardxy=X&boardx+1y=X)|(boardx-2y=X&boardx-1y=X&boardxy=X&boardx+1y=X&boardx+2y=X)|(boardx-1y=X&boardxy=X&boardx+1y=X&boardx+2y=X&boardx+3y=X)|(boardxy=X&boardx+1y=X&boardx+2y=X&boardx+3y=X&boardx+4y=X)return -1;else if(boardx-4y-4=X&boardx-3y-3=X&boardx-2y-2=X&boardx-1y-1=X&boardxy=X)|(boardx-3y-3=X&boardx-2y-2=X&boardx-1