辽宁省沈阳市第十五中学2020年高中数学论文 图形计算器应用能力测试活动学生 用ClassPad 330编制一个炮弹小游戏(通用)_第1页
辽宁省沈阳市第十五中学2020年高中数学论文 图形计算器应用能力测试活动学生 用ClassPad 330编制一个炮弹小游戏(通用)_第2页
辽宁省沈阳市第十五中学2020年高中数学论文 图形计算器应用能力测试活动学生 用ClassPad 330编制一个炮弹小游戏(通用)_第3页
辽宁省沈阳市第十五中学2020年高中数学论文 图形计算器应用能力测试活动学生 用ClassPad 330编制一个炮弹小游戏(通用)_第4页
辽宁省沈阳市第十五中学2020年高中数学论文 图形计算器应用能力测试活动学生 用ClassPad 330编制一个炮弹小游戏(通用)_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、辽宁省沈阳市第十五中学2020年高中数学论文 图形计算器应用能力测试活动学生 用ClassPad 330编制一个炮弹小游戏 前一段时间在学校的触屏电脑上经常有人玩一种叫“TNT”的弹射类游戏,其基本原理就是通过模拟物理中的抛物线模型,用“炮弹”轰击对方以取胜。虽然在这款游戏中有很多的附加元素,但基本原理比较简单。用ClassPad 330可以编写出这样的程序,唯一的缺陷就是画面不够精美。虽然在计算机上可以之间编制程序,但是在ClassPad 330上编程序可以在繁杂的作业之中放松,很方便。由于我自己没有专门学过编程,所以所用的一些语法和思路都是比较原始简单的。基本原理1. 图形的输出可以用lo

2、cate语句实现,如locate 1,1,表示在(1,1)位置放置一个图标。这里面的坐标系是以左上角为远点,向右为x轴正方向,向下为y轴正方向建立的。2. 需要输入的参数有三个:出射高度、初速度、角度。这个可以用input语句实现3. 需要随即一个目标靶子,靶子的坐标可以用随机函数给出并限定其范围。4. 忽略空气阻力影响,炮弹的横向速度不改变,只由于重力改变纵向速度。因此相同的时间间隔内炮弹的横坐标变换量相同。所以可以通过for语句来不断给出炮弹的横坐标,反推炮弹的飞行时间,再通过飞行时间推炮弹的纵坐标5. 由于游戏中没有单位,所以重力加速度不一定为g,且为了明显地在初始视框内体现抛物线,可以

3、对横纵坐标进行一定的比例放大或者缩小。程序编制一、 先建立一个给定参数可以发射炮弹的程序1) 打开Program应用,创建一个新的程序,程序名为paoshe。2) 首先测定初始视框的范围,不断用locate语句尝试,得出视框横向约为140单位,纵向约为75单位。(在不点击resize的情况下)3) 首先建立初始的炮台,炮台由上面的一个炮弹和下面的发射架组成。输入:ClrTestLocate 1,73, Locate 1,70, pause4) 输入参数,由于计算器默认设置为弧度制,而输入时角度制更为直观,所以在内部加上一个角度制转换弧度制的语句。并在输入完成后等待1s,将发射架移至给定高度的发

4、射点输入:Input h, gao du? Input ,jiao du?(jiao du zhi) /180*Input v, chu su du? Wait 1ClrTestLocate 1,70-h, Locate 1,67-h, 5) 理论推导抛物线的方程;根据此式输入:For 10x to 130 step 10x/v/cos()tv*t*sin()-0.5*10*t2y70-h-yyLocate x,y, Next由于classpad的运算速度比较小,所以每次循环的间隔时间刚刚好,若在电脑中则要添加一个wait:Wait .56) 将上述代码输入后测试,以高度为10,角度为45度,

5、初速度为1测试,得到的轨迹不但没有呈现抛物线上升的一段,且很快出现error对话框提示Incorrect Argument。经过大量测试,发现并不是语法错误,而是当locate语句中的坐标值小于1或大于290时便无法输出。因此要对代码中的参数比例进行修改。将x缩小为原来的十分之一,将刚开始算出的变化量的y值放大为原来的十倍,之后修改a值以使在测试情况下抛物线的对称轴尽量在屏幕中央(x=70):得出a为14。将 5)中语句修改为For 10x to 130 step 10x/10/v/cos()tv*t*sin()-0.5*14*t2y10yy70-h-yyLocate x,y, Next7)

