用Python“打”出你的游戏世界 —— 创建一个属于你的飞机大战游戏
开篇引言
们将用来编写一个经典的小游戏——打飞机!通过简单的代码,你可以快速实现一款有趣的飞行射击游戏,享受动手编程的乐趣,同时提升编程技巧。
无论你是编程小白,还是想通过实践提升技能的爱好者,这篇文章都会为你提供详细的教程和代码解析。让我们一起开始吧!
理论基础
游戏逻辑:
分步讲解:
第一步:安装
在开始之前,确保你的环境中已经安装了库。如果没有安装,可以通过以下命令来安装:
pip install pygame
第二步:创建游戏窗口
我们首先要定义一个游戏窗口,设定游戏的基本参数如窗口大小、标题等。
import pygame
import random
# 初始化Pygame
pygame.init()
# 设置屏幕大小
screen_width = 480
screen_height = 640
screen = pygame.display.set_mode((screen_width, screen_height))
# 设置标题
pygame.display.set_caption("打飞机游戏")
# 定义时钟对象,控制帧率
clock = pygame.time.Clock()
第三步:加载资源
我们需要导入飞机、敌机和子弹的图片资源。你可以从网络上找到合适的图片,放置在游戏项目的文件夹中
# 加载玩家飞机图像
player_image = pygame.image.load('player.png')
player_rect = player_image.get_rect()
player_rect.topleft = [screen_width // 2, screen_height - player_image.get_height() - 10]
# 加载敌机图像
enemy_image = pygame.image.load('enemy.png')
# 加载子弹图像
bullet_image = pygame.image.load('bullet.png')
第四步:玩家飞机移动
通过捕捉键盘输入,控制玩家飞机的左右移动
def move_player(keys_pressed, player_rect):
if keys_pressed[pygame.K_LEFT] and player_rect.left > 0:
player_rect.move_ip(-5, 0)
if keys_pressed[pygame.K_RIGHT] and player_rect.right < screen_width:
player_rect.move_ip(5, 0)
第五步:生成敌机
让敌机从屏幕上方随机位置生成,并逐渐向下移动。
def create_enemy():
enemy_rect = enemy_image.get_rect()
enemy_rect.topleft = [random.randint(0, screen_width - enemy_rect.width), -enemy_rect.height]
return enemy_rect
def move_enemy(enemy_rect):
enemy_rect.move_ip(0, 5) # 敌机垂直向下移动
第六步:发射子弹
玩家按下空格键时发射子弹
def fire_bullet(player_rect, bullets):
bullet_rect = bullet_image.get_rect()
bullet_rect.midbottom = player_rect.midtop
bullets.append(bullet_rect)
def move_bullets(bullets):
for bullet in bullets:
bullet.move_ip(0, -10) # 子弹向上移动
第七步:碰撞检测
检查子弹是否击中敌机,以及玩家是否被敌机撞击。
def check_collision(bullets, enemies):
for bullet in bullets:
for enemy in enemies:
if bullet.colliderect(enemy):
bullets.remove(bullet)
enemies.remove(enemy)
return True
return False
第八步:游戏循环
这是游戏的主循环,控制游戏的逻辑和帧率。
def game_loop():
running = True
player_rect = player_image.get_rect(topleft=(screen_width // 2, screen_height - 60))
enemies = []
bullets = []
score = 0
while running:
clock.tick(30)
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
keys_pressed = pygame.key.get_pressed()
move_player(keys_pressed, player_rect)
if keys_pressed[pygame.K_SPACE]:
fire_bullet(player_rect, bullets)
if random.randint(1, 50) == 1:
enemies.append(create_enemy())
move_bullets(bullets)
enemies = [enemy for enemy in enemies if enemy.top < screen_height]
for enemy in enemies:
move_enemy(enemy)
if check_collision(bullets, enemies):
score += 1
screen.fill((0, 0, 0))
screen.blit(player_image, player_rect)
for bullet in bullets:
screen.blit(bullet_image, bullet)
for enemy in enemies:
screen.blit(enemy_image, enemy)
pygame.display.flip()
pygame.quit()
game_loop()
第九步:得分和游戏结束
在游戏中添加得分系统,并在敌机撞到玩家时结束游戏。
代码操作
直接上代码,有不清楚的留言小编哦,一起学习,一起进步
import pygame
import random
# 初始化Pygame
pygame.init()
# 设置屏幕大小
screen_width = 480
screen_height = 640
screen = pygame.display.set_mode((screen_width, screen_height))
# 设置标题
pygame.display.set_caption("打飞机游戏")
# 定义时钟对象,控制帧率
clock = pygame.time.Clock()
# 加载玩家飞机图像
player_image = pygame.image.load("player.png")
player_rect = player_image.get_rect()
player_rect.topleft = [
screen_width // 2,
screen_height - player_image.get_height() - 10,
]
# 加载敌机图像
enemy_image = pygame.image.load("enemy.png")
# 加载子弹图像
bullet_image = pygame.image.load("bullet.png")
# 玩家飞机移动函数
def move_player(keys_pressed, player_rect):
if keys_pressed[pygame.K_LEFT] and player_rect.left > 0:
player_rect.move_ip(-5, 0)
if keys_pressed[pygame.K_RIGHT] and player_rect.right < screen_width:
player_rect.move_ip(5, 0)
# 生成敌机函数
def create_enemy():
enemy_rect = enemy_image.get_rect()
enemy_rect.topleft = [
random.randint(0, screen_width - enemy_rect.width),
-enemy_rect.height,
]
return enemy_rect
# 敌机移动函数
def move_enemy(enemy_rect):
enemy_rect.move_ip(0, 5) # 敌机垂直向下移动
# 发射子弹函数
def fire_bullet(player_rect, bullets):
bullet_rect = bullet_image.get_rect()
bullet_rect.midbottom = player_rect.midtop
bullets.append(bullet_rect)
# 子弹移动函数
def move_bullets(bullets):
for bullet in bullets:
bullet.move_ip(0, -10) # 子弹向上移动
# 碰撞检测函数
def check_collision(bullets, enemies):
for bullet in bullets:
for enemy in enemies:
if bullet.colliderect(enemy):
bullets.remove(bullet)
enemies.remove(enemy)
return True
return False
# 游戏主循环
def game_loop():
running = True
player_rect = player_image.get_rect(topleft=(screen_width // 2, screen_height - 60))
enemies = []
bullets = []
score = 0
while running:
clock.tick(30) # 每秒30帧
# 处理事件
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
keys_pressed = pygame.key.get_pressed()
move_player(keys_pressed, player_rect)
# 发射子弹
if keys_pressed[pygame.K_SPACE]:
fire_bullet(player_rect, bullets)
# 生成敌机
if random.randint(1, 50) == 1:
enemies.append(create_enemy())
# 移动子弹和敌机
move_bullets(bullets)
enemies = [enemy for enemy in enemies if enemy.top < screen_height]
for enemy in enemies:
move_enemy(enemy)
# 检查碰撞
if check_collision(bullets, enemies):
score += 1
# 绘制屏幕
screen.fill((0, 0, 0)) # 清空屏幕
screen.blit(player_image, player_rect)
for bullet in bullets:
screen.blit(bullet_image, bullet)
for enemy in enemies:
screen.blit(enemy_image, enemy)
# 更新屏幕
pygame.display.flip()
pygame.quit()
# 开始游戏
game_loop()
演示图例
美工是抽的抽象了
,争取下次搞漂亮点界面,只要是传播知识,有需要的可以自己美化!!!!!
话题互动
这个游戏让你学会了如何使用进行简单的2D游戏开发。你觉得这个游戏还有哪些功能可以改进?比如加入背景音乐、增加关卡、或者添加更多的敌人种类?欢迎在评论区分享你的想法和建议!
每日一句
“编程不仅是告诉计算机做什么,更重要的是告诉它如何做。” —— 编程不只是技术活,更是艺术创作的过程。
请根据自己的实际需求调整上述代码,并尝试扩展功能,祝你在编程之路上越走越远!
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。