【博学谷学习记录】超强总结,用心分享|人工智能Python基础实现“飞机大战”游戏

【博学谷学习记录】超强总结,用心分享|人工智能Python基础实现“飞机大战”游戏

一,新的改变

在第一阶段的学习中,我不仅掌握了一些Python的基础语法和也认识到良好的编程习惯的重要性,比如关键的代码段要给予注释提高团队开发效率,
同时也要多收集在学习中遇到的bug和问题,把它们归类在问题文件夹里,
1.错误代码
2.问题类型
3.解决方案
按照以上的方法进行收录。

二,实践案例

案例:飞机大战

在这个案例中会学到如何引入第三方模块,同时也要锻炼出会看第三方开发文档的能力
引入模块:

# 导入pygame模块
import pygame
# 导入time模块
import time
# 导入pygame.locals模块
from pygame.locals import *

接下来是实现飞机大战的基本步骤:

  • 创建一个游戏窗口
  • 向窗口贴背景图片
  • 在背景的基础上再贴英雄飞机图片
  • 飞机移动并发射子弹
  • 在背景的基础上再贴敌人飞机图片
  • 在背景的基础上贴飞机爆炸的图片就形成了飞机爆炸的效果

三,实现代码如下

 # 创建一个Windows窗口
    screen = pygame.display.set_mode((400, 800), 0, 32)
    # 创建一个background变量,用于存放飞机大战背景图片信息(根据自己的图片路径)
    background = pygame.image.load('./feiji/background.png')
    # 创建一个hero_plane变量,用于存放英雄飞机背景图片信息
    hero = pygame.image.load('./feiji/hero1.png')
    # 加载子弹图片
    bullet = pygame.image.load('./feiji/plane.png')
    # 加载敌机图片
    enemy = pygame.image.load('./feiji/enemy2.png')

    while True:
        # 在Windows窗口中,有一个专门的方法blit(),用于对图片进行粘贴操作(粘贴到窗口中)
        # 窗口对象.blit(要粘贴的图片对象, (横坐标, 纵坐标))
        screen.blit(background, (0, 0))
        # 创建一个函数hero_plane,用于粘贴英雄飞机以及移动飞机等操作
        hero_plane(screen, hero, bullet)
        # 创建一个函数enemy_plane,用于粘贴敌方飞机以及敌方飞机移动操作
        enemy_plane(screen, enemy)
        # 为pygame窗口添加一个标题
        pygame.display.set_caption('飞机大战')
        # 刷新Windows窗口,让图片立即生效
        pygame.display.update()
        # 休眠
        time.sleep(0.1)

hero_plane函数:


def hero_plane(screen, hero, bullet):
    # 声明全局变量
    global hero_x
    global hero_y

    # 飞机如何移动?理论就是捕获键盘事件,然后获取上下左右按键,然后移动图片的横纵坐标
    screen.blit(hero, (hero_x, hero_y))

    # 获取pygame键盘按下事件,pygame.event.get()获取所有事件,返回结果是一个列表
    for event in pygame.event.get():
        if event.type == QUIT:
            # 退出游戏
            exit()
        # KEYDOWN键盘按下事件
        elif event.type == KEYDOWN:
            if event.key == K_UP:
                hero_y -= 10
            elif event.key == K_DOWN:
                hero_y += 10
            elif event.key == K_LEFT:
                hero_x -= 10
            elif event.key == K_RIGHT:
                hero_x += 10
            elif event.key == K_SPACE:
                print('发生子弹')
                my_bullet.append({'x': hero_x + 32, 'y': hero_y - 40})
    # 编写循环,遍历my_bullet生成子弹图片,然后让子弹可以弹出
    for i in my_bullet:
        screen.blit(bullet, (i['x'], i['y']))
        i['y'] -= 50

函数enemy_plane

def enemy_plane(screen, enemy):
    # 声明全局变量
    global enemy_x
    global enemy_path
    global enemy_life
    global enemy_num

    # 最终代码 => 子弹击中飞机,则飞机enemy_life切换dead状态
    for bullet in my_bullet:
        # 遍历所有子弹的坐标,判断是否有子弹击中飞机
        if (bullet['x'] >= enemy_x and bullet['x'] <= enemy_x + 165) and (bullet['y'] >= 0 and bullet['y'] <= 256):
            # 击中飞机
            enemy_life = 'dead'

    if enemy_life == 'live':
        # 粘贴敌方飞机
        screen.blit(enemy, (enemy_x, 10))

        # 添加一个判断语句(防止飞机越界)
        if enemy_x >= 235:
            enemy_path = 'left'
        elif enemy_x <= 0:
            enemy_path = 'right'

        # 根据设置的方向让飞机移动起来
        if enemy_path == 'left':
            enemy_x -= 10
        elif enemy_path == 'right':
            enemy_x += 10
    elif enemy_life == 'dead':
        if enemy_num <= 5:
            screen.blit(blow_up[enemy_num], (enemy_x, 10))
            enemy_num += 1


最终效果:
【博学谷学习记录】超强总结,用心分享|人工智能Python基础实现“飞机大战”游戏_第1张图片

你可能感兴趣的:(python,学习,游戏,人工智能)