《语言程序设计》课程设计报告五子棋.docx
- 文档编号:9757873
- 上传时间:2023-02-06
- 格式:DOCX
- 页数:11
- 大小:16.46KB
《语言程序设计》课程设计报告五子棋.docx
《《语言程序设计》课程设计报告五子棋.docx》由会员分享,可在线阅读,更多相关《《语言程序设计》课程设计报告五子棋.docx(11页珍藏版)》请在冰豆网上搜索。
《语言程序设计》课程设计报告五子棋
C++语言程序设计
课程设计报告
课程:
C++语言程序设计
题目:
五子棋
年级:
专业:
学号:
姓名:
指导教师:
江苏师范大学数学与统计学院
【摘要】
五子棋是我国古代的、传统的黑白棋种之一。
五子棋不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。
本游戏是以C++语言作为开发工具,运行环境VisualC++6.0,通过构造函数绘制棋谱,以及落子函数、判断函数,实现双人对弈的功能。
【关键词】五子棋、游戏、人人对战、C++
【引言】
五子棋是起源于中国古代的传统黑白棋种之一。
现代五子棋日文称之为“连珠”,英译为“Renju”,英文称之为“Gobang”或“FIR”(Five?
in?
a?
Row的缩写),亦有“连五子”、“五子连”、“串珠”、“五目”、“五目碰”、“五格”等多种称谓。
?
五子棋不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。
五子棋既有现代休闲的明显特征“短、平、快”,又有古典哲学的高深学问“阴阳易理”;它既有简单易学的特性,为人民群众所喜闻乐见,又有深奥的技巧和高水平的国际性比赛;它的棋文化源渊流长,具有东方的神秘和西方的直观;既有“场”的概念,亦有“点”的连接。
它是中西文化的交流点,是古今哲理的结晶。
本游戏是以C++语言作为开发工具,运行环境VisualC++6.0,通过构造函数绘制棋谱,以及落子函数、判断函数,实现双人对弈的功能。
【设计思路】
第一步:
绘制棋谱
第二步:
对战双方落子
第三步:
判断是否有五子连珠
第四步:
重复第一、二、三步直至出现五子连珠
【设计过程】
通过构造函数实现棋盘,编写落子函数实现玩家落子,通过判断函数判断是否有五子连珠的结果。
【设计结果】
图1-1
初始画面
图1-2
双方落子
图1-3
白棋胜出
【设计总结】
本五子棋游戏是一种简单的小程序,没有图形界面以及复杂的人机、网络对战,但即便如此我们也可以在娱乐中感受到C++编程的奇妙之处。
附录:
#include
#include
usingnamespacestd;
classMyGobang
{
public:
MyGobang();
voidprintBoard();
voidgetPointXY();
voidgetPointMN();
boolisFirstWin();
boolisSecondWin();
private:
intx,y,m,n,num_xy,num_mn;
charboard[20][20];
};
MyGobang:
:
MyGobang()//构造函数实现棋谱
{
num_xy=0;
num_mn=0;
for(inti=0;i<20;i++)
for(intj=0;j<20;j++)
board[i][j]='.';
}
voidMyGobang:
:
printBoard()//刷新棋谱
{
for(inti=0;i<=20;i++)
{
if(i<10)cout<
elsecout<
}
cout< for(intj=1;j<=20;j++) { if(j<10) { cout< for(intk=0;k<20;k++) cout< cout< } else { cout< for(intk=0;k<20;k++) cout< cout< } } } voidMyGobang: : getPointXY()//第一人落子函数 { cout<<"请输入第"< "; cin>>x>>y; cout< while(x<1||x>20||y<1||y>20) { cout<<"出界,请重新输入: "; cin>>x>>y; cout< } while(board[y-1][x-1]! ='.') { cout<<"该位置已被占,重新输入: "; cin>>x>>y;cout< while(x<1||x>20||y<1||y>20) { cout<<"出界,请重新输入: "; cin>>x>>y;cout< } } board[y-1][x-1]='o'; num_xy++; } boolMyGobang: : isFirstWin()//判断第一人是否赢 { intnum1=1,num2=1,num3=1,num4=1; inti,j; //这里是判断X坐标向右的'0'连续数 for(i=x;i<=x+3&&i<20;i++) { if(board[y-1][i]=='o')num1++; elsebreak; } //这里是判断X坐标向左的'0'连续数 for(i=x-2;0<=i&&i>=x-5;i--) { if(board[y-1][i]=='o')num1++; elsebreak; } //这里是判断Y坐标向下的'0'连续数 for(j=y;j<20&&j<=y+3;j++) { if(board[j][x-1]=='o')num2++; elsebreak; } //这里是判断Y坐标向上的'0'连续数 for(j=y-2;j>=0&&j>=y-5;j--) { if(board[j][x-1]=='o')num2++; elsebreak; } //这里是判断右斜上'0'连续数 for(i=x,j=y;i<20&&j<20&&i<=x+3&&j<=y+3;i++,j++) { if(board[j][i]=='o')num3++; elsebreak; } //这里是判断左斜下'0'连续数 for(i=x-2,j=y-2;i>=0&&j>=0&&i>=i-5&&j>=5;i--,j--) { if(board[j][i]=='o')num3++; elsebreak; } //这里是判断左斜上'0'连续数 for(i=x-2,j=y;i>=0&&j<20&&i>=x-5&&j<=y+3;i--,j++) { if(board[j][i]=='o')num4++; elsebreak; } //这里是判断右斜下'0'连续数 for(i=x,j=y-2;i<20&&j>=0&&i<=x+3&&j>=y-5;i++,j--) { if(board[j][i]=='o')num4++; elsebreak; } if(num1==5||num2==5||num3==5||num4==5)return1; //这里总结X,Y,左斜,右斜的'0'连续数,有等于五的就直接返回1否则返回0 elsereturn0; } voidMyGobang: : getPointMN()//第二人落子函数 { cout<<"请输入第"< "; cin>>m>>n; cout< while(m<1||m>20||n<1||n>20) { cout<<"出界,请重新输入: "; cin>>m>>n; cout< } while(board[n-1][m-1]! ='.') { cout<<"该位置已被占,重新输入: "; cin>>m>>n; cout< while(m<1||m>20||n<1||n>20) { cout<<"出界,请重新输入: "; cin>>m>>n;cout< } } board[n-1][m-1]='x';num_mn++; } boolMyGobang: : isSecondWin()//第二人是否赢 { intnum1=1,num2=1,num3=1,num4=1; inti,j; for(i=m;i<=m+3&&i<20;i++) { if(board[n-1][i]=='x')num1++; elsebreak; } for(i=m-2;0<=i&&i>=m-5;i--) { if(board[n-1][i]=='x')num1++; elsebreak; } for(j=n;j<20&&j<=n+3;j++) { if(board[j][m-1]=='x')num2++; elsebreak; } for(j=n-2;j>=0&&j>=n-5;j--) { if(board[j][m-1]=='x')num2++; elsebreak; } for(i=m,j=n;i<20&&j<20&&i<=m+3&&j<=n+3;i++,j++) { if(board[j][i]=='x')num3++; elsebreak; } for(i=m-2,j=n-2;i>=0&&j>=0&&i>=i-5&&j>=5;i--,j--) { if(board[j][i]=='x')num3++; elsebreak; } for(i=m-2,j=n;i>=0&&j<20&&i>=m-5&&j<=n+3;i--,j++) { if(board[j][i]=='x')num4++; elsebreak; } for(i=m,j=n-2;i<20&&j>=0&&i<=m+3&&j>=n-5;i++,j--) { if(board[j][i]=='x')num4++; elsebreak; } if(num1==5||num2==5||num3==5||num4==5)return1; elsereturn0; } intmain() { cout<<"***************五子棋*****************"< MyGobanggobang;gobang.printBoard();//申明MYGobang类的一个对象 for(inti=0;;i++) { gobang.getPointXY();//调用这个函数 gobang.printBoard();//调用绘制棋盘 if(gobang.isFirstWin()! =0)//调用第一人是否赢的函数 { cout<<"*************白棋胜利***************"< break; } gobang.getPointMN(); gobang.printBoard(); if(gobang.isSecondWin()! =0) { cout<<"*************黑棋胜利***************"< break; } } system("pause"); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 课程设计 报告 五子棋