Python街机arcade彩色形状示例

"""
这个动画演示如何展示多个物体的移动,顺便演示了类的继承。
This simple animation example shows how to use classes to animate
multiple objects on the screen at the same time.
由于每帧都画所有图形,所以它运行很慢,是低效的。
Because this is redraws the shapes from scratch each frame, this is SLOW
and inefficient.
使用缓冲缓图命令要更复杂一些,但速度更快。
Using buffered drawing commands (Vertex Buffer Objects) is a bit more complex,
but faster.
 
"""

import arcade
import random

# 设置常量
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
SCREEN_TITLE = "彩色形状示例"

RECT_WIDTH = 50
RECT_HEIGHT = 50

NUMBER_OF_SHAPES = 200

class Shape:

    def __init__(self, x, y, width, height, angle, delta_x, delta_y,
                 delta_angle, color):
        self.x = x                     # x坐标
        self.y = y                     # y坐标
        self.width = width             # 宽度
        self.height = height           # 高度
        self.angle = angle             # 角度
        self.delta_x = delta_x         # 水平移动速度
        self.delta_y = delta_y         # 垂直移动速度
        self.delta_angle = delta_angle # 每次旋转角度
        self.color = color             # 颜色

    def move(self):
        self.x += self.delta_x
        self.y += self.delta_y
        self.angle += self.delta_angle


class Ellipse(Shape):

    def draw(self):
        arcade.draw_ellipse_filled(self.x, self.y, self.width, self.height,
                                   self.color, self.angle)


class Rectangle(Shape):

    def draw(self):
        arcade.draw_rectangle_filled(self.x, self.y, self.width, self.height,
                                     self.color, self.angle)


class MyGame(arcade.Window):
    """ Main application class. """

    def __init__(self):
        super().__init__(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_TITLE)
        self.shape_list = None

    def setup(self):
        """ 设置游戏及初始化变量. """
        self.shape_list = []   # 只是单纯的一个列表

        for i in range(NUMBER_OF_SHAPES):          # 随机生成一些形状
            x = random.randrange(0, SCREEN_WIDTH)
            y = random.randrange(0, SCREEN_HEIGHT)
            width = random.randrange(10, 30)
            height = random.randrange(10, 30)
            angle = random.randrange(0, 360)

            d_x = random.randrange(-3, 4)
            d_y = random.randrange(-3, 4)
            d_angle = random.randrange(-3, 4)

            red = random.randrange(256)
            green = random.randrange(256)
            blue = random.randrange(256)
            alpha = random.randrange(256)

            shape_type = random.randrange(2)

            if shape_type == 0:
                shape = Rectangle(x, y, width, height, angle, d_x, d_y,
                                  d_angle, (red, green, blue, alpha))
            else:
                shape = Ellipse(x, y, width, height, angle, d_x, d_y,
                                d_angle, (red, green, blue, alpha))
            self.shape_list.append(shape)

    def update(self, dt):
        """ 移动所有形状 """

        for shape in self.shape_list:
            shape.move()

    def on_draw(self):
        """
        渲染所有图形
        """
        arcade.start_render()

        for shape in self.shape_list:
            shape.draw()
        


def main():
    window = MyGame()
    window.setup()
    arcade.run()


if __name__ == "__main__":
    main()

 

本站所有作品,教程等皆为原创,版权所有。只供个人及单位内部研究使用,对外展示或传播必需经本站同意,且注明来自本站。培训机构等用本站资源培训学生,需经本站授权。一旦付款,表示同意本站知识付费原则:数字商品,不支持退款。亦可直接向微信号scratch8付款购买。入住QQ群:225792826 和爱好者共同交流,并且能下载免费提供的Python资源(需提供真实姓名才可入群)
李兴球的博客_Python创意编程技术前沿_pygame » Python街机arcade彩色形状示例
scratch

学本领,探索更大的世界!

李兴球博客 风火轮编程主页