小白如何做飞机大战游戏2


一、步骤

1.创建游戏循环

代码如下(示例):

while True:
	.
	.
	.


pygame.quit()

2.将背景图片加载到窗口并且刷新

代码如下(示例):

screen.blit(bg_img, (0, 0))
clock.tick(60)

3.飞机移动

代码如下(示例):

# region 事件监听
    event_list = pygame.event.get()
    #飞机移动
    for event in event_list:
        if event.type == pygame.QUIT:  # 加入QUIT模块不卡
            pygame.quit()  # 卸载模块
            exit(0)  # 正常退出
        # 控制飞机移动
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:  # 左移动
                hero_x -= 5 if hero_x >= 5 else 0
            elif event.key == pygame.K_RIGHT:  # 右移动
                 hero_x += 5 if hero_x <= 375 else 380
            elif event.key == pygame.K_UP:  # 上移动
                 hero_y -= 5 if hero_y >= 5 else 0
            elif event.key == pygame.K_DOWN:  # 下移动
                 hero_y += 5 if hero_y <= 421 else 526
            elif event.key == pygame.K_SPACE:
                # 创建 战斗子弹的实例
                hero_bullet = HeroBullet(screen=screen, x=hero_x + 50 - 11, y=hero_y - 22)
                # 将子弹转到列表内
                hero_bullet_list.append(hero_bullet)
          # 定义飞机位置
    hero_rect = pygame.rect.Rect(hero_x, hero_y, 100, 124)         

4.子弹移动

代码如下(示例):

    if  direct=='左':
        enemy_x-=5
        if enemy_x<=0:
                direct='右'
    elif direct=='右':
        enemy_x+=5
        if enemy_x>=315:
            direct='左'
    # 敌机随机发射子弹
    x = random.randint(0, 100)
    if x ==1 or x==99:
        # 创建 战斗子弹的实例
        enemy_bullet = EnemyBullet(screen=screen, x=enemy_x +50, y=246)
        # 将子弹转到列表内
        enemy_bullet_list.append(enemy_bullet)
    #遍历敌机发射子弹
    for bullet in enemy_bullet_list:
        bullet.draw()
        enemy_bullet_rect=pygame.rect.Rect(bullet.x,bullet.y,22,22)
            for z in hero_bullet_list:
        z.draw()  # 绘制子弹   子弹已经成立  出来了
        # 让子弹再上边消失   为了不让子弹出窗口
        hero_bullet_list.remove(z) if z.y < 0 else ""
        # 子弹的位置
        hero_bullet_rect = pygame.rect.Rect(z.x, z.y, 22, 22)
        flag=pygame.Rect.colliderect(hero_bullet_rect,enemy_rect)
        if flag:
            enemy_is_bomb = True
            hero_bullet_list.remove(z)

5.子弹与飞机交互,飞机爆炸

代码如下(示例):

   #判断敌机发射的子弹是否与飞机交互
        flag1 = pygame.Rect.colliderect(enemy_bullet_rect,hero_rect)
        # 判断 是否满足 子弹与敌机交互
        if flag1:
            hero_is_bomb = True  # 满足了 爆炸条件
            enemy_bullet_list.remove(bullet)  # 打到了则消失
    if hero_is_bomb == False:
        # 绘制敌机图片
        if heroindex==0:
            screen.blit(hero1_img, (hero_x, hero_y))
            heroindex+=1
        else:
            #将飞机图片渲染
            screen.blit(hero2_img,(hero_x,hero_y))
            heroindex=0
    elif hero_is_bomb==True:
        if hero_bomb_index==len(hero_bomb_list):
            print('你输了')
            pygame.quit()
            exit(0)
        #加载图片
        hero_bomb_img=pygame.image.load(hero_bomb_list[hero_bomb_index])
        #爆炸  索引+1
        hero_bomb_index+=1
        #绘制
        screen.blit(hero_bomb_img,(hero_x,hero_y))
        #爆炸慢动作
        time.sleep(0.2)
         if enemy_is_bomb == False:
        screen.blit(enemy1_img, (enemy_x, enemy_y))
    else:
        if enemy_bomb_index == len(enemy_bomb_list):
            print('游戏结束你赢了')
            pygame.quit()
            exit(0)
        enemy_bomb_img = pygame.image.load(enemy_bomb_list[enemy_bomb_index])
        screen.blit(enemy_bomb_img, (enemy_x, enemy_y))
        enemy_bomb_index += 1
        time.sleep(0.3)
        pygame.display.update()

6.总代码:

代码如下(示例):

import pygame
import random
import time
#定义飞机子弹
class HeroBullet():
    def __init__(self,x,y,screen):
        # 初始化x轴
        self.x=x
        # 初始化y轴
        self.y=y
        # 初始化screen窗口
        self.screen=screen
        # 初始化子弹
        self.hero_bullet_img=pygame.image.load("img/bullet.png")

    def draw(self):
        # 绘制子弹
        self.screen.blit(self.hero_bullet_img, (self.x, self.y))
        self.move()
    def move(self):
        # 子弹移动
        self.y -= 5
class EnemyBullet():
    def __init__(self,x,y,screen):
        self.x=x
        self.y=y
        self.screen=screen
        self.enemy_bullet_img=pygame.image.load("img/bullet1.png")
    def draw(self):
        self.screen.blit(self.enemy_bullet_img, (self.x, self.y))
        self.move()

    def move(self):
        self.y += 5

