1、五子棋人人对战c 五子棋课程设计报告VC课程设计报告学 院:理学院专业班级:信息与计算科学 班学生姓名:*学生学号:12345指导教师:#提交时间:2013年 07 月 02 日成 绩:设计题目: 五子棋人人对战 第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功能设计 程序主要实现地功能如下所述: (1)启动程序,出现主界面. (2)显
3、示棋盘. (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
4、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(
5、)。 /打印初始棋盘 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。i+)fo
6、r(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。 PrintBoa
7、rd()。打印棋盘返回重新输入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()。 /显示主菜单 v
9、oid 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/vo
10、id wuziqi:PlayChess() 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。 /PrintB
11、oard1()。 PrintBoard()。 continue。 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)
12、。 if(x0&x0&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=
13、0。 /void wuziqi:InitialBoard()/初始化棋盘,将所用地位置设置为“ ” for(int i=0。i14。i+) for(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+
14、1。j+) if(boardij=O) if(j=1) coutsetw(20)i。 else cout。 else if(boardij=X) if(j=1) coutsetw(20)i。 else cout。 else if(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)
15、cout。 else cout。 coutendl。 /最开始时地棋盘/*void wuziqi:PrintBoard() 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 boardi
16、j。 coutendl。 cout endl。 cout setw(3)13。 for(j=1。j=MAX。j+) boardij= 。 cout boardij。 coutendl。 cout endl。/*void 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(
17、 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 wuziqi:MainForm() cout *-*-*-*-*-*-*-*-*-*欢迎来到五子棋游戏 *-*-*-*-*-*-*-*-*-*endlendl。 cout*-*-*-*-*-*-*-*-*-*-*人人对弈五子棋游戏*-*-
18、*-*-*-*-*-*-*-*-*endl。 cout 1.游戏说明 endl。 cout 2.开始游戏 endl。 cout 3.退出游戏 endl。 cout*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*endl。 cout请输入你地选择:。/void wuziqi:PlayEplain() cout*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*endl。 cout*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
19、*-*-*-*-*-*-*-*-*-*-*-*-*endl。 cout*-* 游戏说明: *-*endl。 cout*-* 1.第一个玩家用O第二个玩家用X; *-*endl。 cout*-* 2.请根据提示输入所要走地行和列; *-*endl。 cout*-* 3.谁先连成五个子谁胜利. *-*endl。 cout*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*endl。 cout*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*endl。
20、/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
21、&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&bo
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1