当前位置:文档之家› 五子棋人人对战c五子棋课程设计报告

五子棋人人对战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++程序设计>和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 board[14][14]; //棋盘大小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 wuziqi{public:void MainForm(); //显示主菜单void PlayEplain(); //游戏说明void PrintBoard(); //打印初始棋盘void InitialBoard(); //初始化棋盘void PlayChess(); //开始下棋wuziqi(); //初始化a和count,a是交换下棋,count记录棋盘是否下满private:int CheckWin(int x,int y); //判断赢棋char board[13][13];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判断下棋合法如果输入是否越界{如果board[x][y]==' 空格'就可以下棋{board[x][y] 设为○}如果board[x][y]是否已经有棋子{输出 "输入错误,此位置已经有棋子了,请重新输入!"<<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 wuziqi{public:void MainForm(); //显示主菜单void PlayEplain(); //游戏说明void PrintBoard(); //打印初始棋盘void InitialBoard(); //初始化棋盘void PlayChess(); //开始下棋wuziqi(); //初始化a和count,a是交换下棋,count 记录棋盘是否下满private:int CheckWin(int x,int y); //判断赢棋char board[13][13];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(board[x][y]==' ') //如果board[x][y]==' '就可以下棋{board[x][y]='O';// PrintBoard1();PrintBoard();count++;}else //如果board[x][y]是否已经有棋子{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(board[x][y]==' '){board[x][y]='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++){board[i][j]=' ';}}}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(board[i][j]=='O'){if(j==1){cout<<setw(20)<<i<<"○";}elsecout<<"○";}else if(board[i][j]=='X')if(j==1){cout<<setw(20)<<i<<"●";}elsecout<<"●";else{if((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++){board[i][j]=' ';cout<<"┃ "<<board[i][j];}cout<<"┃"<<endl;cout<<" ┣━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━┫"<<endl;}cout<<" "<<setw(3)<<"13";for(j=1;j<=MAX;j++){board[i][j]=' ';cout<<"┃ "<<board[i][j];}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++){// board[i][j]=' ';cout<<"┃ "<<board[i][j];}cout<<"┃"<<endl;cout<<" ┣━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━┫"<<endl;}cout<<" "<<setw(3)<<"13";for(j=1;j<=MAX;j++){board[i][j]=' ';cout<<"┃ "<<board[i][j];}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.谁先连成五个子谁胜利。

相关主题