显示敌人

通过定义函数,引入函数进行敌人图像的引用

# 引用pygame
import pygame # 使程序初始化
pygame.init()
# 设置图像参数
screen = pygame.display.set_mode((480, 700))
# 设置标题
pygame.display.set_caption('打飞机')
# 引入图片
icon = pygame.image.load('ufo.png')
pygame.display.set_icon(icon)
# 引入背景图片
bgImg = pygame.image.load('background.png')
# 引入玩家图片
playerImg = pygame.image.load('player.png')
# 定义玩家初始位置
playerX = 225
playerY = 350
# 定义变量表示运动距离
playerStep = 0
# 新增 引入敌人图片
enemyImg = pygame.image.load('enemy.png') # 新增 定义显示敌人的函数
def show_enemy():
# 新增 函数可以使敌人出现在(0,0)的位置
screen.blit(enemyImg, (0, 0)) running = True
# 进行循环 游戏主循环
while running:
# 绘制背景
screen.blit(bgImg, (0, 0))
# 绘制玩家
screen.blit(playerImg, (playerX, playerY))
# 新增 引用显示敌人函数
show_enemy()
# 获取游戏事件队列中的所有事件(涉及到玩家的各种交互,如鼠标点击、键盘操作、窗口事件等)
for event in pygame.event.get():
# 如果事件是QUIT事件,如点击窗口的关闭按钮,则退出循环
if event.type == pygame.QUIT:
# 退出循环
running = False
# KEYDOWN判断键盘按下的类型
if event.type == pygame.KEYDOWN:
# 新增 判断按下向左右键进行移动赋值
if event.key == pygame.K_RIGHT:
playerStep = 0.5
elif event.key == pygame.K_LEFT:
playerStep = -0.5
# KEYUP判断键盘抬起的类型
if event.type == pygame.KEYUP:
# 抬起键盘时将移动距离改为0
playerStep = 0 # 进行位移
playerX += playerStep
# 控制边界
if playerX > 378:
playerX = 378
if playerX < 0:
playerX = 0
if playerY > 572:
playerY = 572
if playerY < 0:
playerY = 0 # 界面更新
pygame.display.update()

敌人移动

1.左右移动

类似之前的调试玩家飞机移动,控制边界时在左右边界做反弹效果

注意:在函数中运用变量时用 global语句进行变量标注为全局变量操作

# 引用pygame
import pygame
# 使程序初始化
pygame.init()
# 设置图像参数
screen =pygame.display.set_mode((480,700))
# 设置标题
pygame.display.set_caption('打飞机')
# 引入图片
icon=pygame.image.load('ufo.png')
pygame.display.set_icon(icon)
# 引入背景图片
bgImg=pygame.image.load('background.png')
# 引入玩家图片
playerImg=pygame.image.load('player.png')
# 定义玩家初始位置
playerX=225
playerY=350
# 定义变量表示玩家运动速度
playerStep=0
# 引入敌人图片
enemyImg=pygame.image.load('enemy.png')
# 新增 定义敌人位置
enemyX=225
enemyY=20
# 新增 引入敌人运动速度
enemyStep=0.1
# 定义显示敌人的函数
def show_enemy():
# 新增 标注为全局变量
global enemyX
global enemyY
global enemyStep
# 函数可以使敌人出现在(enemyX,enemyY)的位置
screen.blit(enemyImg, (enemyX,enemyY))
# 新增 敌人飞机运动测试
enemyX += enemyStep
# 新增 控制敌人边界当敌人碰到左右边界时反弹,当敌人运动到上下边界时停止
if enemyX > 378:
enemyStep*=-1
if enemyX < 0:
enemyStep*=-1
if enemyY > 572:
enemyY = 572
if enemyY < 0:
enemyY = 0 running =True
# 进行循环 游戏主循环
while running :
# 绘制背景
screen.blit(bgImg,(0,0))
# 绘制玩家
screen.blit(playerImg, (playerX, playerY))
# 引用显示敌人函数
show_enemy()
# 获取游戏事件队列中的所有事件(涉及到玩家的各种交互,如鼠标点击、键盘操作、窗口事件等)
for event in pygame.event.get():
# 如果事件是QUIT事件,如点击窗口的关闭按钮,则退出循环
if event.type == pygame.QUIT:
#退出循环
running =False
# KEYDOWN判断键盘按下的类型
if event.type == pygame.KEYDOWN:
# 判断按下向左右键进行移动赋值
if event.key == pygame.K_RIGHT:
playerStep=0.5
elif event.key == pygame.K_LEFT:
playerStep=-0.5
# KEYUP判断键盘抬起的类型
if event.type == pygame.KEYUP:
# 抬起键盘时将移动距离改为0
playerStep = 0 # 进行位移
playerX+=playerStep
# 控制边界
if playerX > 378:
playerX = 378
if playerX < 0:
playerX = 0
if playerY > 572:
playerY = 572
if playerY < 0:
playerY = 0 # 界面更新
pygame.display.update()

