资讯专栏INFORMATION COLUMN

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

89542767 / 381人阅读

  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

  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入门案例


  import pygame
  import sys
  pygame.init()#初始化pygame
  size=width,height=320,240#设置窗口大小
  screen=pygame.display.set_mode(size)#显示窗口
  while True:#死循环确保窗口一直显示
  for event in pygame.event.get():#遍历所有事件
  if event.type==pygame.QUIT:#如果单击关闭窗口,则退出
  sys.exit()
  pygame.quit()#退出pygame
  pygame实现拼图游戏
  import pygame,sys,random
  from pygame.locals import*
  #一些常量
  WINDOWWIDTH=500
  WINDOWHEIGHT=500
  BACKGROUNDCOLOR=(255,255,255)
  BLUE=(0,0,255)
  BLACK=(0,0,0)
  FPS=40
  VHNUMS=3
  CELLNUMS=VHNUMS*VHNUMS
  MAXRANDTIME=100
  #退出
  def terminate():
  pygame.quit()
  sys.exit()
  #随机生成游戏盘面
  def newGameBoard():
  board=[]
  for i in range(CELLNUMS):
  board.append(i)
  blackCell=CELLNUMS-1
  board[blackCell]=-1
  for i in range(MAXRANDTIME):
  direction=random.randint(0,3)
  if(direction==0):
  blackCell=moveLeft(board,blackCell)
  elif(direction==1):
  blackCell=moveRight(board,blackCell)
  elif(direction==2):
  blackCell=moveUp(board,blackCell)
  elif(direction==3):
  blackCell=moveDown(board,blackCell)
  return board,blackCell
  #若空白图像块不在最左边,则将空白块左边的块移动到空白块位置
  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
  #是否完成
  def isFinished(board,blackCell):
  for i in range(CELLNUMS-1):
  if board<i>!=i:
  return False
  return True
  #初始化
  pygame.init()
  mainClock=pygame.time.Clock()
  #加载图片
  gameImage=pygame.image.load('1.jpg')
  gameRect=gameImage.get_rect()
  #设置窗口,窗口的宽度和高度取决于图片的宽高
  windowSurface=pygame.display.set_mode((gameRect.width,gameRect.height))
  pygame.display.set_caption('拼图')
  cellWidth=int(gameRect.width/VHNUMS)
  cellHeight=int(gameRect.height/VHNUMS)
  finish=False
  gameBoard,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)
  if event.type==MOUSEBUTTONDOWN and event.button==1:
  x,y=pygame.mouse.get_pos()
  col=int(x/cellWidth)
  row=int(y/cellHeight)
  index=col+row*VHNUMS
  if(
  index==blackCell-1 or index==blackCell+1 or index==blackCell-VHNUMS or index==blackCell+VHNUMS):
  gameBoard[blackCell],gameBoard[index]=gameBoard[index],gameBoard[blackCell]
  blackCell=index
  if(isFinished(gameBoard,blackCell)):
  gameBoard[blackCell]=CELLNUMS-1
  finish=True
  windowSurface.fill(BACKGROUNDCOLOR)
  for i in range(CELLNUMS):
  rowDst=int(i/VHNUMS)
  colDst=int(i%VHNUMS)
  rectDst=pygame.Rect(colDst*cellWidth,rowDst*cellHeight,cellWidth,cellHeight)
  if gameBoard<i>==-1:
  continue
  rowArea=int(gameBoard<i>/VHNUMS)
  colArea=int(gameBoard<i>%VHNUMS)
  rectArea=pygame.Rect(colArea*cellWidth,rowArea*cellHeight,cellWidth,cellHeight)
  windowSurface.blit(gameImage,rectDst,rectArea)
  for i in range(VHNUMS+1):
  pygame.draw.line(windowSurface,BLACK,(i*cellWidth,0),(i*cellWidth,gameRect.height))
  for i in range(VHNUMS+1):
  pygame.draw.line(windowSurface,BLACK,(0,i*cellHeight),(gameRect.width,i*cellHeight))
  pygame.display.update()
  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元查看
<