石头剪刀布游戏课程设计
初一 记叙文 5149字 5441人浏览 三只小熊001

课 程 设 计 说 明 书 课程名称:

设计题目:

院 部:

学生姓名:

学 号:

专业班级: 指导教师: 2014年 6月

课 程 设 计 任 务 书

目 录

一 前言 ............................................................................................................. 1

二 需求分析 ..................................................................................................... 1

三 概要设计 ..................................................................................................... 1

四 详细设计 ..................................................................................................... 4

五 改进或增加功能模块说明 . ........................................................................ 5

六 程序测试 ..................................................................................................... 6

七 课程设计总结 . ............................................................................................ 7

八 致 谢 ....................................................................................................... 7

九 参考文献 ..................................................................................................... 8

十 源程序 ......................................................................................................... 8

1 石头剪刀布游戏

一 前言

传统的石头剪刀布游戏只是人和人之间进行的,双方只能一次出剪刀石头布三者之一,游戏的规则是石头>剪刀>布。现在是人和计算机出拳玩石头剪刀布游戏,规则相同,只不过需要对石头剪刀布进行字母代替,在程序中实现。最后比较输赢,统计成绩。

二 需求分析

1 要求

(1)用C 语言实现程序设计。

(2)定义各个函数分别完成不同功能,如设计,判断等。

(3)画出查询模块的流程图。

(4)界面友好(良好的人机互交),程序要有注释。

2 任务

(1)定义各类头文件,变量及宏定义。

(2)设定玩家操作模块和胜负判断模块。

(3)画出部分模块的流程图。

(4)编写代码。

(5)程序分析与调试。

3 运行环境

(1)WINDOWS2000/XP系统

(2)TurboC2.0编译环境

4 开发工具

系统描述语言C 语言。

三 概要设计

1 模块组成图

2 含有三个模块,人和电脑的输入,输入的比较计算,输出结果和评价。

图3-1 功能模块图

2 电脑随机输入流程图

现随机输入剪刀石头布,调用随机函数。

图3-2 功能模块图

3 用户输入流程图

3 对用户输入的数据进行判断是否是剪刀石头布或者是结果输出,判断用户的输入是否合法。

图3-3 功能模块图

4 计算比较流程图

对与用户和电脑输入的数据进行比较,判断用户的成绩,然后退出界面。

图3-4 功能模块图

四 详细设计

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++;

}

else

switch(com)

5 {

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您的综合分数

6 为%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所示。

7

图 6-2人机对战

七 课程设计总结

本石头剪刀布游戏设计是在控制台上面可以玩的输入时仅需要输入三个字母表示石头剪刀布,比如出石头,只需要输入c ,出剪刀,只需输入j ,出布,只需输入b 即可。最后输出结果只需输入f ,退出界面时输入任意几个字母都可以。其次,程序的界面过于简陋,无法进行鼠标操作。刚开始看到这个设计是还是有点思路的,只是能初步设计谁赢了,谁输了,并不能统计分数,并随之给出评语。期间查阅了很多资料,收获了很多。

八 致 谢

经过两个多星期的努力,终于把本游戏程序改写出来,在这期间要感谢各同学对我帮助和支持,同时也感谢老师对我的教导。

8 九 参考文献

[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;

9 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++;

}

else

switch(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

10 {

printf("人WIN! 布:锤子\n");y++; }break;

}

}while(ad==com);

}while(ad=='j'||ad=='b'||ad=='c'); }