C语言程序设计工程实训报告.docx
- 文档编号:8840285
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:32
- 大小:198.62KB
C语言程序设计工程实训报告.docx
《C语言程序设计工程实训报告.docx》由会员分享,可在线阅读,更多相关《C语言程序设计工程实训报告.docx(32页珍藏版)》请在冰豆网上搜索。
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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 工程 报告