C语言程序设计工程实训报告.docx

上传人:b****6 文档编号:8840285 上传时间:2023-02-02 格式:DOCX 页数:32 大小:198.62KB
下载 相关 举报
C语言程序设计工程实训报告.docx_第1页
第1页 / 共32页
C语言程序设计工程实训报告.docx_第2页
第2页 / 共32页
C语言程序设计工程实训报告.docx_第3页
第3页 / 共32页
C语言程序设计工程实训报告.docx_第4页
第4页 / 共32页
C语言程序设计工程实训报告.docx_第5页
第5页 / 共32页
点击查看更多>>
下载资源
资源描述

C语言程序设计工程实训报告.docx

《C语言程序设计工程实训报告.docx》由会员分享,可在线阅读,更多相关《C语言程序设计工程实训报告.docx(32页珍藏版)》请在冰豆网上搜索。

C语言程序设计工程实训报告.docx

C语言程序设计工程实训报告

 

某某

工程实训报告

 

五子棋游戏

课程名称C语言程序设计工程实训

姓名

院(系)

专业班级

学号

指导教师

 

某某大学教务处制

目录

1需求分析1

2系统总框图和功能模块说明1

2.1系统总框图1

2.2功能模块说明1

3系统设计2

3.1主要结构体2

3.2主要功能函数2

3.3关键函数的流程图3

4.系统调试5

5总结6

6源程序清单6

1需求分析

●系统以菜单方式工作

●落子—输入

●实时浏览功能--输出

●存档,按文件查找。

2系统总框图和功能模块说明

2.1系统总框图

图1系统总框图

2.2功能模块说明

棋局生成模块:

生成棋局

用户操作模块:

用户落子,设定游戏等。

游戏判断模块:

判断游戏哪方玩家赢得比赛,游戏是否结束。

3系统设计

3.1主要结构体

