这是一个快递送货模拟游戏,玩家控制一辆送货小车在社区中行驶,将包裹投递到正确的房屋,同时要避免撞到房屋。代码结构分析
1. 精灵种类定义
python
- class SpriteKind:
-
- Object = SpriteKind.create() # 房屋对象
复制代码
2. 核心游戏机制
胜利条件
python
- def on_overlap_tile(sprite, location):
-
- game.over(True, effects.confetti) # 到达特定瓦片游戏胜利
-
- scene.on_overlap_tile(SpriteKind.player, myTiles.tile3, on_overlap_tile)
复制代码
包裹投递系统
游戏提供两种投递方式:
A键:向上投递包裹
B键:向下投递包裹
python
- def on_a_pressed():
-
- package2 = sprites.create_projectile_from_sprite(包裹图片, car, 0, -50) # 向上投递
-
-
-
- def on_b_pressed():
-
- package1 = sprites.create_projectile_from_sprite(包裹图片, car, 0, 50) # 向下投递
复制代码
3. 车辆控制系统
方向感应动画
游戏的一个特色是根据行驶方向改变车辆图像:
python
- def on_up_pressed():
-
- car.set_image(向上行驶的车辆图片) # 车辆正面视角
-
-
-
- def on_down_pressed():
-
- car.set_image(向下行驶的车辆图片) # 车辆背面视角
-
-
-
- def on_left_pressed():
-
- car.set_image(向左行驶的车辆图片) # 车辆左侧视角
-
-
-
- def on_right_pressed():
-
- car.set_image(向右行驶的车辆图片) # 车辆右侧视角
复制代码
车辆控制
python
- controller.move_sprite(car) # 启用方向键控制移动
-
- scene.camera_follow_sprite(car) # 相机跟随车辆
复制代码
4. 得分系统
成功投递 (+1分)
python
- def on_on_overlap(sprite2, otherSprite):
-
- music.magic_wand.play() # 成功音效
-
- sprite2.destroy(effects.confetti, 500) # 包裹消失效果
-
- info.change_score_by(1) # 得分
-
- sprites.on_overlap(SpriteKind.projectile, SpriteKind.Object, on_on_overlap)
复制代码
碰撞房屋 (-1分)
python
- def on_on_overlap2(sprite3, otherSprite2):
-
- # 播放降调音效序列
-
- music.play_tone(147, music.beat(BeatFraction.QUARTER))
-
- music.play_tone(139, music.beat(BeatFraction.QUARTER))
-
- music.play_tone(131, music.beat(BeatFraction.QUARTER))
-
- scene.camera_shake(2, 200) # 相机震动效果
-
- info.change_score_by(-1) # 扣分
-
- sprites.on_overlap(SpriteKind.player, SpriteKind.Object, on_on_overlap2)
复制代码
5. 地图和环境设置
地图加载
python
- scene.set_background_color(7) # 设置背景颜色
-
- tiles.set_tilemap(tilemap("level")) # 加载关卡地图
复制代码
房屋生成系统
游戏生成两种颜色的房屋:
紫色房屋(对应特定瓦片类型):
python
- for value in tiles.get_tiles_by_type(myTiles.tile1):
-
- myPurpleHouse = sprites.create(紫色房屋图片, SpriteKind.Object)
-
- tiles.place_on_tile(myPurpleHouse, value)
复制代码
红色房屋(对应另一种瓦片类型):
python
- for value2 in tiles.get_tiles_by_type(myTiles.tile2):
-
- myRedHouse = sprites.create(红色房屋图片, SpriteKind.Object)
-
- tiles.place_on_tile(myRedHouse, value2)
复制代码
车辆初始位置
python
- car = sprites.create(初始车辆图片, SpriteKind.player)
-
- tiles.place_on_random_tile(car, myTiles.tile4) # 在特定瓦片上随机位置生成
复制代码
|