码迷,mamicode.com
首页 > 其他好文 > 详细

贪吃蛇“大作战”(五)

时间:2018-07-01 23:09:21      阅读:384      评论:0      收藏:0      [点我收藏+]

标签:sse   运行程序   ini   get   变化   用户   对象   刷新   quit   

创建真正的游戏(续)

 


  在上一篇博客介绍了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 -= 1
38     elif pressed_keys[K_RIGHT]:
39         x += 1
40     if pressed_keys[K_UP]:
41         y -= 1
42     elif pressed_keys[K_DOWN]:
43         y += 1
44 
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!玩家与贪吃蛇游戏的“互动平台”已经搭建好了,接下来可以进入正题了。下篇博客将开始创建贪吃蛇、食物和草地对象。

 

贪吃蛇“大作战”(五)

标签:sse   运行程序   ini   get   变化   用户   对象   刷新   quit   

原文地址:https://www.cnblogs.com/3fman/p/9237873.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!