资讯专栏INFORMATION COLUMN

Python pygame如何实现拼图游戏?下文给大家解答

89542767 / 619人阅读

  Python pygame作为一门常见的技能,其实,它的应用范围还是比较的广泛的,那么,它是怎么实现其拼图游戏呢?下面就以案例的形式,去给大家做个解答,下面就给大家详细解答下。


  pygame介绍


  Python Pygame是一款专门为开发和设计2D电子游戏而生的软件包,它支Windows、Linux、Mac OS等操作系统,具有良好的跨平台性。Pygame由Pete Shinners于2000年开发而成,是一款免费、开源的的软件包,因此您可以放心地使用它来开发游戏,不用担心有任何费用产生。


  Pygame在SDL(Simple DirectMedia Layer,使用C语言编写的多媒体开发库)的基础上开发而成,它提供了诸多操作模块,比如图像模块(image)、声音模块(mixer)、输入/输出(鼠标、键盘、显示屏)模块等。相比于开发3D游戏而言,Pygame更擅长开发2D游戏,比如于飞机大战、贪吃蛇、扫雷等游戏。


  安装pygame

</>复制代码

  1.   pip install pygame

  pygame常用模块


  pygame.cdrom访问光驱


  pygame.cursors加载光标


  pygame.display访问显示设备


  pygame.draw绘制形状、线和点


  pygame.event管理事件


  pygame.font使用字体


  pygame.image加载和存储图片


  pygame.joystick使用游戏手柄或者类似的东西


  pygame.key读取键盘按键


  pygame.mixer声音


  pygame.mouse鼠标


  pygame.movie播放视频


  pygame.music播放音频


  pygame.overlay访问高级视频叠加


  pygame.rect管理矩形区域


  pygame.scrap本地剪贴板访问


  pygame.sndarray操作声音数据


  pygame.sprite操作移动图像


  pygame.surface管理图像和屏幕


  pygame.surfarray管理点阵图像数据


  pygame.time管理时间和帧信息


  pygame.transform缩放和移动图像


  pygame入门案例


