zoukankan      html  css  js  c++  java
  • 贪吃蛇“大作战”(五)

    创建真正的游戏(续)


      在上一篇博客介绍了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!玩家与贪吃蛇游戏的“互动平台”已经搭建好了,接下来可以进入正题了。下篇博客将开始创建贪吃蛇、食物和草地对象。

  • 相关阅读:
    用 Python 带你看各国 GDP 变迁
    Fluent Interface(流式接口)
    probing privatePath如何作用于ASP.NET MVC View
    Word插入htm文件导致文本域动态增加的一个问题
    Visual Studio 2013附加进程调试IE加载的ActiveX Control无效解决方法
    Ubuntu下Chrome运行Silverlight程序
    Windows Phone Bing lock screen doesn't change解决方法
    SPClaimsUtility.AuthenticateFormsUser的证书验证问题
    Web Service Client使用Microsoft WSE 2.0
    Visual Studio 2013安装Update 3启动crash的解决方法
  • 原文地址:https://www.cnblogs.com/3fman/p/9237873.html
Copyright © 2011-2022 走看看