Python实现迷宫游戏

项目:迷宫游戏

  • 摘要
  • 1.引言
    • 1.1研究的背景及意义
    • 1.2研究的内容
  • 2.系统结构
    • 2.1系统的结构
    • 2.2基本思路
  • 3.实现代码
    • 3.1Maze类
    • 3.2Player类
    • 3.3Controller类
    • 3.4主函数
  • 4.实验
  • 5.总结和展望
  • 参考文献

摘要

本次实验设计了一款迷宫小游戏,采用用Python开发技术实现。以往经典的的游戏中有魂斗罗,拳皇,超级玛丽,贪吃蛇,俄罗斯方块等;发展到现在,玩游戏已经成为生活的一部分了,尤其是现在的很多游戏都已经网络社交化了,游戏种类也更加丰富了。Python在设计上坚持了清晰划一的风格,这使得Python成为一门易读、易维护,并且被大量用户所欢迎的、用途广泛的语言。因此,利用Python语言制作一个简单的迷宫小游戏,将是本次论文讨论的内容。该迷宫小游戏使用几个模块绘制呈现,并实现可以自由操作的功能。
This experiment designed a small maze game, using Python development technology to achieve.Past classic games have contra, Boxing Emperor, Super Mary, snake, Tetris and so on,Up to now, playing games has become a part of life, especially now many games have been social network, games have become more diversified. Python’s adherence to a clear and uniform style of design has made it an easy-to-read, maintainable, and versatile language that is popular with a large number of users. Therefore, using Python language to make a simple maze game will be the content of this paper.The maze game USES several modules to draw and render, and to achieve the function of free operation.

1.引言

1.1研究的背景及意义

Python是一种跨平台的计算机程序设计语言。 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越多被用于独立的、大型项目的开发。
当Python作为游戏脚本内嵌在游戏中,这样做即可以利用游戏引擎的高性能,又可以受益于脚本化开发的优点。即游戏剧本、数据、玩法逻辑这类需要灵活修改和调整的部分可以写在脚本中,只需要修改脚本内容就可以调整游戏内容,不需要重新编译游戏。简单的小游戏可以直接用Python一类的脚本语言开发,善用一些库应该也可以达到不错的性能。

1.2研究的内容

为了了解Python的模块脚本的使用,本次实验使用Python语言实现的一款迷宫小游戏,从而去更深度认识Python的功能。本次实验分三个模块绘制,首先用Maze类绘制出迷宫地图,再用Player类实现玩家的方向动作,再由Controller类实现操作器让玩家方便操作,最后在主函数中运行实现迷宫小游戏。

2.系统结构

2.1系统的结构

本次项目由主函数、maze模块、player模块和controller模块组成。如下图所示。
图2-1

2.2基本思路

先创建maze模块绘制迷宫地图;再定义玩家移动前后的位置方向;再设计操作器实现玩家自由操作;最后由主函数将各个模块集合。其流程图如下图所示。
图2-2

3.实现代码

在迷宫问题中,首先解决的就是迷宫的地图,我们从实现的效果以及主函数中,不难得知在主函数中的maze_list里,1表示迷宫的墙,0表示迷宫内的通道,如下图所示:
图3-1

3.1Maze类

而实际实现迷宫的绘制在Maze类中,以下为maze模块中的代码及解析。在Maze类中,先调用Turtle父类初始化方法,方便后面调用,再绘制出迷宫内的一格墙,最后由一格墙循环打印出整个迷宫。

from turtle import Turtle
import turtle#设置游戏的窗口大小和背景颜色
turtle.screensize(800,600, "pink")class Maze(Turtle):size = 20    #迷宫内一格墙的长宽def __init__(self, maze_list):# 需要先调用父类的初始化方法才能在初始化方法中调用父类的方法Turtle.__init__(self)self.maze_list = maze_list# 为了加快绘图速度隐藏海龟,速度设为最快self.hideturtle()self.speed(0)self.draw_walls()#绘制迷宫内一格墙的过程def draw_wall(self):self.pendown()self.begin_fill()#绘制墙的颜色self.fillcolor('red')#首先画一个距离为20的横线,再向右旋转90度,循环4次形成方形for i in range(4):self.forward(self.size)self.right(90)self.end_fill()self.penup()#绘制整个迷宫的墙def draw_walls(self):self.penup()# 从 (-130, 130) 开始self.goto(-130, 130)#打印墙,横纵循环13次(整个迷宫的长和宽由13格墙组成)for row in range(13):for col in range(13):#主函数中的maze_list里面的1则打印出一格墙if self.maze_list[row][col] == 1:self.draw_wall()# 右移一列self.goto(self.size * (col + 1) - 130, 130 - self.size * row)# 下移一行self.goto(-130, 130 - self.size * (row + 1))

