创建屏幕对象
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
设置游戏标题
pygame.display.set_caption(‘飞机大战’)
加载飞机图片并缩放
player_img = pygame.image.load(‘player.png’).convert_alpha()
player_img = pygame.transform.scale(player_img, (int(player_img.get_width() * 0.5), int(player_img.get_height() * 0.5)))
player_x = SCREEN_WIDTH / 2 - player_img.get_width() / 2
player_y = SCREEN_HEIGHT - player_img.get_height() - 10
player_speed = 5
加载敌机图片并缩放
enemy_img = pygame.image.load(‘enemy.png’).convert_alpha()
enemy_img = pygame.transform.scale(enemy_img, (int(enemy_img.get_width() * 0.5), int(enemy_img.get_height() * 0.5)))
enemy_x = random.randint(0, SCREEN_WIDTH - enemy_img.get_width())
enemy_y = random.randint(50, 150)
enemy_speed = 2 # 减慢敌机的移动速度
初始化子弹列表
bullets = []
子弹属性
bullet_speed = 10
bullet_width = 4
bullet_height = 10
游戏循环标志
running = True
敌机得分
score = 0
函数:绘制子弹
def draw_bullets(bullet_list):
for bullet in bullet_list:
pygame.draw.rect(screen, WHITE, (bullet[0], bullet[1], bullet_width, bullet_height))
函数:更新子弹位置
def update_bullets(bullet_list):
for bullet in bullet_list[:]:
bullet[1] -= bullet_speed
if bullet[1] < 0:
bullet_list.remove(bullet)
函数:检测子弹和敌机的碰撞
def check_collision(bullet, enemy):
bullet_rect = pygame.Rect(bullet[0], bullet[1], bullet_width, bullet_height)
enemy_rect = pygame.Rect(enemy[0], enemy[1], enemy_img.get_width(), enemy_img.get_height())
return bullet_rect.colliderect(enemy_rect)
游戏主循环
while running:
# 填充屏幕背景色
screen.fill(BLACK)
# 事件处理
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_SPACE:
# 发射子弹
bullet = [player_x + player_img.get_width() / 2 - bullet_width / 2, 0]
bullets.append(bullet)
# 检测按键
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT] and player_x > 0:
player_x -= player_speed
if keys[pygame.K_RIGHT] and player_x < SCREEN_WIDTH - player_img.get_width():
player_x += player_speed
# 飞机移动边界控制
player_x = max(0, min(player_x, SCREEN_WIDTH - player_img.get_width()))
# 敌机移动
enemy_y += enemy_speed
if enemy_y > SCREEN_HEIGHT:
score -= 10 # 敌机逃脱减少得分
enemy_x = random.randint(0, SCREEN_WIDTH - enemy_img.get_width())
enemy_y = random.randint(50, 150)
# 绘制飞机和敌机
screen.blit(player_img, (player_x, player_y))
screen.blit(enemy_img, (enemy_x, enemy_y))
# 更新子弹位置并绘制
update_bullets(bullets)
draw_bullets(bullets)
# 检测子弹和敌机的碰撞
for bullet in bullets[:]:
if check_collision([bullet[0], bullet[1]], [enemy_x, enemy_y]):
score += 10 # 增加得分
bullets.remove(bullet)
break # 每次只处理一次碰撞
# 更新屏幕显示
pygame.display.update()
# 显示得分
font = pygame.font.SysFont(None, 35)
score_text = font.render('Score: ' + str(score), True, WHITE)
screen.blit(score_text, (10, 10))
退出游戏
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注:Python)
端开发知识点,真正体系化!**
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注:Python)