Arcade最简收集金币小程序

这个程序演示了用Arcade街机模块制作一个收集金币的游戏。通过鼠标操作角色去碰撞金币,金币就会消失。运用了角色实例化,角色列表实例化,鼠标移动事件,碰撞检测等“技术”。

import arcade
import random

SCREEN_WIDTH = 800                                                    #  常量定义,屏幕宽度
SCREEN_HEIGHT = 600                                                   #   常量定义,屏幕高度
SCREEN_TITLE = "Arcade最简收集金币小程序_作者:李兴球"                # 常量定义,屏幕标题

class MyGame(arcade.Window):
    """    继承自窗口类的游戏类,在具体的游戏中,重写以下方法,删除不需要重写的方法。    """

    def __init__(self, width, height, title):
        super().__init__(width, height, title)                      #  调用父类的初始化方法新建一个窗口
        arcade.set_background_color(arcade.color.AMAZON)            #  设置背景颜色为亚马逊绿
        
    def setup(self):
        """ 这个方法是在实例化Mygame后对游戏进行一些设置。 """
        self.player = arcade.Sprite("characterx.png")               # 给游戏添加一个玩家控制的角色  
        self.coin_list = arcade.SpriteList()                        # 实例化一个金币列表
        for i in range(50):
            coin = arcade.Sprite("coin_01x.png")                    # 实例化一枚金币
            coin.center_x = random.randrange(SCREEN_WIDTH)
            coin.center_y = random.randrange(SCREEN_HEIGHT)
            self.coin_list.append(coin)
            

    def on_draw(self):
        """ 渲染屏幕  ,帧率为60左右,即每60份之一秒会自动调用此方法     """        
        arcade.start_render()                      # 此命令会用背景色填充屏幕,然后可以在这个代码下用draw命令画其它角色        
        self.coin_list.draw()                      # 先画所有金币
        self.player.draw()                         # 再画玩家

    def update(self, delta_time):
        """ 所有的角色移动等游戏逻辑都在这里编写代码   """
        coins = arcade.check_for_collision_with_list(self.player,self.coin_list) # 玩家和所有金币的碰撞检测,返回碰到的金币列表
        [coin.kill() for coin in coins]
    
    def on_mouse_motion(self, x, y, delta_x, delta_y):
        """ 当鼠标移动时会自动地调用此方法 """
        self.player.center_x = x
        self.player.center_y = y

def main():
    """主要的函数"""
    game = MyGame(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_TITLE)  # 实例化一个游戏
    game.setup()                                              # 对游戏进行设置
    arcade.run()                                              # 进入循环

if __name__ == "__main__":  
      main()