用Python“打”出你的游戏世界 —— 创建一个属于你的飞机大战游戏

开篇引言
们将用来编写一个经典的小游戏——打飞机!通过简单的代码,你可以快速实现一款有趣的飞行射击游戏,享受动手编程的乐趣,同时提升编程技巧。
无论你是编程小白,还是想通过实践提升技能的爱好者,这篇文章都会为你提供详细的教程和代码解析。让我们一起开始吧!

理论基础
游戏逻辑:
分步讲解:
第一步:安装
在开始之前,确保你的环境中已经安装了库。如果没有安装,可以通过以下命令来安装:
pip install pygame
第二步:创建游戏窗口
我们首先要定义一个游戏窗口,设定游戏的基本参数如窗口大小、标题等。
import pygameimport random# 初始化Pygamepygame.init()# 设置屏幕大小screen_width = 480screen_height = 640screen = 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_rectdef 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.midtopbullets.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 Truereturn False
第八步:游戏循环
这是游戏的主循环,控制游戏的逻辑和帧率。
def game_loop():running = Trueplayer_rect = player_image.get_rect(topleft=(screen_width // 2, screen_height - 60))enemies = []bullets = []score = 0while running:clock.tick(30)for event in pygame.event.get():if event.type == pygame.QUIT:running = Falsekeys_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 += 1screen.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 pygameimport random# 初始化Pygamepygame.init()# 设置屏幕大小screen_width = 480screen_height = 640screen = 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.midtopbullets.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 Truereturn False# 游戏主循环def game_loop():running = Trueplayer_rect = player_image.get_rect(topleft=(screen_width // 2, screen_height - 60))enemies = []bullets = []score = 0while running:clock.tick(30) # 每秒30帧# 处理事件for event in pygame.event.get():if event.type == pygame.QUIT:running = Falsekeys_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游戏开发。你觉得这个游戏还有哪些功能可以改进?比如加入背景音乐、增加关卡、或者添加更多的敌人种类?欢迎在评论区分享你的想法和建议!

每日一句
“编程不仅是告诉计算机做什么,更重要的是告诉它如何做。” —— 编程不只是技术活,更是艺术创作的过程。
请根据自己的实际需求调整上述代码,并尝试扩展功能,祝你在编程之路上越走越远!
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
