python 写游戏好简单啊,我用键盘可以随意控制角色了【python 游戏实战 04】

前言

本系列文章将会以通俗易懂的对话方式进行教学,对话中将涵盖了新手在学习中的一般问题。此系列将会持续更新,包括别的语言以及实战都将使用对话的方式进行教学,基础编程语言教学适用于零基础小白,之后实战课程也将会逐步更新。

若有想学习的内容可以在评论区留言,根据大家的要求持续更新。点赞过十万就算化成灰我也更新下一篇。(肯定不到,也会更的。)

有问题也可以在评论区留言,也可以私聊我加我好友共同交流一起进步~

我的其它教程

教程点击进去将会有目录

《看聊天记录都学不会C语言?太菜了吧(1)我在大佬群里问基础问题没人理?——学习建议

《大学生C语言作业、习题100例白话详解》

目录

《看聊天记录都学不会Python到游戏实战?太菜了吧》python 写游戏好简单啊,我用键盘可以随意控制角色了【python 游戏实战 04】—— 键盘控制角色移动

《看聊天记录都学不会Python到游戏实战?太菜了吧》游戏角色开始动起来了,真帅!【python 游戏实战 03】—— 角色移动

《看聊天记录都学不会Python到游戏实战?太菜了吧》这是我第一次使用代码创建出一个窗口【python 游戏实战 02】—— 创建游戏场景

《看聊天记录都学不会Python到游戏实战?太菜了吧》这是我第一次使用代码创建出一个窗口【python 游戏实战 01】—— 创建窗口

《看聊天记录都学不会Python到游戏实战?太菜了吧》(12)python 的列表我从没想过会那么好用—— 列表

《看聊天记录都学不会Python到游戏实战?太菜了吧》(11)python里面while到底有多少知识点—— break continue

《看聊天记录都学不会Python到游戏实战?太菜了吧》(10)无底洞的循环—— 循环初窥

《看聊天记录都学不会Python到游戏实战?太菜了吧》(9)集万家之长不死 python—— 导包

《看聊天记录都学不会Python到游戏实战?太菜了吧》(8)我们开始做一个数字小游戏吧—— 数字游戏开始做 导包

《看聊天记录都学不会Python到游戏实战?太菜了吧》(7)我用函数写了个特洛伊木马—— 自定义函数

《看聊天记录都学不会Python到游戏实战?太菜了吧》(6)不会这个知识点代码越写越难—— and or 逻辑运算

《看聊天记录都学不会Python到游戏实战?太菜了吧》(5)用前朝的剑斩今朝的官——if…else

《看聊天记录都学不会Python到游戏实战?太菜了吧》(4)小白不知道这个知识点将会错漏百出——if 与 层级

《看聊天记录都学不会Python到游戏实战?太菜了吧》(3)都说123是字符不是数字——输入与类型

《看聊天记录都学不会Python到游戏实战?太菜了吧》(2)在python中加号竟然如此善变——变量与运算

《看聊天记录都学不会Python到游戏实战?太菜了吧》(1)装载Python神器!亮剑!——helloworld


作者简介

作者名:1_bit

简介:CSDN博客专家,2020年博客之星TOP5,蓝桥签约作者。15-16年曾在网上直播,带领一批程序小白走上程序员之路。欢迎各位小白加我咨询我相关信息,迷茫的你会找到答案。

博客地址:https://i1bit.blog.csdn.net


🐰小C:小媛,上一节我们绘制了一个场景,移动了角色,那么这一节我们就开始控制主角并且让他进行移动吧?

👸小媛:我怎么感觉你突然变得好心了,以前每一节就讲一点内容,然后就开始跟我拌嘴水字数,这一节怎么直奔主题?😂

🐰小C:有嘛?是你跟我拌嘴的好嘛?你不信去看聊天记录。

👸小媛:真的吗?那还不是你在水字数。

🐰小C:哈哈哈,这一节不水了,开始玩真的吧。

👸小媛:赶紧的,你又水了 224 个md字数了。😂

🐰小C:行,我们先看一下我们上一节的代码。

import pygamepygame.init()
screen=pygame.display.set_mode((600,800))
pygame.display.set_caption("这是一个飞机游戏")
icon=pygame.image.load(r'E:\2dsrc\src\img\hero1.png')
bg=pygame.image.load(r'E:\2dsrc\src\img\bg.png')
hero=pygame.image.load(r'E:\2dsrc\src\img\hero1.png')
pygame.display.set_icon(icon)
heroX=250 #x坐标
#游戏主循环
while True:#事件遍历for event in pygame.event.get():if event.type==pygame.QUIT:exit()heroX=heroX-3screen.blit(bg,(0,0))screen.blit(hero,(heroX,680))pygame.display.update()

