新手使用Python开发游戏pygame入门很合适-02

news2024/11/26 4:50:19

前面一篇博文,我们让飞机动起来了,但不是那么完美,我们继续来完善我们的游戏代码,本篇博文主要介绍获取按键的方式已经飞行速度的控制。

文章目录

  • 一、获取按键的三种方式
    • 1、通过event.get配合pygame.key枚举
    • 2、通过event.get配合ord
  • 二、完善飞行
    • 1、飞机飞行的速度
    • 2、飞行的边界
    • 2、移动的两种方式
      • (1)通过坐标属性
      • (2)通过move方法
  • 三、来一架敌机吧

一、获取按键的三种方式

1、通过event.get配合pygame.key枚举

for event in pygame.event.get():
	if event.type==KEYDOWN:
		if event.key==pygame.K_RIGHT:
			aircraft_local=aircraft_local.move(1, 0)

2、通过event.get配合ord

for event in pygame.event.get():
	if event.type==KEYDOWN:
		if event.key == ord('q'):
			pygame.quit()

3、通过pygame的get_pressed方法

presskey=pygame.key.get_pressed()
if presskey[pygame.K_a] or presskey[pygame.K_LEFT]:#left
		aircraft_local=aircraft_local.move(-1, 0)

二、完善飞行

1、飞机飞行的速度

这里我们引入time包,利用它来控制好。前面那篇的代码飞行速度过快,所以,我们这里引入time的tick进行控制,这样,我们的运行速度,更准确的说是画面的更新速度就会自动根据tick中的速度来更新了。代码如下:

pygame.init()

screen=pygame.display.set_mode(size)
aircraft_local=aircraft.get_rect(x=100,y=200)
clock=pygame.time.Clock()

pygame.display.set_caption("firstPygame Window")
while runing:
	for event in pygame.event.get():
		if event.type==QUIT :
			runing=False
	screen.fill((200,100,0))
	screen.blit(bg,(0,0))
	screen.blit(aircraft,aircraft_local)
	# 这里省去了按键移动的代码
	  
	pygame.display.update()
	clock.tick(60)

2、飞行的边界

这里,我们又增加了一层判断,即对x和y的边界进行判断,这样我们的飞机就不至于跑出屏幕外了。

presskey=pygame.key.get_pressed()
	if presskey[pygame.K_a] or presskey[pygame.K_LEFT]:#left
		if aircraft_local.x>0:
			aircraft_local=aircraft_local.move(-1, 0)

	if presskey[pygame.K_d]or presskey[pygame.K_RIGHT]:#right
		if aircraft_local.x<width-80:
			aircraft_local=aircraft_local.move(1, 0)

	if presskey[pygame.K_s]or presskey[pygame.K_DOWN]:#down
		if aircraft_local.y<height-80:
			aircraft_local.y+=1

	if presskey[pygame.K_w]or presskey[pygame.K_UP]:#up
		if aircraft_local.y>0:
			aircraft_local.y-=1	

2、移动的两种方式

(1)通过坐标属性

aircraft_local.y+=1

或者,如果你习惯下面这样写也可

aircraft_local.=aircraft_local.y+1

(2)通过move方法

aircraft_local=aircraft_local.move(-1, 0)

三、来一架敌机吧

假定我们也和加载飞机一样,加载了一架敌机的图片,下面我们就使用move方法,让飞机从上飞到底下。

# 前面加载plane的图片省略
while runing:
if plane_local.y<=height-40 :
	plane_local=plane_local.move(0,1)
if plane_local.y==height-40:
	plane_local.y=0
screen.blit(bg,(0,0))
screen.blit(aircraft,aircraft_local)
screen.blit(plane,plane_local)
pygame.display.update()
clock.tick(60)

效果如下图:
在这里插入图片描述
完全代码如下:

import pygame
from pygame.locals import *
import os
import time

size=width,height=(400,600)
# 加载图片
aircraft=pygame.transform.scale(pygame.image.load(os.path.join("assets","aircraft.png")),(80,80))
plane=pygame.transform.rotate(pygame.transform.scale(pygame.image.load(os.path.join("assets","plane01.png")),(40,40)),-90)
bg=pygame.transform.scale(pygame.image.load(os.path.join("assets","bg.jpg")),(width,height))

runing=True
step=width/200;
pygame.init()


screen=pygame.display.set_mode(size)

aircraft_local=aircraft.get_rect(x=100,y=200)
plane_local=aircraft.get_rect(x=180,y=0)
clock=pygame.time.Clock()

pygame.display.set_caption("firstPygame Window")
screen.fill((200,100,0))

