博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
贪吃蛇“大作战”(五)
阅读量:5788 次
发布时间:2019-06-18

本文共 3263 字,大约阅读时间需要 10 分钟。

创建真正的游戏(续)

 


  在上一篇博客介绍了pygame模块的安装,并开始通过pygame模块来创建贪吃蛇游戏。在上篇博客中我创建了一个窗体,贪吃蛇游戏将在窗体中运行。同时简单编写了一个退出窗体的事件应对机制,今天的博客将深入学习pygame模块,并一步一步“勾勒”出完整的贪吃蛇游戏。

  上篇博客贪吃蛇代码编写到创建贪吃蛇游戏的窗体:

import pygame                   #导入pygame模块from pygame.locals import *     #导入pygame模块中常用的函数和常量,如表示全屏的FULLSCREEN常量from sys import exit            #导入sys模块中的exit()方法,用于退出程序  #设置常量BACKBROUNDFILL = (255,245,238)      #窗体背景填充RGB数值  #初始化pygame组件pygame.init()    #创建一个窗口对象screen =  pygame.display.set_mode((640,480),0,32)  #元组(640,480)代表640X480的分辨率;0表示窗口显示,如果是FULLSCREEN则表示全屏显示;32代表色深32位   #设置窗口标题pygame.display.set_caption("贪吃蛇大作战!")while True:  #此处为主循环,类似之前命令行贪吃蛇代码中的循环,此处一个循环可看作一帧     for event in pygame.event.get():     #等待获取外部事件,读取外部事件的队列        if event.type == QUIT:           #判断外部事件类别,即判断用户的操作类型            exit()                       #执行事件的对应操作,退出程序               #pygame.quit()               #关闭窗体,但程序仍在运行;在下个while循环由于窗体关闭,因事件无法获取故会出现报错    screen.fill(BACKBROUNDFILL)          #设置窗体的背景填充色          pygame.display.update()              #刷新Surface对象到窗体中(不可缺少)

  之前窗体填充色都是默认黑色,我加了screen.fill()语句修改了窗体颜色,看着舒服多了

  

  窗体创建好了,接下来介绍事件应对机制。pygame有一个事件应对的体系,用于玩家与GUI进行友好交互,比如之前关闭窗体的事件应对案例。

  玩家控制贪吃蛇的方式正常只有“上下左右”四个动作(此处用键盘控制,也可以用鼠标等控制方向),接下来列举一个键盘控制Surface对象的应对机制。

1 import pygame                   #导入pygame模块 2 from pygame.locals import *     #导入pygame模块中常用的函数和常量,如表示全屏的FULLSCREEN常量 3 from sys import exit            #导入sys模块中的exit()方法,用于退出程序 4  5   #设置常量 6 BACKBROUNDFILL = (255,245,238)      #窗体背景填充RGB 7 TESTPICTURE = 'snowman.png'         #选取Surface素材(此处使用雪人图片) 8  9   #初始化pygame组件10 pygame.init()11   12   #创建一个窗口对象13 screen =  pygame.display.set_mode((640,480),0,32)14   #元组(640,480)代表640X480的分辨率;0表示窗口显示,如果是FULLSCREEN则表示全屏显示;32代表色深32位15  16   #设置窗口标题17 pygame.display.set_caption("贪吃蛇大作战!")18 19   #素材转化为pygame识别的surface对象20 testsurface = pygame.image.load(TESTPICTURE)21 22   #设定雪人在窗体中的初始位置23 x,y = 0,0                           #将窗体看作坐标轴,窗体左上顶点为坐标轴原点 24 25   #此处为主循环,类似之前命令行贪吃蛇代码中的循环,此处一个循环可看作一帧26 while True:27  28  29     for event in pygame.event.get():             #等待获取外部事件,读取外部事件的队列30         if event.type == QUIT:                   #判断外部事件类别,即判断用户的操作类型31             exit()                               #执行事件的对应操作,退出程序   32             #pygame.quit()                       #关闭窗体,但程序仍在运行;在下个while循环由于窗体关闭,因事件无法获取故会出现报错33     34     pressed_keys = pygame.key.get_pressed()      #获取键盘相关事件的返回信息;返回的是一个元组如(K_UP,TRUE)35     36     if pressed_keys[K_LEFT]:                     #if结构判断键盘“上下左右”哪个按键被按下,执行相应操作   37         x -= 138     elif pressed_keys[K_RIGHT]:39         x += 140     if pressed_keys[K_UP]:41         y -= 142     elif pressed_keys[K_DOWN]:43         y += 144 45     screen.fill(BACKBROUNDFILL)                  #设置窗体的背景填充色      46 47     screen.blit(testsurface,(x,y))               #在screen窗体对象中添加一个testsurface代表的雪人对象,添加的坐标为(x,y)                        48 49     pygame.display.update()                      #刷新Surface对象到窗体中(不可缺少)

  

  上面的代码是将雪人对象添加到窗体对象中,并在whlie循环中不断监听键盘的“上下左右”按键是否被按下,最后根据监听的结果改变雪人对象的坐标,在下次刷新时变化雪人在窗体中的位置。

注:45行代码与47行代码的次序不能对调,否则在运行程序时窗体中不会有雪人出现;这是因为如果次序对调,执行screen.fill()语句时会将之前的雪人对象“覆盖”。

  来看看代码运行的效果:

  

  键盘“左键”按一下,“右键”按一下看看效果:

  

  Bingo!玩家与贪吃蛇游戏的“互动平台”已经搭建好了,接下来可以进入正题了。下篇博客将开始创建贪吃蛇、食物和草地对象。

 

转载于:https://www.cnblogs.com/3fman/p/9237873.html

你可能感兴趣的文章
Android BlueDroid(一):BlueDroid概述
查看>>
Java利用httpasyncclient进行异步HTTP请求
查看>>
宿舍局域网的应用
查看>>
html代码究竟什么用途
查看>>
Hadoop HDFS编程 API入门系列之路径过滤上传多个文件到HDFS(二)
查看>>
Python version 2.7 required, which was not foun...
查看>>
context:annotation-config vs component-scan
查看>>
exgcd、二元一次不定方程学习笔记
查看>>
经典sql
查看>>
CSS3边框会动的信封
查看>>
JavaWeb实例设计思路(订单管理系统)
查看>>
source insight中的快捷键总结
查看>>
PC-IIS因为端口问题报错的解决方法
查看>>
java四种线程池简介,使用
查看>>
ios View之间的切换 屏幕旋转
查看>>
typedef BOOL(WINAPI *MYFUNC) (HWND,COLORREF,BYTE,DWORD);语句的理解
查看>>
jsp 特殊标签
查看>>
[BZOJ] 1012 [JSOI2008]最大数maxnumber
查看>>
gauss消元
查看>>
多线程-ReentrantLock
查看>>