C 五子棋课程设计报告
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
for(int i = 0 ; i <= 20 ; i++) { if(p<10)
{ std::cout << p <<' '; } else
std::cout << p ; p++; } cout << endl; for(i = 0 ; i < 20 ; i++) { if(i>=0)
10
{ q++; if(q<10) std::cout << q <<' '; else std::cout << q;
{ if(qipan[y-1][i] != 'O') break;
11
if(qipan[y-1][i] == 'O') num1++; } for( i = y ; i < y+5 ; i ++) { if(qipan[i][x-1] != 'O') break;
if(qipan[i][x-1] == 'O') num2++; } for(i = y-2; i >= 0 ; i --) { if(qipan[i][x-1] != 'O') break;
getpointmn(); } else if(qipan[n-1][m-1]!='.') { std::cout << "请所下的位置已经有棋子,请重新输入:" <<endl;
getpointmn(); } else if(num_xy+num_mn >= 400) { std::cout << "棋盘已满,平局!" << endl;
exit(0); } else { qipan[n-1][m-1] = '*';
num_mn++; } } 3)菜单界面模块 void five::menu()//进入菜单界面 { char *q=new char[9]; cin>>q; if(strcmp(q,"c"))
five::showqipan(); } 4)输出模块 void five::showqipan() //输出 20 行 20 列的坐标数值 { int p=0,q=0;
{ int num1=1,num2=1,num3=1,num4=1;
for(int i = x ; i < x+5&& x+5<20 ; i ++)
{ if(qipan[y-1][i] != 'O') break;
if(qipan[y-1][i] == 'O') num1++;
}
for(i = x-2; i >= 0 ; i --)
for(int j = 0 ;j < 20 ; j ++) qipan[i][j] = '.';
} }
⑶ 系统工作流程介绍。
7
⑷ 类的介绍: 该类完成了对输入棋子坐标的初始化,通过 for 循环实现了一个 20 行 20 列的坐标,在 公有成员中定义了相应的功能函数 void getpointxy(); //白棋出子及计数 void getpointmn(); //黑棋出子及计数 void showqipan(); //实现 20 行 20 列正方形界面输出 void print(); //输出下一棋盘界面 bool IsxyWin(); //白棋获胜 bool IsmnWin(); //黑棋获胜 void menu();//显示开始菜单界面 (5)各个模块的介绍:
class five {
int x,y,m,n,num_xy,num_mn; char qipan[20][20]; //定义 20 行 20 列的数组 public: five(int X = 0,int Y =0,int M = 0,int N = 0,int Num_xy = 0,int Num_mn = 0) //构造 函数初始化 { x = X; y = Y; m = M; n = N; num_xy = Num_xy; num_mn = Num_mn; for(int i = 0 ; i < 20 ; i ++) //输出 20 行 20 列的棋盘界面 {
exit(0); } else { qipan[y-1][x-1] = 'O';
num_xy++; } }
9
void five::getpointmn() //判断黑棋出子情况及对其计数 { std::cout<<"请分别输入第"<<num_mn+1<<"步黑棋●的横坐标和纵坐标:";
std::cin >> n >> m; if (!(1<=m&&m<=20&&1<=n&&n<=20)) { std::cout << "输入错误,请重新输入:"<<endl ;
if(q<10) std::cout << q <<' '; else std::cout << q; } for(int j = 0 ; j < 20 ; j ++) { std::cout << qipan[i][j]<<' ' ; } std::cout << endl; } } 5)黑白棋输赢的判断,其源代码如下: bool five::IsxyWin()//白棋获胜实现函数
分值 10 分 30 分 30 分 20 分 10 分
得分
成绩: 指导教师签字:
ห้องสมุดไป่ตู้
任务下达日期:12 月 6 日 评定日期:
2
目
录
1.设计目的................................................................. 4 2.设计要求................................................................ 4 3.设计方案 ................................................................4 4.设计内容 ................................................................7 4.1 系统的主要结构和类结构..................................................7 4.2 (2)五子棋类的结构.......................................................7 4.3 ⑶ 系统工作流程介绍.................................................... 7 错误!未定义书 签。 ⑷ 类的介绍.............................................................8 4.5 (5) 各个模块的介绍......................................................8 4.6 (6)程序运行图示........................................................14 5.总结.....................................................................16 参考文献...................................................................17
3
(a) 1.设计目的
(1)加深我对面向对象程序基本的理解和掌握。 (2)熟练掌握基本流程图的绘制。 (3)熟练 visio 的一些操作方法。 (4)能够在调试程序中快速发现并排除程序中的错误。 (5)提高面向对象程序语言解决实际中的问题的能力。
(b) 2.设计要求
五子棋是玩家在游戏棋盘上逐个输入黑子或白子的坐标,因此游戏要求在 DOS 界面生成 一个可供操作的棋盘。通过输入坐标完成对应落子情况,在输入过程中判断落子是否正确、 是否有一方胜利等情况。编写代码可以在 VC6.0 下编译通过。游戏要能实现五子棋游戏的简 单操作。程序中要体现面向对象思想。
1)类的实现:包括对数据成员的赋值和成员函数的初始化还有通过 for 循环实现对 20 行 20 列坐标的定义:源代码如下 class five {
int x,y,m,n,num_xy,num_mn; char qipan[20][20]; //定义 20 行 20 列的数组 public:
8
five(int X = 0,int Y =0,int M = 0,int N = 0,int Num_xy = 0,int Num_mn = 0) // 构造函数初始化 { x = X;
(c) 3.设计方案
(必须包含系统功能说明、用例图和类图)
一、用例图 落子
基于用户的用例图
4
步数用例图
系统用例图
1)输出棋盘界面菜单及图像 2)开始进入控制 3)黑白棋正确输入格式控制 4)判断黑白输赢控制 5)正确计数对羿步数及下一步所要走的棋盘界面
5
二、类图
6
(d) 4.设计内容
⑴本系统的主要结构和类结构 1)五子棋功能实现的主要结构函数 void getpointxy(); //白棋出子函数 void getpointmn(); //黑棋出子函数 void showqipan(); //实现 20 行 20 列正方形界面输出 void print(); //输出下一棋盘界面及计数 bool IsxyWin(); //白棋获胜 bool IsmnWin(); //黑棋获胜 void menu();//显示开始菜单界面 (2)五子棋类的结构
y = Y; m = M; n = N; num_xy = Num_xy; num_mn = Num_mn; for(int i = 0 ; i < 20 ; i ++) //输出 20 行 20 列的棋盘界面 { for(int j = 0 ;j < 20 ; j ++) qipan[i][j] = '.'; } } void getpointxy(); //白棋出子及计数 void getpointmn(); //黑棋出子及计数 void showqipan(); //实现 20 行 20 列正方形界面输出 void print(); //输出下一棋盘界面 bool IsxyWin(); //白棋获胜 bool IsmnWin(); //黑棋获胜 void menu();//显示开始菜单界面 }; 2)白棋和黑棋落子情况的判断的实现,源代码如下: void five::getpointxy() //判断白棋出子情况及对其计数 { std::cout<<"请分别输入第"<<num_xy+1<<"步白棋○的横坐标和纵坐标:"; std::cin >> y >> x; if (!(1<=x&&x<=20&&1<=y&&y<=20)) { std::cout << "输入错误,请重新输入:"<<endl ;
} for(int j = 0 ; j < 20 ; j ++) std::cout << qipan[i][j]<<' ' ; std::cout << endl; } } void five::print() { int p=0,q=0; for(int i = 0 ; i <= 20 ; i++) { if(p<10) { std::cout << p <<' '; } else std::cout << p ; p++; } std::cout << endl; for(i = 0 ; i < 20 ; i++) { if(i>=0) { q++;
getpointxy(); } else if(qipan[y-1][x-1] != '.' ) { std::cout << "请所下的位置已经有棋子,请重新输入:" <<endl;
getpointxy(); } else if(num_xy+num_mn >= 400) { std::cout << "棋盘已满,平局!" << endl;
福建农林大学计算机与信息学院
课程设计报告
课程名称: 课程设计题目:
姓 名: 系:
专 业: 年 级: 学 号: 指导教师: 职 称:
面向对象程序设计课程设计 五子棋
计算机 软件工程
年月日
福建农林大学计算机与信息学院计算机类 课程设计报告结果评定
评语: 评分项目 课程设计报告符合规范 类图、用例图、系统框图合理 主要技术线路正确 设计报告条理清晰、重点突出 有一定创新性、难易程度
{ std::cout << p <<' '; } else
std::cout << p ; p++; } cout << endl; for(i = 0 ; i < 20 ; i++) { if(i>=0)
10
{ q++; if(q<10) std::cout << q <<' '; else std::cout << q;
{ if(qipan[y-1][i] != 'O') break;
11
if(qipan[y-1][i] == 'O') num1++; } for( i = y ; i < y+5 ; i ++) { if(qipan[i][x-1] != 'O') break;
if(qipan[i][x-1] == 'O') num2++; } for(i = y-2; i >= 0 ; i --) { if(qipan[i][x-1] != 'O') break;
getpointmn(); } else if(qipan[n-1][m-1]!='.') { std::cout << "请所下的位置已经有棋子,请重新输入:" <<endl;
getpointmn(); } else if(num_xy+num_mn >= 400) { std::cout << "棋盘已满,平局!" << endl;
exit(0); } else { qipan[n-1][m-1] = '*';
num_mn++; } } 3)菜单界面模块 void five::menu()//进入菜单界面 { char *q=new char[9]; cin>>q; if(strcmp(q,"c"))
five::showqipan(); } 4)输出模块 void five::showqipan() //输出 20 行 20 列的坐标数值 { int p=0,q=0;
{ int num1=1,num2=1,num3=1,num4=1;
for(int i = x ; i < x+5&& x+5<20 ; i ++)
{ if(qipan[y-1][i] != 'O') break;
if(qipan[y-1][i] == 'O') num1++;
}
for(i = x-2; i >= 0 ; i --)
for(int j = 0 ;j < 20 ; j ++) qipan[i][j] = '.';
} }
⑶ 系统工作流程介绍。
7
⑷ 类的介绍: 该类完成了对输入棋子坐标的初始化,通过 for 循环实现了一个 20 行 20 列的坐标,在 公有成员中定义了相应的功能函数 void getpointxy(); //白棋出子及计数 void getpointmn(); //黑棋出子及计数 void showqipan(); //实现 20 行 20 列正方形界面输出 void print(); //输出下一棋盘界面 bool IsxyWin(); //白棋获胜 bool IsmnWin(); //黑棋获胜 void menu();//显示开始菜单界面 (5)各个模块的介绍:
class five {
int x,y,m,n,num_xy,num_mn; char qipan[20][20]; //定义 20 行 20 列的数组 public: five(int X = 0,int Y =0,int M = 0,int N = 0,int Num_xy = 0,int Num_mn = 0) //构造 函数初始化 { x = X; y = Y; m = M; n = N; num_xy = Num_xy; num_mn = Num_mn; for(int i = 0 ; i < 20 ; i ++) //输出 20 行 20 列的棋盘界面 {
exit(0); } else { qipan[y-1][x-1] = 'O';
num_xy++; } }
9
void five::getpointmn() //判断黑棋出子情况及对其计数 { std::cout<<"请分别输入第"<<num_mn+1<<"步黑棋●的横坐标和纵坐标:";
std::cin >> n >> m; if (!(1<=m&&m<=20&&1<=n&&n<=20)) { std::cout << "输入错误,请重新输入:"<<endl ;
if(q<10) std::cout << q <<' '; else std::cout << q; } for(int j = 0 ; j < 20 ; j ++) { std::cout << qipan[i][j]<<' ' ; } std::cout << endl; } } 5)黑白棋输赢的判断,其源代码如下: bool five::IsxyWin()//白棋获胜实现函数
分值 10 分 30 分 30 分 20 分 10 分
得分
成绩: 指导教师签字:
ห้องสมุดไป่ตู้
任务下达日期:12 月 6 日 评定日期:
2
目
录
1.设计目的................................................................. 4 2.设计要求................................................................ 4 3.设计方案 ................................................................4 4.设计内容 ................................................................7 4.1 系统的主要结构和类结构..................................................7 4.2 (2)五子棋类的结构.......................................................7 4.3 ⑶ 系统工作流程介绍.................................................... 7 错误!未定义书 签。 ⑷ 类的介绍.............................................................8 4.5 (5) 各个模块的介绍......................................................8 4.6 (6)程序运行图示........................................................14 5.总结.....................................................................16 参考文献...................................................................17
3
(a) 1.设计目的
(1)加深我对面向对象程序基本的理解和掌握。 (2)熟练掌握基本流程图的绘制。 (3)熟练 visio 的一些操作方法。 (4)能够在调试程序中快速发现并排除程序中的错误。 (5)提高面向对象程序语言解决实际中的问题的能力。
(b) 2.设计要求
五子棋是玩家在游戏棋盘上逐个输入黑子或白子的坐标,因此游戏要求在 DOS 界面生成 一个可供操作的棋盘。通过输入坐标完成对应落子情况,在输入过程中判断落子是否正确、 是否有一方胜利等情况。编写代码可以在 VC6.0 下编译通过。游戏要能实现五子棋游戏的简 单操作。程序中要体现面向对象思想。
1)类的实现:包括对数据成员的赋值和成员函数的初始化还有通过 for 循环实现对 20 行 20 列坐标的定义:源代码如下 class five {
int x,y,m,n,num_xy,num_mn; char qipan[20][20]; //定义 20 行 20 列的数组 public:
8
five(int X = 0,int Y =0,int M = 0,int N = 0,int Num_xy = 0,int Num_mn = 0) // 构造函数初始化 { x = X;
(c) 3.设计方案
(必须包含系统功能说明、用例图和类图)
一、用例图 落子
基于用户的用例图
4
步数用例图
系统用例图
1)输出棋盘界面菜单及图像 2)开始进入控制 3)黑白棋正确输入格式控制 4)判断黑白输赢控制 5)正确计数对羿步数及下一步所要走的棋盘界面
5
二、类图
6
(d) 4.设计内容
⑴本系统的主要结构和类结构 1)五子棋功能实现的主要结构函数 void getpointxy(); //白棋出子函数 void getpointmn(); //黑棋出子函数 void showqipan(); //实现 20 行 20 列正方形界面输出 void print(); //输出下一棋盘界面及计数 bool IsxyWin(); //白棋获胜 bool IsmnWin(); //黑棋获胜 void menu();//显示开始菜单界面 (2)五子棋类的结构
y = Y; m = M; n = N; num_xy = Num_xy; num_mn = Num_mn; for(int i = 0 ; i < 20 ; i ++) //输出 20 行 20 列的棋盘界面 { for(int j = 0 ;j < 20 ; j ++) qipan[i][j] = '.'; } } void getpointxy(); //白棋出子及计数 void getpointmn(); //黑棋出子及计数 void showqipan(); //实现 20 行 20 列正方形界面输出 void print(); //输出下一棋盘界面 bool IsxyWin(); //白棋获胜 bool IsmnWin(); //黑棋获胜 void menu();//显示开始菜单界面 }; 2)白棋和黑棋落子情况的判断的实现,源代码如下: void five::getpointxy() //判断白棋出子情况及对其计数 { std::cout<<"请分别输入第"<<num_xy+1<<"步白棋○的横坐标和纵坐标:"; std::cin >> y >> x; if (!(1<=x&&x<=20&&1<=y&&y<=20)) { std::cout << "输入错误,请重新输入:"<<endl ;
} for(int j = 0 ; j < 20 ; j ++) std::cout << qipan[i][j]<<' ' ; std::cout << endl; } } void five::print() { int p=0,q=0; for(int i = 0 ; i <= 20 ; i++) { if(p<10) { std::cout << p <<' '; } else std::cout << p ; p++; } std::cout << endl; for(i = 0 ; i < 20 ; i++) { if(i>=0) { q++;
getpointxy(); } else if(qipan[y-1][x-1] != '.' ) { std::cout << "请所下的位置已经有棋子,请重新输入:" <<endl;
getpointxy(); } else if(num_xy+num_mn >= 400) { std::cout << "棋盘已满,平局!" << endl;
福建农林大学计算机与信息学院
课程设计报告
课程名称: 课程设计题目:
姓 名: 系:
专 业: 年 级: 学 号: 指导教师: 职 称:
面向对象程序设计课程设计 五子棋
计算机 软件工程
年月日
福建农林大学计算机与信息学院计算机类 课程设计报告结果评定
评语: 评分项目 课程设计报告符合规范 类图、用例图、系统框图合理 主要技术线路正确 设计报告条理清晰、重点突出 有一定创新性、难易程度