while runing:
	for event in pygame.event.get():
		if event.type==QUIT :
			runing=False


	presskey=pygame.key.get_pressed()
	if presskey[pygame.K_a] or presskey[pygame.K_LEFT]:#left
		if aircraft_local.x>0:
			aircraft_local=aircraft_local.move(-1, 0)

	if presskey[pygame.K_d]or presskey[pygame.K_RIGHT]:#right
		if aircraft_local.x<width-80:
			aircraft_local=aircraft_local.move(1, 0)

	if presskey[pygame.K_s]or presskey[pygame.K_DOWN]:#down
		if aircraft_local.y<height-80:
			aircraft_local.y+=1

	if presskey[pygame.K_w]or presskey[pygame.K_UP]:#up
		if aircraft_local.y>0:
			aircraft_local.y-=1	

	if plane_local.y<=height-40 :
		plane_local=plane_local.move(0,1)
	if plane_local.y==height-40:
		plane_local.y=0
		
	screen.blit(bg,(0,0))
	screen.blit(aircraft,aircraft_local)
	screen.blit(plane,plane_local)

   
	pygame.display.update()
	clock.tick(60)

有关blit()函数的参考博文
上面的代码主要是对前面第一篇的代码进行了一些完善,下一篇博文,我们则开始对飞机及敌机进行类的设计和封装。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/424062.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

本地测试Segment Anything

一、下载GitHub代码 官网地址&#xff1a; https://github.com/facebookresearch/segment-anything git clone 或者 下载ZIP压缩包 二、下载.pth文件 官网中给出了三个训练好的参数文件 点击下载&#xff0c;我这里下载了最后一个358M大小的模型&#xff08;这里可以使用迅…

apache 配置与应用以及网页优化

Apache 配置与应用 --------构建虚拟 Web 主机-------- 虚拟Web主机指的是在同一台服务器中运行多个Web站点&#xff0c;其中每一个站点实际上并不独立占用整个服务器&#xff0c;因此被称为“虚拟”Web 主机。 通过虚拟 Web 主机服务可以充分利用服务器的硬件资源&#xff0c…

49.现有移动端开源框架及其特点—MACE( Mobile AI Compute Engine)

Mobile AI Compute Engine (MACE) 是一个专为移动端异构计算设备优化的深度学习前向预测框架 MACE覆盖了常见的移动端计算设备(CPU,GPU和DSP),并且提供了完整的工具链和文档,用户借助MACE能够很方便地在移动端部署深度学习模型MACE已经在小米内部广泛使用并且被充分验证具…

答疑——20年国赛题(JAVA解法)

题目链接&#xff1a;用户登录https://www.lanqiao.cn/problems/1025/learning/?page3&first_category_id1&sortstudents_count 题目描述 有 n 位同学同时找老师答疑。每位同学都预先估计了自己答疑的时间。 老师可以安排答疑的顺序&#xff0c;同学们要依次进入老…

SQL笔记(1)——MySQL创建数据库(收藏吃灰版)

本文详细记录MySQL创建一个数据库的过程&#xff0c;不只是构建步骤&#xff0c;更多的是每一步涉及到的知识点。一般创建数据库有两种方式&#xff0c;一种是命令&#xff0c;另外一种就是通过数据库管理工具&#xff0c;本文主要记录通过命令的方式创建&#xff1b; 后面的学…

Centos7升级make和gcc版本到最新

Background 遇到如下的问题可能就是你make和gcc的版本过低了&#xff0c;需要升级。 *** These critical programs are missing or too old: make compiler *** Check the INSTALL file for required versions. 1、更新make版本 下载最新版本 【make最新安装包下载地址】 #…

VuePress1.x使用及个人博客搭建

文章目录介绍快速开始安装目录页面配置介绍 VuePress 由两部分组成&#xff1a;一个以 Vue 驱动的主题系统的简约静态网站生成工具&#xff0c;和一个为编写技术文档而优化的默认主题。它是为了支持 Vue 子项目的文档需求而创建的。 快速开始 安装 首先需要安装Node.js &…

ASM字节码处理工具原理及实践(一)

1. ASM简介 我们知道程序的分析。生成和转换是很有用的技术&#xff0c;可以用于很多场景。ASM作为一个Java字节码处理工具&#xff0c;它被设计用于处理已编译的Java类。ASM不是生成和转变已编译的Java类的唯一工具&#xff0c;但它是最新且最有效的工具之一。特点是体积小&a…

一个实现跳转到更多页面的黏性交互的通用组件

