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

【作品介绍】
雷达探测器游戏。将雷达对准 红点(左右键控制),按空格发射,射中得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