C语言五子棋游戏程序课程设计

时间:2024.4.6

C++五子棋游戏程序设计

一、课设内容

1. 掌握C++基本编程风格。

2. 编写程序代码,实现各个模块的功能。

3. 完成小型游戏应用系统的设计开发.

4. 关键语句写注释。

5. 测试程序,写出测试报告。

6. 在实验报告写出综合设计心得。

二、实验内容

在此次大作业中,我学习设计一个五子棋游戏的程序,源代码及分析如下:

#include<iostream.h>

#include<iomanip.h>

void shuchu(char a[15][15])

{

       int x,y,i;

       cout<<"  ";

       for(i=0;i<15;i++)

              cout<<setw(3)<<i;

       cout<<endl; 

       for(x=0;x<15;x++)

       {

              cout<<setw(2)<<x;

              for(y=0;y<15;y++)

                     cout<<setw(3)<<a[x][y];

              cout<<endl;

             

       }

}

bool osheng(char a[15][15])

{

       int x,y;

       for(x=0;x<15;x++)

              for(y=0;y<11;y++)

                     if(a[x][y]=='o'&&a[x][y+1]=='o'&&a[x][y+2]=='o'&&a[x][y+3]=='o'&&a[x][y+4]=='o')

                            return 1;

       for(x=0;x<11;x++)

              for(y=0;y<15;y++)

                     if(a[x][y]=='o'&&a[x+1][y]=='o'&&a[x+2][y]=='o'&&a[x+3][y]=='o'&&a[x+4][y]=='o')

                            return 1;

       for(x=0;x<11;x++)

              for(y=0;y<11;y++)

                     if(a[x][y]=='o'&&a[x+1][y+1]=='o'&&a[x+2][y+2]=='o'&&a[x+3][y+3]=='o'&&a[x+4][y+4]=='o')

                            return 1;

       for(x=15;x>4;x--)

             

       return 0;

}

bool xsheng(char a[15][15])

{

       int x,y;

       for(x=0;x<15;x++)

              for(y=0;y<11;y++)

                     if(a[x][y]=='x'&&a[x][y+1]=='x'&&a[x][y+2]=='x'&&a[x][y+3]=='x'&&a[x][y+4]=='x')

                            return 1;

       for(x=0;x<11;x++)

              for(y=0;y<15;y++)

                     if(a[x][y]=='x'&&a[x+1][y]=='x'&&a[x+2][y]=='x'&&a[x+3][y]=='x'&&a[x+4][y]=='x')

                            return 1;

       for(x=0;x<11;x++)

              for(y=0;y<11;y++)

                     if(a[x][y]=='x'&&a[x+1][y+1]=='x'&&a[x+2][y+2]=='x'&&a[x+3][y+3]=='x'&&a[x+4][y+4]=='x')

                            return 1;

       for(x=15;x>4;x--)

              for(y=15;y>4;y--)

                     if(a[x][y]=='x'&&a[x+1][y-1]=='x'&&a[x+2][y-2]=='x'&&a[x+3][y-3]=='x'&&a[x-4][y+4]=='x')

                            return 1;

       return 0;

}

bool he(char a[15][15])

{

       int x,y;

       for(x=0;x<15;x++)

              for(y=0;y<15;y++)

                     if(a[x][y]=='-')

                            return 0;

       return 1;

}

void main()

