五子棋游戏的论文及源代码.docx

上传人:b****5 文档编号:7726168 上传时间:2023-01-26 格式:DOCX 页数:37 大小:350.09KB
下载 相关 举报
五子棋游戏的论文及源代码.docx_第1页
第1页 / 共37页
五子棋游戏的论文及源代码.docx_第2页
第2页 / 共37页
五子棋游戏的论文及源代码.docx_第3页
第3页 / 共37页
五子棋游戏的论文及源代码.docx_第4页
第4页 / 共37页
五子棋游戏的论文及源代码.docx_第5页
第5页 / 共37页
点击查看更多>>
下载资源
资源描述

五子棋游戏的论文及源代码.docx

《五子棋游戏的论文及源代码.docx》由会员分享,可在线阅读,更多相关《五子棋游戏的论文及源代码.docx(37页珍藏版)》请在冰豆网上搜索。

五子棋游戏的论文及源代码.docx

五子棋游戏的论文及源代码

 

本科生课程论文

 

论文题目五子棋游戏

 

五子棋游戏

【摘要】

为了设计人人对弈模式的五子棋游戏系统,采用了C语言函数模块化程序设计方法,利用VisualC++6.0编译器运行游戏,实现一方执白棋,一方执黑棋,通过屏幕上的文字提示,轮流走棋,最先使五子相连一方获胜的人人对弈功能。

通过本程序的训练,加深对C语言的了解,掌握五子棋游戏开发的基本原理,从而为以后的程序开发奠定基础。

【关键字】五子棋函数

设计目的:

本程序旨在进一步训练学生游戏开发的技巧,掌握C语言图形模式下的编程。

本程序设计很多图形函数,包括坐标定位;颜色设置(背景色和文本颜色设置)、线条颜色、填充颜色;直线风格、文本风格、填充风格;画线、画圆、画矩形函数;PC扬声器的打开、延迟、关闭;图形系统的初始化和关闭;图形屏幕和文字屏幕的清除;从键盘获取键值等。

功能:

实现界面的初始化功能、下棋功能、胜负判断功能和帮助功能。

1)初始化功能。

程序初始化屏幕和棋盘,默认Player1先行。

2)实现下棋功能。

程序能实现下棋操作,在下棋过程中能随时退出。

3)胜负判断。

程序能对下棋的结果进行判断,分出胜负,并显示获胜信息。

4)显示帮助信息。

程序能提示玩家轮到哪方下棋了。

问题分析:

首先要实现五子棋的行棋功能,在程序中可以通过坐标来定位棋子的位置,用不同的字符表示黑白棋子,并通过变量的交替实现黑白棋子的交替显示。

另一个难点就是对于胜负的判断,这需要通过循环函数的嵌套使用,难点在于逻辑调理的把握,循环之间的对应关系。

还有一个难点就是在游戏中能随时返回主菜单,这需要一个选择结构来实现,将主菜单的程序编入主函数,在得到特定指令时返回主函数,从而返回主菜单。

下棋过程中对于不断地输入坐标,可以用一个死循环来是实现,在特定的条件下退出循环,返回主函数。

程序设计:

一、主要函数介绍

本程序主要用到了main ()[1]、startGame()、printState()、judge()、help()、aboutThanks()等函数。

主函数中设计成死循环,再循环过程中通过选择调用其它函数。

被调用的函数运行完后再次返回到主函数中。

1、主函数main()

运行主函数,首先调用system("colore0")[2]函数,改变运行界面的前景色和背景色。

然后进入一个死循环while

(1),再循环中输出主菜单的内容,包括标题、开始游戏、游戏帮助、游戏鸣谢、退出程序、请选择等字样。

然后,调用scanf()函数,从键盘上获得一个数值付给变量i,接着进行健壮性处理。

最后调用switch语句,通过选择调用其它函数。

2、startGame()函数

此函数为自定义函数,首先用一个for语句实现19*19的棋盘的初步绘制,将19*19的坐标全绘制成“*”状。

接着调用printState()函数,实现当前棋盘的显示。

然后进入下棋的循环,提示下子一方并调用fflush(stdin)[2]函数清除缓存。

