(整理)五子棋人人对战c五子棋课程设计报告
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
VC课程设计报告
学院:
理学院
专业班级:
信息与计算科学班
学生姓名:
*****
学生学号:
12345
指导教师:
###
提交时间:
2013年07月02日
成绩:
设计题目:五子棋人人对战
第1章
通过一学期的课程学习,对<C++程序设计>和Visual2010 C++编程环境有了一定程度的了解。根据课程要求,利用两周时间对所学知识加以巩固学习,用c++编译小游戏,初步了解程序设计与软件实现的思想。
wuziqi::wuziqi():a(0) //将a初始化为0
{
}
//////////////////////////////////////////////////////
void wuziqi::PlayChess()
{
count=0;
for(;;) //交换下棋
{
//玩家○输入
if(a==0) //先下棋
图3.3基本流程
第
4.1
4.1.1
char board[14][14]; //棋盘大小
int x; //下棋的横坐标
int y; //下棋的列坐标
int count; //下棋的个数
int a; //交换下棋
4.1.2
void MainForm();
//显示主菜单
void PlayEplain();
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;
2.2
2.2.1
明确五子棋游戏的游戏规则,编写程序实现其功能。
2.2.2
为了更好地实现游戏,首先必须明确“五子棋”的游戏规则。大体的规则可描述如下:
(1)进入主界面后,选择开始游戏。
(2)开始游戏后,一方开始下棋。
(3)再由另一方下棋
(4)判断输赢。
(5)玩家选择结束游戏时,结束游戏。
第
3.1
程序主要实现的功能如下所述:
int CheckWin(int x,int y); //判断赢棋
char board[13][13];
int x; //下棋的横坐标
int y; //下棋的列坐标
int count; //计数判断是否满
int a; //判断谁落子
};
//////////////////////////////////////
};
if(count==MAX*MAX)
{
cout<<"平局!"<<endl;
break;
}
a=0;
}
}
}
////////////////////////////////////////////////////////////////////////////////////
void wuziqi::InitialBoard()//初始化棋盘,将所用的位置设置为“”
该设计通过对“五子棋人人对战”游戏的编写对所学知识复习巩固。程序设计过程中,先对问题进行了全面分析,将“五子棋人人对战”划分成几个子问题后,逐步细化,最终归结成一个个函数的实现。
第
2.1
2.1.1
设计一个五子棋,能实现人人对战。(棋盘大小为13X13)
2.1.2
独立地利用所学的C++程序设计和Visaul C++6.0编程环境编写程序。
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<<"○";
void PlayEplain(); //游戏说明
void PrintBoard(); //打印初始棋盘
void InitialBoard(); //初始化棋盘
void PlayChess(); //开始下棋
wuziqi(); //初始化a和count,a是交换下棋,count记录棋盘是否下满
private:
PrintBoard();
continue;
}
}
else
{
system("cls");
cout<<"玩家○输入位置超出范围,请重新输入!"<<endl;
//PrintBoard1();
PrintBoard();
continue;
}
if(CheckWin(x,y)==1) //判断输赢
{
cout<<"恭喜玩家○获得胜利!"<<endl<<endl;
int a; //判断谁落子
};
4.2.2
Voidwuziqi::InitialBoard()//初始化棋盘,将所用的位置设置为空格
for(i=1;i<MXA;i++)
{
for(i=1;i<MXA;i++)
{将所有下棋的格线设为空格}
}
Voidwuziqi::PrintBoard()///打印棋盘
利用制表符打印棋盘(┏┳┓┣╋┫┛┻┗)
{
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))
PrintBoard();
continue;
}
}
else
{
system("cls");
cout<<"玩家●输入位置超出范围,请重新输入!"<<endl;
PrintBoard();
continue;
}
if(CheckWin(x,y)==-1)
{
cout<<"恭喜玩家●获得胜利!"<<endl;
break;
///////////////////////最开始时的棋盘///////////////////
/*void wuziqi::PrintBoard()
{
cout<<endl;
cout<<"*-*-*-*-*-*-*-*-*-*-*-*-*-*五子棋棋盘*-*-*-*-*-*-*-*-*-*-*-*-*"<<endl;
break;
};
if(count==MAX*MAX) //判断是否下满
{
cout<<"平局!"<<endl;
break;
}
a=1;
}
//玩家●输入和玩家○输入一样
else if(a==1)
{
cout<<"请玩家●输入下棋位置!"<<endl;
cout<<"请输入行坐标:";
cin>>x;
cout<<"请输入列坐标:";
(1)启动程序,出现主界面。
(2)显示棋盘。
(3)选择开始游戏。
(4)有一方开始下棋,并判断下棋是否合理。
(5)判断输赢。
(6)有另一方开始下棋,并判断下棋是否合理。
(7)判断输赢。
(8)选择是否继续。
(9)游戏结束后,退出游戏。
3.2
程序的结构如下图所示:
图3.2程序结构
3.3
根据游戏规则及其结构图,画出如下程序基本流程图:
}
else
cout<<"○";
}
else if(board[i][j]=='X')
if(j==1)
{
cout<<setw(20)<<i<<"●";
}
else
cout<<"●";
else
{
if((i==1)&&(j==1))
{
cout<<setw(20)<<"1"<<"┏";
}
else if((i==MAX)&&(j==1))
int i,j,k;
system("color 0A");
cout<<" ";
for(k=0;k<=MAX;k++)
4.2
4.2.1
class wuziqi
{
public:
void MainForm(); //显示主菜单
void PlayEplain(); //游戏说明
void PrintBoard(); //打印初始棋盘
void InitialBoard(); //初始化棋盘
void PlayChess(); //开始下棋
{
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]==' '就可以下棋
第
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++程序设计》这门课程有了更深一步的了解。它是计算机程序设计的重要技术。同时也使我知道,要学好这门课程,仅学习书本上的知识是不够的,还要有较强的实践能力。因为我们学习知识就是为了实践。而只有多实践,多编写程序,才能更好的理解与掌握书本上的东西。另外,在课程设计期间,让自己的思维变得活跃,也会看懂,学明白程序问题,总之,受益匪浅。
{
for(int i=0;i<14;i++)
{
for(int j=0;j<14;j++)
{
board[i][j]=' ';
}
}
}
void wuziqi::PrintBoard()///打印棋盘
{
cout<<endl;
cout<<"*-*-*-*-*-*-*-*-*-*-*-*-*-*五子棋棋盘*-*-*-*-*-*-*-*-*-*-*-*-*"<<endl;
参考文献:
C++程序设计(第8版)(美)Walter Savitch清华大学出版社
附录:
#include<iostream>
#include <iomanip> //setw(3)
using namespace std;
const int MAX=13;
class wuziqi
{
public:
void MainForm(); //显示主菜单
//游戏说明
void PrintBoard();
//打印初始棋盘
void InitialBoard();
//初始化棋盘
void PlayChess();
//开始下棋
wuziqi();
//初始化a和count,a是交换下棋,count记录棋盘是否下满
int CheckWin(int x,int y)
; //判断赢棋
continue;返回去继续输入。
}
}
如果输入是否越界
{
cout<<"输入位置超出范围,请重新输入!"<<endl;
PrintBoard();打印棋盘
返回重新输入
}
4.2.5
int CheckWin(int x,int y);//判断赢棋
当一方有五个棋子连成线时赢,用-1和1判断输赢,当棋盘满是为平局。
{
board[x][y]='O';
// PrintBoard1();
PrintBoard();
count++;
}
else //如果board[x][y]是否已经有棋子
{
system("cls");
cout<<"玩家○输入错误,此位置已经有棋子了,请重新输入!"<<endl;
//PrintBoard1();
{
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;
}
}
4.2.3
void PlayChess();//开始下棋
由a的值决定下棋方
If(a==0)
一方下棋
Else
另一方下棋
用坐标决定下棋位置
4.2.4
如果输入是否越界
{
如果board[x][y]=='空格'就可以下棋
{
board[x][y]设为○}
如果board[x][y]是否已经有棋子
{
输出"输入错误,此位置已经有棋子了,请重新输入!"<<endl;
wuziqi(); //初始化a和count,a是交换下棋,count记录棋盘是否下满
private:
int CheckWin(int x,int y); //判断赢棋
char board[13][13];
int x; //下棋的横坐标
int y; //下棋的列坐标
int count; //计数判断是否满
学院:
理学院
专业班级:
信息与计算科学班
学生姓名:
*****
学生学号:
12345
指导教师:
###
提交时间:
2013年07月02日
成绩:
设计题目:五子棋人人对战
第1章
通过一学期的课程学习,对<C++程序设计>和Visual2010 C++编程环境有了一定程度的了解。根据课程要求,利用两周时间对所学知识加以巩固学习,用c++编译小游戏,初步了解程序设计与软件实现的思想。
wuziqi::wuziqi():a(0) //将a初始化为0
{
}
//////////////////////////////////////////////////////
void wuziqi::PlayChess()
{
count=0;
for(;;) //交换下棋
{
//玩家○输入
if(a==0) //先下棋
图3.3基本流程
第
4.1
4.1.1
char board[14][14]; //棋盘大小
int x; //下棋的横坐标
int y; //下棋的列坐标
int count; //下棋的个数
int a; //交换下棋
4.1.2
void MainForm();
//显示主菜单
void PlayEplain();
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;
2.2
2.2.1
明确五子棋游戏的游戏规则,编写程序实现其功能。
2.2.2
为了更好地实现游戏,首先必须明确“五子棋”的游戏规则。大体的规则可描述如下:
(1)进入主界面后,选择开始游戏。
(2)开始游戏后,一方开始下棋。
(3)再由另一方下棋
(4)判断输赢。
(5)玩家选择结束游戏时,结束游戏。
第
3.1
程序主要实现的功能如下所述:
int CheckWin(int x,int y); //判断赢棋
char board[13][13];
int x; //下棋的横坐标
int y; //下棋的列坐标
int count; //计数判断是否满
int a; //判断谁落子
};
//////////////////////////////////////
};
if(count==MAX*MAX)
{
cout<<"平局!"<<endl;
break;
}
a=0;
}
}
}
////////////////////////////////////////////////////////////////////////////////////
void wuziqi::InitialBoard()//初始化棋盘,将所用的位置设置为“”
该设计通过对“五子棋人人对战”游戏的编写对所学知识复习巩固。程序设计过程中,先对问题进行了全面分析,将“五子棋人人对战”划分成几个子问题后,逐步细化,最终归结成一个个函数的实现。
第
2.1
2.1.1
设计一个五子棋,能实现人人对战。(棋盘大小为13X13)
2.1.2
独立地利用所学的C++程序设计和Visaul C++6.0编程环境编写程序。
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<<"○";
void PlayEplain(); //游戏说明
void PrintBoard(); //打印初始棋盘
void InitialBoard(); //初始化棋盘
void PlayChess(); //开始下棋
wuziqi(); //初始化a和count,a是交换下棋,count记录棋盘是否下满
private:
PrintBoard();
continue;
}
}
else
{
system("cls");
cout<<"玩家○输入位置超出范围,请重新输入!"<<endl;
//PrintBoard1();
PrintBoard();
continue;
}
if(CheckWin(x,y)==1) //判断输赢
{
cout<<"恭喜玩家○获得胜利!"<<endl<<endl;
int a; //判断谁落子
};
4.2.2
Voidwuziqi::InitialBoard()//初始化棋盘,将所用的位置设置为空格
for(i=1;i<MXA;i++)
{
for(i=1;i<MXA;i++)
{将所有下棋的格线设为空格}
}
Voidwuziqi::PrintBoard()///打印棋盘
利用制表符打印棋盘(┏┳┓┣╋┫┛┻┗)
{
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))
PrintBoard();
continue;
}
}
else
{
system("cls");
cout<<"玩家●输入位置超出范围,请重新输入!"<<endl;
PrintBoard();
continue;
}
if(CheckWin(x,y)==-1)
{
cout<<"恭喜玩家●获得胜利!"<<endl;
break;
///////////////////////最开始时的棋盘///////////////////
/*void wuziqi::PrintBoard()
{
cout<<endl;
cout<<"*-*-*-*-*-*-*-*-*-*-*-*-*-*五子棋棋盘*-*-*-*-*-*-*-*-*-*-*-*-*"<<endl;
break;
};
if(count==MAX*MAX) //判断是否下满
{
cout<<"平局!"<<endl;
break;
}
a=1;
}
//玩家●输入和玩家○输入一样
else if(a==1)
{
cout<<"请玩家●输入下棋位置!"<<endl;
cout<<"请输入行坐标:";
cin>>x;
cout<<"请输入列坐标:";
(1)启动程序,出现主界面。
(2)显示棋盘。
(3)选择开始游戏。
(4)有一方开始下棋,并判断下棋是否合理。
(5)判断输赢。
(6)有另一方开始下棋,并判断下棋是否合理。
(7)判断输赢。
(8)选择是否继续。
(9)游戏结束后,退出游戏。
3.2
程序的结构如下图所示:
图3.2程序结构
3.3
根据游戏规则及其结构图,画出如下程序基本流程图:
}
else
cout<<"○";
}
else if(board[i][j]=='X')
if(j==1)
{
cout<<setw(20)<<i<<"●";
}
else
cout<<"●";
else
{
if((i==1)&&(j==1))
{
cout<<setw(20)<<"1"<<"┏";
}
else if((i==MAX)&&(j==1))
int i,j,k;
system("color 0A");
cout<<" ";
for(k=0;k<=MAX;k++)
4.2
4.2.1
class wuziqi
{
public:
void MainForm(); //显示主菜单
void PlayEplain(); //游戏说明
void PrintBoard(); //打印初始棋盘
void InitialBoard(); //初始化棋盘
void PlayChess(); //开始下棋
{
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]==' '就可以下棋
第
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++程序设计》这门课程有了更深一步的了解。它是计算机程序设计的重要技术。同时也使我知道,要学好这门课程,仅学习书本上的知识是不够的,还要有较强的实践能力。因为我们学习知识就是为了实践。而只有多实践,多编写程序,才能更好的理解与掌握书本上的东西。另外,在课程设计期间,让自己的思维变得活跃,也会看懂,学明白程序问题,总之,受益匪浅。
{
for(int i=0;i<14;i++)
{
for(int j=0;j<14;j++)
{
board[i][j]=' ';
}
}
}
void wuziqi::PrintBoard()///打印棋盘
{
cout<<endl;
cout<<"*-*-*-*-*-*-*-*-*-*-*-*-*-*五子棋棋盘*-*-*-*-*-*-*-*-*-*-*-*-*"<<endl;
参考文献:
C++程序设计(第8版)(美)Walter Savitch清华大学出版社
附录:
#include<iostream>
#include <iomanip> //setw(3)
using namespace std;
const int MAX=13;
class wuziqi
{
public:
void MainForm(); //显示主菜单
//游戏说明
void PrintBoard();
//打印初始棋盘
void InitialBoard();
//初始化棋盘
void PlayChess();
//开始下棋
wuziqi();
//初始化a和count,a是交换下棋,count记录棋盘是否下满
int CheckWin(int x,int y)
; //判断赢棋
continue;返回去继续输入。
}
}
如果输入是否越界
{
cout<<"输入位置超出范围,请重新输入!"<<endl;
PrintBoard();打印棋盘
返回重新输入
}
4.2.5
int CheckWin(int x,int y);//判断赢棋
当一方有五个棋子连成线时赢,用-1和1判断输赢,当棋盘满是为平局。
{
board[x][y]='O';
// PrintBoard1();
PrintBoard();
count++;
}
else //如果board[x][y]是否已经有棋子
{
system("cls");
cout<<"玩家○输入错误,此位置已经有棋子了,请重新输入!"<<endl;
//PrintBoard1();
{
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;
}
}
4.2.3
void PlayChess();//开始下棋
由a的值决定下棋方
If(a==0)
一方下棋
Else
另一方下棋
用坐标决定下棋位置
4.2.4
如果输入是否越界
{
如果board[x][y]=='空格'就可以下棋
{
board[x][y]设为○}
如果board[x][y]是否已经有棋子
{
输出"输入错误,此位置已经有棋子了,请重新输入!"<<endl;
wuziqi(); //初始化a和count,a是交换下棋,count记录棋盘是否下满
private:
int CheckWin(int x,int y); //判断赢棋
char board[13][13];
int x; //下棋的横坐标
int y; //下棋的列坐标
int count; //计数判断是否满