6、继续测试,发现有些情况下炮弹会飞出“天”计算出的纵坐标y小于1了,此时应判定为失败,同时在y坐标大于290时也会出现意外情况。且若y大于80,就无法命中靶子了,所以在现有基础上加上两个jump语句和两个if条件语句以判断。同时为防止如角度大于90,初始高度大于70之类的情况,再在输入数据后加一个判断。这一部分最终输入:ClrTestLocate 1,73, Locate 1,70,Locate 70,35, welcome!PauseLbl q1Input h, gao du? Input ,jiao du?(jiao du zhi) Input v, chu su du?( suggeste

7、d 1) If h70 or 90 or v300000000ThenMessage ARE YOU KIDDING ME!?IfEnd/180*Wait 1ClrTestLocate 1,70-h, Locate 1,67-h, For 10x to 130 step 10x/10/v/cos()tv*t*sin()-0.5*14*t2y10yy70-h-yyIf y80ThenMessage Try Again?,What a pity! Goto q1If y1ThenMessage Try Again! Too High! Goto q1ElseLocate x,y, IfendNex

8、t二、 引入靶子,实现是否击中靶子的判定1) 先随机出靶子的坐标10rand(2,12)a10rand(1,6)b2) 再在炮台构建好之后构建靶子locate a,b+4,locate a,b-4,3) 实现是否击中靶子的判断,要使用多个if语句。在未击中时打出并在击中时打出。其中经过试验,以靶子中心上下8内大概就是靶子的长度。其中如果没有判定中跳出if语句,则继续执行未命中的情况。If xaThenLocate x,y,ElseIf b-8y and b+8yThenLocate a-5,y,Goto q2ElseLocate x,y,IfEndIfEndIfEnd4) 在3)中用到了q2,

9、在程序的最后加上这一段:Lbl q2Message Again!,Good Job!wait 2Goto q3其中q3设置在程序的最前端。实现随机一个新的靶子继续新的一局游戏。5) 再未跳至q2时,即为未命中,所以在3)后面加上未命中的判定:Message Try Again?,What a pity!Goto q1这样会跳至q1,即继续尝试原来的靶子。三、 添加一个计数器i1) 计数器需要在一开始(q3之后的顶端)便设置为0,在每次输入数据i都加1,成功的情况下输出i,跳至q3时便会重新设置为0;未成功的情况下返回q1,输入数据后还会加1以此直至判定成功。2) 所以在q3之后输入:Lbl q

10、30i3) 在输入数据后输入:input v,chu su du?(suggest:about 1)i+1i4) 在成功后立刻显示计数器的数值,但若单单显示一个数玩家不会懂是什么意思,所以要把i转化为字符串s,在s中i之前和之后分别加入说明:Lbl q2ExpToStr i,s1StrJoin You tried ,s1,s2StrJoin s2, times at last!,sprint s四、 进行其他的修饰修改,形成最终的程序:local a,b,h,x,y,v,t,k,i,s1,s2,sLbl q30iLbl q4ClrTextlocate 1,73,locate 1,70,loca

11、te 50,20,welcome!locate 1,40,click the botton to continuepauseClrTextlocate 1,73,locate 1,70,10rand(2,12)a10rand(1,6)blocate a,b+4,locate a,b-4,Lbl q1input h,gao du?input ,jiao du?(jiao du zhi)input v,chu su du?(suggest:about 1)i+1iIf h70 or 90 or v300000000ThenMessage ARE YOU KIDDING ME!?Goto q1IfE

12、nd/180wait 1ClrTextlocate a,b+4,locate a,b-4,locate 1,73-h,locate 1,70-h,For 10x To 130 Step 10x/10/v/cos()tvtsin()-0.5/14t2y10yy70-h-yyIf y80ThenMessage Try Again?,What a pity!Goto q1IfEndIf y1ThenMessage Try Again!,Too High!Goto q1ElseIf xaThenLocate x,y,ElseIf b-8y and b+8yThenLocate a-5,y,Goto q

13、2ElseLocate x,y,IfEndIfEndIfEndNextMessage Try Again?,What a pity!Goto q1Lbl q2ExpToStr i,s1StrJoin You tried ,s1,s2StrJoin s2, times at last!,sprint sMessage Again!,Good Job!wait 2Goto q3其他附加部分除了以上的语句之外,还可以另外增加很多功能,如将10次发射设为一组并增加一个计数器显示命中率、设置一个最高分的榜单由一个锁定的变量提供、加入两个人的对战系统等等。但最基本的思路就是以上的语句。缺陷、一些改进的思路在这里的程序中,图像的输出都是通过locate实现的,这样虽然比较简单,但是通过locate实现的话窗口就比较小,且无法变化。还可以通过sketch里面的语句进行类似功能的实现,且sketch输出与文本输出并不是一个地方,所以可以进行ViewWindow的改动,甚至可以使得每一次循环输出后就将ViewWindow的中心改动为新的轨迹位置。此外,其实这样的游戏有一个比较无耻的玩法由于设置的v上限仅仅为小于光速,所以无论靶子的位置在哪里,都可以直接输入高度为0,角度,初速度非常大以实现命中,失去了原有的难度。所以还可以在进行大量的测试后,将v

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论