然后,通过switch语句,根据从键盘上得到的值做出相应的判断,实现退格键悔棋、Esc键返回主菜单、A-S输入坐标、其他输入错误。

接着判断该坐标是否有子,有子提示重新指定坐标,否则,该位置显示相应的棋子。

除第一次下子前外,下一步将调用judge()函数,来判断是否有一方获胜。

判断结束后再次调用printState()显示当前棋盘。

最后交换期权。

此函数的核心代码如下:

switch(t=getch())

{

case8:

{//退格键悔棋

i=m-'A';

j=n-'A';

state[i][j]='*';

printState();

printf("\n\t提示:

%s方悔棋!

\n\n",player?

"白":

"黑");

player=!

player;

continue;

}break;

case27:

{system("cls");return;}break;//Esc键返回主菜单

case65:

{n=t;printf("%C\n",n);getch();}break;//纵坐标输入

………………

case115:

{n=t;printf("%C\n",n);n=n-32;getch();}break;

default:

printf("\t\t请输入属于或正确的口令。

\n");continue;

}

i=m-'A';

j=n-'A';

if(state[i][j]!

='*')//判断是否有子

{

printf("\t提示:

该位置已经有子,请重新指定坐标!

");

continue;

}

c=player?

4:

79;//为棋子赋值

state[i][j]=c;

if(a!

=0)judge();//判断胜负

a++;

printState();//显示当前棋盘

player=!

player;//交换棋权

3、printState()函数

此函数为自定义函数,主要实现当前棋盘的输出,首先定义字符变量,接着清除屏幕,然后输出周围的字母和中心的“*”字符。

核心代码为:

for(i=0;i

{

printf("%c",p+i);//输出第一行的所有字符

}

printf("\n\t");//换行

for(i=0;i

{

printf("%c",p+i);//输出行坐标(左边的字母)

for(j=0;j

{

printf("%c",state[i][j]);//输出该行的内容

}

printf("%c\n\t",p+i);//输出右侧的坐标

}

printf("");

for(i=0;i

{

printf("%c",p+i);//输出最后一行的所有字符

}

4、judge()函数

此函数为自定义函数,主要实现对棋局胜负的判断。

首先通过for语句的嵌套实用实现纵向的判断,判断纵向是否形成五子相连的情况。

其核心代码为:

if(state[i+1][j]!

=state[i][j])//纵向判断

{

if(state[i-1][j]!

=state[i][j]);

else

if(state[i-2][j]!

=state[i][j]);

else

if(state[i-3][j]!

=state[i][j]);

else

if(state[i-4][j]!

=state[i][j]);

else

{

printState();

printf("\n\t提示:

%s方胜!

\n\n",player?

"黑":

"白");

printf("\t\t\t按回车键确认结果并返回游戏\n\n");

while

(1)

{

switch(t=getch())

{

case13:

{system("cls");return;}break;

default:

printf("\t\t输入错误,请输入正确的口令。

\n");continue;

}

}

}

}

else

………………

5、help()函数

此函数为自定义函数,主要实现输出帮助信息,包括游戏说明、基本规则、神父判断的说明。

核心代码为:

system("cls")[2];

printf("\n\n\t游戏说明:

\n\n");

………………

printf("\t\t\t按Esc键返回主菜单\n\n");

while

(1)

{

switch(t=getch())

{

case27:

{system("cls");return;}break;

default:

printf("\t\t输入错误,请输入正确的口令。

\n");continue;

}

}

6、aboutThanks()函数

此函数为自定义函数,主要实现输出鸣谢信息。

其核心代码为:

system("cls");

printf("\n\n\n\t鸣谢:

\n\n\n\t\t1.我的C语言老师:

XXX老师。

");

………………

while

(1)

{

switch(t=getch())

{

case27:

{system("cls");return;}break;

default:

printf("\t\t输入错误,请输入正确的口令。

\n");continue;

}

二、程序框图

三、程序截图

1、主菜单界面:

2、游戏界面:

3、帮助界面:

4、鸣谢界面:

5、退出界面:

6、悔棋提示界面:

7、输入错误提醒界面:

8、获胜提示界面:

总结:

程序中多次用到循环语句的嵌套使用,难点在于对逻辑条理性的把握和对五子棋规则的正确理解。

为了实现在游戏中随时能够返回主菜单,先后试验了scanf()、getchar()、getch()函数,scanf()函数只能从键盘上得到字符,但不能识别Esc等键。

getchar()也不能显示Esc等键,无法对输入的Esc键作出判断,并且需要按回车后再给出返回值。

而getch()可以直接返回键盘的键值,但是并不在屏幕上显示。

为了解决这一问题,将getch()的值先付给一个变量,再用printf()语句输出变量。

本次设计的一大收获就是对程序结构重要性的认识,一个结构清晰的程序,对于程序的调试、改错、阅读等都有着重要意义,可以让程序员省去不必要的麻烦。

另外,程序的注释也很重要,注释不仅仅是给读程序的人看,也是给写程序的人看的。

当程序要写好多页时,有时程序员也会忘记之前的程序是实现什么功能的,所以注释是相当必要的。

通过本次设计,对C语言有了更近一步的认识,对以后进一步学习具有重要意义。

参考文献:

[1]谭浩强C程序设计(第四版)清华大学出版社

[2]XX搜索

课程论文成绩评定表

学生姓名

XXX

专业班级

XXXXX

论文题目

五子棋游戏

指导教师评语及意见:

 

成绩:

指导教师签字

年月日

附件:

源代码

#include

#include//system()的头文件

#defineN19

#include//getch()的头文件

inta=0,t,m,n,i,j,k,size=N;

intplayer=1;//当前是黑方下子player=1

charstate[N][N];

charc;//用来存放显示黑白子的变量

voidstartGame();

voidprintState();

voidjudge();

voidhelp();

voidaboutThanks();

intmain()

{

system("colore0");//界面颜色

while

(1)

{

printf("\n\n\t\t\t---高级语言课程设计xxxxx---\n\n");

printf("\t\t\t\t五子棋游戏\n\n\n");

printf("\t\t\t\t1.开始游戏。

\n\n");

printf("\t\t\t\t2.游戏帮助。

\n\n");

printf("\t\t\t\t3.游戏鸣谢。

\n\n");

printf("\t\t\t\t4.退出程序。

\n\n");

printf("\n\t\t\t请选择:

");

L:

k=scanf("%d",&i);

if(k==0)//遇到异常,做健壮性处理...

{

printf("\n\t提示:

输入非格式选项!

\n\t请重新输入1-4的整数:

");

fflush(stdin);//清空缓冲内存区

gotoL;

}

switch(i)//选择选项

{

case1:

startGame();break;

case2:

help();break;

case3:

aboutThanks();break;

case4:

printf("\n\t\t\t请按任意键安全退出\n\t\t\t");

return0;//结束整个程序。

default:

printf("\t温馨提示:

无此选项\n");break;

}

}

}

voidstartGame()//开始游戏

{

for(i=0;i

{

for(j=0;j

{

state[i][j]='*';

}

}

printState();//显示棋盘

while

(1)

{

printf("\n\t请%s方下子:

",player?

"黑":

"白");

fflush(stdin);

switch(t=getch())

{

case8:

{//退格键悔棋

i=m-'A';

j=n-'A';

state[i][j]='*';

printState();

printf("\n\t提示:

%s方悔棋!

\n\n",player?

"白":

"黑");

player=!

player;

continue;

}break;

case27:

{system("cls");return;}break;//Esc键返回主菜单

case65:

{m=t;printf("\t%C",m);}break;//横坐标输入

case66:

{m=t;printf("\t%C",m);}break;

case67:

{m=t;printf("\t%C",m);}break;

case68:

{m=t;printf("\t%C",m);}break;

case69:

{m=t;printf("\t%C",m);}break;

case70:

{m=t;printf("\t%C",m);}break;

case71:

{m=t;printf("\t%C",m);}break;

case72:

{m=t;printf("\t%C",m);}break;

case73:

{m=t;printf("\t%C",m);}break;

case74:

{m=t;printf("\t%C",m);}break;

case75:

{m=t;printf("\t%C",m);}break;

case76:

{m=t;printf("\t%C",m);}break;

case78:

{m=t;printf("\t%C",m);}break;

case79:

{m=t;printf("\t%C",m);}break;

case80:

{m=t;printf("\t%C",m);}break;

case81:

{m=t;printf("\t%C",m);}break;

case82:

{m=t;printf("\t%C",m);}break;

case83:

{m=t;printf("\t%C",m);}break;

case97:

{m=t;printf("\t%C",m);m=m-32;}break;

case98:

{m=t;printf("\t%C",m);m=m-32;}break;

case99:

{m=t;printf("\t%C",m);m=m-32;}break;

case100:

{m=t;printf("\t%C",m);m=m-32;}break;

case101:

{m=t;printf("\t%C",m);m=m-32;}break;

case102:

{m=t;printf("\t%C",m);m=m-32;}break;

case103:

{m=t;printf("\t%C",m);m=m-32;}break;

case104:

{m=t;printf("\t%C",m);m=m-32;}break;

case105:

{m=t;printf("\t%C",m);m=m-32;}break;

case106:

{m=t;printf("\t%C",m);m=m-32;}break;

case107:

{m=t;printf("\t%C",m);m=m-32;}break;

case108:

{m=t;printf("\t%C",m);m=m-32;}break;

case109:

{m=t;printf("\t%C",m);m=m-32;}break;

case110:

{m=t;printf("\t%C",m);m=m-32;}break;

case111:

{m=t;printf("\t%C",m);m=m-32;}break;

case112:

{m=t;printf("\t%C",m);m=m-32;}break;

case113:

{m=t;printf("\t%C",m);m=m-32;}break;

case114:

{m=t;printf("\t%C",m);m=m-32;}break;

case115:

{m=t;printf("\t%C",m);m=m-32;}break;

default:

printf("\t\t请输入属于或正确的口令。

\n");continue;

}

switch(t=getch())

{

case8:

{//退格键悔棋

i=m-'A';

j=n-'A';

state[i][j]='*';

printState();

printf("\n\t提示:

%s方悔棋!

\n\n",player?

"白":

"黑");

player=!

player;

continue;

}break;

case27:

{system("cls");return;}break;//Esc键返回主菜单

case65:

{n=t;printf("%C\n",n);getch();}break;//纵坐标输入

case66:

{n=t;printf("%C\n",n);getch();}break;

case67:

{n=t;printf("%C\n",n);getch();}break;

case68:

{n=t;printf("%C\n",n);getch();}break;

case69:

{n=t;printf("%C\n",n);getch();}break;

case70:

{n=t;printf("%C\n",n);getch();}break;

case71:

{n=t;printf("%C\n",n);getch();}break;

case72:

{n=t;printf("%C\n",n);getch();}break;

case73:

{n=t;printf("%C\n",n);getch();}break;

case74:

{n=t;printf("%C\n",n);getch();}break;

case75:

{n=t;printf("%C\n",n);getch();}break;

case76:

{n=t;printf("%C\n",n);getch();}break;

case78:

{n=t;printf("%C\n",n);getch();}break;

case79:

{n=t;printf("%C\n",n);getch();}break;

case80:

{n=t;printf("%C\n",n);getch();}break;

case81:

{n=t;printf("%C\n",n);getch();}break;

case82:

{n=t;printf("%C\n",n);getch();}break;

case83:

{n=t;printf("%C\n",n);getch();}break;

case97:

{n=t;printf("%C\n",n);n=n-32;getch();}break;

case98:

{n=t;printf("%C\n",n);n=n-32;getch();}break;

case99:

{n=t;printf("%C\n",n);n=n-32;getch();}break;

case100:

{n=t;printf("%C\n",n);n=n-32;getch();}break;

case101:

{n=t;printf("%C\n",n);n=n-32;getch();}break;

case102:

{n=t;printf("%C\n",n);n=n-32;getch();}break;

case103:

{n=t;printf("%C\n",n);n=n-32;getch();}break;

case104:

{n=t;printf("%C\n",n);n=n-32;getch();}break;

case105:

{n=t;printf("%C\n",n);n=n-32;getch();}break;

case106:

{n=t;printf("%C\n",n);n=n-32;getch();}break;

case

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1