#初始化pygame
pygame.init()
#创建游戏窗口
screen=pygame.display.set_mode((480,650))
#修改游戏名称
pygame.display.set_caption('飞机大战')
#修改游戏图标
icon=pygame.image.load('img/icon72x72.png')
pygame.display.set_icon(icon)
#加载背景图片
bg_img=pygame.image.load('img/background.png')
#加载飞机图片
hero1_img=pygame.image.load('img/hero1.png')
hero2_img=pygame.image.load('img/hero2.png')
#定义飞机的爆炸图片列表
hero_bomb_list=["img/hero_blowup_n1.png","img/hero_blowup_n2.png","img/hero_blowup_n3.png","img/hero_blowup_n4.png"]
# 定义飞机图片切换索引
heroindex = 0
hero_x=190
hero_y=526

#加载敌机图片
enemy1_img=pygame.image.load('img/enemy-3.gif')
enemy_bomb_list=["img/enemy2_down1.png", "img/enemy2_down2.png","img/enemy2_down3.png","img/enemy2_down4.png",'img/enemy2_down5.png','img/enemy2_down6.png']
#定义敌机初始值
#定义敌机位置
enemy_rect=pygame.rect.Rect(158,0,165,250)
#定义敌机初始移动方向
direct='左'
#定义飞机子弹列表
hero_bullet_list=[]
#定义敌机子弹列表
enemy_bullet_list=[]
#创建游戏时钟
clock=pygame.time.Clock()
# 灵敏度
pygame.key.set_repeat(20, 30)
enemy_is_bomb = False
hero_is_bomb = False
enemy_bomb_index = 0
hero_bomb_index=0

enemy_x=enemy_rect.x
enemy_y=enemy_rect.y
#游戏循环
while True:

    #刷新率
    clock.tick(60)
    # 将背景图片加载到窗口
    screen.blit(bg_img, (0, 0))
  
     # region 事件监听
    event_list = pygame.event.get()
    #敌机移动
    for event in event_list:
        if event.type == pygame.QUIT:  # 加入QUIT模块不卡
            pygame.quit()  # 卸载模块
            exit(0)  # 正常退出
        # 控制飞机移动
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:  # 左移动
                hero_x -= 5 if hero_x >= 5 else 0
            elif event.key == pygame.K_RIGHT:  # 右移动
                 hero_x += 5 if hero_x <= 375 else 380
            elif event.key == pygame.K_UP:  # 上移动
                 hero_y -= 5 if hero_y >= 5 else 0
            elif event.key == pygame.K_DOWN:  # 下移动
                 hero_y += 5 if hero_y <= 421 else 526
            elif event.key == pygame.K_SPACE:
                # 创建 战斗子弹的实例
                hero_bullet = HeroBullet(screen=screen, x=hero_x + 50 - 11, y=hero_y - 22)
                # 将子弹转到列表内
                hero_bullet_list.append(hero_bullet)
    # 定义飞机位置
    hero_rect = pygame.rect.Rect(hero_x, hero_y, 100, 124)
    if  direct=='左':
        enemy_x-=5
        if enemy_x<=0:
                direct='右'
    elif direct=='右':
        enemy_x+=5
        if enemy_x>=315:
            direct='左'
    # 敌机随机发射子弹
    x = random.randint(0, 100)
    if x ==1 or x==99:
        # 创建 战斗子弹的实例
        enemy_bullet = EnemyBullet(screen=screen, x=enemy_x +50, y=246)
        # 将子弹转到列表内
        enemy_bullet_list.append(enemy_bullet)
    #遍历敌机发射子弹
    for bullet in enemy_bullet_list:
        bullet.draw()
        enemy_bullet_rect=pygame.rect.Rect(bullet.x,bullet.y,22,22)
        #判断敌机发射的子弹是否与飞机交互
        flag1 = pygame.Rect.colliderect(enemy_bullet_rect,hero_rect)
        # 判断 是否满足 子弹与敌机交互
        if flag1:
            hero_is_bomb = True  # 满足了 爆炸条件
            enemy_bullet_list.remove(bullet)  # 打到了则消失
    if hero_is_bomb == False:
        # 绘制敌机图片
        if heroindex==0:
            screen.blit(hero1_img, (hero_x, hero_y))
            heroindex+=1
        else:
            #将飞机图片渲染
            screen.blit(hero2_img,(hero_x,hero_y))
            heroindex=0
    elif hero_is_bomb==True:
        if hero_bomb_index==len(hero_bomb_list):
            print('你输了')
            pygame.quit()
            exit(0)
        #加载图片
        hero_bomb_img=pygame.image.load(hero_bomb_list[hero_bomb_index])
        #爆炸  索引+1
        hero_bomb_index+=1
        #绘制
        screen.blit(hero_bomb_img,(hero_x,hero_y))
        #爆炸慢动作
        time.sleep(0.2)
    for z in hero_bullet_list:
        z.draw()  # 绘制子弹   子弹已经成立  出来了
        # 让子弹再上边消失   为了不让子弹出窗口
        hero_bullet_list.remove(z) if z.y < 0 else ""
        # 子弹的位置
        hero_bullet_rect = pygame.rect.Rect(z.x, z.y, 22, 22)
        flag=pygame.Rect.colliderect(hero_bullet_rect,enemy_rect)
        if flag:
            enemy_is_bomb = True
            hero_bullet_list.remove(z)
    if enemy_is_bomb == False:
        screen.blit(enemy1_img, (enemy_x, enemy_y))
    else:
        if enemy_bomb_index == len(enemy_bomb_list):
            print('游戏结束你赢了')
            pygame.quit()
            exit(0)
        enemy_bomb_img = pygame.image.load(enemy_bomb_list[enemy_bomb_index])
        screen.blit(enemy_bomb_img, (enemy_x, enemy_y))
        enemy_bomb_index += 1
        time.sleep(0.3)
    #更新
    pygame.display.update()
#卸载pygame模块
pygame.quit()

在这里插入图片描述


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值