这是我自己在学校的编程兴趣班里,为了测验班员的编程能力,自制的测试题。
由于我和他们用的计算机语言又有 C 又有 Java,我没有考察语法能力,而通常会考察算法构建能力。
这个题有几个小题组成,越到后面要求越难。
穿透或跳弹
Pentrate or Ricochet
请做一个处理具有穿透,又有跳弹动作的子弹的函数。
这个子弹设有穿透力 P,和跳弹力 R。
当子弹命中墙壁时,如 P > 0 ,那么会执行穿透。
穿透意味着子弹破坏墙壁,P 会减去 1,但它的速度保持不变。
如果子弹命中墙壁,P = 0 但是 R > 0 时,会执行跳弹。
跳弹意味着子弹不破坏墙壁,R 会减去 1,它的水平速度,或垂直速度会产生变化。
墙壁是像某个沙盒类游戏一样,不是连在一起的,而是以每一个小小的正方形方块拼成的。
当 P 和 R 都归零时,子弹会在下一次碰撞消失,此时墙壁不会被破坏。
子弹的坐标设为 X,Y,水平速度是 VX,垂直速度是 VY,你做的这个函数被保证每一秒执行。
注意,本题的情况设定是平面的,不是立体的。
请根据上文,回答以下题目。
(1)写一个整体的算法的概括图,但在这个小题里你可以抽象化以下处理。
墙壁破坏处理
墙壁碰触判断处理
跳弹处理(跳弹时的 VX,VY 转变判断与计算)
子弹消失处理
要求写好关于 P 和 R 的处理。
(2)设子弹在这个函数每次移动的路程为 D。请具体化你的函数保证 D 的不变。
(3)VX,VY 的数值远远超过一个方块的大小。请具体化墙壁碰触判断处理,并保证子弹执行的穿透或跳弹处理看起来是准确的。同时请保证 D 的不变。
追加信息:子弹过小,可以看为点。
我想在几天后发布这个帖子的题的答案例。
本题没有提到的地方均可以自己设定场景,但如有什么说明不足请在回帖栏指点。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于