效果如下

2.下沉移动与随机出现

使用判断碰壁进行下移操作

使用random函数进行随机位置操作

注意:随机时需要定义最大值和最小值。

# 引用pygame
import pygame
# 新增 引用随机模块
import random
# 使程序初始化
pygame.init()
# 设置图像参数
screen = pygame.display.set_mode((480, 700))
# 设置标题
pygame.display.set_caption('打飞机')
# 引入图片
icon = pygame.image.load('ufo.png')
pygame.display.set_icon(icon)
# 引入背景图片
bgImg = pygame.image.load('background.png')
# 引入玩家图片
playerImg = pygame.image.load('player.png')
# 定义玩家初始位置
playerX = 225
playerY = 350
# 定义变量表示玩家运动速度
playerStep = 0
# 引入敌人图片
enemyImg = pygame.image.load('enemy.png')
# 新增 通过random函数进行随机生成位置
enemyX = random.randint(100,380)
enemyY = random.randint(0,100)
# 引入敌人运动速度
enemyStep = 0.1 # 定义显示敌人的函数
def show_enemy():
# 标注为全局变量
global enemyX
global enemyY
global enemyStep
# 函数可以使敌人出现在(enemyX,enemyY)的位置
screen.blit(enemyImg, (enemyX, enemyY))
# 敌人飞机运动测试
enemyX += enemyStep
# 控制敌人边界当敌人碰到左右边界时反弹,当敌人运动到上下边界时停止
if enemyX > 378:
enemyStep *= -1
# 新增 当碰到边界时下沉
enemyY += 20
if enemyX < 0:
enemyStep *= -1
enemyY += 20 if enemyY > 572:
enemyY = 572
if enemyY < 0:
enemyY = 0 running = True
# 进行循环 游戏主循环
while running:
# 获取游戏事件队列中的所有事件(涉及到玩家的各种交互,如鼠标点击、键盘操作、窗口事件等)
screen.blit(bgImg, (0, 0))
# 绘制玩家
screen.blit(playerImg, (playerX, playerY))
# 引用显示敌人函数
show_enemy()
# 返回当前反应事件
for event in pygame.event.get():
# 如果事件是QUIT事件,如点击窗口的关闭按钮,则退出循环
if event.type == pygame.QUIT:
# 退出循环
running = False
# KEYDOWN判断键盘按下的类型
if event.type == pygame.KEYDOWN:
# 判断按下向左右键进行移动赋值
if event.key == pygame.K_RIGHT:
playerStep = 0.5
elif event.key == pygame.K_LEFT:
playerStep = -0.5
# KEYUP判断键盘抬起的类型
if event.type == pygame.KEYUP:
# 抬起键盘时将移动距离改为0
playerStep = 0 # 进行位移
playerX += playerStep
# 控制边界
if playerX > 378:
playerX = 378
if playerX < 0:
playerX = 0
if playerY > 572:
playerY = 572
if playerY < 0:
playerY = 0 # 界面更新
pygame.display.update()

效果如下

