掷骰子游戏-c语言程序课程设计
- 格式:doc
- 大小:82.00 KB
- 文档页数:10
综合项目源程序:掷骰子游戏#include "stdio.h"#include "stdlib.h"#include "time.h"#define random(x) (rand()%x)void main(){int iNum[4] = {0};int iPoint = 300;int iWin = 0, iFail = 0;char chYesNo = '0';int i;int iBigSmall, iBetPoint;srand((int)time(0));printf("欢迎使用“赌大小”游戏\n");do{while(1){fflush(stdin); /* 清除缓存*/printf("\n是否开始继续游戏(Y/N):");scanf("%c", &chYesNo);if (chYesNo == 'n' || chYesNo == 'N'){printf("游戏结束,再见。
\n");return;}else if (chYesNo == 'y' || chYesNo == 'Y'){break;}else{printf("输入错误,请重新输入。
\n");continue;}}printf("目前你的点数为%d;一共赢了%d次,输了%d次。
\n", iPoint, iWin, iFail);for (i=0; i<4; i++){iNum[i] = 0;}if (iPoint < 50){printf("你目前的点数小于50,不能继续玩游戏,再见。
\n");break;}printf("请输入你猜测的大小结果,认为“大”输入1,认为“小”则输入0:\n"); scanf("%d", &iBigSmall);/* 输入赌注并判断其有效性*/while (1){printf("请输入你本轮游戏的下注(必须是50的倍数):\n");scanf("%d", &iBetPoint);if (iBetPoint%50 != 0){printf("你的下注不是50的倍数,请重新输入。
C语⾔模拟掷骰⼦游戏⽬录实现掷骰⼦⼩游戏实现原理源码介绍效果展⽰今⽇练习题⽬描述问题分析代码实现运⾏结果实现掷骰⼦⼩游戏在开始今天的练习前,我先写⼀个有趣的C语⾔⼩游戏——掷骰⼦(zhì tóu zi)实现原理⼤家对骰⼦应该不陌⽣,让我们先看看百度词条的介绍:掷骰⼦拼⾳:zhì tóu zi骰⼦:既⾊⼦,⽤象⽛、⾻头或塑料等较坚硬物体做的⼩四⽅块;每⾯刻有点数,⼀到六,常⽤⼀对做各种游戏或赌博。
掷骰⼦:先摇动骰⼦,然后抛掷使两个骰⼦都随意停⽌在⼀平⾯上。
——百度百科掷骰⼦时,每次能掷出的点数为1~6,且是随机的,那么如何⽤C语⾔来产⽣这⼀随机数呢?这时就要⽤到rand()和srand()函数了:srand函数是随机数发⽣器的初始化函数。
原型:void srand(unsigned int seed);srand和rand()配合使⽤产⽣伪随机数序列。
rand():原型:int rand(void),功能:产⽣随机值,从srand (seed)中指定的seed开始,返回⼀个[seed, RAND_MAX(0x7fff))间的随机整数。
srand():原型:void srand(unsigned seed),参数:seed是rand()的种⼦,⽤来初始化rand()的起始值。
功能:可以认为rand()在每次被调⽤时,它都会查看srand(seed)中指定的seed值,如果存在srand(seed),那么它会⾃动调⽤srand(seed)⼀次来初始化它的起始值。
如果⽤户在此之前没有调⽤过srand(seed),它会⾃动调⽤srand(1)⼀次。
——百度百科上⾯提到了rand()函数只能⽣成伪随机数,意思是如果起始值seed固定,那么每次程序运⾏,它产⽣的随机数序列都是相同的,⽽不是真正意义上的随机数。
形象地说,如果seed值固定,那每次程序运⾏,第⼀次掷到的点数都是固定的,这显然不合理,那怎么⽣成更加合理的随机数呢?我们都知道系统的时间值(总秒数)是时刻都在变化着的,如果把时间秒数当做随机数的种⼦seed,那岂不是能实现真正的随机数?答案是⽅法可⾏,但并不能产⽣真正的随机数,因为时间是递增的,是有规律的数字序列,所以产⽣的随机数也会呈现⼀定的规律,但是,此时的随机数已经⾜够我们⽤来完成掷骰⼦游戏了,所以我们也没必要去纠结是否是真正的随机数(可能计算机本来就⽆法产⽣真正随机数)。
CC++实现投骰⼦游戏我们将要模拟⼀个⾮常流⾏的游戏——掷骰⼦。
骰⼦的形式多种多样,最普遍的是使⽤两个6⾯骰⼦。
在⼀些冒险游戏中,会使⽤5种骰⼦:4⾯、6 ⾯、8⾯、12⾯和20⾯。
聪明的古希腊⼈证明了只有5种正多⾯体,它们的所有⾯都具有相同的形状和⼤⼩。
各种不同类型的骰⼦就是根据这些正多⾯体发展⽽来。
也可以做成其他⾯数的,但是其所有的⾯不会都相等,因此各个⾯朝上的⼏率就不同。
计算机计算不⽤考虑⼏何的限制,所以可以设计任意⾯数的电⼦骰⼦。
我们先从6⾯开始。
我们想获得1~6的随机数。
然⽽,rand()⽣成的随机数在0~ RAND_MAX之间。
RAND_MAX被定义在stdlib.h中,其值通常是 INT_MAX。
因此,需要进⾏⼀些调整,⽅法如下。
1.把随机数求模6,获得的整数在0~5之间。
2.结果加1,新值在1~6之间。
3.为⽅便以后扩展,把第1步中的数字6替换成骰⼦⾯数。
下⾯的代码实现了这3个步骤:#include <stdlib.h> /* 提供rand()的原型 */int rollem(int sides){int roll;roll = rand() % sides + 1;return roll;}我们还想⽤⼀个函数提⽰⽤户选择任意⾯数的骰⼦,并返回点数总和。
/* diceroll.c -- 掷骰⼦模拟程序 *//* 与 mandydice.c ⼀起编译 */#include "diceroll.h"#include <stdio.h>#include <stdlib.h> /* 提供库函数 rand()的原型 */int roll_count = 0; /* 外部链接 */static int rollem(int sides) /* 该函数属于该⽂件私有 */{int roll;roll = rand() % sides + 1;++roll_count; /* 计算函数调⽤次数 */return roll;}int roll_n_dice(int dice, int sides){int d;int total = 0;if (sides < 2){printf("Need at least 2 sides.\n");return -2;}if (dice < 1){printf("Need at least 1 die.\n");return -1;}for (d = 0; d < dice; d++)total += rollem(sides);return total;}该⽂件加⼊了新元素。
华东交通大学基础学院C++课程设计报告题目:掷骰子游戏的分析与设计姓名:张春梅学号:20080810010101班级:08信息与计算科学(1)班学年学期: 2009 ~ 2010 学年第一学期日期:2009年12月21日目录一掷骰子游戏设计需求分析 (2)1、掷骰子游戏需求 (2)2、游戏实现方式 (3)二类关系图和类主要成员函数和成员变量 (4)三模块的设计分析 (5)1、游戏类(class Player)的说明 (5)2、游戏类(class Player)的流程图 (8)3、程序运行结果: (11)四存在的问题与不足及总结 (13)五掷骰子游戏使用说明书(操作手册) (14)一掷骰子游戏设计需求分析1、掷骰子游戏需求:1)假如有n个学生排成一圈,编号从1到n,每个人有初始积分,不防设为100。
2)从1号开始掷骰子,骰子出现后,根据点数减去掷骰人的相应积分,如减去10*(6-点数),然后根据点数多少,就依次向后数掷骰的点数同等数量的人,被数到的最后一个人继续掷骰子,计算积分,依此类推。
3)如果某人掷骰后,其积分小于等于0则出列,余下的人继续按照此法进行游戏,直到剩下最后一个人,为胜利者。
4)要求打印每次出列的人的编号,掷骰子的次数,当前积分。
并打印最后胜利者的相应信息。
5)要求用环链表以及类来实现这个程序。
6)选做:问掷骰m次后,还剩下几个人积分多少,显示出来。
2、游戏实现方式:为了实现游戏的上述功能,在整个程序的设计中构造了一个游戏类(class player)。
下面是游戏类(class player)的成员函数实现的功能:1)成员函数Player(char *pName,int id )用于储存参赛者的姓名和他们的编号;2)成员函数Player::Integral(int number)用于计算参赛者的当前积分和掷骰子的次数。
3)成员函数Player::Initial( )用于创建参赛者的链表。
c 掷筛子课程设计一、课程目标知识目标:1. 学生能够理解并掌握投掷骰子的基本概念和原理。
2. 学生能够运用概率知识,分析投掷骰子结果的随机性和规律性。
3. 学生能够运用统计方法,对投掷骰子的结果进行数据收集、整理和分析。
技能目标:1. 学生能够运用数学思维,解决与投掷骰子相关的问题。
2. 学生能够运用合作交流技巧,与小组成员共同完成投掷骰子的实验和数据分析。
3. 学生能够运用信息技术手段,如电子表格等,对投掷骰子的数据进行处理和展示。
情感态度价值观目标:1. 学生对数学学科产生兴趣,认识到数学在生活中的实际应用。
2. 学生培养合作精神,学会倾听他人意见,尊重实验事实。
3. 学生养成勇于探究、严谨治学的学习态度,树立正确的价值观。
课程性质:本课程为数学学科实验课,结合实践操作和数据分析,培养学生的数学思维和实际操作能力。
学生特点:五年级学生具备一定的数学基础和实验操作能力,对新鲜事物充满好奇心,善于合作交流。
教学要求:教师需引导学生积极参与实验,注重培养学生的动手操作能力和数据分析能力,同时关注学生的情感态度价值观的培养。
通过本课程的教学,使学生在掌握知识技能的同时,形成良好的学习习惯和合作精神。
二、教学内容本节课以“投掷骰子”为主题,结合教材中概率与统计的相关章节,组织以下教学内容:1. 投掷骰子基本概念:介绍骰子的结构、面数、点数等基本知识,使学生理解骰子的特点。
2. 概率知识:讲解随机事件的概念,引导学生认识投掷骰子结果的随机性,探讨事件发生的可能性。
3. 实验操作:组织学生进行投掷骰子的实验,让学生观察、记录实验结果,培养学生的动手操作能力。
4. 数据收集与整理:指导学生如何收集、整理实验数据,运用图表、统计量等方法,对数据进行可视化展示。
5. 数据分析:引导学生分析实验数据,探讨投掷骰子结果的规律性,培养学生的数据分析能力。
6. 数学思维:结合实验结果,引导学生运用数学思维解决问题,如计算概率、预测结果等。
C 语言程序设计大作业二、实现功能:掷骰子押宝小游戏 三、设计思路:通过设计定义几个函数和数组和指针实现猜点数 押积分的趣味小游戏。
流程图四、使用方法运行程序后首先会出现一个界面,让你猜所掷骰子点数的大小, 然后押元宝数,若猜中玩家得双倍元宝,若猜错,则玩家失去所 押元宝,电脑赢得相应元宝数。
五、程序清单 #i nclude <stdio.h>>iL>L___大于10猜数重新输入赢得双倍积分失去积分游戏界面小于10大于300押元宝输了赢了重新输入#i nclude <stdlib.h>#in elude <time.h>int money = 300;in tpc_m oney = 300;void show(); //声明界面显示函数void play(); //声明玩法函数void getMoney(int *); //声明玩家押积分数多少的函数void contrast(int *, int*); //声明玩家剩余积分的函数intisEnd(); //玩家没有积分时游戏结束int mai n(){money = 300; //玩家的初始积分pc_money = 300; //电脑的初始积分show();play();return 0;}void play(){ //游戏的玩法 int count = 0;in tt_m oney = 0;//char choose;while(m oney > 0 &&pc_m on ey> 0){getCount(&count); //用户输入猜的点数函数getMoney(&t_money); //用户押的积分函数co ntrast(&cou nt, &t_mo ney); // 点数进行对比,if(isE nd() == 1){printf(”您的元宝已不足1 了,游戏结束! \n"); }else if(isE nd() == 2){printf(”你太强了!电脑的元宝已经输完了 \n"); }};}void getCount(int * a){ // 玩家输入的点数do{printf(" 请输入您猜的点数(1-10):");sca nf("%d", a);if(*(a) > 10){printf(”输入的点数有误,请输入1-10之间的点数!con ti nue; else break;}while(*(a) >= 10);}void getMoney(int * m){ // 玩家押元宝do{printf (” 您准备押多少元宝数(100元宝以内):”); sca nf("%d", m);if(*(m) <= 100 && *(m) > 0 && *(m) <= money){ //money -= *(m); break; } else{printf (” 押元宝失败!请重新输入\n"); }}while(!(*(m) <= 100 && *(m) > 0 && *(m) <= money)); }void contrast(int * count, int * t_money){// 玩家元宝数剩并计算积分\n");余情况srand((unsigned)time(NULL)); // 初始化随机种子int g = ran d() % 10 + 1; if(g == *(count)){money += *(t_m on ey) * 2; pc_m oney -= *(t_m on ey) * 2;printf(" 恭喜您,猜对了! \n 电脑的点数:%d\t 【元宝+%d \t 您还剩余 %d分*(t_m on ey) * 2, mon ey);else{ money -= *(t_m on ey);printf (” 很遗憾,您没猜对! \n 电脑的点数:%d\t 【元宝-%d 】\t%d分*(t_m on ey), mon ey);}in tisE nd(){ if(money <= 0){ return 1;if(pc_m on ey<= 0){ return 2;\n ************************************************** \n",g,\n ************************************************** \n",g,//游戏结束的条件}}void show(){ //游戏界面printf("\t\t=== 猜骰子押宝小游戏===\n\n ”);printf("\t 规则:玩家和电脑初始元宝数均为 300个\n");prin tf("\t 玩家猜个点数,并押上积分(50个以内)\n"); prin tf("\t 如果玩家猜对了,获得双倍元宝\n");prin tf("\t 如果玩家猜错了,扣掉所押兀宝(不翻倍)\n"); prin tf("\t 玩家和电脑其中一方兀宝数不足1则游戏结束\n\n");printf("\t\tGame Start!\n\n");}[此文档可自行编辑修改,如有侵权请告知删除,感谢您的支持,我们会努力把内容做得更好]。
c语言掷骰子课程设计一、课程目标知识目标:1. 学生能够理解并掌握C语言中随机数生成的概念和原理。
2. 学生能够运用C语言的基本语法,编写实现掷骰子功能的程序代码。
3. 学生能够了解并解释掷骰子程序中的变量、循环和条件判断语句的作用。
技能目标:1. 学生能够运用所学知识,独立设计并实现一个模拟掷骰子的C语言程序。
2. 学生能够通过调试程序,解决代码中出现的常见错误,提高问题解决能力。
3. 学生能够运用合作学习的方法,与同伴共同分析、讨论并优化程序设计。
情感态度价值观目标:1. 学生能够养成积极思考、勇于探索的学习态度,对编程产生兴趣。
2. 学生能够认识到编程在实际生活中的应用,增强学以致用的意识。
3. 学生能够在团队协作中,学会尊重他人意见,培养良好的沟通能力和团队精神。
本课程针对高年级学生,结合C语言基础知识,以掷骰子为案例,培养学生的编程兴趣和实际操作能力。
课程目标旨在使学生掌握随机数生成和基本语法运用,提高问题解决能力,同时注重培养学生的合作精神和团队意识。
通过本课程的学习,为学生后续深入学习C语言打下坚实基础。
二、教学内容1. C语言基础知识回顾:变量定义、数据类型、运算符、输入输出函数。
2. 随机数生成:介绍rand()函数和srand()函数的用法,理解伪随机数的概念。
3. 循环结构:复习for循环和while循环的使用,重点讲解循环控制流程。
4. 条件判断:复习if-else语句,讲解其在程序中的应用。
5. 掷骰子程序设计:a. 设计思路分析:明确掷骰子功能的实现需求,分析程序结构。
b. 编写代码:根据分析,编写掷骰子程序,包括主函数、生成随机数的函数等。
c. 调试与优化:介绍调试方法,引导学生发现并解决程序中的问题。
6. 案例分析与拓展:分析教材中相关案例,拓展学生思维,提高编程技能。
教学内容依据课程目标,按照教材章节顺序进行安排。
在教学过程中,注重理论与实践相结合,使学生能够扎实掌握C语言基础知识,并能运用所学设计简单的程序。
学号2015-2016学年第二学期
《C语言程序设计》
课程设计报告
题目:掷骰子游戏
专业:计算机科学与技术
班级:15计科(3)班
姓名:廖晶晶
指导教师:邓明
成绩:
计算机学院
2016 年4月26 日
目录
1.课题设计的目的与要求 (3)
1.1实验目的 (3)
1.2设计要求 (3)
2.课题分析 (4)
2.1掷骰子游戏 (4)
2.1.1题目内容描述 (4)
2.1.2输入数据类型、格式和内容限制和输出数据说明 (4)
2.1.3流程图 (5)
3.总结 (8)
4.参考书籍 (8)
5.附件 (8)
5.1程序源代码 (8)
掷骰子游戏
1.课题设计的目的与要求
1.1实验目的
C语言是一种编程灵活,特色鲜明的程序设计语言。
C语言除了学习必须的基本知识,如概念,方法和语法规则之外,更重要的是进行实训,以提高学习者的动手和编程能力,这是学习语言的最终目的。
结合多年来的教学经验,根据学生的学习情况,为配合教学过程,使“项目教学法”能在本质上促使学生有更大进步,特编写了该《C语言程序任务书》,以在实训过程中给学生提供帮助。
达到如下目的:
(1)在课程结束之前,让学生进一步了解c程序设计语言的编程功能
(2)让学生扎实掌握c程序设计语言的相关知识;
(3)通过一些有实际意义的程序设计,使学生体会到学以致用,并能
将程序设计的知识与专业知识有效地结合,更全面系统地了解行
业知识。
1.2设计要求
根据实验内容的要求自由选定题目。
编写程序要求遵循如下基本要求:
●模块化程序设计
●锯齿型书写格式
●必须上机调试通过
2.课题分析
2.1掷骰子游戏
2.1.1题目内容的描述
两人玩骰子,游戏规则如下:
1)两人轮流掷骰子,每次掷两个,每人最多掷10次。
2)将每人每次的分值累加计分。
3)当两个骰子点数都为6时计8分;当两个点数相等且不为两个6时,
计7分;当两个点数不一样时,计其中点数较小的骰子的点数。
4)结束条件:当双方都掷10次或经过5次后一方累计分数为另一方的
两倍。
最后显示双方分数并判定优胜者。
2.1.2输入数据类型、格式和内容限制和输出数据说明
输入数据类型:整型数
格式:srand(time(0));输入数=rand()%6+1;
内容限制:产生最多十次随机数
输出数据说明:掷骰子的获胜者
2.1.3流程图
图1
否
是
否
是
开始
输入x ,y
x=y
是
否
x=6
x>y
n=n+8 n=n+7 n=n+y n=n+x
输出n
结束
图2 否
是
否
是
否
是
开始
输入i ,j
i=j
i=6
i>j
z=z+8 z=z+7 z=z+j z=z+i
输出z
结束
2.1.4调试过程及实验结果
出现的问题:每次循环产生的随机数相同。
解决方法:把随机函数移到for循环前。
执行结果截图
图3
3.总结
这是第一次接触c++,感觉很朦胧,但是通过老师悉心的教导和同学们的沟通与交流后,还是学会了很多的东西。
从一个简单的变量,表达式到语句,函数。
发现那些程序虽然很抽像但也不乏有很多的乐趣。
经过这半学期的实践课程,我也初步了解了c语言的基础,也能独立初步完成编程操作,但目前作为初学者,无法实现较复杂的编程,有些较为复杂的程序更是看不懂,各方面有待提高。
C语言作为现代大学生最重要的课程之一,用途广泛,更使我认识到了独立思考,实践操作的重要性。
C语言的学习不仅重理论,更重实践。
而学好c语言的一大方法便是“实践”,在c语言实践过程中遇到的种种问题,及解决问题的方法,更是锻炼了学生的实践能力,使我们不仅是学习理论,更学习了实践,今后一定要理论和实践有机结合,加上独立思考和不懈努力的学好c语言,为撬开编程的大门不懈努力。
4.参考书籍
[1] 严蔚敏,吴伟民,米宁等.数据结构(C语言版)[M] .北京:清华大学出版社,2007
[2] 谭浩强著.C程序设计(第三版)[M] .北京:清华大学出版社,2005
[3] 耿国华.数据结构C语言描述[M].北京:高等教育出版社,2010
[4] 严蔚敏,吴伟民,米宁等.数据结构题集(C语言版)[M] .北京:清华大学出版社,2011
[5] 严蔚敏,李冬梅等. 数据结构(C语言版)(第2版)[M] .北京:清华大学出版社,2014
5.附件
5.1程序源代码
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void main()
{
int a,e=0,f=0,g,h,l,m;
int point1(int x,int y);
int point2(int i, int j);
srand(time(0));
for(a=0;a<10;a++)
{
if(a==5)
{
if(e==f*2||f==e*2) break;
}
g=rand()%6+1;
/*产生1~6
的随机数
*/
h=rand()%6+1;
l=rand()%6+1;
m=rand()%6+1;
e=e+point1(g,h);
/*计算总分数*/
f=f+point2(l,m);
}
printf("甲的总分:%d\n乙的总分:%d\n",e,f); if(e>f)printf("甲获胜\n");
else if(e==f)printf("甲乙平手\n");
else printf("乙获胜\n");
}
int point1(int x,int y) {
int n=0;
printf("甲:%d %d\n",x,y); /*
判断每次得分
*/
if(x==y)
{
if(x==6) n=8;
else n=7;
}
else if(x>y) n=y;
else n=x;
return n;
}
int point2(int i, int j) {
int z=0;
printf("乙:%d %d\n",i,j); if (i==j)
{
if(i==6) z=8;
else z=7;
}
else if(i>j) z=j;
else z=i;
return z;
}。