课程设计说明书课程名称:高级语言程序设计设计题目:石头剪刀布游戏院部:计算机科学与信息工程学院学生姓名:学号:专业班级:指导教师:2014年6月课程设计任务书目录一前言 (1)二需求分析 (1)三概要设计 (1)四详细设计 (4)五改进或增加功能模块说明 (5)六程序测试 (6)七课程设计总结 (7)八致谢 (7)九参考文献 (8)十源程序 (8)石头剪刀布游戏一前言传统的石头剪刀布游戏只是人和人之间进行的,双方只能一次出剪刀石头布三者之一,游戏的规则是石头>剪刀>布。
现在是人和计算机出拳玩石头剪刀布游戏,规则相同,只不过需要对石头剪刀布进行字母代替,在程序中实现。
最后比较输赢,统计成绩。
二需求分析1 要求(1)用C语言实现程序设计。
(2)定义各个函数分别完成不同功能,如设计,判断等。
(3)画出查询模块的流程图。
(4)界面友好(良好的人机互交),程序要有注释。
2 任务(1)定义各类头文件,变量及宏定义。
(2)设定玩家操作模块和胜负判断模块。
(3)画出部分模块的流程图。
(4)编写代码。
(5)程序分析与调试。
3 运行环境(1)WINDOWS2000/XP系统(2)TurboC2.0编译环境4 开发工具系统描述语言C语言。
三概要设计1 模块组成图含有三个模块,人和电脑的输入,输入的比较计算,输出结果和评价。
图3-1 功能模块图2 电脑随机输入流程图现随机输入剪刀石头布,调用随机函数。
图3-2 功能模块图3 用户输入流程图对用户输入的数据进行判断是否是剪刀石头布或者是结果输出,判断用户的输入是否合法。
图3-3 功能模块图4 计算比较流程图对与用户和电脑输入的数据进行比较,判断用户的成绩,然后退出界面。
图3-4 功能模块图四详细设计在程序的开头部分定义要用到的头文件,以及各种常量如石头剪刀布输出结果等,设定各常量的类型,代码如下。
#include<stdio.h>#include<time.h>#include<stdlib.h>void main(){char ad; //用来存放用户的选择char com; //用来存放电脑的选择int sj,q;float p,y,s,z,f;p=0;y=0;s=0;printf("出锤子输入c\n出剪刀输入j\n出布输入b\n计算您的得分输入f\n可以一次输入许多会一次性出很多结果\n请输入您的选择:\n");输入数据,即为选手每一次下出拳,用三个字母cjb分别表示石头剪刀布,通过游戏规则,判断用户和电脑的输赢。
在此之前进行判断输入数据是否合法,而电脑进行随机输入数据,代码如下。
srand(time(0)); //随机数生成器,设置rand种子值,用来获取计算机的输入do{do{sj=rand()%3;switch(sj){case 0 : com='c';break;case 1 : com='j';break;case 2 : com='b';break;}do{scanf("%c",&ad); // 用来获取用户的合法输入}while(ad!='c'&&ad!='b'&&ad!='j'&&ad!='f');游戏的规则设计:石头>剪刀>布,由字母表示是c>j>b,代码如下。
if(com==ad) //下面为比赛规则!{printf("平手,继续\n");p++;}elseswitch(com){case 'c' : if(ad=='j'){printf("电脑WIN!! 锤子:剪刀\n");s++;}else{printf("人WIN! 锤子:布\n");y++;}break;case 'j' : if(ad=='b'){printf("电脑WIN! 剪刀:布\n");s++;}else{printf("人WIN! 剪刀:锤子\n");y++;}break;case 'b' : if(ad=='c'){printf("电脑WIN! 布:锤子\n");s++;}else{printf("人WIN! 布:锤子\n");y++;}break;}}while(ad==com);}while(ad=='j'||ad=='b'||ad=='c');}五改进或增加功能模块说明虽然以上设计基本可以实现胜负的判断,但是无法直观的体现用户跟电脑对战的成绩,所以为了增加这项功能,代码如下。
if(ad=='f'){z=y+s+p;f=100/z*(p/2.0+y);printf("一共比了%f场\n赢了%f场\n输了%f场\n平局%f场\n",z,y,s,p);y=100/z*y;s=100/z*s;p=100/z*p;printf("您的胜率为%f%%\n您的败率为%f%%\n您平局率为%f%%\n您的综合分数为%f\n对您成绩的评语:",y,s,p,f); //下面为结果和评语!if(f<=20)printf("您的成绩很差!\n\n");if(f>20&&f<=40)printf("您的成绩差了点,努力,加油!\n\n");if(f>40&&f<=60)printf("您的成绩还可以中等!\n\n");if(f>60&&f<=80)printf("您的成绩不错哟~!\n\n");if(f>80&&f<=100)printf("你的成绩太棒了!逆天了!\n\n");printf("\n随便输入几个字符按回车关闭程序\n");scanf("%d",&q);}六程序测试1 测试游戏能否正确显示界面执行程序后,显示本游戏的界面,进行出拳选择,如图6-1所示。
图6-1模式选择界面2 测试游戏并输出结果进行出拳选择输入剪刀石头布任意之一,与计算机输入的选择进行比较,最后给出成绩和评价,如图6-2所示。
图6-2人机对战七课程设计总结本石头剪刀布游戏设计是在控制台上面可以玩的输入时仅需要输入三个字母表示石头剪刀布,比如出石头,只需要输入c,出剪刀,只需输入j,出布,只需输入b即可。
最后输出结果只需输入f,退出界面时输入任意几个字母都可以。
其次,程序的界面过于简陋,无法进行鼠标操作。
刚开始看到这个设计是还是有点思路的,只是能初步设计谁赢了,谁输了,并不能统计分数,并随之给出评语。
期间查阅了很多资料,收获了很多。
八致谢经过两个多星期的努力,终于把本游戏程序改写出来,在这期间要感谢各同学对我帮助和支持,同时也感谢老师对我的教导。
九参考文献[1] 梁旭等C程序设计课程设计电子工业出版社2011[2] 谭浩强C程序设计(第四版)清华大学出版社2010[3] 谭浩强C语言程序设计(第2版)清华大学出版社2008十源程序#include<stdio.h>#include<time.h>#include<stdlib.h>void main(){char ad; //用来存放用户的选择char com; //用来存放电脑的选择int sj,q;float p,y,s,z,f;p=0;y=0;s=0;printf("出锤子输入c\n出剪刀输入j\n出布输入b\n计算您的得分输入f\n可以一次输入许多会一次性出很多结果\n请输入您的选择:\n");srand(time(0)); //随机数生成器,设置rand种子值,用来获取计算机的输入do{do{sj=rand()%3;switch(sj){case 0 : com='c';break;case 1 : com='j';break;case 2 : com='b';break;}do{scanf("%c",&ad); // 用来获取用户的合法输入}while(ad!='c'&&ad!='b'&&ad!='j'&&ad!='f');if(ad=='f'){z=y+s+p;f=100/z*(p/2.0+y);printf("一共比了%f场\n赢了%f场\n输了%f场\n平局%f场\n",z,y,s,p);y=100/z*y;s=100/z*s;p=100/z*p;printf("您的胜率为%f%%\n您的败率为%f%%\n您平局率为%f%%\n您的综合分数为%f\n对您成绩的评语:",y,s,p,f); //下面为结果和评语!if(f<=20)printf("您的成绩很差!\n\n");if(f>20&&f<=40)printf("您的成绩差了点,努力,加油!\n\n");if(f>40&&f<=60)printf("您的成绩还可以中等!\n\n");if(f>60&&f<=80)printf("您的成绩不错哟~!\n\n");if(f>80&&f<=100)printf("你的成绩太棒了!逆天了!\n\n");printf("\n随便输入几个字符按回车关闭程序\n");scanf("%d",&q);}if(com==ad) //下面为比赛规则!{printf("平手,继续\n");p++;}elseswitch(com){case 'c' : if(ad=='j'){printf("电脑WIN!! 锤子:剪刀\n");s++;}else{printf("人WIN! 锤子:布\n");y++;}break;case 'j' : if(ad=='b'){printf("电脑WIN! 剪刀:布\n");s++;}else{printf("人WIN! 剪刀:锤子\n");y++;}break;case 'b' : if(ad=='c'){printf("电脑WIN! 布:锤子\n");s++;}else{printf("人WIN! 布:锤子\n");y++; }break;}}while(ad==com);}while(ad=='j'||ad=='b'||ad=='c'); }。