{

       int x,y,s,q;

       char a[15][15];

       for(x=0;x<15;x++)

              for(y=0;y<15;y++)

       cin>>q;

       if(q==1)

              goto two;

/*    else       

              goto one;   */

two:

       cout<<"请选择是否进入悔棋模式:1.是;2.否\n";

       cin>>q;

       if(q==2)

              goto three;

       shuchu(a);

       while(1)

       {

s:            while(1)

              {

                     cout<<"请玩家1输入下子的坐标"<<endl;

                     cin>>x>>y;

                     if(a[x][y]=='o'||a[x][y]=='x')

                            cout<<"此处已经有字,请重下"<<endl;

                     else

                     {

                            a[x][y]='o';

                            break;

                     }

              }

              shuchu(a);

              cout<<"是否需要悔棋?是 请输入:1;否 请输入:0"<<endl;

              cin>>s;

              switch(s)

              {

              case 1:

                     a[x][y]='-';

                     goto s;

                     break;

              case 0:

                     goto s1;

                     break;

              }

s1:          if(osheng(a))

              {

                     cout<<"玩家1胜";

                     break;

              }

s2:          while(1)

              {

                     cout<<"请玩家2输入下子的坐标"<<endl;

                     cin>>x>>y;

            if(a[x][y]=='o'||a[x][y]=='x')

                            cout<<"此处已经有字,请重下"<<endl;

                     else

                     {

                            a[x][y]='x';

                            break;

                     }

              }

              shuchu(a);

              cout<<"是否需要悔棋?是 请输入:1;否 请输入:0"<<endl;

              cin>>s;

              switch(s)

              {

              case 1:

                     a[x][y]='-';

                     goto s2;

                     break;

              case 0:

                     goto s3;

                     break;

              }

s3:       if(xsheng(a))

              {

                     cout<<"玩家2胜";

             

             

             

             

              if(he(a))

              {

                     cout<<"平局";

                     break;

              }

       }

three:      shuchu(a);

       while(1)

       {

              while(1)

              {

                     cout<<"请玩家1输入下子的坐标"<<endl;

                     cin>>x>>y;

                     if(a[x][y]=='o'||a[x][y]=='x')

                            cout<<"此处已经有字,请重下"<<endl;

                     else

                     {

                            a[x][y]='o';

                            break;

                     }

              }

              shuchu(a);

           if(osheng(a))

              {

                     cout<<"玩家1胜";

                     break;

              }

             

              }

              shuchu(a);

           if(xsheng(a))

              {

                     cout<<"玩家2胜";

                     break;

              }

             

             

             

              if(he(a))

              {

                     cout<<"平局";

                     break;

              }

       }

             

      

}

三、感想体会

本实验是用C++来设计完成了五子棋游戏。在起初学习C++语言时我认为它就是在C语言基础上的延伸,一直用C语言的编程思想和设计理念来学习C++,这种错误的思想也让我在学习C++时走了不少的弯路,转变思想后我更认真的学习了C++语言的语法、程序结构、各类语句、函数格式和调用方式、作用域及存储类等内容。

在仅一遍学习的基础上来学习设计游戏程序让我遇到了第一个难题,就是对知识点的掌握不够扎实,在用C++语言所支持的面向对象程序设计方法的内容时让我很被动,尤其是类和对象的复制和运算、集成性和派生类、多态性和虚函数等内容。在这次做大作业时让我系统的复习了所学的知识,让我认识到利用类和对象可以将程序中很复杂和重复的内容省掉,同时可以将用以前所学语言设计的程序变的更简单。

当然在程序学习过程中遇到的一些复杂程序仅靠书本上的知识是不够解决的,因此通过在网上查找资料,跟同学交流心得过程中也学到了很多。在这次做大作业学习编写五子棋游戏的过程中让我领略到了C++语言的魅力和精髓,在以后的编程过程中会更熟练的运用C++语言,吸取了这次的经验后,在下次运用C++时会更全面的考虑问题,使用更正确的方法来解决问题,这次学习C++让我受益匪浅,最后感谢老师的悉心教导,老师辛苦了!


第二篇:基于C语言的五子棋游戏程序设计


·

月201210年4月

第164卷第2期

·

宁波职业技术学院学报

JournalofNingboPolytechnic

Apr,201210Vol.164No.No.22

基于C语言的五子棋游戏程序设计

陈慧杰,郭占祥

(内蒙古民族大学计算机科学与技术学院,内蒙古通辽

028043)

要:为了设计人人对弈模式的五子棋游戏系统,采用了C语言函数模块化程序设计方法,利用Visual

C++6.0编译器运行游戏,实现一方执白棋,一方执黑棋,通过屏幕上的文字提示,轮流走棋,最先使五子相连

一方获胜的人人对弈功能。同时,也对其他游戏系统的开发设计具有一定的借鉴作用。

关键词:五子棋;C语言;人人对弈中图分类号:TP312

文献标识码:A

文章编号:1671-2153(2012)02-0041-04

0引言

VisualC++6.0是一个集面向过程与面向对

开始

象为一体的开发工具,本游戏以VisualC++6.0为工具,以#include<stdio.h>为头文件展开游戏的设计,以函数模块化的思想进行设计,思路清晰,可操作性强。另外,该游戏在WindowsXP及

欢迎界面信息

显示棋盘10*10

Player1先下

Windows7等操作系统环境下均可运行,兼容性强。

本设计重点从函数模块化方面进行研究。

显示棋子位置,Player1为空心子○,

Player2为实心子●

1设计流程图

五子棋设计主要由“欢迎界面模块”、“初始化

换玩家下棋

