pygame小游戏打飞机_4显示敌人
显示敌人
通过定义函数,引入函数进行敌人图像的引用
# 引用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显示敌人的更多相关文章
- 微信小游戏 demo 飞机大战 代码分析(四)(enemy.js, bullet.js, index.js)
微信小游戏 demo 飞机大战 代码分析(四)(enemy.js, bullet.js, index.js) 微信小游戏 demo 飞机大战 代码分析(一)(main.js) 微信小游戏 demo 飞 ...
- 微信小游戏 demo 飞机大战 代码分析 (二)(databus.js)
微信小游戏 demo 飞机大战 代码分析(二)(databus.js) 微信小游戏 demo 飞机大战 代码分析(一)(main.js) 微信小游戏 demo 飞机大战 代码分析(三)(spirit. ...
- 微信小游戏 demo 飞机大战 代码分析 (一)(game.js, main.js)
微信小游戏 demo 飞机大战 代码分析(一)(main.js) 微信小游戏 demo 飞机大战 代码分析(二)(databus.js) 微信小游戏 demo 飞机大战 代码分析(三)(spirit. ...
- 微信小游戏 demo 飞机大战 代码分析 (三)(spirit.js, animation.js)
微信小游戏 demo 飞机大战 代码分析(三)(spirit.js, animation.js) 微信小游戏 demo 飞机大战 代码分析(一)(main.js) 微信小游戏 demo 飞机大战 代码 ...
- Python小游戏之 - 飞机大战美女 !
用Python写的"飞机大战美女"小游戏 源代码如下: # coding=utf-8 import os import random import pygame # 用一个常量来存 ...
- pygame小游戏之坦克大战
以前在学校的时候无聊的学了会pygame.看了大概一周的教学视频,做出来个坦克大战的小游戏 Python3.5 pycharm import pygame,sys,time from random ...
- 微信demo小游戏:飞机大战从无到有
微信demo游戏飞机大战从无到有 现在创建新项目会默认给飞机大战的demo,这里给大家从基础开始讲解游戏的从无到有是怎么实现的. 具体实现步骤: 创建背景图->背景图运动起来->创建飞机并 ...
- Pygame小游戏练习四
@Python编程从入门到实践 Python项目练习 九.添加Play按钮 一.创建Button类 先让游戏一开始为非活动状态 # game_stats.py # --snip-- self.game ...
- Python小游戏之 - 飞机大战 !
用Python写的"飞机大战"小游戏 源代码如下: # coding=utf-8 import random import os import pygame # 用一个常量来存储屏 ...
- 第四十天 阿乐在其中—Android小游戏的飞机(四)加入敌人
8月9日,晴. "江城如画里,山晓望晴空. 雨水夹明镜.双桥落彩虹. 人烟寒橘柚,秋色老梧桐." 上篇已经让飞机载入子弹和音效及背景音乐,本篇主要加入敌机. 本篇要用到的几个函数解 ...
随机推荐
- .NET 10 Preview 4中ASP.NET Core 改进
.NET团队在5月13日发布了.NET 10 Preview 4: https://devblogs.microsoft.com/dotnet/dotnet-10-preview-4/.该版本虽无突破 ...
- 网络编程:阻塞I/O和线程模型
线程 进程模型在处理用户请求的过程中,进程切换上下文的代价比较高,而,一种轻量级的模型可以处理多用户连接请求,那就是线程模型. 线程(thread)是运行在进程中的一个"逻辑流", ...
- MethodImpl优化性能
参数解释 MethodImplOptions.AggressiveInlining:请求编译器在可能的情况下对方法进行内联. MethodImpl:这是一个属性,允许开发者为方法指定特定的实现行为,比 ...
- 处理日期和时间的chrono库
C++11中提供了日期和时间相关的库chrono,通过chrono库可以很方便地处理日期和时间,为程序的开发提供了便利.chrono库主要包含三种类型的类:时间间隔duration.时钟clocks. ...
- FFmpeg开发笔记(六十三)FFmpeg使用vvenc把视频转为H.266编码
前面的两篇文章分别介绍了如何在Linux环境和Windows环境给FFmpeg集成H.266的编码器vvenc,接下来利用ffmpeg把视频文件转换为VVC格式,观察新生成的vvc视频能否正常播放. ...
- C#/.NET/.NET Core技术前沿周刊 | 第 41 期(2025年6.1-6.8)
前言 C#/.NET/.NET Core技术前沿周刊,你的每周技术指南针!记录.追踪C#/.NET/.NET Core领域.生态的每周最新.最实用.最有价值的技术文章.社区动态.优质项目和学习资源等. ...
- 如何从Docker image提取 Dockerfile
参考链接:https://github.com/cucker0/dockerimage2df 参考链接:https://github.com/cucker0/docker/blob/main/md/由 ...
- Java源码分析系列笔记-15.CompletableFuture
目录 1. 是什么 2. Future VS CompletableFutre 3. 使用 3.1. 运行一个不返回结果的任务 3.2. 运行一个返回结果的任务 3.3. 线程池 3.4. 手动完成任 ...
- .NET 全栈开发工程师学习路径
PS:最近一直反复地看博客园以前发布的一条.NET全栈开发工程师的招聘启事,觉得这是我看过最有创意也最朴实的一个招聘启事,更为重要的是它更像是一个技术提纲,能够指引我们的学习和提升,现在转载过来与各位 ...
- 工作流引擎系统-基于橙单(flowable)的系统开发-流程配置举例
什么是工作流引擎(Workflow Engine ) 例如开发一个系统,最关键的部分不是系统的界面(增删改查之类),也不是和数据库之间的交互(读写数据库之类),而是如何根据业务逻辑开发出符合实际需要的 ...