找回密码
 立即注册
首页 业界区 安全 pygame小游戏打飞机_4显示敌人

pygame小游戏打飞机_4显示敌人

柄利 昨天 20:16
显示敌人:
定义显示敌人的函数 show_enemy,调用该函数时显示敌人的图像
  1. # 引用pygame
  2. import pygame
  3. # 使程序初始化
  4. pygame.init()
  5. # 设置图像参数
  6. screen = pygame.display.set_mode((480, 700))
  7. # 设置标题
  8. pygame.display.set_caption('打飞机')
  9. # 引入图片
  10. icon = pygame.image.load('ufo.png')
  11. pygame.display.set_icon(icon)
  12. # 引入背景图片
  13. bgImg = pygame.image.load('background.png')
  14. # 引入玩家图片
  15. playerImg = pygame.image.load('player.png')
  16. # 定义玩家初始位置
  17. playerX = 225
  18. playerY = 350
  19. # 定义变量表示运动距离
  20. playerStep = 0
  21. # 新增 引入敌人图片
  22. enemyImg = pygame.image.load('enemy.png')
  23. # 新增 定义显示敌人的函数
  24. def show_enemy():
  25.     # 新增 使敌人出现在(0,0)的位置
  26.     screen.blit(enemyImg, (0, 0))
  27. running = True
  28. # 进行循环 游戏主循环
  29. while running:
  30.     # 绘制背景
  31.     screen.blit(bgImg, (0, 0))
  32.     # 绘制玩家
  33.     screen.blit(playerImg, (playerX, playerY))
  34.     # 新增 调用显示敌人函数
  35.     show_enemy()
  36.     # 获取游戏事件队列中的所有事件(涉及到玩家的各种交互,如鼠标点击、键盘操作、窗口事件等)
  37.     for event in pygame.event.get():
  38.         # 如果事件是QUIT事件,如点击窗口的关闭按钮,则退出循环
  39.         if event.type == pygame.QUIT:
  40.             # 退出循环
  41.             running = False
  42.         # KEYDOWN判断键盘按下的类型
  43.         if event.type == pygame.KEYDOWN:
  44.             # 新增 判断按下向左右键进行移动赋值
  45.             if event.key == pygame.K_RIGHT:
  46.                 playerStep = 0.5
  47.             elif event.key == pygame.K_LEFT:
  48.                 playerStep = -0.5
  49.         # KEYUP判断键盘抬起的类型
  50.         if event.type == pygame.KEYUP:
  51.             # 抬起键盘时将移动距离改为0
  52.             playerStep = 0
  53.     # 进行位移
  54.     playerX += playerStep
  55.     # 控制边界
  56.     if playerX > 378:
  57.         playerX = 378
  58.     if playerX < 0:
  59.         playerX = 0
  60.     if playerY > 572:
  61.         playerY = 572
  62.     if playerY < 0:
  63.         playerY = 0
  64.     # 界面更新
  65.     pygame.display.update()
复制代码
敌人移动:
1.敌人左右移动
设置敌人初始运动速度,当敌人移动到边界时在左右边界做反弹效果
注意:在函数中使用全局变量时,需要在函数中使用 global 语句标注使用的变量为全局变量
  1. # 引用pygame
  2. import pygame
  3. # 使程序初始化
  4. pygame.init()
  5. # 设置图像参数
  6. screen =pygame.display.set_mode((480,700))
  7. # 设置标题
  8. pygame.display.set_caption('打飞机')
  9. # 引入图片
  10. icon=pygame.image.load('ufo.png')
  11. pygame.display.set_icon(icon)
  12. # 引入背景图片
  13. bgImg=pygame.image.load('background.png')
  14. # 引入玩家图片
  15. playerImg=pygame.image.load('player.png')
  16. # 定义玩家初始位置
  17. playerX=225
  18. playerY=350
  19. # 定义变量表示玩家运动速度
  20. playerStep=0
  21. # 引入敌人图片
  22. enemyImg=pygame.image.load('enemy.png')
  23. # 新增 定义敌人位置
  24. enemyX=225
  25. enemyY=20
  26. # 新增 引入敌人运动速度
  27. enemyStep=0.1
  28. # 定义显示敌人的函数
  29. def show_enemy():
  30.     # 新增 标注为全局变量
  31.     global enemyX
  32.     global enemyY
  33.     global enemyStep
  34.     # 函数可以使敌人出现在(enemyX,enemyY)的位置
  35.     screen.blit(enemyImg, (enemyX,enemyY))
  36.     # 新增 敌人飞机运动测试
  37.     enemyX += enemyStep
  38.     # 新增 控制敌人边界当敌人碰到左右边界时反弹,当敌人运动到上下边界时停止
  39.     if enemyX > 378:
  40.         enemyStep*=-1
  41.     if enemyX < 0:
  42.         enemyStep*=-1
  43.     if enemyY > 572:
  44.         enemyY = 572
  45.     if enemyY < 0:
  46.         enemyY = 0
  47. running =True
  48. # 进行循环 游戏主循环
  49. while running :
  50.     # 绘制背景
  51.     screen.blit(bgImg,(0,0))
  52.     # 绘制玩家
  53.     screen.blit(playerImg, (playerX, playerY))
  54.     # 调用显示敌人函数
  55.     show_enemy()
  56.     # 获取游戏事件队列中的所有事件(涉及到玩家的各种交互,如鼠标点击、键盘操作、窗口事件等)
  57.     for event  in pygame.event.get():
  58.         # 如果事件是QUIT事件,如点击窗口的关闭按钮,则退出循环
  59.         if event.type == pygame.QUIT:
  60.             #退出循环
  61.             running =False
  62.         # KEYDOWN判断键盘按下的类型
  63.         if event.type == pygame.KEYDOWN:
  64.             # 判断按下向左右键进行移动赋值
  65.             if event.key == pygame.K_RIGHT:
  66.                 playerStep=0.5
  67.             elif event.key == pygame.K_LEFT:
  68.                 playerStep=-0.5
  69.         # KEYUP判断键盘抬起的类型
  70.         if event.type == pygame.KEYUP:
  71.             # 抬起键盘时将移动距离改为0
  72.             playerStep = 0
  73.     # 进行位移
  74.     playerX+=playerStep
  75.     # 控制边界
  76.     if playerX > 378:
  77.         playerX = 378
  78.     if playerX < 0:
  79.         playerX = 0
  80.     if playerY > 572:
  81.         playerY = 572
  82.     if playerY < 0:
  83.         playerY = 0
  84.     # 界面更新
  85.     pygame.display.update()