3.2Player类

迷宫内自然需要一个玩家(海龟)来走出迷宫,所以此处用Player类对玩家player进行定义,以下为player模块中的代码及解析。其中通过对玩家的初始位置、终点位置、以及移动到相应的位置的定义,实现玩家在迷宫内的通道移动,即移动时的位置和玩家自身方向的改变。

from turtle import Turtle
import turtleclass Player(Turtle):def __init__(self, maze_list, start_m, start_n, end_m, end_n):# 父类初始化Turtle.__init__(self)#初始的横纵坐标self.m = start_mself.n = start_n#终点的横纵坐标self.end_m = end_mself.end_n = end_n#迷宫地图self.maze_list = maze_listself.hideturtle()self.speed(0)self.penup()# 玩家移到对应的位置self.goto(self.n * 20 - 120, 120 - self.m * 20)# 生成玩家self.shape('turtle')self.color('yellow')#玩家初始方向self.setheading(270)self.showturtle()#当玩家到达终点时,显示'you win!'def reach_exit(self, m, n):if m == self.end_m and n == self.end_n:# 走出迷宫,显示'you win!'text = turtle.Turtle()text.hideturtle()text.penup()text.goto(-125, -10)text.color('blue')text.write('you win!', font = ('SimHei', 48, 'bold'))#定义玩家可移动的位置,即只允许在迷宫内的通道里移动def canmove(self, m, n):#遇到0允许移动return self.maze_list[m][n] == 0#玩家移动时位置发生的变化def move(self, m, n):self.m = mself.n = nself.goto(self.n * 20 - 120, 120 - self.m * 20)self.reach_exit(m, n)#向上移动def go_up(self):if self.canmove(self.m - 1, self.n):self.setheading(90)self.move(self.m - 1, self.n)#向下移动def go_down(self):if self.canmove(self.m + 1, self.n):self.setheading(270)self.move(self.m + 1, self.n)#向左移动def go_left(self):if self.canmove(self.m, self.n - 1):self.setheading(180)self.move(self.m, self.n - 1)#向右移动def go_right(self):if self.canmove(self.m, self.n + 1):self.setheading(0)self.move(self.m, self.n + 1)

3.3Controller类

当拥有玩家出现时,便需要让玩家拥有操作器,从而操作玩家离开迷宫,所以此处使用controller模块,其功能是为了方便玩家的控制,以下为controller模块中的代码及解析。在Controller类中,先绘制出控制器上、下、左、右的图示,再绑定鼠标的点击事件,最后用abs函数进行比较去判断鼠标点击时的位置方向控制。

from turtle import Turtle
import turtleclass Controller(Turtle):def __init__(self, go_up, go_down, go_left, go_right):# 父类初始化Turtle.__init__(self)# 初始值设置self.go_up = go_upself.go_down = go_downself.go_left = go_leftself.go_right = go_right# 绘制控制器self.hideturtle()self.speed(0)self.draw_btn('上', -15, 165)self.draw_btn('下', -15, -135)self.draw_btn('左', -165, 15)self.draw_btn('右', 135, 15)# 绑定点击事件screen = self.getscreen()screen.onclick(self.handlescreenclick)#此处与绘制迷宫内一格墙的方法雷同,不做解释def draw_btn(self, name, x, y):self.penup()self.goto(x, y)self.begin_fill()self.fillcolor('#ffffff')for i in range(4):self.forward(30)self.right(90)self.end_fill()self.color('#000000')self.goto(x + 7, y - 20)self.write(name, font = ('SimHei', 12, 'bold'))#当点击事件发生时利用abs函数进行比较判断def handlescreenclick(self, x, y):    if y > 0 and abs(x) < y:self.go_up()if y < 0 and abs(x) < -y:self.go_down()if x < 0 and abs(y) < -x:self.go_left()if x > 0 and abs(y) < x:self.go_right()

3.4主函数

最后再由主函数将各个模块集合。

from maze import Maze
from player import Player
from controller import Controllermaze_list = [[1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1],[1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1],[1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1],[1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1],[1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1],[1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1],[1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1],[1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1],[1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1],[1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1],[1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1],[1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1],[1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1]
]Maze(maze_list)
#0,5表示玩家起始的位置;12,7表示终点的位置
player = Player(maze_list, 0, 5, 12, 7)     
Controller(player.go_up, player.go_down, player.go_left, player.go_right)

4.实验

实验结果如图。
图4-1
通过点击上、下、左、右控制玩家的移动,如图。
图4-2
当玩家走到终点时,将显示出’you win!’,如图。
图4-3

5.总结和展望

