日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python拼图游戏_Python加pyGame实现的简单拼图游戏实例

發(fā)布時間:2024/3/26 python 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python拼图游戏_Python加pyGame实现的简单拼图游戏实例 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

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('pic.bmp')

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()

# 游戲主循環(huán)

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)

希望本文所述對大家的Python程序設計有所幫助。

本文原創(chuàng)發(fā)布php中文網,轉載請注明出處,感謝您的尊重!

總結

以上是生活随笔為你收集整理的python拼图游戏_Python加pyGame实现的简单拼图游戏实例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。