五子棋人人对战c++五子棋课程设计报告.doc
VC课程设计报告学 院:理学院专业班级:信息与计算科学 班学生姓名:*学生学号:12345指导教师:#提交时间:2013年 07 月 02 日成 绩:设计题目: 五子棋人人对战 目录第1章 引言4第2章 任务概述42.1问题概述42.1.1问题重述42.1.2设计目的42.2需求分析42.2.1基本要求42.2.2游戏功能介绍4第3章 概要设计43.1功能设计43.2程序结构43.3基本流程4第4章 程序实现44.1主要变量及函数的说明44.1.1主要变量44.1.2主要函数44.2主要功能的实现44.2.1类声明44.2.2棋盘初始化44.2.3开始下棋44.2.4判断下棋合法44.2.4判断输赢4第5章 结果与总结45.1 运行结果截图45.2总结4参考文献:4第1章 引言通过一学期的课程学习,对<C+程序设计>和Visual2010 C+编程环境有了一定程度的了解。根据课程要求,利用两周时间对所学知识加以巩固学习,用c+编译小游戏,初步了解程序设计与软件实现的思想。该设计通过对“五子棋人人对战”游戏的编写对所学知识复习巩固。程序设计过程中,先对问题进行了全面分析,将“五子棋人人对战”划分成几个子问题后,逐步细化,最终归结成一个个函数的实现。第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功能设计程序主要实现的功能如下所述:(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.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 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;i<MXA;i+)for(i=1;i<MXA;i+)将所有下棋的格线设为空格Void wuziqi:PrintBoard() /打印棋盘 利用制表符打印棋盘( )4.2.3开始下棋void PlayChess(); /开始下棋由a 的值决定下棋方If(a=0)一方下棋Else另一方下棋用坐标决定下棋位置4.2.4判断下棋合法如果输入是否越界 如果boardxy=' 空格'就可以下棋 boardxy 设为 如果boardxy是否已经有棋子 输出 "输入错误,此位置已经有棋子了,请重新输入!"<<endl; continue;返回去继续输入。 如果输入是否越界 cout<<" 输入位置超出范围,请重新输入!"<<endl;PrintBoard();打印棋盘返回重新输入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+程序设计这门课程有了更深一步的了解。它是计算机程序设计的重要技术。同时也使我知道,要学好这门课程,仅学习书本上的知识是不够的,还要有较强的实践能力。因为我们学习知识就是为了实践。而只有多实践,多编写程序,才能更好的理解与掌握书本上的东西。另外,在课程设计期间,让自己的思维变得活跃,也会看懂,学明白程序问题,总之,受益匪浅。参考文献:C+程序设计(第8版)(美)Walter Savitch 清华大学出版社附录:#include<iostream>#include <iomanip> /setw(3)using namespace std;const int MAX=13;class wuziqipublic:void MainForm(); /显示主菜单 void PlayEplain(); /游戏说明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:PlayChess()count=0;for(;) /交换下棋 /玩家输入if(a=0) /先下棋cout<<"请玩家输入下棋位置!"<<endl; cout<<"请输入行坐标:" cin>>x; cout<<"请输入列坐标:" cin>>y;system("cls"); /清屏if(x>0&&x<=MAX)&&(y>0&&y<=MAX) /判断请输入是否越界if(boardxy=' ') /如果boardxy=' '就可以下棋boardxy='O' / PrintBoard1();PrintBoard();count+;else /如果boardxy是否已经有棋子 system("cls");cout<<" 玩家输入错误,此位置已经有棋子了,请重新输入!"<<endl;/PrintBoard1();PrintBoard();continue;else system("cls");cout<<" 玩家输入位置超出范围,请重新输入!"<<endl;/PrintBoard1();PrintBoard();continue;if(CheckWin(x,y)=1) /判断输赢cout<<" 恭喜玩家获得胜利!"<<endl<<endl;break; if(count=MAX*MAX) /判断是否下满cout<<"平局!"<<endl;break;a=1;/玩家输入和玩家输入一样else if(a=1)cout<<"请玩家输入下棋位置!"<<endl; cout<<"请输入行坐标:" cin>>x; cout<<"请输入列坐标:" cin>>y;system("cls");if(x>0&&x<=MAX)&&(y>0&&y<=MAX)if(boardxy=' ')boardxy='X'PrintBoard();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;i<14;i+)for(int j=0;j<14;j+)boardij=' 'void wuziqi:PrintBoard()/打印棋盘cout<<endl;cout<<"*-*-*-*-*-*-*-*-*-*-*-*-*-*五子棋棋盘*-*-*-*-*-*-*-*-*-*-*-*-*"<<endl;int i,j;cout<<" "for(i=1;i<=MAX;i+)cout<<setw(2)<<i;cout<<endl;for( i=1;i<MAX+1;i+)for( j=1;j<MAX+1;j+)if(boardij='O')if(j=1)cout<<setw(20)<<i<<""elsecout<<"" else if(boardij='X') if(j=1)cout<<setw(20)<<i<<""elsecout<<""elseif(i=1)&&(j=1)cout<<setw(20)<<"1"<<""else if(i=MAX)&&(j=1)cout<<setw(20)<<MAX<<"" else if(i=1)&&(j=MAX) cout<<"" else if(i=MAX)&&(j=MAX) cout<<"" else if(i=1)&&(j>0)&&(j<MAX) cout<<"" else if(i>1)&&(i<MAX)&&(j=1) cout<<setw(20)<<i<<"" else if(i=MAX)&&(j>1)&&(j<MAX) cout<<"" else if(j=MAX)&&(i>1)&&(i<MAX) cout<<"" else cout<<"" cout<<endl;/最开始时的棋盘/*void wuziqi:PrintBoard()cout<<endl;cout<<"*-*-*-*-*-*-*-*-*-*-*-*-*-*五子棋棋盘*-*-*-*-*-*-*-*-*-*-*-*-*"<<endl;int i,j,k;system("color 0A"); cout<<" "for(k=0;k<=MAX;k+)cout<<setw(4)<<k;cout<<endl; cout<<" "<<endl;for( i=1;i<MAX;i+)cout<<" "<<setw(3)<<i;for(j=1;j<=MAX;j+) boardij=' 'cout<<" "<<boardij; cout<<""<<endl;cout<<" "<<endl;cout<<" "<<setw(3)<<"13"for(j=1;j<=MAX;j+) boardij=' ' cout<<" "<<boardij; cout<<""<<endl; cout<<" "<<endl;/*void wuziqi:PrintBoard1()cout<<endl;cout<<"*-*-*-*-*-*-*-*-*-*-*-*-*-*五子棋棋盘*-*-*-*-*-*-*-*-*-*-*-*-*"<<endl;int i,j,k;system("color 0A"); cout<<" "for(k=0;k<=MAX;k+)cout<<setw(4)<<k;cout<<endl; cout<<" "<<endl;for( i=1;i<MAX;i+)cout<<" "<<setw(3)<<i;for(j=1;j<=MAX;j+) / boardij=' 'cout<<" "<<boardij; cout<<""<<endl;cout<<" "<<endl;cout<<" "<<setw(3)<<"13"for(j=1;j<=MAX;j+) boardij=' ' cout<<" "<<boardij; cout<<""<<endl; cout<<" "<<endl;*/void wuziqi:MainForm() cout<<" *-*-*-*-*-*-*-*-*-*欢迎来到五子棋游戏 *-*-*-*-*-*-*-*-*-*"<<endl<<endl; cout<<"*-*-*-*-*-*-*-*-*-*-*人人对弈五子棋游戏*-*-*-*-*-*-*-*-*-*-*"<<endl;cout<<" 1.游戏说明 "<<endl;cout<<" 2.开始游戏 "<<endl;cout<<" 3.退出游戏 "<<endl; cout<<"*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*"<<endl;cout<<"请输入你的选择:"/void wuziqi:PlayEplain()cout<<"*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*"<<endl; cout<<"*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*"<<endl; cout<<"*-* 游戏说明: *-*"<<endl; cout<<"*-* 1.第一个玩家用O第二个玩家用X; *-*"<<endl; cout<<"*-* 2.请根据提示输入所要走的行和列; *-*"<<endl; cout<<"*-* 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='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'&&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-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+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+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'&&boardxy+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'&&bo