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,初始...
阅读 995·2023-01-14 11:38
阅读 992·2023-01-14 11:04
阅读 829·2023-01-14 10:48
阅读 2256·2023-01-14 10:34
阅读 1061·2023-01-14 10:24
阅读 961·2023-01-14 10:18
阅读 600·2023-01-14 10:09
阅读 655·2023-01-14 10:02