</>复制代码

  1.   import pygame
  2.   import sys
  3.   pygame.init()#初始化pygame
  4.   size=width,height=320,240#设置窗口大小
  5.   screen=pygame.display.set_mode(size)#显示窗口
  6.   while True:#死循环确保窗口一直显示
  7.   for event in pygame.event.get():#遍历所有事件
  8.   if event.type==pygame.QUIT:#如果单击关闭窗口,则退出
  9.   sys.exit()
  10.   pygame.quit()#退出pygame
  11.   pygame实现拼图游戏
  12.   import pygame,sys,random
  13.   from pygame.locals import*
  14.   #一些常量
  15.   WINDOWWIDTH=500
  16.   WINDOWHEIGHT=500
  17.   BACKGROUNDCOLOR=(255,255,255)
  18.   BLUE=(0,0,255)
  19.   BLACK=(0,0,0)
  20.   FPS=40
  21.   VHNUMS=3
  22.   CELLNUMS=VHNUMS*VHNUMS
  23.   MAXRANDTIME=100
  24.   #退出
  25.   def terminate():
  26.   pygame.quit()
  27.   sys.exit()
  28.   #随机生成游戏盘面
  29.   def newGameBoard():
  30.   board=[]
  31.   for i in range(CELLNUMS):
  32.   board.append(i)
  33.   blackCell=CELLNUMS-1
  34.   board[blackCell]=-1
  35.   for i in range(MAXRANDTIME):
  36.   direction=random.randint(0,3)
  37.   if(direction==0):
  38.   blackCell=moveLeft(board,blackCell)
  39.   elif(direction==1):
  40.   blackCell=moveRight(board,blackCell)
  41.   elif(direction==2):
  42.   blackCell=moveUp(board,blackCell)
  43.   elif(direction==3):
  44.   blackCell=moveDown(board,blackCell)
  45.   return board,blackCell
  46.   #若空白图像块不在最左边,则将空白块左边的块移动到空白块位置
  47.   def moveRight(board,blackCell):
  48.   if blackCell%VHNUMS==0:
  49.   return blackCell
  50.   board[blackCell-1],board[blackCell]=board[blackCell],board[blackCell-1]
  51.   return blackCell-1
  52.   #若空白图像块不在最右边,则将空白块右边的块移动到空白块位置
  53.   def moveLeft(board,blackCell):
  54.   if blackCell%VHNUMS==VHNUMS-1:
  55.   return blackCell
  56.   board[blackCell+1],board[blackCell]=board[blackCell],board[blackCell+1]
  57.   return blackCell+1
  58.   #若空白图像块不在最上边,则将空白块上边的块移动到空白块位置
  59.   def moveDown(board,blackCell):
  60.   if blackCell&lt;VHNUMS:
  61.   return blackCell
  62.   board[blackCell-VHNUMS],board[blackCell]=board[blackCell],board[blackCell-VHNUMS]
  63.   return blackCell-VHNUMS
  64.   #若空白图像块不在最下边,则将空白块下边的块移动到空白块位置
  65.   def moveUp(board,blackCell):
  66.   if blackCell&gt;=CELLNUMS-VHNUMS:
  67.   return blackCell
  68.   board[blackCell+VHNUMS],board[blackCell]=board[blackCell],board[blackCell+VHNUMS]
  69.   return blackCell+VHNUMS
  70.   #是否完成
  71.   def isFinished(board,blackCell):
  72.   for i in range(CELLNUMS-1):
  73.   if board&lt;i&gt;!=i:
  74.   return False
  75.   return True
  76.   #初始化
  77.   pygame.init()
  78.   mainClock=pygame.time.Clock()
  79.   #加载图片
  80.   gameImage=pygame.image.load('1.jpg')
  81.   gameRect=gameImage.get_rect()
  82.   #设置窗口,窗口的宽度和高度取决于图片的宽高
  83.   windowSurface=pygame.display.set_mode((gameRect.width,gameRect.height))
  84.   pygame.display.set_caption('拼图')
  85.   cellWidth=int(gameRect.width/VHNUMS)
  86.   cellHeight=int(gameRect.height/VHNUMS)
  87.   finish=False
  88.   gameBoard,blackCell=newGameBoard()
  89.   #游戏主循环
  90.   while True:
  91.   for event in pygame.event.get():
  92.   if event.type==QUIT:
  93.   terminate()
  94.   if finish:
  95.   continue
  96.   if event.type==KEYDOWN:
  97.   if event.key==K_LEFT or event.key==ord('a'):
  98.   blackCell=moveLeft(gameBoard,blackCell)
  99.   if event.key==K_RIGHT or event.key==ord('d'):
  100.   blackCell=moveRight(gameBoard,blackCell)
  101.   if event.key==K_UP or event.key==ord('w'):
  102.   blackCell=moveUp(gameBoard,blackCell)
  103.   if event.key==K_DOWN or event.key==ord('s'):
  104.   blackCell=moveDown(gameBoard,blackCell)
  105.   if event.type==MOUSEBUTTONDOWN and event.button==1:
  106.   x,y=pygame.mouse.get_pos()
  107.   col=int(x/cellWidth)
  108.   row=int(y/cellHeight)
  109.   index=col+row*VHNUMS
  110.   if(
  111.   index==blackCell-1 or index==blackCell+1 or index==blackCell-VHNUMS or index==blackCell+VHNUMS):
  112.   gameBoard[blackCell],gameBoard[index]=gameBoard[index],gameBoard[blackCell]
  113.   blackCell=index
  114.   if(isFinished(gameBoard,blackCell)):
  115.   gameBoard[blackCell]=CELLNUMS-1
  116.   finish=True
  117.   windowSurface.fill(BACKGROUNDCOLOR)
  118.   for i in range(CELLNUMS):
  119.   rowDst=int(i/VHNUMS)
  120.   colDst=int(i%VHNUMS)
  121.   rectDst=pygame.Rect(colDst*cellWidth,rowDst*cellHeight,cellWidth,cellHeight)
  122.   if gameBoard&lt;i&gt;==-1:
  123.   continue
  124.   rowArea=int(gameBoard&lt;i&gt;/VHNUMS)
  125.   colArea=int(gameBoard&lt;i&gt;%VHNUMS)
  126.   rectArea=pygame.Rect(colArea*cellWidth,rowArea*cellHeight,cellWidth,cellHeight)
  127.   windowSurface.blit(gameImage,rectDst,rectArea)
  128.   for i in range(VHNUMS+1):
  129.   pygame.draw.line(windowSurface,BLACK,(i*cellWidth,0),(i*cellWidth,gameRect.height))
  130.   for i in range(VHNUMS+1):
  131.   pygame.draw.line(windowSurface,BLACK,(0,i*cellHeight),(gameRect.width,i*cellHeight))
  132.   pygame.display.update()
  133.   mainClock.tick(FPS)

  综上所述,这篇文章就给大家介绍到这里了,希望可以给大家带来帮助。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/128324.html

相关文章

  • 教你使用Pythonpygame模块实现拼图游戏

      pygame模块是一个可以跨平台的模块,主要就是作为游戏开发来进行使用的,那么,怎么才能够实现其游戏开发的技能了?比如说,怎么实现使用pygame去实现拼图的游戏呢?下面就给大家详细解答下。  pygame介绍  Python Pygame是一款专门为开发和设计2D电子游戏而生的软件包,它支Windows、Linux、Mac OS等操作系统,具有良好的跨平台性。Pygame由Pete Shin...

    89542767 评论0 收藏0
  • pygame中Rect对象介绍案例解答

      小编写此篇文章的目的,主要是给大家来做一个解答,解答关于pygame中Rect对象的相关内容知识,下面就给大家做一个比较详细的解答。  class pygame.Rect Rect  对象的属性:  Rect表示的区域必须位于一个Surface对象之上,比如游戏的主窗口(screen)。上述方法由四个关键参数值构成,分别是left、top、width、height,为了方便大家理解这些距离的含...

    89542767 评论0 收藏0
  • 首次公开,整理12年积累的博客收藏夹,零距离展示《收藏夹吃灰》系列博客

    摘要:时间永远都过得那么快,一晃从年注册,到现在已经过去了年那些被我藏在收藏夹吃灰的文章,已经太多了,是时候把他们整理一下了。那是因为收藏夹太乱,橡皮擦给设置私密了,不收拾不好看呀。 ...

    Harriet666 评论0 收藏0
  • 关于pygame自定义窗口创建及相关操作指南

      pygame作为一个跨平台的python数据库,编辑起来也是比较的简单的,只需要一段简洁的代码,就能高效的完成一些任务,能够快速的实现其相关的一些应用服务。那么,如何使用pygame去做自定义窗口呢?怎么创建操作指南?下面给大家详细解答下。  1.首先,我们需要导入几个相关模块  importpygame   importsys   frompygame.localsimport*  2,初始...

    89542767 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<