资讯专栏INFORMATION COLUMN

教你使用Python的pygame模块实现拼图游戏

89542767 / 377人阅读

  pygame模块是一个可以跨平台的模块,主要就是作为游戏开发来进行使用的,那么,怎么才能够实现其游戏开发的技能了?比如说,怎么实现使用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/128330.html

相关文章

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

      Python pygame作为一门常见的技能,其实,它的应用范围还是比较的广泛的,那么,它是怎么实现其拼图游戏呢?下面就以案例的形式,去给大家做个解答,下面就给大家详细解答下。  pygame介绍  Python Pygame是一款专门为开发和设计2D电子游戏而生的软件包,它支Windows、Linux、Mac OS等操作系统,具有良好的跨平台性。Pygame由Pete Shinners于20...

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

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

    Harriet666 评论0 收藏0
  • ❤️ 如何在 Pygame 中移动你游戏角色 ❤️

    作者:海拥 主页:https://haiyong.blog.csdn.net/   Pygame是一组跨平台的 Python 模块,专为编写视频游戏而设计。它包括旨在与 Python 编程语言一起使用的计算机图形和声音库。您可以使用 pygame 创建不同类型的游戏,包括街机游戏、平台游戏等等。 使用的图像:  你可以控制玩家的移动。为此,首先使用 pygame 的 display.set...

    lookSomeone 评论0 收藏0
  • Python文章合集 | 这些项目里肯定有你新宠(入门到实战、游戏、Turtle、案例等)

    摘要:有趣好玩的个入门题案例都在这里等你下载。趣味连连看经典版童年经典火影忍者连连看,无需下载,在线可玩小游戏植物大战僵尸游戏真的有毒戒不掉啊实战项目实战项目做一个刮刮乐案例,一不小心着实惊艳到我了。 导语 为了大家能相应的找到自己那方面的文章,这边小编进行了文章的汇总合集,也特别感谢我的粉丝们...

    derek_334892 评论0 收藏0
  • Python学习之路11-武装飞船

    摘要:和标志,用于表示飞船是否正在移动,用于实现飞船在不松开按键下连续移动。重写了函数,用于绘制飞船模块该模块主要是集中处理游戏中发生的各种事件。函数用于监听游戏的事件,比如,它表示游戏推出事件和分别表示键盘按下与松开事件。 《Python编程:从入门到实践》笔记。本章主要学习如何使用pygame编写一个简单的小飞机打外星人的游戏,由于本人对用python写游戏并不是特别感兴趣,所以主要是看...

    李昌杰 评论0 收藏0

发表评论

0条评论

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