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

  • 相关阅读:
    连接H3C交换机的Console口连不上
    WIN7远程桌面连接--“发生身份验证错误。要求的函数不受支持”
    关于SSD Trim功能
    电源适配器和充电器的区别和关系
    处理win7任务栏通知区域图标异常问题
    VMware Workstation 学习笔记
    关于“找不到附属汇编 Microsoft.VC90.CRT,上一个错误是 参照的汇编没有安装在系统上。”的解决
    Win7硬盘的AHCI模式
    电脑没有网络的故障分析
    通过Performance Log确定磁盘有性能问题?
  • 原文地址:https://www.cnblogs.com/3fman/p/9237873.html
Copyright © 2011-2022 走看看