模块”、“下棋操作模块”、“判断胜负模块”和“游戏结束模块”共5个模块组成。“欢迎界面模块”实现在游戏开始时出现一个欢迎界面,同时介绍游戏规则的功能;“初始化模块”实现画出棋盘大小,并可输入棋子功能;“下棋操作模块”主要实现判断键盘输入哪个键并执行操作,包括玩家Player1先落棋,玩家Player2后落棋及玩家轮流下棋的功能;“判断胜负模块”实现判断五子连棋为赢家的功能;“游戏结束模块”实现退出游戏功能。具体流程如图1所示。

五子连成一线?

NY

下满棋盘?

N

结束游戏

Y和棋

图1五子棋游戏流程

收稿日期:2011-11-29

作者简介:陈慧杰(1964-),女,内蒙古通辽人,副教授,硕士,从事计算机应用研究。

20xx年第2期

基于C语言的五子棋游戏程序设计

基于C语言的五子棋游戏程序设计

宁波职业技术学院学报E-mail:nbtpxb@163.com

2主要功能模块设计

本游戏设计主要利用函数模块化设计思想,

通过主函数调用各个自定义函数完成游戏的运行。以下为主函数和各自定义函数功能的设计及其运行结果。

2.1欢迎界面voidwelcome()函数设计欢迎界面函数的设计以格式化输出函数为核

心,介绍了游戏规则,同时也展现了友好的游戏界面,其主要代码为

/*********欢迎界面*******/

voidwelcome(){printf("**********\n");printf("制作人:10计汉(1)班:郭占祥。\n");printf("Welcome!!!\n");printf("输入你所下棋

子的行数和列数,并分别通过enter键来确定

图3

棋盘初始化输出显示

列数实现下棋操作,其核心代码为[1]:

\n");printf("通过backspace键来悔棋\n");printf

("**********\n");}

其运行结果如图2所示。

/*********显示棋子********/voidchess(intp)

{inti,j,k,m;inta[N*N],b[N*N];for(i=1;i<=N*N;i++)

a[i]=weizhi[i].x[i];b[i]=weizhi[i].y[i];}

for(m=1;m<p;m++)

{while(weizhi[p].x[p]==a[m]&&weizhi[p].y[p]==b[m])

{printf("error!\n");weizhi[p].x[p]=zouqihang();weizhi[p].y[p]=zouqilie();m=1;}}

下面通过调用循环语句实现再一次初始化棋盘:

图2欢迎界面输出显示

2.2初始化棋盘voidinitialization()函数设计初始化棋盘函数设置坐标为10×10,也可以根

for(i=0;i<N;i++){printf("%2d",i);printf

("");}printf("\n");

据需求适当修改棋盘大小方便下棋,以“.”代替直线画出棋盘,通过循环语句实现棋盘显示功能,并且分别赋予其横纵坐标,为走棋奠定基础,其主要代码有:

for(i=1;i<N;i++){for(j=1;j<N;j++)

{if(j==1)printf("%2d",i);for(k=1;k<=p;k++){if(i==weizhi[k].x[k]&&j==weizhi[k].y[k])

{if(k%2==1){printf("○");break;}elseif(k%2==0){printf("●");break;}}}

if(k>p)printf("·");elsecontinue;}printf("\n");}}

实现横坐标输入核心代码:

/**********初始化棋盘********/voidinitialization()

{inti,j;for(i=0;i<N;i++)

{printf("%2d",i);printf("");}printf("\n");for(i=1;i<N;i++){for(j=0;j<N;j++)

{if(j==0)printf("%2d",i);elseprintf("·");}printf("\n");}}

其运行结果如图3所示。

2.3下棋操作voidchess(intp)函数设计

通过以上初始化棋盘函数的设计,可以确定输入棋子的位置和状态,再利用循环语句重新调用初始化棋盘,实现下棋操作,然后输入相应的行

intzouqihang()

{intx;printf("请输入要走棋子所在行数!\n");printf("x=");

scanf("%d",&x);while(x>N-1||x<1)

{printf("error!\n");printf("请输入要走棋子所在行数!\n");

printf("x=");scanf("%d",&x);}returnx;}

··

20xx年第2期

·

基于C语言的五子棋游戏程序设计

基于C语言的五子棋游戏程序设计

陈慧杰等:基于C语言的五子棋游戏程序设计

·