{shortLineNo_Color=15,RowNo_Color=15,Check_Color=6,X_Color=10,O_Color=12,

Menu_Color=7,Game_Options_Color=7,Help_Color=7,Open_Sound=1,Auto_Save_Ending=1;

intGame_Over3(int(*a)[N],intchess_symbol)/*"/"形呈龙*/

/*

以上全局变量依次表示:

行序号颜色,列序号颜色,棋盘格线颜色,玩家1的棋子'X'颜色,玩家2的棋子'O'颜色,游戏主菜单GAME_MENU颜色,

游戏设定菜单Game_Options颜色,"关于游戏"的颜色,是否开启游戏提示音,是否开启棋局终局自动保存

3.2主要功能函数

intmain()

voidAbout_Game()/*游戏帮助*/intGame_Options()/*游戏设定*/intGame_Over1(int(*a)[N],intchess_symbol)/*"-"形或者"|"形呈龙(事实上"-"与"|"关于"\"对称)*/intGame_Over2(int(*a)[N],intchess_symbol)/*"\"形呈龙*/intGame_Over3(int(*a)[N],intchess_symbol)/*"/"形呈龙*/voidInit_Chess(int(*a)[N])/*初始化棋盘,置棋盘上无任何棋子*/intLoad_Chess(int(*a)[N])/*读取棋局*/intLoad_Options()/*读取游戏设定*/voidPrint_Chess(int(*a)[N])/*输出棋局,或者说画棋盘*/intSave_Chess(int(*a)[N],char*ss)/*保存棋局*/intSave_Options()/*保存游戏设定*/intString_to_Int(char*s,intmax)/*字符串条件转化成整型*/

 

3.3关键函数的流程图

voidInit_Chess(int(*a)[N])/*初始化棋盘,置棋盘上无任何棋子*/

intString_to_Int(char*s,intmax)/*字符串条件转化成整型*/

intmain()

4.系统调试

菜单如上图:

5总结

本次做的五子棋游戏,界面有点简陋,可观性不强,因为操作是要靠输入坐标的方式落子的,可操作性不强,希望能在以后的学习中能够努力的学习这方面的不足。

由于这个游戏是人人对战的,而非人际对战,缺少可玩性,但愿能在日后的学习中做出人机对战的程序来,这无疑是需要强大的算法和坚实的基础,熟练的技巧的,这对我也是很大的挑战。

6源程序清单

#include

#include

#include

#defineN19

#defineSetColor(x)SetConsoleTextAttribute(setcolor,x)

shortLineNo_Color=15,RowNo_Color=15,Check_Color=6,X_Color=10,O_Color=12,

Menu_Color=7,Game_Options_Color=7,Help_Color=7,Open_Sound=1,Auto_Save_Ending=1;

/*

以上全局变量依次表示:

行序号颜色,列序号颜色,棋盘格线颜色,玩家1的棋子'X'颜色,玩家2的棋子'O'颜色,游戏主菜单GAME_MENU颜色,

游戏设定菜单Game_Options颜色,"关于游戏"的颜色,是否开启游戏提示音,是否开启棋局终局自动保存

*/

voidInit_Chess(int(*a)[N])/*初始化棋盘,置棋盘上无任何棋子*/

{

inti,j;

for(i=0;i

for(j=0;j

a[i][j]='';

}

intString_to_Int(char*s,intmax)/*字符串条件转化成整型*/

{

inti,n=0;

for(i=0;s[i]<='9'&&s[i]>='0';i++)

n=10*n+s[i]-'0';/*"s[i]-'0'",not"s[i]-'\0'"*/

return((s[i]=='\0')&&(max<0||n<=max))?

n:

-1;

}

/*

任何一个输入都可以看成是一个不定长的字符串,此函数用来处理非法输入问题,比如输入整型数据时输入了含有字母等非数字字符

*/

voidPrint_Chess(int(*a)[N])/*输出棋局,或者说画棋盘*/

{

inti,j;

HANDLEsetcolor=GetStdHandle(STD_OUTPUT_HANDLE);

SetColor(11);/*设定颜色*/

SetColor(LineNo_Color);

printf("L\\R12345678910111213141516171819\n");

for(i=0;i

{

SetColor(Check_Color);

printf("|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n");

SetColor(RowNo_Color);

printf("%2d",i+1);

SetColor(Check_Color);

printf("|");

for(j=0;j

{

if(a[i][j]=='X')

SetColor(X_Color);

else

SetColor(O_Color);

printf("%c",a[i][j]);

SetColor(Check_Color);

printf("|");

}

printf("\n");

}

printf("|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n");

}

intGame_Over1(int(*a)[N],intchess_symbol)/*"-"形或者"|"形呈龙(事实上"-"与"|"关于"\"对称)*/

{

inti,j,k,l,r;

for(i=0;i

for(k=0;k

{

l=r=0;

for(j=k;j

"j

{

if(a[i][j]==chess_symbol)/*"-"形呈龙*/

l++;

if(a[j][i]==chess_symbol)/*"|"形呈龙*/

r++;

}

if(l==5||r==5)/*连续的5个棋子在一条直线上时,游戏结束*/

return1;

}

return0;

}

intGame_Over2(int(*a)[N],intchess_symbol)/*"\"形呈龙*/

{

inti,j,k,m,LeftDown,RightUp;

for(m=0;m

for(k=0;k

{

RightUp=LeftDown=0;

for(i=k,j=k+m;i

{

if(a[i][j]==chess_symbol)/*对角线"\"上及其右上方的"\"形呈龙*/

RightUp++;

if(a[j][i]==chess_symbol)/*对角线"\"上及其左下方的"\"形呈龙*/

LeftDown++;

}

if(RightUp==5||LeftDown==5)

return1;

}

return0;

}

intGame_Over3(int(*a)[N],intchess_symbol)/*"/"形呈龙*/

{

inti,j,k,m,LeftUp,RightDown;

for(m=N-1;m>=4;m--)

for(k=0;k

{

RightDown=LeftUp=0;

for(i=k,j=m-k;i

{

if(a[i][j]==chess_symbol)/*对角线"/"上及其左上方的"/"形呈龙*/

LeftUp++;

if(a[N-1-j][N-1-i]==chess_symbol)/*对角线"/"上及其右下方的"/"形呈龙*/

RightDown++;/*上面应该是"a[N-1-j][N-1-i]",而不是"a[N-j][N-i]"*/

}

if(RightDown==5||LeftUp==5)

return1;

}

return0;

}

/*

以上三个函数通过遍历棋盘所有的可能呈龙情况以判定游戏是否over了

*/

intSave_Chess(int(*a)[N],char*ss)/*保存棋局*/

{

inti,j;

FILE*fp;

if(strcmp(ss,"save")==0)/*保存当前未结束的棋局*/

if((fp=fopen("Save.sav","w"))==NULL)

{

printf("Can'topenfile\"Save.sav\"!

\n");

return0;

}

else

printf("当前棋局已经成功保存到存档文件\"Save.sav\"中!

\n");

else/*保存棋局终局*/

if((fp=fopen("Ending.txt","a"))==NULL)

{

printf("Can'topenfile\"Ending.txt\"!

\n");

return0;

}

else

printf("棋局终局已经成功保存到文本文件\"Ending.txt\"中!

\n");

fprintf(fp,"L\\R12345678910111213141516171819\n");

for(i=0;i

{

fprintf(fp,"|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n");

fprintf(fp,"%2d|",i+1);

for(j=0;j

fprintf(fp,"%c|",a[i][j]);

fprintf(fp,"\n");

}

fprintf(fp,"|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n");

fclose(fp);

return1;

}

intSave_Options()/*保存游戏设定*/

{

FILE*fp;

if((fp=fopen("Config.ini","w"))==NULL)

{

printf("Can'topenfile\"Config.ini\"!

\n");

return0;

}

fprintf(fp,"LineNo_Color=%d\nRowNo_Color=%d\nCheck_Color=%d\nX_Color=%d\n",LineNo_Color,RowNo_Color,Check_Color,X_Color);

fprintf(fp,"O_Color=%d\nMenu_Color=%d\nGame_Options_Color=%d\n",O_Color,Menu_Color,Game_Options_Color);

fprintf(fp,"Help_Color=%d\nOpen_Sound=%d\nAuto_Save_Ending=%d\n",Help_Color,Open_Sound,Auto_Save_Ending);

fclose(fp);

printf("当前游戏设定已经成功保存到配置文件\"Config.ini\"中!

\n");

return1;

}

intLoad_Chess(int(*a)[N])/*读取棋局*/

{

intj,k,X_Number=0,O_Number=0;

charc;

doublei=-1.5;

FILE*fp;

if((fp=fopen("Save.sav","r"))==NULL)/*检测存档文件"Save.sav"是否在当前目录下*/

return0;

Init_Chess(a);/*先初始化棋盘*/

c=fgetc(fp);

while(c!

=EOF)

{

if(c=='X')

X_Number++;

else

if(c=='O')

O_Number++;

c=fgetc(fp);

}

if(X_Number-O_Number>1||X_Number-O_Number<-1)/*检查棋盘数据是否合法*/

return-1;

rewind(fp);/*文件指针移至文件首*/

c=fgetc(fp);

while(c!

=EOF&&i

{

if(c=='\n')

{

i+=0.5;

k=0;

}

if(c=='X')

{

j=k/4-1;/*棋盘数据的分布规律*/

a[(int)i][j]='X';/*读取档案数据*/

}

if(c=='O')

{

j=k/4-1;

a[(int)i][j]='O';

}

c=fgetc(fp);

k++;

}

fclose(fp);

returnX_Number>O_Number?

2:

1;/*返回读档后的优先下棋的玩家*/

}

intLoad_Options()/*读取游戏设定*/

{

charc;

shortOption_Value[10]={0},i=0;

FILE*fp;

if((fp=fopen("Config.ini","r"))==NULL)/*检测配置文件"Config.ini"是否在当前目录下*/

return0;

c=fgetc(fp);

while(c!

=EOF)

{

if(c<='9'&&c>='0')

Option_Value[i]=10*Option_Value[i]+c-'0';/*"c-'0'",not"c"*/

if(c=='\n')

{

if(Option_Value[i]<1&&i<8)/*确保颜色属性值合法,即不小于1*/

return-1;

i++;

}

c=fgetc(fp);

}

fclose(fp);

LineNo_Color=Option_Value[0];/*加载配置文件"Config.ini"中的设定*/

RowNo_Color=Option_Value[1];

Check_Color=Option_Value[2];

X_Color=Option_Value[3];

O_Color=Option_Value[4];

Menu_Color=Option_Value[5];

Game_Options_Color=Option_Value[6];

Help_Color=Option_Value[7];

Open_Sound=Option_Value[8];

Auto_Save_Ending=Option_Value[9];

return1;

}

intGame_Options()/*游戏设定*/

{

HANDLEsetcolor=GetStdHandle(STD_OUTPUT_HANDLE);

inttemp;

shorti;

chars[10];

while

(1)

{

system("cls");

SetColor(11);

SetColor(Game_Options_Color);

printf("*-*-*-*-*-*-*Game_Options*-*-*-*-*-*-*\n");

printf("1.查看各种颜色的属性值(1-15);\n");

printf("2.设定行序号的颜色;\n");

printf("3.设定列序号的颜色;\n");

printf("4.设定棋局格线(棋盘)的颜色;\n");

printf("5.设定玩家1的棋子的颜色;\n");

printf("6.设定玩家2的棋子的颜色;\n");

printf("7.设定游戏主菜单Game_Menu的颜色;\n");

printf("8.设定游戏设定菜单Game_Options的颜色;\n");

printf("9.设定\"关于游戏\"的颜色;\n");

printf("10.设定是否开启游戏提示音;\n");

printf("11.设定是否开启棋局终局自动保存;\n");

printf("12.保存当前设定到配置文件Config.ini中;\n");

printf("13.加载配置文件Config.ini中的设定;\n");

printf("14.恢复游戏设定至默认值;\n");

printf("15.退出游戏设定菜单Game_Options.\n");

printf("请输入一个整数以决定你要设定的项目:

");

scanf("%s",s);

temp=String_to_Int(s,15);

switch(temp)

{

case1:

system("cls");

for(i=1;i<16;i++)

{

SetColor(i);

printf("%d是当前其显示的颜色的属性值!

\n",i);

}

break;

case2:

printf("请输入行序号颜色的属性值(1-15):

");

scanf("%s",s);

temp=String_to_Int(s,15);

if(temp>0)

{

LineNo_Color=temp;

printf("已成功设定行序号的颜色!

\n");

}

else

rintf("非法的颜色属性值!

\n");

break;

case3:

printf("请输入列序号颜色的属性值(1-15):

");

scanf("%s",s);

temp=String_to_Int(s,15);

if(temp>0)

{

RowNo_Color=temp;

printf("已成功设定列序号的颜色!

\n");

}

else

printf("非法的颜色属性值!

\n");

break;

case4:

printf("请输入棋局格线(棋盘)颜色的属性值(1-15):

");

scanf("%s",s);

temp=String_to_Int(s,15);

if(temp>0)

{

Check_Color=temp;

printf("已成功设定棋局格线(棋盘)的颜色!

\n");

}

else

printf("非法的颜色属性值!

\n");

break;

case5:

printf("请输入玩家1的棋子(棋子符号'X')颜色的属性值(1-15):

");

scanf("%s",s);

temp=String_to_Int(s,15);

if(temp>0)

{

X_Color=temp;

printf("已成功设定玩家1的棋子的颜色!

\n");

}

else

printf("非法的颜色属性值!

\n");

break;

case6:

printf("请输入玩家2的棋子(棋子符号'O')颜色的属性值(1-15):

");

scanf("%s",s);

temp=String_to_Int(s,15);

if(temp>0)

{

O_Color=temp;

printf("已成功设定玩家2的棋子的颜色!

\n");

}

else

printf("非法的颜色属性值!

\n");

break;

case7:

printf("请输入游戏主菜单Game_Menu的颜色的属性值(1-15):

");

scanf("%s",s);

te

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

当前位置:首页 > 医药卫生 > 基础医学

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

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