当前位置: 首页 > news >正文

宁夏小蚁人网站建设哈尔滨网站排名公司

宁夏小蚁人网站建设,哈尔滨网站排名公司,如何自己做网站推广淘宝客,自己做网站怎么能被访问#x1f680; 优质资源分享 #x1f680; 学习路线指引#xff08;点击解锁#xff09;知识定位人群定位#x1f9e1; Python实战微信订餐小程序 #x1f9e1;进阶级本课程是python flask微信小程序的完美结合#xff0c;从项目搭建到腾讯云部署上线#xff0c;打造一… 优质资源分享 学习路线指引点击解锁知识定位人群定位 Python实战微信订餐小程序 进阶级本课程是python flask微信小程序的完美结合从项目搭建到腾讯云部署上线打造一个全栈订餐系统。Python量化交易实战入门级手把手带你打造一个易扩展、更安全、效率更高的量化交易系统 作为一项古老的智力游戏千百年来迷宫都散发着迷人的魅力。但是手工设计迷宫费时又耗脑力于是我们有必要制作一个程序迷宫生成器…… 好吧我编不下去了。但是从上面的文字中我们可以看出我们此次的主题是用Python实现一个迷宫生成器。 首先展示一下效果图 我们先分析一下所需的库 既然是生成器每次生成的迷宫一模一样显然是说不过去的。因此我们不可避免地要使用随机数Random库。迷宫一定是要绘制的所以需要有一个GUI库或绘图库这里我使用PygameTkinter或Turtle其实都可以做到但毕竟Pygame比较顺手。与Pygame搭配Sys似乎也是需要的用于退出程序但其实不使用似乎也无伤大雅。然后是Tkinter.filedialog主要用于询问保存路径生成的迷宫总得保存吧。当然用Time加一个计时器似乎是锦上添花。 于是就有 #coding:utf-8 import contextlib with contextlib.redirect\_stdout(None):import pygame import random import sys import time from tkinter.filedialog import *这里要说明的是由于导入Pygame时会输出版本信息等很多内容这很影响美感我们需要使用Contextlib阻止它输出。 接下来我们需要询问一些参数 aint(input(列数)) bint(input(行数)) lint(input(大小)) saveitinput(是否保存)然后就要运行生成迷宫的程序了。同时我们有必要计录一下时间相当于开启计时器 print(生成中...) e time.time()然后就是正式生成迷宫。在介绍这部分代码之前我们需要了解一下算法 第一步生成一个由迷宫单元白格和墙黑格组成的网格。一行中迷宫单元的数量为迷宫的列数一列找迷宫单元的数量为迷宫的行数。令左上角的迷宫单元为起点右下角的迷宫单元为终点打破起点左边与终点右边的墙如图所示 第二步访问各迷宫单元。将起点标记为当前迷宫单元当存在未被访问的迷宫单元凡是曾经成为过当前迷宫单元的迷宫单元都视为已访问时重复执行 将周围的未被访问的迷宫单元加入表格如果表格中有迷宫单元 将当前迷宫单元入栈可以理解为将其加入一个叫做栈的表格从表格中随机选择一个迷宫单元打破当前迷宫单元与选择的迷宫单元之间的墙将选择的迷宫单元标记为当前迷宫单元 如果表格中没有迷宫单元 栈顶迷宫单元出栈可以理解为将栈中的最后一个元素获取并删除将出栈的迷宫单元设为当前迷宫单元 在循环结束以后就会出现像文章开头效果图一样的结果。 接下来我们就要将文字化的算法转化为Python的代码。 首先程序是不认识图片的它认识的是数据。所以我们需要设置一个二维列表以此来用一串数据表示当前的图像。当然我们可以顺便将第一步的设置一起完成 alist [] aa0 need[] for j in range(2*a1):if aa0:aa 1alistone []for i in range(2*b1):alistone.append(1)alist.append(alistone)else:aa0alistone []bb0for i in range(2*b1):if bb0:bb1alistone.append(1)else:bb 0need.append((j,i))alistone.append(0)alist.append(alistone) alist[0][1]0 alist[-1][-2]0可以看到除此以外我们还建立了一个列表need里面存储了所有的迷宫单元。它的作用就是判断迷宫单元是否被访问每次访问都会将迷宫单元从表格中删除当表格中没有迷宫单元时就说明所有迷宫单元都被访问了。 x1 y1 need.remove((1, 1)) listing[] while len(need)0:aroundit[]try:if x-20:print(11)alist[x-2][y]0if (x-2,y) in need:aroundit.append(alist[x-1][y],x(0,x-2))except:while False:print()try:alist[x2][y]0if (x2,y) in need:aroundit.append(alist[x1][y],x(0,x2))except:while False:print()try:alist[x][y2]0if (x,y2) in need:aroundit.append(alist[x][y1],y(0,y2))except:while False:print()try:if y-20:print(11)alist[x][y-2]0if (x,y-2) in need:aroundit.append(alist[x][y-1],y(0,y-2))except:while False:print()if len(aroundit)0:listing.append((x,y))exec(random.choice(aroundit))need.remove((x, y))else:x,ylisting[-1]listing.pop()而这些内容就是第二步。其算法我已经解释过唯一一个微小的不同是在此处我们并没有在列表中加入相邻迷宫单元的坐标而是将其对应的破墙和标记为当前迷宫单元的代码以字符串的形式存储在表格中并在随机选择出某个迷宫单元所对应的字符串后使用exec将其转换为代码并运行这可以节省一些代码。 print(完成用时{}秒.format(time.time()-e))打印完生成迷宫的用时后我们需要将表格中的数据转化为图像了。当然在此之前我们要先确定图片保存的位置。 if saveit1:ccc askdirectory()hbbbbb1while True:try:open({}/{}×{}迷宫{}.png.format(ccc,a,b,h),r)h({}).format(bbbbb)except:breakbbbbb1由于使用时有可能选择不保存图片因此要先判断你的选择是保存还是不保存。这里字符“1”表示保存输入其他自然就是不保存了。然后我们需要让你选择保存路径askdirectory()询问的是文件路径不需要选择文件名。然后我们要确定文件名称“a×b迷宫.png”。这里需要判断指定路径是否存在此名称的文件如果存在则我们需要在后面加上序号。总而言之通过这串代码我们已经将迷宫的路径文件名确定了。 pygame.init() iconpygame.image.load(迷宫.png) pygame.display.set\_icon(icon) screenpygame.display.Info() screen pygame.display.set\_mode((l*(2*a1),l*(2*b1))) pygame.display.set\_caption(迷宫) screen.fill(white) c pygame.Surface((l, l), flagspygame.HWSURFACE) c.fill(colorwhite) d pygame.Surface((l, l), flagspygame.HWSURFACE) d.fill(colorblack) for i in range(2*a1):for j in range(2*b1):if alist[i][j]0:screen.blit(c, (i*l, j*l))elif alist[i][j]1:screen.blit(d, (i*l, j*l)) pygame.display.flip() if saveit1:pygame.image.save(screen, {}/{}×{}迷宫{}.png.format(ccc, a, b, h)) while True:for event in pygame.event.get():if event.type pygame.QUIT:pygame.quit()sys.exit()代码中使用的图片“迷宫.png”名称不太对下载以后要重新命名一下 这里主要是Pygame的基本设置并将表格内容图像化。每一个数字代表一个方块而数字的值则决定了方块的颜色数字在表格中的位置决定了方块的位置。就这样我们呢将表格完全转化成了图像。当然我们还需要用pygame.image.save()函数将图像保存为图片文件。 这样这个生成器似乎完成了。 它运行良好但当迷宫比较复杂时暴露出一个问题下图是100×100的迷宫 由于正确路径过于曲折在复杂度较高时这个迷宫的难度会变得极高 难度高在某方面上讲的确是好事。但当你向你的朋友们展示这个迷宫时如果你自己也无法得出正确的路径这不是很扫兴吗 因此一个寻路算法变得非常有必要。 寻路算法的大体思路 在生成的迷宫中白格为路黑格为墙。将起点设置为当前位置重复执行直到终点成为当前位置 将当前位置标记为正确路径将周围未标记的路加入一个表格如果表格不空 将当前位置入栈从表格中随机选择一条路并将其设为当前位置 如果表格是空的 栈顶的路出栈将其设为当前位置 通过这个算法我们可以试出正确的路径如图 代码的实现 x20 y21 listing2[] while not(alist[-1][-2]2):alist[x2][y2]3around2[]try:if x2-10:print(11)if alist[x2-1][y2]0:around2.append(x2x2-1)except:while False:print()try:if alist[x21][y2]0:around2.append(x2x21)except:while False:print()try:if alist[x2][y21]0:around2.append(y2y21)except:while False:print()try:if y2-10:print(11)if alist[x2][y2-1]0:around2.append(y2y2-1)except:while False:print()if len(around2)0:listing2.append((x2,y2))exec(random.choice(around2))else:alist[x2][y2]2x2,y2listing2[-1]listing2.pop() alist[-1][-2]3 for i in range(len(alist)):for j in range(len(alist[0])):if alist[i][j]2:alist[i][j]0同时图像绘制的过程也要作出一些改动以显示正确路径 if saveit1:ccc askdirectory()hbbbbb1while True:try:open({}/{}×{}迷宫{}.png.format(ccc,a,b,h),r)open({}/{}×{}迷宫正确线路{}.png.format(ccc,a,b,h),r)h({}).format(bbbbb)except:breakbbbbb1 pygame.init() iconpygame.image.load(迷宫.png) pygame.display.set\_icon(icon) screenpygame.display.Info() screen pygame.display.set\_mode((l*(2*a1),l*(2*b1))) pygame.display.set\_caption(迷宫) screen.fill(white) if saveit1:c pygame.Surface((l, l), flagspygame.HWSURFACE)c.fill(colorwhite)d pygame.Surface((l, l), flagspygame.HWSURFACE)d.fill(colorblack)f pygame.Surface((l, l), flagspygame.HWSURFACE)f.fill(colorwhite)for i in range(2 * a 1):for j in range(2 * b 1):if alist[i][j] 0:screen.blit(c, (i * l, j * l))elif alist[i][j] 1:screen.blit(d, (i * l, j * l))else:screen.blit(f, (i * l, j * l))pygame.image.save(screen, {}/{}×{}迷宫{}.png.format(ccc, a, b, h))c pygame.Surface((l, l), flagspygame.HWSURFACE)c.fill(colorwhite)d pygame.Surface((l, l), flagspygame.HWSURFACE)d.fill(colorblack)f pygame.Surface((l, l), flagspygame.HWSURFACE)f.fill(colorred)for i in range(2 * a 1):for j in range(2 * b 1):if alist[i][j] 0:screen.blit(c, (i * l, j * l))elif alist[i][j] 1:screen.blit(d, (i * l, j * l))else:screen.blit(f, (i * l, j * l))pygame.image.save(screen, {}/{}×{}迷宫正确线路{}.png.format(ccc, a, b, h)) c pygame.Surface((l, l), flagspygame.HWSURFACE) c.fill(colorwhite) d pygame.Surface((l, l), flagspygame.HWSURFACE) d.fill(colorblack) f pygame.Surface((l, l), flagspygame.HWSURFACE) f.fill(colorwhite) for i in range(2*a1):for j in range(2*b1):if alist[i][j]0:screen.blit(c, (i*l, j*l))elif alist[i][j]1:screen.blit(d, (i*l, j*l))else:screen.blit(f,(i*l, j*l)) pygame.display.flip() aaaaaaa 0 while True:for event in pygame.event.get():if event.type pygame.QUIT:pygame.quit()sys.exit()if event.type pygame.MOUSEBUTTONDOWN:if aaaaaaa 1:aaaaaaa 0c pygame.Surface((l, l), flagspygame.HWSURFACE)c.fill(colorwhite)d pygame.Surface((l, l), flagspygame.HWSURFACE)d.fill(colorblack)f pygame.Surface((l, l), flagspygame.HWSURFACE)f.fill(colorwhite)for i in range(2 * a 1):for j in range(2 * b 1):if alist[i][j] 0:screen.blit(c, (i * l, j * l))elif alist[i][j] 1:screen.blit(d, (i * l, j * l))else:screen.blit(f, (i * l, j * l))pygame.display.flip()else:aaaaaaa 1c pygame.Surface((l, l), flagspygame.HWSURFACE)c.fill(colorwhite)d pygame.Surface((l, l), flagspygame.HWSURFACE)d.fill(colorblack)f pygame.Surface((l, l), flagspygame.HWSURFACE)f.fill(colorred)for i in range(2 * a 1):for j in range(2 * b 1):if alist[i][j] 0:screen.blit(c, (i * l, j * l))elif alist[i][j] 1:screen.blit(d, (i * l, j * l))else:screen.blit(f, (i * l, j * l))pygame.display.flip()通过这些改动显示正确路径的效果就实现了。生成完成以后窗口上显示的是没有正确路径的迷宫而点击窗口后正确的路径就会显示再次点击隐藏。 刚刚那张100×100的迷宫其正确路径是 可以看出本文中所用的算法生成的迷宫其正确路径还是非常曲折的难度很高。你何不将其发给你的朋友让其破解一下呢 完整的代码 #coding:utf-8 import contextlib with contextlib.redirect\_stdout(None):import pygame import random import sys import time from tkinter.filedialog import * aint(input(列数)) bint(input(行数)) lint(input(大小)) saveitinput(是否保存) print(生成中...) e time.time() alist [] aa0 need[] for j in range(2*a1):if aa0:aa 1alistone []for i in range(2*b1):alistone.append(1)alist.append(alistone)else:aa0alistone []bb0for i in range(2*b1):if bb0:bb1alistone.append(1)else:bb 0need.append((j,i))alistone.append(0)alist.append(alistone) alist[0][1]0 alist[-1][-2]0 x1 y1 need.remove((1, 1)) listing[] while len(need)0:aroundit[]try:if x-20:print(11)alist[x-2][y]0if (x-2,y) in need:aroundit.append(alist[x-1][y],x(0,x-2))except:while False:print()try:alist[x2][y]0if (x2,y) in need:aroundit.append(alist[x1][y],x(0,x2))except:while False:print()try:alist[x][y2]0if (x,y2) in need:aroundit.append(alist[x][y1],y(0,y2))except:while False:print()try:if y-20:print(11)alist[x][y-2]0if (x,y-2) in need:aroundit.append(alist[x][y-1],y(0,y-2))except:while False:print()if len(aroundit)0:listing.append((x,y))exec(random.choice(aroundit))need.remove((x, y))else:x,ylisting[-1]listing.pop() x20 y21 listing2[] while not(alist[-1][-2]2):alist[x2][y2]3around2[]try:if x2-10:print(11)if alist[x2-1][y2]0:around2.append(x2x2-1)except:while False:print()try:if alist[x21][y2]0:around2.append(x2x21)except:while False:print()try:if alist[x2][y21]0:around2.append(y2y21)except:while False:print()try:if y2-10:print(11)if alist[x2][y2-1]0:around2.append(y2y2-1)except:while False:print()if len(around2)0:listing2.append((x2,y2))exec(random.choice(around2))else:alist[x2][y2]2x2,y2listing2[-1]listing2.pop() alist[-1][-2]3 for i in range(len(alist)):for j in range(len(alist[0])):if alist[i][j]2:alist[i][j]0 print(完成用时{}秒.format(time.time()-e)) if saveit1:ccc askdirectory()hbbbbb1while True:try:open({}/{}×{}迷宫{}.png.format(ccc,a,b,h),r)open({}/{}×{}迷宫正确线路{}.png.format(ccc,a,b,h),r)h({}).format(bbbbb)except:breakbbbbb1 pygame.init() iconpygame.image.load(迷宫.png) pygame.display.set\_icon(icon) screenpygame.display.Info() screen pygame.display.set\_mode((l*(2*a1),l*(2*b1))) pygame.display.set\_caption(迷宫) screen.fill(white) if saveit1:c pygame.Surface((l, l), flagspygame.HWSURFACE)c.fill(colorwhite)d pygame.Surface((l, l), flagspygame.HWSURFACE)d.fill(colorblack)f pygame.Surface((l, l), flagspygame.HWSURFACE)f.fill(colorwhite)for i in range(2 * a 1):for j in range(2 * b 1):if alist[i][j] 0:screen.blit(c, (i * l, j * l))elif alist[i][j] 1:screen.blit(d, (i * l, j * l))else:screen.blit(f, (i * l, j * l))pygame.image.save(screen, {}/{}×{}迷宫{}.png.format(ccc, a, b, h))c pygame.Surface((l, l), flagspygame.HWSURFACE)c.fill(colorwhite)d pygame.Surface((l, l), flagspygame.HWSURFACE)d.fill(colorblack)f pygame.Surface((l, l), flagspygame.HWSURFACE)f.fill(colorred)for i in range(2 * a 1):for j in range(2 * b 1):if alist[i][j] 0:screen.blit(c, (i * l, j * l))elif alist[i][j] 1:screen.blit(d, (i * l, j * l))else:screen.blit(f, (i * l, j * l))pygame.image.save(screen, {}/{}×{}迷宫正确线路{}.png.format(ccc, a, b, h)) c pygame.Surface((l, l), flagspygame.HWSURFACE) c.fill(colorwhite) d pygame.Surface((l, l), flagspygame.HWSURFACE) d.fill(colorblack) f pygame.Surface((l, l), flagspygame.HWSURFACE) f.fill(colorwhite) for i in range(2*a1):for j in range(2*b1):if alist[i][j]0:screen.blit(c, (i*l, j*l))elif alist[i][j]1:screen.blit(d, (i*l, j*l))else:screen.blit(f,(i*l, j*l)) pygame.display.flip() aaaaaaa 0 while True:for event in pygame.event.get():if event.type pygame.QUIT:pygame.quit()sys.exit()if event.type pygame.MOUSEBUTTONDOWN:if aaaaaaa 1:aaaaaaa 0c pygame.Surface((l, l), flagspygame.HWSURFACE)c.fill(colorwhite)d pygame.Surface((l, l), flagspygame.HWSURFACE)d.fill(colorblack)f pygame.Surface((l, l), flagspygame.HWSURFACE)f.fill(colorwhite)for i in range(2 * a 1):for j in range(2 * b 1):if alist[i][j] 0:screen.blit(c, (i * l, j * l))elif alist[i][j] 1:screen.blit(d, (i * l, j * l))else:screen.blit(f, (i * l, j * l))pygame.display.flip()else:aaaaaaa 1c pygame.Surface((l, l), flagspygame.HWSURFACE)c.fill(colorwhite)d pygame.Surface((l, l), flagspygame.HWSURFACE)d.fill(colorblack)f pygame.Surface((l, l), flagspygame.HWSURFACE)f.fill(colorred)for i in range(2 * a 1):for j in range(2 * b 1):if alist[i][j] 0:screen.blit(c, (i * l, j * l))elif alist[i][j] 1:screen.blit(d, (i * l, j * l))else:screen.blit(f, (i * l, j * l))pygame.display.flip()
http://www.yutouwan.com/news/244151/