同理,可以自定义相应的纵坐标输入函数(int

elseif(i%2==1){for(j=1;j<=p;j=j+1){if((a[i]==a[j]-1)&&(b[i]==b[j]-1)){k[4]++;continue;}elseif((a[i]==a[j]-2)&&(b[i]==b[j]-2)){k[4]++;continue;}elseif((a[i]==a[j]-3)&&(b[i]==b[j]-3))

{k[4]++;continue;}elseif((a[i]==a[j]-4)&&(b[i]==b[j]-4)){k[4]++;continue;}

elseif(k[4]==5)\n");}

而左上右下方向只需设定其横坐标分别增加

zouqilie()),实现纵坐标的输入。

以输入第4行第5列为例,其运行结果如图4

所示。

{printf("Player1wins!!!

1,2,3,4的同时纵坐标分别减少1,2,3,4;数组元素

的值同时逐个自增1,直至增到5,即可实现五子相连,则该方棋子胜出。运行结果如图5所示。

图4下棋操作显示

2.4判断是否胜出voidjudge(intp)函数设计

Voidjudge(intp)函数的设计,灵活运用了数

组元素来存储四种不同方向连成五子的数据,根据每次落子的位置,分别从行、列、右上左下、左上右下四个方向判断是否有相同颜色的棋子连成五子,如果成立,游戏就结束,并显示提示信息(如:

Player1wins!!!),否则继续落子[2]。

下面就以判断行五子相连为例,说明程序的执行过程:先把数组的值初始化为“1”,即k[8]=

图5

判断胜负显示

{1,1,1,1,1,1,1,1,},再设定棋子的横坐标相等,纵坐标相差的值可以为1,2,3,4;数组元素的值也

逐个自增1,直至增加到5,则该方棋子胜出,其核心代码为:

2.5“和棋”结束游戏函数设计

如果在双方交替下满整个棋盘时,游戏还未

决出胜负,则游戏自动以和棋来结束整个游戏,直接输出printf("drawinchess!!!\n"),否则输出

{if((a[i]==a[j]-1)&&(b[i]==b[j]))k[0]++;elseif

((a[i]==a[j]-2)&&(b[i]==b[j]))k[0]++;

printf("gameover!!!\n")即可实现。

此外,在设计时还运用了一些背景功能函数,如,system("color1f")等函数,使背景颜色呈现为蓝色,也可根据喜好改变1f参数来改变不同背景颜色。例如2f呈现绿色,4f呈现红色等背景颜色;使用标题函数system("title开心五子棋!"),来显示标题,只需在头文件中加入#include<iostream>即可实现这些功能[4]。

elseif((a[i]==a[j]-3)&&(b[i]==b[j]))k[0]++;elseif((a[i]==a[j]-4)&&(b[i]==b[j]))k[0]++;elseif

(k[0]==5){printf("Player1wins!!!\n");break;}

同理,判断列五子相连,需要先设定其纵坐标相等,横坐标相差的值为1,2,3,4;数组元素的值同时逐个自增1,直至增到5,则该方棋子胜出。

而判断右上左下方向五子相连,即胜出,可以设定其横纵坐标同时分别相差1,2,3,4;数组元素的值也逐个自增1,直到增加为5,则显示该方棋子胜出,具体代码如下:

[3]

3结束语

五子棋游戏的设计主要应用C语言中函数模

块化设计思想,灵活运用自定义函数的调用,简洁大方,可玩性强,对其他游戏的开发与设计有一定借鉴作用。

for(i=1;i<=p;i++){if(k[0]==5||k[1]==5||k[2]==5||k[3]==5)break;

20xx年第2期

宁波职业技术学院学报E-mail:nbtpxb@163.com

2010:20-27.

[3]董红安.计算机五子棋博奕系统的研究与实现[D].山

东师范大学,2005:11-15.参考文献:[1]谭浩强.C程序设计[M].北京:清华大学出版社,2000:

122-128.

[2]姜勇.五子棋人机对战系统设计[D].电子科技大学,[4]朱全民,陈松乔.五子棋算法的研究与思考[J].计算技

术与自动化,2006(2):71-74.

DesignofGobanggamebyusingCprogramminglanguage

CHENHui-jie,GUOZhan-xiang

(CollegeofComputerScienceandTechnology,InnerMongoliaUniversityforNationalities,

Tongliao028043,China)

Abstract:Inordertodesignaplayers`gobangsystem,theauthorappliesClanguagefunctionmodularprogrammingmethodflexibly.Atthesametime,theVisualC++6.0compilerisusedforthepurposeofrunningthegame.Inthegame,oneexecuteswhitepiecewhileanotherblackpiece.Moreoverbothsidestrytowin,whichmeansonesidemakesfivepieceslinktogetherbeforethegameover.Simultaneouslybothsidescanplaythegameinturnthroughtextremindinginthescreen.Furthermorethedesignofgobanggameisofreferencevaluetoexploitothergames.

Keywords:Gobanggame;Cprogramminglanguage;playersgame

(上接第37页)

[8]肖智,胡蓓.软集合在商业银行客户价值评价中的应

用[J].金融论坛,2010(10):36-42.数约简[J].系统工程学报,2009,24(4):457-461.[10]丁淑妍,齐淑华.软件质量评价中指标权重的确定方

法[J].大连民族学院学报,2007,36(1):82-84.[9]邹艳,肖智,龚科.基于最优选择对象不变的软集合参

Softwarequalityevaluationbasedonthesoftset

LINJian-hua

(ZhejiangXinchangRuralCoopBank,Shaoxing312500,China)

Abstract:Softwarequalityisinfluencedbymanyfactors.Therefore,itisratherdifficulttoevaluatesoftwarequalityaccurately.Inthispaper,anewqualityevaluationmethodofsoftwarebasedonthesoftsettheoryisproposed,whichenablespeopletoevaluatemoreobjectively,scientificlyandreasonably.Theexampleprovestheobjectivityandtheusabilityofthisnewmodel.

Keywords:softset;Softwarequality;evaluation

··20xx年第2期

更多相关推荐:
《C语言程序设计》课程设计报告(小组)

东莞理工学院《C语言程序设计》课程设计题目:图书信息管理系统院系:电子工程学院专业:电子信息工程年级:20##班别:2班指导教师:##组长:##同组成员:##目录一、目的....................…

c语言课程设计报告

C语言程序设计课程设计学生姓名学号系院专业设计论文题目学生选课系统管理完成日期20xx年6月指导教师目录一实验目的二实验内容三总体设计四详细设计五运行结果六课程设计体会一实验目的1通过课程设计加深对结构化程序设...

C语言课程设计报告

河南理工大学计算机科学与技术学院课程设计报告20XX20XX学年第一学期课程名称C语言课程设计设计题目《小学算术运算测试》学生姓名学号专业班级计算机07-2班指导教师20XX年9月12日目录1.设计任务书21.…

C语言课程设计报告范例

C语言课程设计报告设计题目专业班级学号姓名任课老师时间目录一课程设计题目及所涉及知识点二课程设计思路及设计流程图三课程设计中遇到的难点及解决办法四小结五附录原程序2一课程设计题目及所涉及知识点一课程设计题目1基...

厦门理工学院11级C语言C语言程序设计课程设计报告

C语言程序设计课程设计报告20xx20xx学年第1学期题目专业班级姓名学号指导教师成绩计算机科学与技术系20xx年12月31日目录一课程设计的目的与要求1二方案实现与调试221掷骰子游戏222射击游戏323汽车...

C语言程序设计课程设计报告

C语言程序设计课程设计报告20xx20xx学年第1学期专业计算机科学与技术班级姓名学号指导教师成绩计算机科学与技术系20xx年12月31日目录一课程设计的目的与要求3二方案实现与调试321掷骰子游戏322汽车加...

c语言程序贪吃蛇课程设计报告

山东工商学院信电学院自动111班第一组贪吃蛇课程设计报告高级语言程序设计课程设计报告ExperimentDesigningreporter课程名称高级语言程序设计英文名称CProgramExperimentDe...

c语言课程设计报告

青岛农业大学课程设计报告题目:使用菜单选择趣味程序姓名:学院:理学与信息科学学院专业:通信工程班级:2班学号:指导教师:年月日一设计目的进一步加深、巩固所学专业课程(《C语言程序设计》)的基本理论知识,理论联系…

C语言课程设计报告-图书管理系统

课程设计报告图书馆管理系统目录1题目与要求22系统总体设计要给出必要的文字说明及必要的图示321功能需求分析明确选题的功能需求322系统功能模块划分要给出系统功能模块图43详细设计431重要数据的数据结构设计即...

C语言课程设计报告_运动会分数统计系统

C语言课程设计报告_运动会分数统计系统一.需求分析1问题描述运动会分数统计系统参加运动会有n个系,系编号为1n。比赛分成m个男子项目,和w个女子项目。项目编号为男子1m,女子m+1m+w。不同的项目取前五名或前…

C语言课程设计报告---学籍信息管理系统

中国地质大学本科生课程论文封面1课程设计评语注1无评阅人签名成绩无效2必须用钢笔或圆珠笔批阅用铅笔阅卷无效3如有平时成绩必须在上面评分表中标出并计算入总成绩2目录课程设计评语2目录31课程论文题目42程序设计思...

《C语言程序设计》课程设计报告格式 (2)

C语言程序设计课程设计报告20xx20xx学年第1学期专业软件工程软件测试服务班级1班姓名学号陈家汀指导教师谢小竹成绩计算机与信息工程学院20xx年1月12日目录一课程设计的目的与要求页码二方案实现与调试页码2...

c语言程序设计课程设计报告(34篇)