第一篇:C程序设计 24点小游戏
1设计内容
有2、3、4、5、6、7、8、9、10、J、Q、K、A共13张牌,编一程序,判断对任意给定的4张牌,能否在进行加、减、乘、除运算后,其运算结果等于24。其中J按11计算,Q按12计算,K按13计算,A按1计算。如果能得到结果24,则输出可得到该结果的计算表达式。
若输入数据符合要求,且经过加、减、乘、除运算后,运行结果能得到24,如输入5,5,5,1,则显示可得到该结果的计算表达式,如5*(5-(1/5))。
若输入数据小于1或者大于13或者不是整数时,提示输入错误。若输入不能运算出24的数据,如1,1,1,1,则显示经过加、减、乘、除运算后,运行结果不能得到24。
2程序设计
2.1存储结构设计
由于要储存的数据不多,主要是储存所输入的4个整数,所以采用一维数组(a[4])储存。而计算过程会出现小数,所以数据类型采用浮点型(float)。
2.2主要程序设计
程序采用穷举法,对输入的4个数进行排列,有 4!=24种。用for来循环,if来判断,算法如下。for(i=0;i<4;i++)for(j=0;j<4;j++)if(j!=i)for(k=0;k<4;k++)if(k!=j && k!=i)for(l=0;l<4;l++)if(l!=i && l!=j && l!=k){ calculate(a[i],a[j],a[k],a[l]);}
用if来判断括号的类型,然后作出不同顺序的运算。括号有两对,主要有两种类型:一种是()()型,如(a+b)*(c+d);另一种是(())型,继续细分又有
种类型,如下a*(b*(c+d)),(a*(b+c))*d,a*((b+c)*d),((a+b)*c)*d。算法如下 if((!(i==3 && b==0))&&(!(j==3 && c==0))&&(!(k==3 && d==0))){ sum1=arithmetic(i,a,b);sum2=arithmetic(j,sum1,c);sum3=arithmetic(k,sum2,d);} if(k==2){ sum1=arithmetic(i,a,b);sum2=arithmetic(j,c,d);sum3=sum1*sum2;} if(k==3){ sum1=arithmetic(i,a,b);sum2=arithmetic(j,c,d);if(sum2!=0){ sum3=sum1/sum2;} } 在输入方面,按要求,数据类型是 1 至13 的整数,符合则进行运算,不符合则重新输入。用if语句来实现,如下 if(a[i]<1 || a[i]>13 || a[i]!=int(a[i]))
在输出方面,运算结果等于 24就输出,利用调用的参数判断输出形式,有5种:(a+b)*(c+d),a*(b*(c+d)),(a*(b+c))*d,a*((b+c)*d),((a+b)*c)*d。算法如下:
void show(int type,int i,int j,int k,float a,float b,float c,float d){ if(type==1){
if(j==4 || j==5){
if(k==4 || k==5)
cout< else cout<<“(”< else if(k==4 || k==5) cout< } else cout<<“((”< } if(type==2 || type==3){ cout<<“(”< 程序流程框图如图2-3所示: 图2-3 3程序调试 3.1测试用例 开始运行时的页面如图4-1所示: 图4-1 首先,测试程序能不能运算出正确的结果,输入数据6,6,6,6,出现了44组符合要求的解,如图4-2所示。 接着输入数据2,9,7,14,提示输入错误,重新输入2,7,5,13,能得到正确运行结果,如图4-2所示。 输入4,9,11,13,不能运算得到24,显示“你所输入的数,经过四则运算后,不等于24点”,如图4-3所示。 输入5,5,5,1,这组数据要运算得到24,一定会出现小数,因为只有一种运算,即5*(5* /“ 4个运算符号选3个,有4*4*4=64种 for(j=0;j<6;j++) // 3种运算符排列 有 3!=6 种 for(k=0;k<6;k++) { if((!(i==3 && b==0))&&(!(j==3 && c==0))&&(!(k==3 && d==0)))// 括号的类型为(()){ // 3为做除法运算的标志,除数为 0 时,跳过 = = sum1=arithmetic(i,a,b); //a,b做 以 i 为标志的运算,然后把值赋给sum1 sum2=arithmetic(j,sum1,c);//sum1,c做 以 j 为标志的运算,然后把值赋 给sum2 sum3=arithmetic(k,sum2,d);//sum2,d做 以 k 为标志的运算,然后把值赋给sum3 if(fabs(sum3-24)<0.001)//判断能否运算出24,出现小数时,能够包含在内 { check++; //标志能运算出24 show(1,i,j,k,a,b,c,d);// 输出运算出 24 的表达式 } } if(k==2)//()*() { sum1=arithmetic(i,a,b);//a,b做 以 i 为标志的运算,然后把值赋给sum1 sum2=arithmetic(j,c,d);//sum1,c做 以 j 为标志的运算,然后把值赋给sum2 sum3=sum1*sum2; if(fabs(sum3-24)<0.001)//出现小数时,能够包含在内 { check++; //标志能运算出24 show(2,i,j,k,a,b,c,d);// 输出运算出 24 的表达式 } } if(k==3)// 括号的类型为()() { sum1=arithmetic(i,a,b);//sum1,c做 以 j 为标志的运算,然后把值赋给sum2 sum2=arithmetic(j,c,d);//sum1,c做 以 j 为标志的运算,然后把值赋给sum2 if(sum2!=0) { sum3=sum1/sum2; if(fabs(sum3-24)<0.001)//出现小数时,能够包含在内 { check++; //标志能运算出24 show(3,i,j,k,a,b,c,d); // 输出运算出 24 的表达式 } } } } } void main(){ int i,j,k,l,m=0; float a[4]; //储存所输入的 4个 整数 while(m==0){ m=1; cout<< ”请输入4 个 1--13 的整数:“< for(i=0;i<4;i++){ cin>>a[i]; if(a[i]<1 || a[i]>13 || a[i]!=int(a[i]))//判断是否为符合要求的整数 { if(m!=0){ } cout<<”输入错误,请重新输入!“< m=0;} } for(i=0;i<4;i++) //4的排列 4!=24,每中情况调用calculate for(j=0;j<4;j++) if(j!=i) //第2数和第1个数不能重复 for(k=0;k<4;k++) if(k!=j && k!=i)//第3数和第1,2个数不能重复 for(l=0;l<4;l++) if(l!=i && l!=j && l!=k)//第4数和第1,2,3个数不能重复 { calculate(a[i],a[j],a[k],a[l]);//调用calculate函数,进行进行加、减、乘、除运算 } } if(check==0)//不能运算出24 { cout<<”你所输入的数,经过四则运算后,不等于24点"< 程序设计实验 大作业 成绩: 学院:班级:学号:指导老师:姓名:实验项目名称:猜数字游戏 一、实验要求 根据所学知识编写一个小游戏--猜数字游戏 二、实验目的为了加深对编程课程的基本知识的理解和掌握,并且掌握编程和程序调试的技巧通过程序的设计训练和提高学生的基本技能,掌握字符串的表示方法和字符串函数的功能、编程软件操作的基本知识、键盘上特殊键的获取以及图形方式下光标的显示,提高编程兴趣与编程水平,学会如何正确的书写程序设计说明文档,提高解决实际问题的能力,巩固语法规则的理解和掌握,学会通过源程序写出流程图,提高自学以及查阅资料的能力。 三、功能模块分析 1.系统能够随机产生一个1到1000的数字 2.比较输入数字与随机产生数字的大小 3.选择是否继续游戏 四、修改处 1.将输出内容由英文变为汉字 2.改变背景及输出字体的颜色将随机产生的数值范围由1-100变为1-1000 四、设计思路 # include # include # include main() {void textbackground(int color); system(“color fc”); int a,b; char c; srand(time(NULL)); a=1+(rand()%1000); printf(“这有一个数字从1到1000.n你能猜出它吗?n输入你猜的数字.n”);scanf(“%d”,&b); while(b!=-1) { if(b==a) { printf(“恭喜你猜对了!n你喜欢再玩一遍吗?(y or n)?”); scanf(“%c”,&c); scanf(“%c”,&c); switch(c){ case 'y': printf(“这有一个数字.n你能猜出它吗?n输入你猜的数字.n”);scanf(“%d”,&b); break; case 'n': break; } } while(b { printf(“低了,再试一次.”); scanf(“%d”,&b); } while(b>a) { printf(“高了,再试一次.”); scanf(“%d”,&b); } } } 未修改前截图 更改后截图 四、体会心得 通过本次试验我见识到了C语言的重要性和我在程序设计方面的不足,让我了解到要把书本知识转换为可以实际操作的东西是需要扎实的理论基础和严谨的逻辑思维的,同时我也发现了平时很多没有注意到的问题,弥补了我C语言方面的不足,在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,通过实践的学习,我认识到学好计算机要重视实践操作 Java程序设计实验报告 班级: 学号: 姓名: 实验题目:猜拳小游戏 实验要求: 用java编写一个人机对战的猜拳小游戏。人选择性出拳,电脑随机出拳,判断输赢,记录输赢情况。有简单的操作界面。 实验内容: 1、问题分析过程: (1)首先分析猜拳游戏本身的玩法: 人选择性出拳,电脑随机出拳,判断输赢,记录输赢情况。(2)用面向对象的思想来分析: 在游戏过程中有几个对象组成人 电脑 游戏规则 抽象出3个类:Person、Computer、Game Person类有哪些属性和行为呢? 属性:名字name,输赢次数(比分)score 行为:出拳ShowFirst() 选择性 Computer类有哪些属性和行为呢? 属性:名字name,输赢次数(比分)score 行为:出拳showFist() 随机 Game类有哪些属性和行为呢? 属性:游戏的双方(person、computer)、对战局数count 行为:产生角色initial()、游戏规则startGame()、显示比赛结果showResult()、统计 比赛结果calcResul() 2、主要实现代码: import java.util.*;public class StartGame { public static void main(String[]args){ Game start = new Game();//实例化游戏类 start.initial();//调用初始化方法 start.startGame();//调用游戏开始方法 start.showResult();//调用游戏结果显示方法 } } import java.util.*;public class Person { String name;//名字属性 int score;//积分属性 //出拳方法 public int showFist(){ System.out.print(“n请出拳:1.剪刀2.石头3.布(输入相应数字):”); Scanner input = new Scanner(System.in); int num = input.nextInt(); String fist = “";//保存出拳 switch(num){ case 1: fist = ”剪刀“; break; case 2: fist = ”石头“; break; case 3: fist = ”布“; break; } System.out.println(name + ”出拳:“ + fist); return num;} } import java.util.*;public class Game { //Person person; //甲方 //Computer computer;//乙方 int count; //对战次数 Person person = new Person();//实例化用户类 Computer computer = new Computer();//实例化计算机类 //初始化方法 public int initial(){ count = 0; return count;} //游戏开始方法 public void startGame(){ //显示游戏开始界面 System.out.println(”---------------欢 迎 进 入 游 戏 世 System.out.println(“tt******************************”); System.out.println(“tt** ^_^ 猜拳,Start ^_^ **”); System.out.println(“tt*****************************”); 界--------------n“); System.out.println(”nn出拳规则:1.剪刀 2.石头 3.布“);//选择计算机角色 System.out.print(”请选择对方角色:1.刘备 2.孙权 3.曹操:“);Scanner input = new Scanner(System.in);int num = input.nextInt();switch(num){ case 1: computer.name = ”刘备“;break;case 2: computer.name = ”孙权“;break;case 3: } computer.name = ”曹操“;break;//输入用户角色名 System.out.print(”请输入你的姓名:“);person.name = input.next(); //显示对战双方 System.out.print(person.name + ” VS “ + computer.name + ” 对战n“);//开始游戏 System.out.print(”n要开始吗?(y/n)“);String con = input.next();int perFist;//用户出的拳 int compFist;//计算机出的拳 if(con.equals(”y“)){//判断是否开始 String answer = ”y“; while(”y“.equals(answer)){//循环条件是是否开始下一轮 //出拳 perFist = person.showFist();//调用用户出拳方法 compFist = computer.showFist();//调用计算机出拳方法 //裁决 if((perFist == 1 && compFist == 1)|| (perFist == 2 && compFist == 2)|| (perFist == 3 && compFist == 3)){ System.out.println(”结果:和局,真衰!n“);//平局 } else if((perFist == 1 && compFist == 3)|| (perFist == 2 && compFist == 1)|| (perFist == 3 && compFist == 2)){ System.out.println(”结果:恭喜, 你赢了!n“);//用户赢 person.score++; //累计用户积分 } else{ } } System.out.println(”结果说:^_^,你输了,真笨!n“);//计算机赢 computer.score++; //累计计算机积分 } count++;//累计对战次数 System.out.print(”是否开始下一轮(y/n):“);answer = input.next();} //比较得分情况的方法 public void showResult(){ System.out.println(”-----------------------“);System.out.println(computer.name + ” VS “ + person.name); System.out.println(”对战次数:“ + count);System.out.println(”n姓名t得分n“ + person.name + ”t“ + person.score + ”n“ + computer.name + ”t“ + computer.score + ”n“); //比较积分 if(computer.score == person.score){ System.out.println(”结果:打成平手,下次再和你一分高下!“); } else if(computer.score < person.score){ System.out.println(”结果:你果然是高手,“ + computer.name + ”佩服!“); } else{ System.out.println(”结果:呵呵,笨笨,下次加油哦!“); } System.out.println(”-----------------------“);} } public class Computer { String name;//名字属性 int score;//积分属性 //出拳方法 public int showFist(){ int num =(int)(Math.random()*3)+ 1;String fist = ”“;switch(num){ case 1: fist = ”剪刀“; break;case 2: fist = ”石头“; break;case 3: fist = ”布“; break; } System.out.println(name + ”出拳:" + fist); return num;} } 运行界面: 3、实验心得体会: 从本次课程设计的完成中,我发现我有很多不足的地方,最突出的是所掌握的知识太少,学到的知识应用不到实践中。后来通过看书查找相关资料,完成课程设计任务。 程序设计语言是程序设计的工具,如果想有效的设计程序,正确的应用程序表达算法,必须准确应用程序设计语言;学习程序设计,必须要多读程序,并试着自己编写程序,多上机调试程序代码。 游戏1:记名字 这个游戏适合初次见面用来记住在座各位的名字。主持者等各人做好自我介绍之后说好规则:大家一起有节奏的拍掌(两拍接一响指),然后主持人说一个名字,此人不用动作,继续拍掌(两拍接一响指),左手边的人喊另外一个人的名字,继续拍掌,一直下去,错了受罚。 另外一种玩法:围成一圈,第一个人说“我叫XXX,我喜欢打篮球”,第二个人必须说,“我是站在喜欢打篮球的XXX旁边的喜欢吃醋的YYY”,第三个人就必须说前面两个人的特性和名字了,排在最后那老兄就惨了,要说十几个人,不过他也听得最多,所以还是说得出的。这样一圈,名字就都记住了,接下来可以更熟一点。 游戏:2:(压轴、力荐)拉拉手 1.让全体同学站到场中央,分散开,手牵手成一个圈 2.观察一下左手牵的是谁的右手,右手牵的是谁的左手(重点) 3.然后松开手,打乱次序站在一起不留空隙 4.不要移动脚,像刚才那样左右手相对应拉手 5.缓慢解开(注意安全) 目的:训练大家的团队意识 游戏3:连连看 1.两位主持站队前,分别对第一位同学说一个具体意象,如钓鱼、划船、月亮、皇冠、圣诞老人等 2.第一位同学不许说话,用动作表演给第二位同学,第二位表演给第三位看……直到最后一位同学说出具体意象 3.再来两队 游戏4:交换名字 内容:这个游戏乃在于考验人们的习性。平常对于自己的名字,可说是耳熟不过了,但若临时更换名字,可就会觉得陌生了。 方法: (1)人数在 10 个人最适合(2)参加者围成一个圆圈坐着。 (3)围个圆圈的时候,自己随即更换成右邻者的名字。 (4)以猜拳的方式来决定顺序,然后按顺序来提出问题。 (5)当主持人问及“张三先生,你今天早上几点起床?”时,真正的张三不可以回答,而必须由更换成张三的名字的人来回答:“恩,今天早上我 7点钟起床!”?? (6)当自己该回答时却不回答,不是自己该回答的人就要被淘汰。 (7)最后剩下的一个人就是胜利者。 游戏5:直呼其名 时间:10~15分钟 人数: 不限,人数较多时,需要将队员划分成若干个由15~20个人组成的小组。 目的:帮助大家记住彼此的名字。 准备: 步骤: 1.选一块宽阔平整的游戏场地。 2.队员们以小组为单位站成一圈。每人相距约一臂长。作为培训专员的你也不例外。 3.告诉小组游戏将从你手里开始。你大喊出自己的名字,然后将手中的球传给自己左边的队友。接到传球的队友也要如法炮制,喊出自己的名字,然后把球传给自己左边的人。这样一直继续下去,直到球又重新回到你的手中。 4.你重新拿到球后,告诉大家现在我们要改变游戏规则了。现在接到球的队员必须要喊出另一个队员的名字,然后把球扔给该队员。 5.几分钟后,队员们就会记住大多数队友的名字,这时,再加一只球进来,让两个球同时被扔来扔去,游戏规则不变。 6.在游戏接近尾声的时候,再把第三只球加进来,其主要目的是让游戏更加热闹有趣。 7.游戏结束后,在解散小组之前,邀请一个志愿者,让他在小组内走一圈,报出每个人的名字。 讨论问题示例: 安全: 注意扔球的时候不可用力过猛。你最初的扔球应当是一个较慢的高球,为后续的扔球手法树立典范。 变通:1.如果几个小组同时在玩这个游戏,可以让不同的小组在游戏中间交换一半队员。 2.让队员们可以随心所欲地更换小组。被新小组接纳的唯一条件是新成员在站好位置后喊出自己的名字,以便其他队员扔球给他。 一 团队精神游戏 一 快乐传真 每个组5-8个人为宜,一组人按1行胸对背的排列。第一个人面向主持人其余人向后转,背向第一个人。第一个人看主持人给的题目,看完后,主持人收起题目,第一个人拍第二个人肩膀示意让其转身。第一个人通过肢体语言,把刚刚看到的词语的含义表示出来,然后第二个人根据自己的理解同样把自己的理解通过肢体语言传递给第三个人。以此类推。传到该组最后一个人时,这个人需要说出成语。比赛过程中不得以语言或口形提示。没有说出成语的团队接受惩罚。如:一箭双雕垂头丧气口是心非亡羊补牢十拿九稳树大招风一口吃个大胖子枪打出头鸟放下屠刀立地成佛,猴子捞月等 二 盲人方阵(考验团队协作,集体智慧,领导能力) 全体队员戴好眼罩,利用绳子,在规定的时间内做成一个正方形(所有的人相对均匀的分布在正方形的各个边上),菱形或圆形等(抽签决定) 三 盲人摸号 用语言、表情、甚至眼神沟通并传递信息都不是难事,现在这个游戏却要打破常规,制造一些限制条件来训练学生的沟通能力,并让他们体会改变自己已适应环境和条件的限制。 1给组员戴上眼罩。 2发给每人一个号码,这个号码只有本人知道。 3让这些受训者根据每人的号码,按从大到小的顺序排成一列。这个过程中任何人都不能说话或发出声音,如果有人摘下眼罩或说话,游戏即告失败。 这个游戏需要考验的是: 1你是怎样与其他成员交流的。 2你们用什么方法得知别人的号数和位置? 四 你画我猜 跟QQ游戏里的你画我猜游戏规则类似,每组派一到两个组员画,其余的人猜,时间最短的获胜。 五 瞎子瘸子 目的:沟通配合能力,活跃气氛游戏规则: 每组派三男三女,男生背女生,男生当“瞎子”,用纱巾蒙住眼睛,女生扮“瘸子”,为“瞎子”指引路,绕过路障,达到终点,其中路障设置可摆放椅子,须绕行;鲜花,须拾起,递给女生。最早到达者,为赢。可以同时多组一起比赛。 六 “谁是卧底” 游戏人数:最好7个游戏者,1个卧底,若干不明所以围观者。游戏规则:在场7个人中6个人拿到相同的一个词语,剩下的1个拿到与之相关的另一个词语。每人每轮只能说一句话描述自己拿到的词语(不能直接说出来那个词语),与不能让卧底发现,也要给同胞以暗示。每轮描述完毕,7人投票选出怀疑是卧底的那个人,得票数最多的人出局,俩个人一样多的话,待定(就是保留)。若有卧底撑到剩下最后三人,则卧底获胜,反之,则大部队获胜。比如胡子和眉毛,猪肉和牛肉等等 七 100s不NG(可以作为输队的惩罚) 简单来说就是参加游戏的每一个人都要在规定的时间内一次性完成他的任务,而且要大家都要一次性连贯的做完,中间如果有谁没有完成任务,或者是超过时间,都要重头来过。 1.第一关组员做左转三圈右转三圈,重复三次走直线。做完说“哦吧,gangan style” 2第二关组员跳骑马舞,加动作。 3第三关组员做五个俯卧撑并拿起旁边的横幅说出通关密语:恭喜发财.4最后一关还在想。。 小惩罚: 大茶壶我是茶壶矮又肥,——作矮肥状这是壶嘴这是柄,——一手侧前点作壶嘴状,一手撑腰作壶柄状,呼啦啦,呼啦啦,——双手向上扬作水蒸气状水开啦,水开啦,——双手向上扬作水蒸气状倒茶,倒茶。 ——壶嘴状之手点作斟茶状,另一手作壶柄状。 Ps:先随便想了点点子,你看下,根据时间啊,可行性什么的,看看有么有用的上的。有用得上的游戏再来具体策划吧!(*^__^*)„„第二篇:C语言小游戏程序设计
第三篇:Java猜拳小游戏程序设计实验报告
第四篇:小游戏
第五篇:小游戏