本文字数&#xff1a;3344字预计阅读时间&#xff1a;9分钟背景和现状随着移动互联网的快速发展&#xff0c;通信费用大幅降低&#xff0c;信息爆炸&#xff0c;应用软件展示的信息越来越来&#xff0c;为了有效地组织和展示信息&#xff0c;各大移动平台都提供了列表滚动组件方…

No.038<软考>《(高项)备考大全》【第22章】信息安全管理

【第22章】信息安全管理1 考试相关2 信息安全管理2.1 安全策略2.2 信息系统安全等级保护2.3 安全的概念适度安全的观点&#xff1a;木桶效应的观点&#xff1a;2.4 安全策略设计2.5 信息安全系统工程能力成熟度模型ISSE-CMM2.6数字证书护照和签证2.7访问控制授权方案2.8 安全审…

评估数据质量的指标总结1

评估数据质量的指标总结1 1、RMSE&#xff08;root mean square error&#xff09;均方根误差 作用&#xff1a;RMSE是估计的度量值与“真实”值之间的距离的度量。 计算方法&#xff1a; 2、相关系数r(coefficient of correlation ) 作用&#xff1a;皮尔逊相关系数&#xff…

LeetCode算法小抄--二叉树的各种构造

LeetCode算法小抄--各种情况的构造二叉树构造二叉树构造最大二叉树[654. 最大二叉树](https://leetcode.cn/problems/maximum-binary-tree/)从前序与中序遍历构造二叉树[105. 从前序与中序遍历序列构造二叉树](https://leetcode.cn/problems/construct-binary-tree-from-preord…

Unity和UE有啥区别?哪个更适合游戏开发

游戏制作软件中最著名的两个游戏引擎是 Unity 和 Unreal Engine。从独立游戏到大型工作室&#xff0c;许多游戏开发商都在使用它们。如果你打算从事游戏行业工作&#xff0c;你肯定曾经问过自己“我的游戏应该使用 Unity 还是 Unreal Engine&#xff1f;” ” 让我们来了解和比…

ActiveMQ使用(四):在JavaScript中发送的MQTT消息在SpringBoot中变为字节数组

ActiveMQ使用(四):在JavaScript中发送的MQTT消息在SpringBoot中变为字节数组 1. 问题描述 JmsListener(destination "test_producer", containerFactory "topicListenerContainer")public void receiveTestProducer(String message) throws JMSExceptio…

AI绘画兴起,Stable Diffusion脱颖而出,来一探究竟

近几年&#xff0c;AI图像生成风靡全球&#xff0c;它能够根据文字描述生成精美图像&#xff0c;这极大地改变了人们的图像创作方式。众多专业人士说该技术正在引领着新一轮深度学习创意工具浪潮&#xff0c;并有望彻底改变视觉媒体的创作。 AI绘画兴起 Stable Diffusion脱颖…

[Django] 后台管理系统

浏览之前&#xff0c;请先阅读以下文章 1.Django项目创建 2.Django路由系统 在项目目录下的urls.py文件中&#xff0c;我们会看到这样一个url的配置 启动服务&#xff0c;在浏览器中输入网址http://127.0.0.1:8000/admin/&#xff0c;结果如下 Django提供了一个非常强大的管…

前端解析Excel中的数据进行操作

技术要点&#xff1a;Vue、Element、JSON 功能描述&#xff1a;读取Excel中的数据&#xff0c;利用JavaScript技术奖数据转成Json格式进行操作&#xff01; 功能描述&#xff1a;只能用前端操作数据&#xff0c;并未实现将数据传送至后端处理&#xff01; 注意注意注意 如果…

Dapper——分布式跟踪系统

分布式跟踪系统 背景 当代的互联网的服务&#xff0c;通常都是用复杂的、大规模分布式集群来实现的。互联网应用构建在不同的软件模块集上&#xff0c;这些软件模块&#xff0c;有可能是由不同的团队开发、可能使用不同的编程语言来实现、有可能布在了几千台服务器&#xff0…

常用加密算法

目录 常见的加密算法可以分成三种&#xff1a; 对称加密算法 DES 3DES AES 非对称加密 RSA ECC Hash算法 MD5 SHA1 算法对比 算法选择 常见的加密算法可以分成三种&#xff1a; 对称加密算法&#xff1b;非对称加密算法&#xff1b;Hash算法&#xff1b;接下来我们…

论文 : Multi-Kernel Broad Learning systems Based on Random Features

Multi-Kernel Broad Learning systems Based on Random Features:A Novel Expansion for Nonlinear Feature Nodes 基于核方法的强大性能&#xff0c;本文提出了一种基于多核的BLS系统扩展方法。首先&#xff0c;将多核形式的非线性特征映射合并为广义学习系统的特征节点; 然后…