python二维游戏示例_python 拼图 小游戏示例源码

【实例简介】

【实例截图】

145d330cfb92c9a217530fe4b9baf410.png

【核心代码】import pygame, sys, random #导入pygame模块

from pygame.locals import *

# 定义一些常量

WINDOWWIDTH = 500 #设置显示窗口的宽度为500

WINDOWHEIGHT = 500 #设置显示窗口的高度为500

BACKGROUNDCOLOR = (255, 255, 255) #设置背景颜色

BLUE = (0, 0, 255) #设置的蓝色

BLACK = (0, 0, 0) #设置黑色

FPS = 40 #设置帧数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(r'C:\Users\hwn\Desktop\keai.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)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值