🐰小C:上一节我们只是使用了代码对主角进行移动,那么现在我们改一下,我们按上,主角就往上走、按下主角就往下走,其它按键依次类推如何?

👸小媛:行,你说啥就是啥,终于不废话了。 😰

🐰小C:不不不,还是需要点情节来让整个氛围轻松的。

👸小媛:赶紧吧,别废话,真是禁不起夸。

🐰小C:哈哈哈,其实我们刚刚已经获取到了这个游戏中发生的所有事件 pygame.event.get(),我们只是从获取的事件中判断是否做了退出事件,那么在这里我们只需要再判断是否按下了特定的键,那么就可以对特定的键做出反应了。

👸小媛:然后根据上一节所学,我们只需要根据不同按键控制这个主角下一次绘制所在的位置就可以了吧?

🐰小C:是的,我们首先判断按下什么键吧。

import pygamepygame.init()
screen=pygame.display.set_mode((600,800))
pygame.display.set_caption("这是一个飞机游戏")
icon=pygame.image.load(r'E:\2dsrc\src\img\hero1.png')
hero=pygame.image.load(r'E:\2dsrc\src\img\hero1.png')
bg=pygame.image.load(r'E:\2dsrc\src\img\bg.png')
pygame.display.set_icon(icon)
#游戏主循环
while True:#事件遍历for event in pygame.event.get():if event.type==pygame.QUIT:exit()if event.type==pygame.KEYDOWN:if event.key == pygame.K_RIGHT:print('→')elif event.key == pygame.K_LEFT:print('←')elif event.key == pygame.K_UP:print('↑')elif event.key == pygame.K_DOWN:print('↓')screen.blit(bg,(0,0))screen.blit(hero,(heroX,680))pygame.display.update()

👸小媛:if event.key == pygame.K_RIGHT 就是判断是否按下的键吗?

🐰小C:是的,event.key 表示具体按下了什么键,如果 event.key 等于 pygame.K_RIGHT 那么就表示按下了右键头,那么就运行 print('→') 输出打印出 → 箭头。

👸小媛:明白了。然后 pygame.K_LEFT 是按下了左键、pygame.K_UP 表示按下上键、pygame.K_DOWN 表示按下了下键? 😶

🐰小C:是的,但是我们需要注意,必须是按下键后这个时间才会有 event.key 中的 key 这个类型,如果你没按下是判断不出来按下了什么键,所以前面 if event.type==pygame.KEYDOWN: 这句代码至关重要,表示了你按下键后才进行判断。你可以运行程序感受一下。

👸小媛:哈哈哈,好好玩,我按下什么就显示什么。 😎

🐰小C:都正确响应了吧?

👸小媛:是的。

🐰小C:那么我们接下来就需要控制角色进行移动了。

👸小媛:我觉得有点会了,但是还需要你写出来看一下,我总感觉我会出错。

🐰小C:我们先控制角色左右移动吧?

👸小媛:可以呀,没问题。 😎

🐰小C:我们知道,在这个屏幕中左右是控制 X 坐标,X越大那么越靠右,X越小那么就越靠左,我们按下左键的时候 X 轴的值就应该变小,如果按下右键那么 X 轴的值就应该越大。我们只需要在按下左右键的时候给一个变量赋予一个正值或者负值,正值表示往右负值表示往左,并且每次 hero 主句的 X 轴的值加上这个值就可以了。

import pygamepygame.init()
screen=pygame.display.set_mode((600,800))
pygame.display.set_caption("这是一个飞机游戏")
icon=pygame.image.load(r'E:\2dsrc\src\img\hero1.png')
hero=pygame.image.load(r'E:\2dsrc\src\img\hero1.png')
bg=pygame.image.load(r'E:\2dsrc\src\img\bg.png')
pygame.display.set_icon(icon)
heroX=250
heroY=680
stepX=0
#游戏主循环
while True:#事件遍历for event in pygame.event.get():if event.type==pygame.QUIT:exit()if event.type==pygame.KEYDOWN:if event.key == pygame.K_RIGHT:stepX=5elif event.key == pygame.K_LEFT:stepX=-5elif event.key == pygame.K_UP:print('↑')elif event.key == pygame.K_DOWN:print('↓')heroX+=stepXscreen.blit(bg,(0,0))screen.blit(hero,(heroX,heroY))pygame.display.update()

👸小媛:你在按下右键的时候给予了 stepX 变量正值,按下左键给予了 stepX 键负值,然后每次循环 heroX 就加上这个 stepX 值,这样按下左就可以一直往左?按下右就可以一直往右?

