写一个python射击小游戏
下面是一个简单的Python射击小游戏的示例代码:
import pygame
import random
# 初始化
pygame.init()
# 设置游戏窗口的大小
screen_width = 800
screen_height = 600
screen = pygame.display.set_mode((screen_width, screen_height))
# 加载玩家图像
player_img = pygame.image.load("player.png")
player_width = 64
player_height = 64
player_x = screen_width // 2 - player_width // 2
player_y = screen_height - player_height
player_speed = 5
# 加载子弹图像
bullet_img = pygame.image.load("bullet.png")
bullet_width = 32
bullet_height = 32
bullet_x = 0
bullet_y = screen_height - player_height
bullet_speed = 10
bullet_state = "ready" # 子弹状态,"ready"表示可以射击,"fire"表示正在射击
# 加载敌人图像
enemy_img = pygame.image.load("enemy.png")
enemy_width = 64
enemy_height = 64
enemy_x = random.randint(0, screen_width - enemy_width)
enemy_y = random.randint(50, 150)
enemy_speed = 2
# 计分
score_value = 0
font = pygame.font.Font("freesansbold.ttf", 32)
text_x = 10
text_y = 10
# 游戏结束
game_over_font = pygame.font.Font("freesansbold.ttf", 64)
game_over_text_x = screen_width // 2 - 200
game_over_text_y = screen_height // 2 - 32
# 更新分数
def show_score():
score = font.render("Score: " + str(score_value), True, (255, 255, 255))
screen.blit(score, (text_x, text_y))
# 玩家移动
def move_player(direction):
global player_x
if direction == "left" and player_x > 0:
player_x -= player_speed
elif direction == "right" and player_x < screen_width - player_width:
player_x += player_speed
# 射击子弹
def fire_bullet():
global bullet_state, bullet_x, bullet_y
bullet_state = "fire"
bullet_x = player_x + player_width // 2 - bullet_width // 2
bullet_y = player_y
# 检测碰撞
def is_collision(enemy_x, enemy_y, bullet_x, bullet_y):
distance = ((enemy_x - bullet_x) ** 2 + (enemy_y - bullet_y) ** 2) ** 0.5
if distance < 27:
return True
else:
return False
# 游戏循环
running = True
while running:
screen.fill((0, 0, 0))
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# 键盘事件
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
move_player("left")
if event.key == pygame.K_RIGHT:
move_player("right")
if event.key == pygame.K_SPACE and bullet_state == "ready":
fire_bullet()
# 更新玩家位置
screen.blit(player_img, (player_x, player_y))
# 更新敌人位置
enemy_x += enemy_speed
if enemy_x <= 0 or enemy_x >= screen_width - enemy_width:
enemy_speed *= -1
enemy_y += enemy_height
screen.blit(enemy_img, (enemy_x, enemy_y))
# 更新子弹位置
if bullet_state == "fire":
bullet_y -= bullet_speed
screen.blit(bullet_img, (bullet_x, bullet_y))
if bullet_y <= 0:
bullet_state = "ready"
# 检测碰撞
collision = is_collision(enemy_x, enemy_y, bullet_x, bullet_y)
if collision:
bullet_state = "ready"
bullet_y = screen_height - player_height
score_value += 1
enemy_x = random.randint(0, screen_width - enemy_width)
enemy_y = random.randint(50, 150)
# 显示分数
show_score()
# 游戏结束
if enemy_y >= player_y:
game_over_text = game_over_font.render("GAME OVER", True, (255, 255, 255))
screen.blit(game_over_text, (game_over_text_x, game_over_text_y))
break
pygame.display.update()
# 退出游戏
pygame.quit()
请注意,此代码中使用的图像文件(player.png,bullet.png和enemy.png)应与代码文件位于同一目录中。您可以使用适当的图像来替换这些文件。此外,您可能还需要安装Pygame库(使用pip install pygame命令)以运行此代码
原文地址: http://www.cveoy.top/t/topic/hKWy 著作权归作者所有。请勿转载和采集!