猫史档案馆


【Python作品分享】雷达侦测器【作品秀】

用户:调皮的暴风雀528调皮的暴风雀528查看:0 回复:3 评论:0 创建时间:2020-05-23T22:03:23


【作品展示】

center_image

 

【作品介绍】

雷达探测器游戏。

将雷达对准 红点(左右键控制),按空格发射,射中得1分,没射中可以重新瞄准!比比谁的分数高!(请复制代码并打开后使用)

 

【作品源代码】

from arcade import *

SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
SCREEN_TITLE = 'My Radar'
RADAR_INIT = 0
RADAR_SEND = 1
RADAR_REFLAX = 2
JUDGE = False


class Target():
    def __init__(self):
        self.x, self.y = random.randint(
            0, SCREEN_WIDTH), random.randint(0, SCREEN_HEIGHT)

    def draw(self):

        draw_point(self.x, self.y, color.RED, 20)


class Wave():
    def __init__(self, send_angle, reflax_x, reflax_y):
        self.send_angle = send_angle
        self.send_x, self.send_y = SCREEN_WIDTH//2, SCREEN_HEIGHT//2
        self.send_r = 0
        self.reflax_x, self.reflax_y = reflax_x, reflax_y
        self.reflax_r = 0

    def draw_send_wave(self):
        ox, oy = SCREEN_WIDTH//2, SCREEN_HEIGHT//2
        self.send_x, self.send_y = ox + self.send_r * math.sin(math.radians(
            self.send_angle)), oy + self.send_r * math.cos(math.radians(self.send_angle))
        draw_point(self.send_x, self.send_y, color.BLACK, 10)
        self.send_r += 3

    def draw_reflax_wave(self):
        draw_circle_outline(self.reflax_x, self.reflax_y,
                            self.reflax_r, color.BLUE, 3)
        self.reflax_r += 3


class MyRadar(arcade.Window):
    def __init__(self, width, height, title):
        super().__init__(width, height, title)
        self.setup()

    def setup(self):
        set_background_color(color.WHITE)
        self.angle = 0
        self.change_angle = 0
        self.status = RADAR_INIT
        self.target = Target()
        self.wave = Wave(self.angle, self.target.x, self.target.y)
        self.dis = 0
        self.scort = 0

    def on_draw(self):
        start_render()
        self.draw_rader()
        self.target.draw()
        if self.status == RADAR_SEND:
            self.wave.draw_send_wave()
        elif self.status == RADAR_REFLAX:
            self.wave.draw_reflax_wave()
        if self.wave.reflax_r >= self.dis and self.status == RADAR_REFLAX:
            self.target.draw()
        draw_text(f'得分:{self.scort}', 0, SCREEN_HEIGHT-25,
                  color.BLUE, font_name=('simhei'), font_size=20)

    def on_update(self, delta_time):
        self.angle += self.change_angle
        if self.status == RADAR_SEND:
            if self.wave.send_x > SCREEN_WIDTH or self.wave.send_y > SCREEN_HEIGHT \
                    or self.wave.send_x < 0 or self.wave.send_y < 0:
                self.status = RADAR_INIT
            dis = math.hypot(self.wave.send_x - self.target.x,
                             self.wave.send_y - self.target.y)
            if dis <= 10:
                self.status = RADAR_REFLAX
        elif self.status == RADAR_REFLAX:
            self.dis = math.hypot(
                self.target.x - SCREEN_WIDTH//2, self.target.y - SCREEN_HEIGHT//2)

            if self.wave.reflax_r >= self.dis:
                JUDGE = True
                self.target.x, self.target.y = random.randint(
                    0, SCREEN_WIDTH), random.randint(0, SCREEN_HEIGHT)
                self.status = RADAR_INIT
                self.scort += 1

    def on_key_press(self, symbol, modifiers):
        if symbol == key.LEFT:
            self.change_angle = -1
        elif symbol == key.RIGHT:
            self.change_angle = 1

    def on_key_release(self, symbol, modifiers):
        if symbol == key.SPACE and self.status == RADAR_INIT:
            self.status = RADAR_SEND
            self.wave = Wave(self.angle, self.target.x, self.target.y)
        if symbol == key.LEFT or symbol == key.RIGHT:
            self.change_angle = 0

    def draw_rader(self):
        ox, oy = SCREEN_WIDTH//2, SCREEN_HEIGHT//2
        ax, ay = ox - 25, oy - 80
        bx, by = ox, oy - 80
        cx, cy = ox + 25, oy - 80
        R = 50
        draw_line(ox, oy, bx, by, color.BLACK, 5)
        draw_line(ax, ay, cx, cy, color.BLACK, 5)
        draw_ellipse_filled(ox, oy, 50, 20, color.BLACK, 180-self.angle)
        dx, dy = ox + R * \
            math.sin(math.radians(self.angle)), oy + R * \
            math.cos(math.radians(self.angle))

        draw_line(ox, oy, dx, dy, color.BLACK, 5)


if __name__ == "__main__":
    game = MyRadar(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_TITLE)
    run()

 

【提示】

部分含有Python第三方库相关内容的作品,在海龟编辑器网页端无法运行哦!如遇到这种情况,可以打开下面的链接,下载海龟编辑器客户端:

https://python.codemao.cn


回复

上一页1 页 / 共 1下一页
逍遥WYC逍遥WYC

emotion_编程猫_厉害了

点赞0


评论


沉著的飞叶龙uZWJ沉著的飞叶龙uZWJ

emotion_编程猫_搓头

点赞0


评论


开朗的蓝甲虫117开朗的蓝甲虫117

(⊙o⊙)…

 

点赞0


评论