🐰小C:是的。

👸小媛:所以你把 hero 的 Y 值使用了变量 heroY,这样也是为了方便操作吧?

🐰小C:是的,观察挺仔细,注意,我在循环前是创建了这几个变量的。

heroX=250
heroY=680
stepX=0

👸小媛:明白。

🐰小C:那我给你一个完整的代码吧。

import pygamepygame.init()
screen=pygame.display.set_mode((600,800))
pygame.display.set_caption("这是一个飞机游戏")
icon=pygame.image.load(r'E:\2dsrc\src\img\hero1.png')
hero=pygame.image.load(r'E:\2dsrc\src\img\hero1.png')
bg=pygame.image.load(r'E:\2dsrc\src\img\bg.png')
pygame.display.set_icon(icon)
heroX=250
heroY=680
stepX=0
stepY=0
#游戏主循环
while True:#事件遍历for event in pygame.event.get():if event.type==pygame.QUIT:exit()if event.type==pygame.KEYDOWN:if event.key == pygame.K_RIGHT:stepX=5elif event.key == pygame.K_LEFT:stepX=-5elif event.key == pygame.K_UP:stepY=-5elif event.key == pygame.K_DOWN:stepY=5heroX+=stepXheroY+=stepYscreen.blit(bg,(0,0))screen.blit(hero,(heroX,heroY))pygame.display.update()

👸小媛:上面的 stepY 就是新创建的变量用来判断是按上还是按下?

🐰小C:是的,跟 stepX 一样。

👸小媛:哈哈哈,可以移动了。 😎

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

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

相关文章

树形表的平行查询设计