相关文章:

  • 阜南县城乡建设局官方网站查手表价格的网站
  • 做网站月薪西安网站制作公司有哪家
  • 网站开发需要注意的100种画册排版图解
  • 校园淘宝店网站开发网页设计初学者公司网页设计模板
  • 做网站的公司销售话术网站友情链接出售
  • 茂名网站建设优化网络营销是什么一种市场营销方式
  • 中国医院建设协会网站免费咨询聊天
  • 怎么做套板网站丽江网站建设公司
  • 化妆品商城网站建设apple 官网
  • .tel域名不可以做网站域名吗百度一下你就知道了百度一下
  • 成都网站建设价格表徐汇网站推广公司
  • 西安手机商城网站设计济南教育平台网站建设
  • 外国酷炫网站郑州公司企业网站建设
  • wordpress子目录网站高端网站制作系统
  • 网站建设佰首选金手指二六公章在线印章制作生成免费
  • 网站推广策划评估工具7frontpage官方下载
  • 如何重视企业网站的建设android wap网站
  • 写作网站投稿哪个好江西新农村建设权威网站
  • 免费网站app代码wordpress seo h1标签
  • Wordpress热门评论插件seo排名优化方法
  • 软件开发 网站开发哪个难红铃铛网站建设
  • php模板网站wordpress 转发
  • asp网站后台上传不了图片关键词收录
  • 企业网站可以自己做吗电影网站推广
  • 上海住房和城乡建设网站网站推广app软件
  • 站内搜索引擎给娃娃做衣服卖的网站
  • 建站公司咨询潍坊网站建设公司慕枫
  • 专注于响应式网站开发seo什么意思简单来说
  • 中国纳溪门户网站建设项目环境影响如何建设音乐网站
  • 怎样建网站才艺多网站建设