龙空技术网

用Python快速实现自己的拼图游戏

芯片与自由 101

前言:

此刻大家对“拼图算法题”可能比较讲究,姐妹们都想要分析一些“拼图算法题”的相关内容。那么小编同时在网络上汇集了一些有关“拼图算法题””的相关知识,希望兄弟们能喜欢,咱们一起来学习一下吧!

最近,要说最火的编程语言莫过于Python了。除了占据各种网站编程语言的排行榜之外,最劲爆的消息就是教育部将Python语言纳入计算机等级考试,并且山东某学校已将Python引入课堂。这无疑给Python语言给予了极大的肯定。也必将极大助力Python的发展壮大。当然我也是Python的爱好者,"Life is short, we need Python.",我喜欢这句话。

我为什么喜欢Python

这两三年随着大数据的火爆,Python也是大红大紫,我始终相信被大多数人接受的东西自然有它的优点,我相信Python也不例外,所以也好奇,想一探究竟。于是抱着好奇和对流行的兴趣,初次接触,并真实感受了下Python,也就这样喜欢上了。刚开始学习感觉语法简单,功能强大,可能得益于语言起步晚,设计完善。学以致用,工作中平时经常抢不到会议室,那么就想用Python小试牛刀,于是用Python写了一个凌晨1点(应该没人变态到凌晨去订会议室吧,but exclude me,^_^)自动订会议室的程序。基本功能是用我的账户密码登录,然后预定我事先设置好的会议室信息(包括会议室、主题、电话等),大概一共代码也就100行,确实很好用。后来有用Python做一些界面类东东,来直观的展示某些过程,很是易学易用。

当然Python也确实能够极大的节约程序员的开发时间,在C语言中需要很多代码来实现的功能,对于Python来说可能也就一两行代码就可以实现,生命苦短,快用Python。花几分钟可以实现的功能,为什么要花一两天去实现呢?生命苦短啊,^_^。

另一方面,由于Python的流行,很多大牛和组织都在参与,并开源出很多包,很方便且免费的就可以得到,而且代码质量也肯定比大多数人的代码质量高,那么,别人都造好轮子了,为什么自己还要再造呢? 为什么不站在巨人的肩膀上前进。

今天用Python实现一个拼图游戏,经测试可以正常运行,运行效果如下视频。

视频加载中...

#_*_ coding:gbk _*_import pygame, sys, randomfrom pygame.locals import *# 一些常量WINDOWWIDTH = 500WINDOWHEIGHT = 500BACKGROUNDCOLOR = (255, 255, 255)BLUE = (0, 0, 255)BLACK = (0, 0, 0)FPS = 40VHNUMS = 3CELLNUMS = VHNUMS * VHNUMSMAXRANDTIME = 100# 退出def terminate(): pygame.quit() sys.exit()# 若空白图像块不在最左边,则将空白块左边的块移动到空白块位置def moveRight(board, blackCell): if blackCell % VHNUMS == 0: return blackCell board[blackCell - 1], board[blackCell] = board[blackCell], board[blackCell - 1] return blackCell - 1# 若空白图像块不在最右边,则将空白块右边的块移动到空白块位置def moveLeft(board, blackCell): if blackCell % VHNUMS == VHNUMS - 1: return blackCell board[blackCell + 1], board[blackCell] = board[blackCell], board[blackCell + 1] return blackCell + 1# 若空白图像块不在最上边,则将空白块上边的块移动到空白块位置def moveDown(board, blackCell): if blackCell < VHNUMS: return blackCell board[blackCell - VHNUMS], board[blackCell] = board[blackCell], board[blackCell - VHNUMS] return blackCell - VHNUMS# 若空白图像块不在最下边,则将空白块下边的块移动到空白块位置def moveUp(board, blackCell): if blackCell >= CELLNUMS - VHNUMS: return blackCell board[blackCell + VHNUMS], board[blackCell] = board[blackCell], board[blackCell + VHNUMS] return blackCell + VHNUMS# 初始化pygame.init()mainClock = pygame.time.Clock()# 加载图片gameImage = pygame.image.load('pic.jpg')gameRect = gameImage.get_rect()# 设置窗口windowSurface = pygame.display.set_mode((gameRect.width, gameRect.height))pygame.display.set_caption((u'puzzle').encode('utf-8'))#font = pygame.font.SysFont('楷体', 60)cellWidth = int(gameRect.width / VHNUMS)cellHeight = int(gameRect.height / VHNUMS)finish = FalsegameBoard, blackCell = newGameBoard()# 游戏主循环while True: for event in pygame.event.get(): if event.type == QUIT: terminate() if finish: continue if event.type == KEYDOWN: if event.key == K_LEFT or event.key == ord('a'): blackCell = moveLeft(gameBoard, blackCell) if event.key == K_RIGHT or event.key == ord('d'): blackCell = moveRight(gameBoard, blackCell) if event.key == K_UP or event.key == ord('w'): blackCell = moveUp(gameBoard, blackCell) if event.key == K_DOWN or event.key == ord('s'): blackCell = moveDown(gameBoard, blackCell)

源码大概有150行左右,有很大的优化空间,后面会加入自动恢复的算法,该算法会基于一个随机初始状态,进行计算,算出恢复原图的最小步骤,并自动执行恢复过程。

私信可以发送全套可运行的源码

标签: #拼图算法题