[Python] 纯文本查看 复制代码
import pygame
import sys
import random
import math
pygame.init()
# 设置窗口
窗口宽度, 窗口高度 = 800, 600
窗口 = pygame.display.set_mode((窗口宽度, 窗口高度))
pygame.display.set_caption("方块和敌人射击游戏")
# 颜色
白色 = (255, 255, 255)
黑色 = (0, 0, 0)
红色 = (255, 0, 0)
蓝色 = (0, 0, 255)
# 方块属性
方块大小 = 50
方块_x, 方块_y = 窗口宽度 // 2, 窗口高度 // 2
方块速度 = 5
方块血量 = 50
# 子弹属性
子弹半径 = 5
子弹速度 = 8
子弹列表 = []
# 敌人属性
敌人大小 = 30
敌人_x, 敌人_y = random.randint(100, 窗口宽度 - 100), random.randint(100, 窗口高度 - 100)
敌人速度 = 3
敌人血量 = 100
敌人发射间隔 = 30
敌人发射计数 = 0
敌人子弹列表 = []
clock = pygame.time.Clock()
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
# 获取所有按键的状态
按键状态 = pygame.key.get_pressed()
# 根据按下的箭头键来移动方块
if 按键状态[pygame.K_LEFT]:
方块_x -= 方块速度
if 按键状态[pygame.K_RIGHT]:
方块_x += 方块速度
if 按键状态[pygame.K_UP]:
方块_y -= 方块速度
if 按键状态[pygame.K_DOWN]:
方块_y += 方块速度
# 按下空格键发射子弹
if 按键状态[pygame.K_SPACE]:
子弹列表.append([方块_x + 方块大小 // 2, 方块_y + 方块大小 // 2])
# 移动子弹
for 子弹 in 子弹列表:
子弹[1] -= 子弹速度
# 敌人随机移动
敌人_x += random.randint(-敌人速度, 敌人速度)
敌人_y += random.randint(-敌人速度, 敌人速度)
# 碰撞检测,判断子弹是否击中敌人
for 子弹 in 子弹列表:
子弹_x, 子弹_y = 子弹
距离平方 = (敌人_x - 子弹_x) ** 2 + (敌人_y - 子弹_y) ** 2
if 距离平方 < 敌人大小 ** 2:
敌人血量 -= 1
子弹列表.remove(子弹)
# 敌人连续发射菱形子弹
敌人发射计数 += 1
if 敌人发射计数 >= 敌人发射间隔:
敌人子弹列表.append([敌人_x, 敌人_y + 敌人大小 // 2])
敌人子弹列表.append([敌人_x + 敌人大小 // 2, 敌人_y])
敌人子弹列表.append([敌人_x + 敌人大小, 敌人_y + 敌人大小 // 2])
敌人子弹列表.append([敌人_x + 敌人大小 // 2, 敌人_y + 敌人大小])
敌人发射计数 = 0
# 移动敌人子弹
for 子弹 in 敌人子弹列表:
dx = 方块_x + 方块大小 // 2 - 子弹[0]
dy = 方块_y + 方块大小 // 2 - 子弹[1]
距离 = math.sqrt(dx ** 2 + dy ** 2)
子弹[0] += int(子弹速度 * dx / 距离)
子弹[1] += int(子弹速度 * dy / 距离)
# 碰撞检测,判断敌人子弹是否击中方块
for 子弹 in 敌人子弹列表:
子弹_x, 子弹_y = 子弹
距离平方 = (方块_x + 方块大小 // 2 - 子弹_x) ** 2 + (方块_y + 方块大小 // 2 - 子弹_y) ** 2
if 距离平方 < 子弹半径 ** 2:
方块血量 -= 1
敌人子弹列表.remove(子弹)
# 清空屏幕
窗口.fill(白色)
# 绘制方块
pygame.draw.rect(窗口, 黑色, (方块_x, 方块_y, 方块大小, 方块大小))
# 绘制敌人
pygame.draw.polygon(窗口, 蓝色, [(敌人_x, 敌人_y), (敌人_x - 敌人大小, 敌人_y + 敌人大小),
(敌人_x + 敌人大小, 敌人_y + 敌人大小)])
# 绘制子弹
for 子弹 in 子弹列表:
pygame.draw.circle(窗口, 红色, (子弹[0], 子弹[1]), 子弹半径)
# 绘制敌人子弹
for 子弹 in 敌人子弹列表:
pygame.draw.rect(窗口, 黑色, (子弹[0] - 子弹半径, 子弹[1], 子弹半径 * 2, 子弹半径 * 2))
# 显示方块和敌人的血量
字体 = pygame.font.SysFont(None, 30)
方块血量文本 = 字体.render(f"方块血量:{方块血量}", True, 黑色)
敌人血量文本 = 字体.render(f"敌人血量:{敌人血量}", True, 黑色)
窗口.blit(方块血量文本, (10, 10))
窗口.blit(敌人血量文本, (10, 40))
# 更新显示
pygame.display.update()
# 控制帧率
clock.tick(60)