pygame小游戏打飞机_4显示敌人的更多相关文章

  1. 微信小游戏 demo 飞机大战 代码分析(四)(enemy.js, bullet.js, index.js)

    微信小游戏 demo 飞机大战 代码分析(四)(enemy.js, bullet.js, index.js) 微信小游戏 demo 飞机大战 代码分析(一)(main.js) 微信小游戏 demo 飞 ...

  2. 微信小游戏 demo 飞机大战 代码分析 (二)(databus.js)

    微信小游戏 demo 飞机大战 代码分析(二)(databus.js) 微信小游戏 demo 飞机大战 代码分析(一)(main.js) 微信小游戏 demo 飞机大战 代码分析(三)(spirit. ...

  3. 微信小游戏 demo 飞机大战 代码分析 (一)(game.js, main.js)

    微信小游戏 demo 飞机大战 代码分析(一)(main.js) 微信小游戏 demo 飞机大战 代码分析(二)(databus.js) 微信小游戏 demo 飞机大战 代码分析(三)(spirit. ...

  4. 微信小游戏 demo 飞机大战 代码分析 (三)(spirit.js, animation.js)

    微信小游戏 demo 飞机大战 代码分析(三)(spirit.js, animation.js) 微信小游戏 demo 飞机大战 代码分析(一)(main.js) 微信小游戏 demo 飞机大战 代码 ...

  5. Python小游戏之 - 飞机大战美女 !

    用Python写的"飞机大战美女"小游戏 源代码如下: # coding=utf-8 import os import random import pygame # 用一个常量来存 ...

  6. pygame小游戏之坦克大战

    以前在学校的时候无聊的学了会pygame.看了大概一周的教学视频,做出来个坦克大战的小游戏 Python3.5  pycharm import pygame,sys,time from random ...

  7. 微信demo小游戏:飞机大战从无到有

    微信demo游戏飞机大战从无到有 现在创建新项目会默认给飞机大战的demo,这里给大家从基础开始讲解游戏的从无到有是怎么实现的. 具体实现步骤: 创建背景图->背景图运动起来->创建飞机并 ...

  8. Pygame小游戏练习四

    @Python编程从入门到实践 Python项目练习 九.添加Play按钮 一.创建Button类 先让游戏一开始为非活动状态 # game_stats.py # --snip-- self.game ...

  9. Python小游戏之 - 飞机大战 !

    用Python写的"飞机大战"小游戏 源代码如下: # coding=utf-8 import random import os import pygame # 用一个常量来存储屏 ...

  10. 第四十天 阿乐在其中—Android小游戏的飞机(四)加入敌人

    8月9日,晴. "江城如画里,山晓望晴空. 雨水夹明镜.双桥落彩虹. 人烟寒橘柚,秋色老梧桐." 上篇已经让飞机载入子弹和音效及背景音乐,本篇主要加入敌机. 本篇要用到的几个函数解 ...

随机推荐

  1. docker中源码安装onnx / tvm

    docker安装 可自行到https://tvm.apache.org/docs/install/docker.html 官网下载安装 环境: 系统: ubuntu22.04系统, docker版本: ...

  2. 网络编程:poll

    原理 和select类似,只是描述fd集合的方式不同,poll使用pollfd结构而非select的fd_set结构. 管理多个描述符也是进行轮询,根据描述符的状态进行处理,但poll没有最大文件描述 ...

  3. B1032 挖掘机技术哪家强

    为了用事实说明挖掘机技术到底哪家强,PAT 组织了一场挖掘机技能大赛.现请你根据比赛结果统计出技术最强的那个学校. 输入格式: 输入在第 1 行给出不超过 10 5 的正整数 N,即参赛人数.随后 N ...

  4. Web安全入门学习--攻防世界web安全新手区过关心得

    这几天也是废了小小功夫,完成了这十道题目. 这十道题目说难不难,说简单对刚入门的同学来说也没有那么简单,但是做完可以对web有最初步的了解 下面开始解题 1.view_source 作为第一题,这题还 ...

  5. springBoot 使用jpa数据保存数据报数组越界问题

    在User类中定义gender使用的是一个枚举(Male, Female),但是在实际生成的表中该属性是一个int, 于是在保存数据时出现了 java.lang.ArrayIndexOutOfBoun ...

  6. 使用Spring Boot 优雅地发送邮件

    1.前言        在实际项目中,经常需要用到邮件通知功能.比如,用户通过邮件注册账号,通过邮件找回账号密码等:又比如通过邮件发送系统运行情况,通过邮件发送报表信息,给用户发送营销信息等等,实际应 ...

  7. AdGuard Home使用体验

    AdGuard Home使用体验 AdGuard Home is a network-wide software for blocking ads and tracking. After you se ...

  8. Springboot笔记<3> 组件注入注解@Conditional与@import

    @Conditional @Conditional是Spring4新提供的注解,它的作用是按照一定的条件进行判断,满足条件给容器注册bean. 创建ConfigConditional类和测试类Conf ...

  9. Java 内存模型与 Happens-Before 关系深度解析

    在 Java 并发编程中,Java 内存模型(Java Memory Model, JMM)与 Happens-Before 关系是理解多线程数据可见性和有序性的核心理论.本文从 JMM 的抽象模型出 ...

  10. Tauri2.0-DeepSeek电脑端Ai对话|tauri2+vite6+deepseek流式ai聊天系统

    重磅新作tauri2.0+vue3.5+deepseek+arco桌面客户端ai流式输出聊天对话系统. tauri2-vue3-deepseek:桌面端ai聊天对话,基于Tauri2.x+Vite6集 ...