基于Python的迷宫小游戏是采用python语言及其模块开发完成的。本项目实现了游戏流程中的所有功能,其游戏操作容易上手,界面设计颜色感官简洁明了,其内容功能有可拓展性,方便为来程序的优化设计。
这次项目设计开发为今后的学习和工作产生了积极的意义。由于还是初学者,在项目设计中还有欠缺和考虑不周的地方,游戏还有待进一步研究和改善,比如迷宫的地图目前没有设计随机生成等不足。

参考文献

[1]https://blog.csdn.net/jark_/article/details/77532105
[2]https://blog.csdn.net/qq_29681777/article/details/83719680
[3]https://www.jianshu.com/p/b5b1391420f1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/251995.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

苹果iOS 16如何显示WiFi密码【操作教程】

在以往的iOS系统上包括iOS 15&#xff0c;iPhone用户是无法在手机上直接查看WiFi密码。对于经常忘记WiFi密码或者想向他人分享WiFi密码的用户来说非常不友好。 不过&#xff0c;最新发布的iOS 16更新包含了一系列的的细节改进&#xff0c;其中一项就是终于支持查看当前连接的Wi…

iphone显示不了wifi已连接服务器,苹果手机显示已经连接wifi但是不能上网如何解决...

iPhone每次推出新款,必然引起消费市场的订购热潮&#xff0c;人们对iphone手机的热捧,塑造了独特的消费风格群体&#xff0c;纵然iphone的使用者这么多&#xff0c;还是有很多人不清楚iPhone显示已经连接wifi但是不能上网的情况如何解决&#xff0c;下面就由学习啦小编跟大家分…

iphone开蓝牙wifi上网慢_苹果iphone 7手机连接wifi网速很慢怎么办?

最近小编听到很多使用iPhone7手机用户反映iphone 7连接wifi网速很慢&#xff0c;浏览网页都打不开&#xff0c;图片要加载半天&#xff0c;那遇到iphone 7连接wifi网速很慢怎么办?下面丢锋网给大家分享三个解决iphone7网速慢的方法&#xff0c;希望可以帮到大家!出现苹果手机w…

解决苹果手机连接了wifi,依旧无法更新系统的问题

解决苹果手机连接了wifi&#xff0c;依旧无法更新系统的问题 解决苹果手机连接了wifi&#xff0c;依旧无法更新系统的问题 起因&#xff1a;买了iWatch&#xff0c;要用手机给表更新系统&#xff0c;只能是手机连接wifi&#xff0c;但是手机连接了wifi&#xff0c;页面依旧提…

苹果 iPhone 再现 Wi-Fi 漏洞

本文转载自IT之家 IT之家 7 月 5 日消息 上个月底&#xff0c;安全人员 Carl Schou 发现了一个苹果 iPhone 的奇特 Bug&#xff0c;连接特定 SSID“% p% s% s% s% s% n”的 WiFi 后会使手机无线连接功能作废&#xff0c;需要在设置中重置网络才能恢复。 现在他又发现了一个更严…

苹果手机怎么查看已连接的wifi密码_WIFI密码忘了?教你查看手机已连接WIFI的密码...

大家好,现在的手机都有保存wifi密码的功能&#xff0c;在我们第一次连接这个wifi的时候它就会自动的把密码保存到手机里面&#xff0c;我们第二次连接的时候就不需要输入手机密码了&#xff0c;但是时间长了以后可能你连自己家里wifi密码都忘记了&#xff0c;如果说哪一天你家里…

iPhone查看WiFi密码(篇章一)

2019独角兽企业重金招聘Python工程师标准>>> 第一章&#xff1a;iPhone查看那些曾经手动连接过的WiFi密码 1. 找到 iCloud &#xff08;不同系统版本位置不同&#xff0c;但都在设置里&#xff09; 进入“设置”里面&#xff0c;找到“iCloud” 确保“钥匙串”开启 …

苹果手机无法连接wifi_手机信号太差?一键查看连接的WIFI离我们多少米

手机已经使我们出行必备的工具&#xff0c;流量够用还好。如果和我一样出门都要蹭无线网那就有点不开心了&#xff0c;因为有无免费的WIFI或者信号强弱都说不准。 今天&#xff0c;给大家分享一个技巧&#xff0c;如何查看我们连接的WIFI离我们有多远&#xff1f;以及信号的强弱…

苹果手机如何分享wifi密码_怎样用手机改wifi密码

路由器是我们日常生活常用的东西&#xff0c;路由器可以发射WiFi供手机连接上网&#xff0c;但是有时候密码过于简单则会造成很多人连接导致网速变慢。那么&#xff0c;怎样用手机改wifi密码呢&#xff1f;下面将会为大家介绍。 怎样用手机改wifi密码 步骤1、手机连接Wi-Fi信号…

