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

    创建真正的游戏


       之前演示的贪吃蛇游戏是以python命令行的形式模拟实现的,今天博客的主题就是是创建一个真正的贪吃蛇游戏,其摆脱了命令行的限制,界面更加美观,人机交互更加方便,可以让玩家有更好的游戏体验。

      那么,要如何将贪吃蛇游戏做的更好。一个真正的游戏是通过图形用户界面GUI(Graphical User Interface)来展示的。在python中,要做一个GUI有多种选择,简单的就是easygui模块,进阶版的就是tkinter模块、wxPython模块等;当然,还有些模块虽然不是专门做GUI用的,但他们一般都会内嵌GUI功能,比如专门为python游戏开发服务的pygame模块。

      今天的博客就是通过pygame模块来完成贪吃蛇游戏的进阶。(之前没接触这个模块,算是临时抱佛脚)。pygame模块有很丰富的功能,如果一一介绍的话过于繁琐,今天只介绍贪吃蛇游戏进阶所需要用到的功能。我学习pygame模块看的是目光博客 这个教程,我引用的pygame模块功能在这个教程中都会出现,想深入了解的可以去看教程。

    pygame模块安装

      要安装pygame模块可以使用之前博客提到过的"pip"命令。如果之前设置过环境变量,只要直接在Windows命令行中输入"pip install pygame"进行安装就好;如果之前没有设置过环境变量,则要cd到pip.exe的存放目录,再执行"pip install pygame"进行安装。

      

      在第四行有一个“pygame-1.9.3-cp36-cp36m-win_amd64,whl”是安装pygame的实际文件。这边安装的版本是1.9.3版本,用于windows64位系统。

      然而我安装失败了

      

      这是提示我'pip.exe'需要更新,更新后再试试

      

      仍然是失败!(也是第一次安装pygame,看来问题还挺多)

      

      试了下用easy_install 指令安装,一样是不行,两个都是连接超时。

      既然连接超时那就去把python下载下来再安装试试(pip是连接网络搜索合适的pygame模块,下载pygame模块,然后在本地安装)

      pygame模块下载地址:https://www.lfd.uci.edu/~gohlke/pythonlibs/#pygame 

      

      根据不同的版本要下载合适的pygame模块(存在版本兼容问题),比如我是Python3.6.3版本,我下载pygame-1.9.3-cp37-cp37m-win_amd64.whl版本(对于python3.7)在使用时就会出现问题。

      好了,pygame模块下载好了,接下来该安装了。安装pygame模块要先cd到下载的pygame文件的存放目录下,再执行"pip install pygame"指令

      

      好了,pygame模块就此安装成功,可以直接在python中import调用了;在python命令行中确认下是否可以正常调用。

      

      OK,pygame可正常调用,安装的版本是1.9.3版本。接下来就通过pygame模块一步一步地创建出进阶版的贪吃蛇游戏。

    基于pygame模块创建贪吃蛇游戏

      

      先通过pygame创建一个窗口。(创建的窗口也是一个surface对象。pygame中的大部分元素都是surface对象)

      ps:surface是pyg. pygame.Surface对象下的所有方法的详细信息可在此链接中查询:http://www.pygame.org/docs/ref/surface.html#pygame.Surface.fill

     1 import pygame                   #导入pygame模块
     2 from pygame.locals import *     #导入pygame模块中常用的函数和常量,如表示全屏的FULLSCREEN常量
     3 from sys import exit            #导入sys模块中的exit()方法,用于退出程序
     4 
     5 #初始化pygame组件
     6 pygame.init()
     7 
     8 #创建一个窗口对象
     9 screen =  pygame.display.set_mode((640,480),0,32)
    10 #元组(640,480)代表640X480的分辨率;0表示窗口显示,如果是FULLSCREEN则表示全屏显示;32代表色深32位
    11 
    12 #设置窗口标题
    13 pygame.display.set_caption("贪吃蛇大作战!")

      ps:分辨率640X480可以等同为坐标的表示,x轴最大值640,y轴最大值480,窗口左上角为原点;这在接下来的学习pygame时更容易代入理解

      看看创建的窗口

      

      窗口创建出来是一片漆黑的,上方窗体显示的标题正是“贪吃蛇大作战!”  在我们要关闭窗口时发现没有任何反应,这是因为代码中没有写入触发事件判断和对应该事件的处理情况

      

     1 import pygame                   #导入pygame模块
     2 from pygame.locals import *     #导入pygame模块中常用的函数和常量,如表示全屏的FULLSCREEN常量
     3 from sys import exit            #导入sys模块中的exit()方法,用于退出程序
     4 
     5 #初始化pygame组件
     6 pygame.init()
     7 
     8 #创建一个窗口对象
     9 screen =  pygame.display.set_mode((640,480),0,32)
    10 #元组(640,480)代表640X480的分辨率;0表示窗口显示,如果是FULLSCREEN则表示全屏显示;32代表色深32位
    11 
    12 #设置窗口标题
    13 pygame.display.set_caption("贪吃蛇大作战!")
    14 
    15 while True:
    16 #此处为主循环,类似之前命令行贪吃蛇代码中的循环,此处一个循环可看作一帧
    17 
    18     for event in pygame.event.get():     #等待获取外部事件,读取外部事件的队列
    19         if event.type == QUIT:           #判断外部事件类别,即判断用户的操作类型
    20             exit()                       #执行事件的对应操作,退出程序   
    21             #pygame.quit()

      根据代码,我们关闭窗口时会执行exit()退出程序,然而关闭窗口这个动作的对应操作并非只能是exit(),其执行的操作可DIY,比如在关闭窗口动作发生时 打印“执行退出操作“

    while True:
    #此处为主循环,类似之前命令行贪吃蛇代码中的循环,此处一个循环可看作一帧
    
        for event in pygame.event.get():     #等待获取外部事件,读取外部事件的队列
            if event.type == QUIT:           #判断外部事件类别,即判断用户的操作类型
                print("执行退出操作")          #执行事件的对应操作,退出程序   
                #pygame.quit()

       再看下关闭窗口时的效果:
      

      写着写着突然发现变成在写pygame模块使用教程了,估计接下来的内容会长的够呛,额,我们还是明天继续把吧。(因为也是刚学的pygame模块,写这个博客的时候会比较坎坷,有很多细节需要去验证,见谅)

      

      

      

      

  • 相关阅读:
    Can't use Subversion command line client: svn
    SpringMVC配置easyui-datagrid
    找不到提交和更新按钮,subversion不见了,无法更新和上传代码
    静态资源[org.springframework.web.servlet.PageNotFound]
    Field 'id' doesn't have a default value
    MySql 插入数据中文乱码
    Junit 测试 Spring
    mybatis动态SQL
    Mybatis 3.3.0 Log4j配置
    MappingJacksonHttpMessageConverter过期
  • 原文地址:https://www.cnblogs.com/3fman/p/9236422.html
Copyright © 2011-2022 走看看