贪吃蛇“大作战”(四)

创建真正的游戏



  之前演示的贪吃蛇游戏是以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模块,写这个博客的时候会比较坎坷,有很多细节需要去验证,见谅)

  

  

  

  

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

时间: 2024-11-06 09:21:22

贪吃蛇“大作战”(四)的相关文章

贪吃蛇“大作战”(五)

创建真正的游戏(续) 在上一篇博客介绍了pygame模块的安装,并开始通过pygame模块来创建贪吃蛇游戏.在上篇博客中我创建了一个窗体,贪吃蛇游戏将在窗体中运行.同时简单编写了一个退出窗体的事件应对机制,今天的博客将深入学习pygame模块,并一步一步"勾勒"出完整的贪吃蛇游戏. 上篇博客贪吃蛇代码编写到创建贪吃蛇游戏的窗体: import pygame #导入pygame模块 from pygame.locals import * #导入pygame模块中常用的函数和常量,如表示全

贪吃蛇大作战的一点感悟

春节过罢,闲来无事,玩了两日贪吃蛇大作战,之前玩过球球大作战,感觉球球大作战玩法比较多,也比较难入门.而贪吃蛇大作战就简单多了,就两个原则:1不断地吃食物,让自己长大.2尽量避免撞到别人身上,以致于死亡.抱着这样的原则,我就开始了自己的贪吃之路. 刚开始的时候是小心翼翼地吃游戏自带的豆豆,也不敢去击杀别人,还经常撞到别人身上,所以更加小心地玩,自己长大了才敢去围追堵截别人,这样不知不觉居然就能玩到9000多长度了.接着再玩下去就有点心急了,一方面是有前边的经验,感觉也不太难嘛,另一方面想更快地打

贪吃蛇大作战canvas实现(手机触屏操作)--地图逻辑

//html部分 <!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no"> <title>贪吃蛇大作战</titl

贪吃蛇“大作战”(二)

从对象出发看贪吃蛇 在上一篇博客中,我通过逐行分析代码对贪吃蛇的运行机制做了一个简要的介绍:逐行分析后可以看出这个贪吃蛇例程的编写范式更突出面向过程:该例程先是预设食物和贪吃蛇的位置参数,然后通过选择逻辑判断外部命令的值,根据不同的值做出不同的动作,最后在地图上将之前的动作"渲染",达到贪吃蛇"前进"的效果:如此下来,一步一步地根据"看得到的逻辑"实现了贪吃蛇的运行机制. 现在,我从面向对象的编程思维来对这个贪吃蛇运行机制做一个分析.从下面这幅图

贪吃蛇“大作战”(三)

例程实操与分析 在之前的两篇博客中分别通过面向过程和面向对象的编程思想分析介绍了来自sunny开始学坏的贪吃蛇例程,今天的博客将通过运行这个贪吃蛇例程来了解各行代码的作用,同时通过"找茬"的方式深入分析了解贪吃蛇的运行机制并改善这个例程. 下面是这个贪吃蛇例程的代码: 1 import os,random 2 sw=[[5,5]] 3 #lc=[[0,0],[0,1],[0,2],[0,3],[0,4],[0,5],[0,6]] 4 lc=[[5,i] for i in range(1

java小游戏贪吃蛇大作战:来一起回顾童年回忆!

Java小项目之贪吃蛇 跪求关注,祝关注我的人都:身体健康,财源广进,福如东海,寿比南山,早上贵子,从不掉发! 贪吃蛇,绝对是很多朋友的童年记忆.几乎没有人会说没玩过这款小游戏,因为不管在小灵通手机,直板手机,还是半智能手机,甚至是现在的5G手机,都能看见这款游戏的身影.虽然游戏一直在进化,画面,风格,操作方式越来越精细,但是游戏本质的玩法是没变的,例如蛇不断变大,碰到墙壁会死亡等设定.这篇文章来分享java小游戏贪吃蛇:部分代码展示:这个贪吃蛇小游戏,玩法和操控,都是比较完善的,大家感兴趣的可

贪吃蛇大作战游戏攻略

1.不去人群密集的地方 2.长大之后想要啥就有啥 3.跑马圈地,长大之后,要让身体占据更大的空间 4.不抢食物,头只在身体内运动,只有当外部空间比较大时再进行领土扩张 5.不抢食物,而是要围住食物之后慢慢吃. 6.对于进入身体内部的蛇,要压缩之,不停地围绕它转圈,每转一圈就压缩一点空间. 7.勿贪小利,要从地形上取胜,而不要注重一星半点的食物.要鲸吞小蛇,而不要与它们正面交锋 8.不行险,不侥幸,稳,慢.活着是第一要务,活着是一切之根本. 9.慎终如始,则无败事.

Java课程设计---贪吃蛇大作战

目录 一.团队课程设计博客链接 二.个人负责模块和任务说明 三.自己的代码提交记录截图 四.自己负责模块或任务详细说明 五.课程设计感想 一.团队课程设计博客链接 二.个人负责模块和任务说明 1.负责实现闯关模式 2.负责实现挑战模式 3.串联GUI与信息代码 4.实现排行榜功能 三.自己的代码提交记录截图 四.自己负责模块或任务详细说明 这是挑战模式的时间线程 this.thread = new Thread(() -> { while (start) { if (count == 0) {

Expo大作战(四十一)【完】--expo sdk 之 Assets,BarCodeScanner,AppLoading

Expo大作战系列完结! 简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人修改补充+demo测试的形式,对expo进行一次大补血!欢迎加入expo兴趣学习交流群:597732981 [之前我写过一些列关于expo和rn入门配置的东i西,大家可以点击这里查看:从零学习rn开发] 相关文章: Expo大作战(一)--什么是expo,如何安装expo