本文由网友长空X投稿,欢迎转载、分享原文作者:长空X(CSDN同名“长空X“,CkTools的作者,github: https://github.com/hjkl950217)原文链接:https://www.cnblogs.com/gtxck/articles/16293295.htm…

Ubuntu 16.04安装SQLite Browser操作SQLite数据库

安装: sudo apt-get install sqlitebrowser 启动:

(13)python 字典 2 分钟速解

本系列文章将会以通俗易懂的对话方式进行教学,对话中将涵盖了新手在学习中的一般问题。此系列将会持续更新,包括别的语言以及实战都将使用对话的方式进行教学,基础编程语言教学适用于零基础小白,之后实战课程也将会逐步更新。 若…

计算机绘画作品 星空,关于近期绘画作品《星空系列》的自述:

《星空系列》是一个很偶然的念想下产生的,但又绝非偶然。最开初的点是高一刚开始学画的时候,高中的老师给我们免费提供油画材料给我们练习,那时候我并没有“安分”地练习高考绘画,总想做一些关于自己想法的作品,那时候…

BootStrap导航栏的使用

默认的导航栏 创建一个默认的导航栏的步骤如下&#xff1a; 向 <nav> 标签添加 class .navbar、.navbar-default。向上面的元素添加 role"navigation"&#xff0c;有助于增加可访问性。向 <div> 元素添加一个标题 class .navbar-header&#xff0c;内部包…

安装SQL Server 2005时,出现“SQL Server 服务无法启动。……”提示的解决方法

安装SQL Server 2005时&#xff0c;出现“SQL Server 服务无法启动。……”提示的解决方法上午在自己XP SP3电脑上安装SQL Server 2005时出现如下提示&#xff1a; 根据这一情况&#xff0c;我把自己的解题步骤写下来和大家分享&#xff0c;虽然简单了些&#xff0c;可是安装的…

.NET MAUI 正式发布,再见了 Xamarin.Forms

David Ortinau 在dotnet 团队博客上发表了一篇文章《Introducing .NET MAUI – One Codebase, Many Platforms》&#xff0c;在这篇文章里宣布了MAUI的正式发布。https://github.com/dotnet/maui/releases/tag/6.0.312 https://devblogs.microsoft.com/dotnet/introducing-dotn…

利用SQL注入获取服务器最高权限

单位有台数据库服务器&#xff08;windows 2000 操作系统&#xff0c;sql server 2000&#xff09;前段时间莫名其妙的被***了跑到机房&#xff0c;通过PE进去一看&#xff0c;发现多了一个账户&#xff08;SQLDEBUG)。并且administrator账户被禁用了看看数据没少&#xff0c;也…

3分钟搞定 C++ if else 语句 05

作者简介 作者名&#xff1a;1_bit 简介&#xff1a;CSDN博客专家&#xff0c;2020年博客之星TOP5&#xff0c;蓝桥签约作者。15-16年曾在网上直播&#xff0c;带领一批程序小白走上程序员之路。欢迎各位小白加我咨询我相关信息&#xff0c;迷茫的你会找到答案。系列教程将会…

Android之封装倒计时页面

1 、需求 多个页面需要用到显示定时器页面,页面里面时间会一秒一秒减少,页面布局如下,开了定时器,如果其它页面也打开会使用之前的页面里面显示的时间,也就是说在有效范围内,时间不刷新。 2 、关键点 使用Android自带的倒计时类CountDownTimer CountDownTimer mCount…

1小时学会不打代码制作一个网页精美简历(1)

作者简介 作者名&#xff1a;1_bit 简介&#xff1a;CSDN博客专家&#xff0c;2020年博客之星TOP5&#xff0c;蓝桥签约作者。15-16年曾在网上直播&#xff0c;带领一批程序小白走上程序员之路。欢迎各位小白加我咨询我相关信息&#xff0c;迷茫的你会找到答案。系列教程将会在…

分部方法 partial

当有如下这样类似的情况出现的时候&#xff0c;可以有更好的优化方式来处理&#xff0c;那就是分部方法 1 class PartOld2 {3 string name;4 5 public virtual void OnChangeName(string str)6 {7 }8 9 public string Name 10…

一文讲透为Power Automate for Desktop (PAD) 实现自定义模块

今天写了一篇长文&#xff0c;《一文讲透为Power Automate for Desktop (PAD) 实现自定义模块 - 附完整代码》&#xff0c;有兴趣的同学点击 “阅读原文” 参考 &#xff0c;文章地址是 https://www.cnblogs.com/chenxizhang/p/16287195.html 微软的PAD是RPA的一种&#xff0…

软件自动化测试的主要目的,功能测试的目的是什么

从功能测试到自动化测试&#xff1f;从常见的自动化测试过程开始&#xff01;在项目的启动阶段功能测试 目的&#xff0c;我们必须阐明为什么要进行自动化&#xff0c;并选择合适的项目进行自动化测试. 1.为什么要进行自动化&#xff1f;在开始自动化测试之前&#xff0c;我们需…

基于Google Earth Pro做数字化,并在ArcGIS中转为Shapefile图层

在精度满足要求的前提下,可以基于Google Earth Pro做数字化,并在ArcGIS中转为Shapefile图层,然后经行投影转换,得到最终的shp数据。主要步骤包括:新建多边形、导出多边形、格式转换,投影转换等。 一. 新建多边形 命名为皇城水库范围,设置线条和面的样式/颜色,并在影像上…

1小时,不会代码的我如何完成 网易云音乐 大作业网页制作?(IVX 第2篇)

作者简介 作者名&#xff1a;1_bit 简介&#xff1a;CSDN博客专家&#xff0c;2020年博客之星TOP5&#xff0c;蓝桥签约作者。15-16年曾在网上直播&#xff0c;带领一批程序小白走上程序员之路。欢迎各位小白加我咨询我相关信息&#xff0c;迷茫的你会找到答案。系列教程将会在…

C# 第一个LINQ 查询

我们将先介绍一个示例&#xff0c;这个示例使用 LINQ 创建了一个查询&#xff0c;以便在一个简单的内存对象数组中查找一些数据&#xff0c;并输出到控制台上。试一试&#xff1a;第一个 LINQ 程序&#xff1a;按照下面的步骤在 Visual Studio 中创建示例&#xff1a; using Sy…

1小时赚300块,不打代码帮人做个吃鸡网页 [IVX实战第3篇]

作者简介 作者名&#xff1a;1_bit 简介&#xff1a;CSDN博客专家&#xff0c;2020年博客之星TOP5&#xff0c;蓝桥签约作者。15-16年曾在网上直播&#xff0c;带领一批程序小白走上程序员之路。欢迎各位小白加我咨询我相关信息&#xff0c;迷茫的你会找到答案。 实战目录 1…

ArcGIS10.6中,在3D分析工具中创建视线之后,怎么将其删除?

如下图所示&#xff0c; 为3D分析工具条&#xff1a; 在3D分析中创建的线&#xff0c;例如做剖面图是插入的线&#xff0c;该怎样删除呢&#xff1f; 如下图所示。 删除方法是&#xff0c;先使用如下选择工具&#xff0c;然后双击线条&#xff0c;再按delete键。

RPC的原理总结

一.RPC的引入 早期单机时代&#xff0c;一台电脑上运行多个进程&#xff0c;大家各干各的&#xff0c;老死不相往来。假如A进程需要一个画图的功能&#xff0c;B进程也需要一个画图的功能&#xff0c;程序员就必须为两个进程都写一个画图的功能。这不是整人么&#xff1f;于是就…