复制代码
 效果如下:
1.gif

2.敌人下沉移动与随机出现
当敌人碰到左右边界时触发下沉移动
调用 random 函数生成敌人随机显示位置的坐标
注意:生成随机数时需要定义最大值和最小值。
  1. # 引用 pygame
  2. import pygame
  3. # 新增 引用随机模块
  4. import random
  5. # 使程序初始化
  6. pygame.init()
  7. # 设置游戏窗口大小
  8. screen = pygame.display.set_mode((480, 700))
  9. # 设置标题
  10. pygame.display.set_caption('打飞机')
  11. # 设置游戏图标
  12. icon = pygame.image.load('ufo.png')
  13. pygame.display.set_icon(icon)
  14. # 引入背景图片
  15. bgImg = pygame.image.load('background.png')
  16. # 引入玩家图片
  17. playerImg = pygame.image.load('player.png')
  18. # 定义玩家初始位置
  19. playerX = 225
  20. playerY = 350
  21. # 定义变量表示玩家运动速度
  22. playerStep = 0
  23. # 引入敌人图片
  24. enemyImg = pygame.image.load('enemy.png')
  25. # 新增 通过 random 函数进行随机位置坐标生成
  26. enemyX = random.randint(100, 380)
  27. enemyY = random.randint(0, 100)
  28. # 定义变量表示敌人运动速度
  29. enemyStep = 0.1
  30. # 定义显示敌人的函数
  31. def show_enemy():
  32.     # 标注为全局变量
  33.     global enemyX
  34.     global enemyY
  35.     global enemyStep
  36.     # 使敌人出现在(enemyX, enemyY)的位置
  37.     screen.blit(enemyImg, (enemyX, enemyY))
  38.     # 使敌人飞机左右移动
  39.     enemyX += enemyStep
  40.     # 控制敌人移动边界,当敌人碰到左右边界时反弹,当敌人运动到上下边界时停止
  41.     if enemyX > 378:
  42.         enemyStep *= -1
  43.         # 新增 当碰到左右边界时下沉
  44.         enemyY += 20
  45.     if enemyX < 0:
  46.         enemyStep *= -1
  47.         enemyY += 20
  48.     if enemyY > 572:
  49.         enemyY = 572
  50.     if enemyY < 0:
  51.         enemyY = 0
  52. running = True
  53. # 进行循环 游戏主循环
  54. while running:
  55.     # 绘制背景
  56.     screen.blit(bgImg, (0, 0))
  57.     # 绘制玩家
  58.     screen.blit(playerImg, (playerX, playerY))
  59.     # 调用显示敌人函数
  60.     show_enemy()
  61.     # 获取游戏事件队列中的所有事件(涉及到玩家的各种交互,如鼠标点击、键盘操作、窗口事件等)
  62.     for event in pygame.event.get():
  63.         # 如果事件是QUIT事件,如点击窗口的关闭按钮,则退出循环
  64.         if event.type == pygame.QUIT:
  65.             # 退出循环
  66.             running = False
  67.         # KEYDOWN 判断键盘是否按下
  68.         if event.type == pygame.KEYDOWN:
  69.             # 判断按下左右键进行移动赋值
  70.             if event.key == pygame.K_RIGHT:
  71.                 playerStep = 0.5
  72.             elif event.key == pygame.K_LEFT:
  73.                 playerStep = -0.5
  74.         # KEYUP 判断键盘是否抬起
  75.         if event.type == pygame.KEYUP:
  76.             # 抬起键盘时将移动距离改为 0
  77.             playerStep = 0
  78.     # 玩家左右移动
  79.     playerX += playerStep
  80.     # 控制玩家移动边界
  81.     if playerX > 378:
  82.         playerX = 378
  83.     if playerX < 0:
  84.         playerX = 0
  85.     if playerY > 572:
  86.         playerY = 572
  87.     if playerY < 0:
  88.         playerY = 0
  89.     # 界面更新
  90.     pygame.display.update()
复制代码
效果如下:
 
2.gif


来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册