• 对比python学julia(第三章:游戏编程)(第二节)公主迎圣诞(1)


    2.1.    游戏介绍

      这是原书介绍的第一个游戏,适合4 岁以上的小朋友玩。下图所示是这个游戏在不同状态时的画面截图。启动这个游戏程序,就进人游戏的欢迎画面。这时按下链盘上的回车键就可以开始游戏。

    游戏欢迎画 游戏进行画面 游戏结束画面

      在游戏进行中,从天空中会不断地随机掉下雪花、礼物和剪刀。玩家使用键盘上的左、右方向键控制公主角色往左、右两个方向移动,让公主躲避剪刀、接住礼物和雪花。接到雪花可获得10分,接到礼物可获得50分。游戏开始时,玩家有3颗爱心宝石。如果玩家让公主碰到剪刀,就要扣掉1颗爱心宝石;如果爱心宝石用光了,那么碰到剪刀就会结束游戏。这个游戏的时间限定为5分钟。游戏开始后就开始倒计时,时间到,则游戏结束。

      在游戏结束画面,按下链盘上的回车键可以重新开始游戏。如果要退出游戏程序,可以单击窗口中的“关闭”按钮。

    2.2.    编程思路

      这个游戏要实现的功能并不复杂,整个游戏分为3个状态,即等待、进行和结束。在各个状态下需要实现的功能见下表:

      原书表 29-1 游戏状态及功能

    状态

    功能

    等待状

    l  显示游戏欢迎背景图

    l  等待状态 按下回车开始玩

    进行状态

    l  显示游戏进行背景图

    l  循环播放《铃儿响叮当》伴奏曲

    l  用左、右方向键控制公主左、右移动

    l  礼物、雪花和剪刀随机地从天空中掉下

    l  公主接到礼物加50分,接到雪花加10分

    l  公主碰到剪刀减掉1课爱心宝石

    结束状态

    l  显示游戏结束背景图

    l  按下回车键重新玩游戏

      这个游戏的3个状态在不同的条件下被触发和转换,其变化情况如原书 图29-2 所示。

      在游戏进行中,从天空中会随机掉落物体,可能是雪花、礼物或剪刀中的一个。 使用随机函数决定掉落物体的类型,将雪花、礼物和剪刀三者的比例控制为为5:3:2。 也就是在1到10之间随机生成一个数n 。如果1≤n≤5,则掉落物体是雪花。如果6≤n≤8,则掉落物体是礼物。如果9≤n≤10,则掉落物体是剪刀。

      在游戏时需要判断公主是否碰到雪花、礼物或刀剪,专业的说法叫作“碰撞检测 ”。在Pyglet 中并没有提供碰撞检测的功能,需要编程者自己实现。不过好在GameZero很贴心地提供了碰撞检测的函数collide(a,b)。

      function collide (a,b)

      参数a,b是两个actor对象

      function collide (a, x::Integer, y::Integer)

      参数a是一个actor对象,x,y是某个坐标点

      function collide (a, pos::Tuple)

      这是上一个函数的变体:

      collide(a, pos::Tuple) = collide(a, pos[1], pos[2])

      事实上,所谓碰撞检测,就是使用数学上的两点之间距离公式算出计两个角色之间的距离,当这个距离小于某个数值时,就认为两个精灵碰撞在一起。这个距离通常以角色的中心点起始计算。如果各位读者需要自行检测碰撞,GameZero还提供距离距离检测函数:

      function distance (a::Actor, target::Actor)

      function distance(a::Actor, tx, ty)

      为了实现这个游戏,需要准备一些图片素材和音乐素材,原书提供的资源包中包含了这些素材。对各种素材的简单介绍如下:

      (1) 在游戏处于3个不同状态时分别显示不同的背景图像。每个状态的背景图像上已经写上相应的提示信息,这样可以减少编程的工作量。

      (2) 游戏开始时,玩家有3 颗爱心宝石,每次碰到剪刀就会被扣掉 1 颗。为简化编程,在爱心宝石数量变化时,将显示不同的图像。

      (3) 游戏进行中使用的公主、雪花、礼物、剪刀的造型图像采用 PNG 格式。

      (4) 在游戏进行中循环播放一首名为《铃儿响叮当》的伴奏曲。(原书资源包提供的是w4a格式的文件,GameZero不支持播放此类格式的音乐,笔者将其转变为MP3格式)

      (5) 在公主碰到雪花、礼物或剪刀时播放一个 pop 音效声。

      提示:在进入这个游戏的编程介绍之前,希望大家先试玩一下,以便更好地了解这个游戏需要实现的各项功能。所以这里先放出完整的代码供大家下载试玩。

      下载地址:https://files.cnblogs.com/files/zjzkiss/sdgz.rar

  • 相关阅读:
    IDEA创建WEB项目部署详细步骤
    Java计算两个日期相差的天数
    使用Callable和Future创建线程
    Java使用POI导出Excel表格
    关于Intellij IDEA的使用小技巧
    python描述符
    登录百度下载博客
    WINDOWS下Mysql的安装
    迭代器就是重复地做一些事情,可以简单的理解为循环,在python中实现了__iter__方法的对象是可迭代的,实现了next()方法的对象是迭代器,这样说起来有
    Python札记 -- 装饰器
  • 原文地址:https://www.cnblogs.com/zjzkiss/p/16484125.html
Copyright © 2020-2023  润新知