课程设计说明书课程名称:高级语言程序设计设计题目:石头剪刀布游戏院部:计算机科学与信息工程学院学生:学号:专业班级:计算机科学与技术(信息技术方向)指导教师:2015年 6月课程设计任务书目录一前言 (1)二需求分析 (1)三概要设计 (1)四详细设计 (3)五改进或增加功能模块说明 (4)六程序测试 (4)七课程设计总结 (5)八致 (5)九参考文献 (5)十源程序 (6)五子棋游戏一前言猜拳游戏是由锤子、剪刀、布三部分组成。
玩家可以在游戏区逐次猜拳,系统会给出玩家每次猜拳后的提示,显示成功或者失败或者是平手。
二需求分析1 要求(1)用C语言实现程序设计;(2)定义各个函数分别完成不同功能,如背景设计,判断等;(3)画出查询模块的流程图;(4)系统的各个功能用函数调用的形式实现;(5)界面友好(良好的人机互交),程序要有注释。
2 任务(1)定义各类头文件,变量及宏定义;(2)图形模块,设计出棋盘背景界面;(3)设定玩家操作模块和胜负判断模块;(4)画出部分模块的流程图;(5)编写代码;(6)程序分析与调试。
3 运行环境(1)WINDOWS2000/XP系统(2)TurboC2.0编译环境4 开发工具C语言三概要设计1 模块组成图功能模块图2 查询函数流程图猜拳游戏从开始到结束的操作步骤的系统流程图函数流程图四详细设计在程序的开头部分定义要用到的头文件,以及各种常量,设定选手及游戏模式。
#include<stdio.h> /*标准输入/输出函数库*/#include<stdlib.h> / *标准函数库*/#include<string.h>#include<time.h>#include<windows.h>#inlcude<iostream>using namespace std;void SetColor(unsigned shortForeColor,unsigned short BackGroundColor){HANDLE hCon = GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleTextAttribute(hCon,(ForeColor%16)|(BackgrundColor%16*16));}void face();void shuoming();void shezhi();void zuce();void tuichu();void paixu();void paihangbang();int cmp();int N = 20,maxx = 0,M;struct PP{char name[10];int score;}P[1000];输入函数,即为选手每一次出拳,用1、2、3分别表示石头、剪刀、布,通过输入数字来确定要出的是哪一个,每出一次进行判断是否合理(如是否是三者中的一个)并通过调用函数记录比赛的结果,则通过变量记录下获胜的次数,如果比赛完了主函数void youxi(){int wan = 1;while(wan <= M){P[wan - 1].score = 0;system("CLS");SetColor(14,0);printf("\n\n\n\n\n\n\n\n\n\t\t\t 下面有请 ");SetColor(12,0);printf("玩家 %d",wan);SetColor(14,0);printf(" 准备比赛!");SetColor(12,0);printf("\n\n\n\n\n\n\n\n\n\n\n\t\t\t\t\t\t\t【按任意键开始游戏】"); _sleep(2000);getchar();getchar();int a,i = 0;for(; i < N; i++){system("CLS");srand((unsigned)time(NULL));/*随机种子*/int n=rand()%(3-1+1)+1;/*n为1~3之间的随机数*/SetColor(13,0);printf("\n\n\n\n\t\t\t\t每 %d 回合为一轮\n",N);SetColor(14,0);printf("\n\n\t\t\t\t\t\t\t (第 %d 回合)",i+1);SetColor(15,0);printf("\n\n\n\n\n\t请输入你的要出的: ");SetColor(12,0);scanf("%d",&a);//getchar();system("CLS");printf("\n\n\n\n\n\n\n\n\n\n\t\t\t");SetColor(13,0);if(a==1){switch(n){case 1:printf("双方都是石头......平手\n");break;case 2:printf("您出的是石头,电脑出的是剪刀,......您赢了!\n"),P[wan-1].score++;break;default:printf("您出的是石头,电脑出的是布......电脑赢了\n");_sleep(1000);}}else if(a==2){switch(n){case 1:printf("您出的是剪刀,电脑出的是石头......电脑赢了\n");break;case 2:printf("双方出的都是剪刀......平手\n");break;default:printf("您出的是剪刀,电脑出的是布.....您赢了!\n"),P[wan-1].score++;_sleep(1000);}}else if(a==3){switch(n){case 1:printf("您出的是布,电脑出的是石头......您赢了!\n"),P[wan-1].score++;break;case 2:printf("您出的是布,电脑出的是剪刀......电脑赢了\n");break;default:printf("双方出的都是布......平手\n");_sleep(1000);}}else{printf("你输入的有误,请重新输入!");i--;}SetColor(13,0);printf("\n\n\t\t\t\t战斗仍未结束,同志还需努力!");printf("\n\n\n\n\n\n\n 【按t退出当前玩家】\t 【按T退出到主页面】\t【按其他任意键继续游戏】\n");getchar();char c;scanf("%c",&c);if(c == 't'){break;}if(c == 'T'){face();}}wan++;if(i >= N){P[wan-1].score = (P[wan-1].score/N)*100;}else{P[wan - 1].score = 0;}paixu();}system("CLS");SetColor(12,0);printf("\n\n\n\n\n\n\n\n\n\n\t\t\t\t所有的对局已结束!");printf("\n\n\n\n\n\n\n\n\n\n\t\t\t\t\t\t\t\【按任意键返回主页面】\n");getchar();getchar();face();}五改进或增加功能模块说明在游戏运行过程中,没次比赛结束,此程序中都会产升新的对决界面,在屏幕上显示相对比较繁琐,因此这里用到了屏幕刷新函数system("cls");,为了让界面好看,添加了改变字体颜色的函数SetColor(7,0);代码如下。
system(“CLS”);SetColor(7,0);注意,调用此函数需要引用头文件#include<stdlib.h>/ *标准函数库*/ 六程序测试1测试游戏能否正确显示期盼界面执行程序后,显示本游戏的界面,进行模式选择图6-1模式选择界面2 测试游戏能否正确进行每一局的比赛(1)人机对战人机对战七课程设计总结本课程设计的实验是对我进入大学以来学习程序设计语言的一个检验。
自己动手自己发现和解决问题,学会了独立,自主的思考,发现了自己的许多不足。
平时没有掌握好的知识在这次试验中彻底暴漏出来,经过不断的思考,不断的查阅资料和上机运行,解决其部分问题,当然还存在一些问题灭有解决。
我相信在以后的学习能够解决好他们。
但是,收货还是不小的,我不仅对C的操作有了进一步的掌握,还了解到了程序设计的书写风格极其注释的格式。
当我编写小游戏“猜拳游戏”时,一开始运用了大量的函数及循环来完成,但是慢慢琢磨之后,觉得这个程序可以简化,于是改变了变成思路。
当然还有不少文件的读写问题,不过还是不断测试之后顺利解决了。
另外一点说的就是这个程序用了很多的选择循环,因此对于循环的控制要十分小心。
还有一点体会就是树上和老师教的容是有限的,我们需要不断地靠自己去学习,向他人请教,学会利用网络和掌握更多的只是,这样我们才能变出更好的C语言程序设计。
总体来说,这次C语言程序设计实验还是比较成功的,似然最终程序存在一些不足,但能去的这样的结果我还是比较高兴的八致经过两个多星期的努力,终于把本游戏程序改写出来,在这期间要感各同学对我帮助和支持,同时也非常感老师对我进行细心、耐心的指导,鼓励我对程序进行合理的改进,培养了我的创新意识和创新能力。
九参考文献[1] 福祥. C语言程序设计[M]. 大学,2008.1[2] 福祥,王萌.C语言程序设计习题解答与实验实训[M].:大学,2008.[3] 牛莉,远军等.计算机等级考试辅导教程[M].:中国铁道,2008.十源程序/*头文件 student.h*/#include<stdio.h> /*标准输入/输出函数库*/#include<stdlib.h>#include<string.h>#include<time.h>#include<windows.h>#include<algorithm>#include<iostream>using namespace std;void SetColor(unsigned short ForeColor,unsigned short BackGroundColor){HANDLE hCon=GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleTextAttribute(hCon,(ForeColor%16)|(BackGroundColor%16*16));}void paixu();void face();void shuoming();void shezhi();void zhuce();void tuichu();void paihangbang();void youxi();int N = 20,M;double maxx = 0;struct PP{char name[15];double score;} P[1000];void youxi(){int wan = 1;while(wan <= M){P[wan - 1].score = 0;system("CLS");SetColor(14,0);printf("\n\n\n\n\n\n\n\n\n\t\t\t 下面有请 ");SetColor(12,0);printf("玩家 %d",wan);SetColor(14,0);printf(" 准备比赛!");SetColor(12,0);printf("\n\n\n\n\n\n\n\n\n\n\n\t\t\t\t\t\t\t【按任意键开始游戏】"); _sleep(2000);getchar();getchar();int a,i = 0;for(; i < N; i++){system("CLS");srand((unsigned)time(NULL));/*随机种子*/int n=rand()%(3-1+1)+1;/*n为1~3之间的随机数*/SetColor(13,0);printf("\n\n\n\n\t\t\t\t每 %d 回合为一轮\n",N);SetColor(14,0);printf("\n\n\t\t\t\t\t\t\t (第 %d 回合)",i+1);SetColor(15,0);printf("\n\n\n\n\n\t请输入你的要出的: ");SetColor(12,0);scanf("%d",&a);//getchar();system("CLS");printf("\n\n\n\n\n\n\n\n\n\n\t\t\t");SetColor(13,0);if(a==1){switch(n){case 1:printf("双方都是石头......平手\n");break;case 2:printf("您出的是石头,电脑出的是剪刀,......您赢了!\n"),P[wan-1].score++;break;default:printf("您出的是石头,电脑出的是布......电脑赢了\n");_sleep(1000);}}else if(a==2){switch(n){case 1:printf("您出的是剪刀,电脑出的是石头......电脑赢了\n");break;case 2:printf("双方出的都是剪刀......平手\n");break;default:printf("您出的是剪刀,电脑出的是布.....您赢了!\n"),P[wan-1].score++;_sleep(1000);}}else if(a==3){switch(n){case 1:printf("您出的是布,电脑出的是石头......您赢了!\n"),P[wan-1].score++;break;case 2:printf("您出的是布,电脑出的是剪刀......电脑赢了\n");break;default:printf("双方出的都是布......平手\n");_sleep(1000);}}else{printf("你输入的有误,请重新输入!");i--;}SetColor(13,0);printf("\n\n\t\t\t\t战斗仍未结束,同志还需努力!");printf("\n\n\n\n\n\n\n 【按t退出当前玩家】\t 【按T退出到主页面】\t【按其他任意键继续游戏】\n");getchar();char c;scanf("%c",&c);if(c == 't'){break;}if(c == 'T'){face();}}wan++;if(i >= N){P[wan-1].score = (P[wan-1].score/N)*100;}else{P[wan - 1].score = 0;}paixu();}system("CLS");SetColor(12,0);printf("\n\n\n\n\n\n\n\n\n\n\t\t\t\t所有的对局已结束!");printf("\n\n\n\n\n\n\n\n\n\n\t\t\t\t\t\t\t\【按任意键返回主页面】\n");getchar();getchar();face();}void paixu(){for(int i = 0; i < M-1; i++){for(int j = 0; j < M - 1 - i; j++){if(P[j].score < P[j+1].score){struct PP t;t = P[j];P[j] = P[j+1];P[j+1]= t;}}}FILE *fp;if((fp = fopen("file.txt","w")) == NULL){printf("can not open!\n");exit(0);}if(M < 5)for(int i = 0;i < M;i++){if(fwrite(&P[i],sizeof(struct PP),1,fp)!= 1) printf("file write error\n");}elsefor(int i = 0;i < 5;i++){if(fwrite(&P[i],sizeof(struct PP),1,fp)!= 1) printf("file write error\n");}fclose(fp);}void paihangbang(){paixu();SetColor(10,0);printf("\n\n\t\t\t*********************************");printf("\n\t\t\t*\t\t\t\t*");printf("\n\t\t\t* ");SetColor(7,0);SetColor(12,0);printf(" 游戏排行榜 ");SetColor(7,0);SetColor(10,0);printf(" *");printf("\n\t\t\t*\t\t\t\t*");printf("\n\t\t\t*********************************");SetColor(7,0);SetColor(10,0);printf("\n\n\t\t-----------------------------------------------");SetColor(11,0);printf("\n\t\t| 1 %12s ******************%5.2lf%% |",P[0].name,P[0].score); SetColor(10,0);printf("\n\t\t| |");SetColor(12,0);printf("\n\t\t| 2 %12s ******************%5.2lf%% |",P[1].name,P[1].score); SetColor(10,0);printf("\n\t\t| |");SetColor(15,0);printf("\n\t\t| 3 %12s ******************%5.2lf%% |",P[2].name,P[2].score); SetColor(10,0);printf("\n\t\t| |");SetColor(14,0);printf("\n\t\t| 4 %12s ******************%5.2lf%% |",P[3].name,P[3].score); SetColor(10,0);printf("\n\t\t| |");SetColor(13,0);printf("\n\t\t| 5 %12s ******************%5.2lf%% |",P[4].name,P[4].score); SetColor(10,0);printf("\n\t\t-----------------------------------------------");SetColor(12,0);printf("\n\n\n\t\t\t\t\t\t\t\【按任意键返回】\n");getchar();getchar();face();}void tuichu(){for(int k = 0; k < 5; k++){for(int i = 0; i < 6; i++){system("CLS");SetColor(10,0);printf("\n\n\n\n\n\n\n\t\t\t感你本次的使用!");SetColor(11,0);printf("\n\n\n\n\n\t\t\t\t\欢迎你下次使用");SetColor(12,0);printf("\n\n\n\n\t\t\t请稍等,正在退出");for(int j = 0; j < i; j++){printf(".");}_sleep(100);printf(".");}}system("CLS");SetColor(12,0);printf("\n\n\n\n\n\n\n\n\n\t\t\t 再见!ヾ( ̄▽ ̄)Bye~Bye~、\n\n\n\n\n\n\n\n\n\n\n");SetColor(0,0);}void face(){paixu();system("CLS");int X;SetColor(10,0);printf("\n\n\t\t\t*********************************");printf("\n\t\t\t*\t\t\t\t*");printf("\n\t\t\t* ");SetColor(7,0);SetColor(12,0);printf("欢迎进入猜拳游戏!");SetColor(7,0);SetColor(10,0);printf(" *");printf("\n\t\t\t*\t\t\t\t*");printf("\n\t\t\t*********************************");SetColor(7,0);SetColor(10,0);printf("\n\n\t\t-----------------------------------------------"); SetColor(11,0);printf("\n\t\t| 开始********************************1 |"); SetColor(10,0);printf("\n\t\t| |"); SetColor(12,0);printf("\n\t\t| 设置********************************2 |"); SetColor(10,0);printf("\n\t\t| |"); SetColor(15,0);printf("\n\t\t| 说明********************************3 |"); SetColor(10,0);printf("\n\t\t| |"); SetColor(14,0);printf("\n\t\t| 排行榜******************************4 |"); SetColor(10,0);printf("\n\t\t| |"); SetColor(13,0);printf("\n\t\t| 退出********************************0 |"); SetColor(10,0);printf("\n\t\t-----------------------------------------------"); SetColor(9,0);printf("\n\n\t\t\t\t\t\t请出入你的选择 : ");SetColor(4,0);scanf("%d",&X);SetColor(7,0);if(X == 2){shezhi();}else if(X == 3){shuoming();}else if(X == 0){tuichu();}else if(X == 4){paihangbang();}else if(X == 1){youxi();}else{system("CLS");SetColor(12,0);printf("\n\n\n\n\n\n\n\n\n\t\t\t你的输入有误,请重新输入!\n\n\n\n\n\n\n\n\n\n\n");_sleep(1000);face();}}void shuoming(){system("CLS");SetColor(12,0);printf("\n\n\n\t\t\t\t猜拳游戏的说明");printf("\n\n\n\n\t猜拳游戏是由锤子、剪刀、布三部分组成。