苹果手机如何投屏到电脑【无线有线】

现如今&#xff0c;有很多人喜欢将他们的iPhone手机屏幕投射到电脑&#xff0c;玩游戏&#xff0c;做直播&#xff0c;共享文件&#xff0c;等等。苹果手机本身也有内置airplay&#xff0c;那么如何将苹果手机投射到电脑呢&#xff1f;接下来给大家介绍2种方法。 傲软投屏 首先…

如何从 iPhone、iPad 和 Mac 共享 Wi-Fi 密码

可能很多朋友连接上家里的Wi-Fi 后不会特意记住Wi-Fi密码&#xff0c;如果有其他Apple产品想连接一下WiFi却忘记了密码怎么办&#xff1f;如果您遇到这种情况&#xff0c;采用以下办法您可以轻松地在 iPhone、iPad 和 Mac 之间共享您的 Wi-Fi 密码。 共享 Wi-Fi 密码的要求 解锁…

苹果怎么修改wifi代理服务器,苹果手机怎么修改wifi名称?

请问大家&#xff1a;怎么用苹果手机修改wifi名称&#xff1f; 答&#xff1a;用你的苹果手机&#xff0c;登录到路由器的设置页面&#xff0c;然后打开 无线设置 或者 Wi-Fi设置 这个选项&#xff0c;在打开的页面中&#xff0c;就可以修改wifi名称了&#xff0c;详细的操作步…

使用fiddler实现苹果ios手机抓包

Fiddler是一个强大的抓包工具&#xff0c;可以通过它抓取、查看和调试PC端、手机终端和远程服务器之间的http/https等通信。 Fiddler没有手机客户端&#xff0c;都是安装在PC上&#xff0c;要实现对手机上的程序抓包&#xff0c;则需要对PC上的Fiddler和手机端做一些配置。 此…

苹果台式机怎么设置我的电脑计算机,怎么让台式电脑用苹果手机的wifi上网

我的系统是WIN7的&#xff0c;设置上面和XP可能有点区别、但是基本上都是差不多的&#xff0c;XP的朋友也可以试试。 首先。打开你的蜂窝数据。别担心&#xff0c;不会用流量的。 然后进入设置个人热点打开它。点下面那个 好多朋友都说没有个人热点这个选项。这个选项也许是要在…

苹果手机如何查看已经连接过的WIFI密码?

环境: Windows 10 专业版 VMware16虚拟机-Mac OS Big Sur 11.0.1 IPhone11 pro:IOS 13.0 AO无线路由器 问题描述: 苹果手机如何查看已经连接过的WIFI密码?利用iCloud钥匙串来查看密码,没有MAC电脑的,虚拟一个就好了,喜欢的点个赞支持一下 解决方案: 1.手机上开启i…

iOS 获取手机当前连接的 WiFi 信息

&#x1f447;&#x1f447;关注后回复 “进群” &#xff0c;拉你进程序员交流群&#x1f447;&#x1f447; 作者&#xff1a;掘金 形影相吊 https://juejin.cn/post/7032853944170709006 一、应用背景 物联网开发中&#xff0c;对设备进行配网时需要打开手机的WiFi功能&…

苹果手机(iPhone)系统升级到IOS16.1后,发现连接WiFi、热点总是经常自动(随机)断开

问题出现 1、近几天发现手机上网总是异常&#xff0c;明明WiFi连上的&#xff0c;但就是无响应&#xff0c;起初&#xff0c;由于在家里正常&#xff0c;只是公司会出现这种情况&#xff0c;所以一直以为是公司网络慢的原因。 2、后面无意间发现我的另外一个备用机连公司WiFi(…

打印机打印纸张空白

1检查驱动 2图片打印不了 使用2345看图王软件打印 由于看图王广告较多&#xff0c;所以可以把图片放到word中打印

html怎么消除打印的进纸,打印机缺纸状态怎么消除?

打印机总是提示缺纸 故障描述&#xff1a;用户最近在使用打印机的时候发现&#xff0c;明明打印机进纸槽中装有不少打印纸张。可是在执行打印操作时&#xff0c;印机控制面板中的缺纸信号灯却总是闪烁。 故障诊断&#xff1a;产生这种故障的原因一般是打印机的纸张传动结构出现…

HP打印机M329dw纸盘关闭卡、涩问题解决

HP打印机M329dw纸盘是全封闭的。 打开装纸如下&#xff1a; 这个打印机是新的&#xff0c;用着感觉还不错。打印速度快&#xff0c;支持无线和有线网络&#xff0c;快速扫描&#xff0c;进稿器满足了一次连续扫描多张的需求&#xff0c;直接存在U盘更方便。 看上去啥啥都挺好&…