import pygame from random import randint import math print("按下空格建发射子弹") pygame.init() screen = pygame.display.set_mode((800, 600)) pygame.display.set_caption("飞机大战") icon = pygame.image.load('ufo.png') pygame.display.set_icon(icon) bgimg = pygame.image.load('bg.png') enemyimg = pygame.image.load('enemy.png') pygame.mixer.music.load('bg.wav') pygame.mixer.music.play(-1) bomb_sound = pygame.mixer.Sound('exp.wav') playerimg = pygame.image.load('player.png') playerX = 400 playerY = 500 playStep = 0 score = 0 font = pygame.font.Font('freesansbold.ttf', 35) def show_score(): text = f"score:{score}" score_render = font.render(text, True, (0, 200, 255)) screen.blit(score_render, (10, 10)) is_over = False over_font = pygame.font.Font('freesansbold.ttf', 64) def check_is_over(): if is_over: text = "Game Over" render = over_font.render(text, True, (255, 50, 10)) screen.blit(render, (230, 250)) number_of_enemies = 10 class Enemy(): def __init__(self): self.img = pygame.image.load('enemy.png') self.x = randint(100, 600) self.y = randint(50, 250) self.step = randint(2, 5) def reset(self): self.x = randint(100, 600) self.y = randint(50, 250) Enemies = [] for i in range(number_of_enemies): Enemies.append(Enemy()) def show_enemy(): global is_over for e in Enemies: screen.blit(e.img, (e.x, e.y)) e.x += e.step if (e.x > 736 or e.x < 0): e.step *= -1 e.y += 40 if e.y > 450: is_over = True print("游戏结束啦!") Enemies.clear() def distance(bx, by, ex, ey): a = bx - ex b = by - ey return math.sqrt(a*a + b*b) bullets = [] class Bullet(): def __init__(self): self.img = pygame.image.load('bullet.png') self.x = playerX self.y = playerY + 10 self.step = 10 def hit(self): global score for e in Enemies: if (distance(self.x, self.y, e.x, e.y) < 40): bomb_sound.play() bullets.remove(self) e.reset() score += 1 def show_bullet(): for bull in bullets: screen.blit(bull.img, (bull.x, bull.y)) bull.hit() bull.y -= bull.step if bull.y < 0: bullets.remove(bull) def distance_two(bx, by, ex, ey): a = bx - ex b = by - ey return math.sqrt(a*a + b*b) bullets_two = [] class Bullet_two(): def __init__(self): self.img = pygame.image.load('bullet.png') self.x = playerX + 30 self.y = playerY + 10 self.step = 10 def hit_two(self): for d in Enemies: if (distance_two(self.x, self.y, d.x, d.y) < 40): bomb_sound.play() bullets_two.remove(self) d.reset() def show_bullet_two(): for b in bullets_two: screen.blit(b.img, (b.x, b.y)) b.hit_two() b.y -= b.step if b.y < 0: bullets_two.remove(b) def move_player(): global playerX playerX += playStep while playerX > 736: playerX -= 6 while playerX < 0: playerX +=6 running = True while running: screen.blit(bgimg, (0, 0)) show_score() for event in pygame.event.get(): if event.type == pygame.QUIT: running = False if event.type == pygame.KEYDOWN: if event.key == pygame.K_RIGHT: playStep = 6 elif event.key == pygame.K_LEFT: playStep = -6 elif event.key == pygame.K_SPACE: print("发射子弹....") bullets.append(Bullet()) bullets_two.append(Bullet_two()) if event.type == pygame.KEYUP: playStep = 0 screen.blit(playerimg, (playerX, playerY)) move_player() show_bullet() show_bullet_two() show_enemy() check_is_over() pygame.display.update()
by: 云代码会员 发表于:2020-06-07 17:31:27 顶(0) | 踩(0) 回复
为什么打着打着会闪退,能解决不
by: 烟花易冷 发表于:2021-12-19 20:38:10 顶(0) | 踩(0) 回复
显示这个怎么办
Traceback (most recent call last):
File "D:\桌面\新建文件夹 (2)\faijidazan.py", line 156, in <module>
show_bullet_two()
File "D:\桌面\新建文件夹 (2)\faijidazan.py", line 122, in show_bullet_two
b.hit_two()
File "D:\桌面\新建文件夹 (2)\faijidazan.py", line 116, in hit_two
bullets_two.remove(self)
ValueError: list.remove(x): x not in list
初级程序员
by: clearlove 发表于:2020-05-14 14:21:56 顶(0) | 踩(0) 回复
平乱‘’
回复评论