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
pygame模块是一个可以跨平台的模块,主要就是作为游戏开发来进行使用的,那么,怎么才能够实现其游戏开发的技能了?比如说,怎么实现使用pygame去实现拼图的游戏呢?下面就给大家详细解答下。 pygame介绍 Python Pygame是一款专门为开发和设计2D电子游戏而生的软件包,它支Windows、Linux、Mac OS等操作系统,具有良好的跨平台性。Pygame由Pete Shin...
小编写此篇文章的目的,主要是给大家来做一个解答,解答关于pygame中Rect对象的相关内容知识,下面就给大家做一个比较详细的解答。 class pygame.Rect Rect 对象的属性: Rect表示的区域必须位于一个Surface对象之上,比如游戏的主窗口(screen)。上述方法由四个关键参数值构成,分别是left、top、width、height,为了方便大家理解这些距离的含...
摘要:时间永远都过得那么快,一晃从年注册,到现在已经过去了年那些被我藏在收藏夹吃灰的文章,已经太多了,是时候把他们整理一下了。那是因为收藏夹太乱,橡皮擦给设置私密了,不收拾不好看呀。 ...
pygame作为一个跨平台的python数据库,编辑起来也是比较的简单的,只需要一段简洁的代码,就能高效的完成一些任务,能够快速的实现其相关的一些应用服务。那么,如何使用pygame去做自定义窗口呢?怎么创建操作指南?下面给大家详细解答下。 1.首先,我们需要导入几个相关模块 importpygame importsys frompygame.localsimport* 2,初始...
阅读 912·2023-01-14 11:38
阅读 879·2023-01-14 11:04
阅读 743·2023-01-14 10:48
阅读 1994·2023-01-14 10:34
阅读 944·2023-01-14 10:24
阅读 823·2023-01-14 10:18
阅读 500·2023-01-14 10:09
阅读 573·2023-01-14 10:02