前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python 写游戏好简单啊,我用键盘可以随意控制角色了【python 游戏实战 04】

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

作者头像
1_bit
发布2022-01-06 09:06:14
6140
发布2022-01-06 09:06:14
举报
文章被收录于专栏:我的知识小屋

前言

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

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


作者简介

作者名:1_bit

简介:CSDN博客专家,2020年博客之星TOP5,蓝桥签约作者。15-16年曾在网上直播,带领一批程序小白走上程序员之路。

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


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

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

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

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

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

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

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

代码语言:javascript
复制
import pygame

pygame.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-3
    screen.blit(bg,(0,0))
    screen.blit(hero,(heroX,680))
    pygame.display.update()

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

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

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

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

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

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

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

代码语言:javascript
复制
import pygame

pygame.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 轴的值加上这个值就可以了。

代码语言:javascript
复制
import pygame

pygame.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=5
            elif event.key == pygame.K_LEFT:
                stepX=-5
            elif event.key == pygame.K_UP:
                print('↑')
            elif event.key == pygame.K_DOWN:
                print('↓')
    heroX+=stepX
    screen.blit(bg,(0,0))
    screen.blit(hero,(heroX,heroY))
    pygame.display.update()

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

🐰小C:是的。

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

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

代码语言:javascript
复制
heroX=250
heroY=680
stepX=0

👸小媛:明白。

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

代码语言:javascript
复制
import pygame

pygame.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=5
            elif event.key == pygame.K_LEFT:
                stepX=-5
            elif event.key == pygame.K_UP:
                stepY=-5
            elif event.key == pygame.K_DOWN:
                stepY=5
    heroX+=stepX
    heroY+=stepY
    screen.blit(bg,(0,0))
    screen.blit(hero,(heroX,heroY))
    pygame.display.update()

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

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/05/07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 作者简介
相关产品与服务
云直播
云直播(Cloud Streaming Services,CSS)为您提供极速、稳定、专业的云端直播处理服务,根据业务的不同直播场景需求,云直播提供了标准直播、快直播、云导播台三种服务,分别针对大规模实时观看、超低延时直播、便捷云端导播的场景,配合腾讯云视立方·直播 SDK,为您提供一站式的音视频直播解决方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档