最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

教你使用Python的pygame模塊實(shí)現(xiàn)拼圖游戲

 更新時(shí)間:2022年07月05日 10:09:17   作者:飛揚(yáng)青春88  
pygame模塊是一個(gè)可以跨平臺的模塊,其設(shè)計(jì)目的就是為電子游戲而設(shè)計(jì),能夠支持圖片和聲音,下面這篇文章主要給給大家介紹了關(guān)于使用Python的pygame模塊實(shí)現(xiàn)拼圖游戲的相關(guān)資料,需要的朋友可以參考下

pygame介紹

Python Pygame 是一款專門為開發(fā)和設(shè)計(jì) 2D 電子游戲而生的軟件包,它支 Windows、Linux、Mac OS 等操作系統(tǒng),具有良好的跨平臺性。Pygame 由 Pete Shinners 于 2000 年開發(fā)而成,是一款免費(fèi)、開源的的軟件包,因此您可以放心地使用它來開發(fā)游戲,不用擔(dān)心有任何費(fèi)用產(chǎn)生。

Pygame 在 SDL(Simple DirectMedia Layer,使用 C語言編寫的多媒體開發(fā)庫) 的基礎(chǔ)上開發(fā)而成,它提供了諸多操作模塊,比如圖像模塊(image)、聲音模塊(mixer)、輸入/輸出(鼠標(biāo)、鍵盤、顯示屏)模塊等。相比于開發(fā) 3D 游戲而言,Pygame 更擅長開發(fā) 2D 游戲,比如于飛機(jī)大戰(zhàn)、貪吃蛇、掃雷等游戲。

安裝pygame

pip install pygame

pygame常用模塊

  • pygame.cdrom 訪問光驅(qū)
  • pygame.cursors 加載光標(biāo)
  • pygame.display 訪問顯示設(shè)備
  • pygame.draw 繪制形狀、線和點(diǎn)
  • pygame.event 管理事件
  • pygame.font 使用字體
  • pygame.image 加載和存儲圖片
  • pygame.joystick 使用游戲手柄或者類似的東西
  • pygame.key 讀取鍵盤按鍵
  • pygame.mixer 聲音
  • pygame.mouse 鼠標(biāo)
  • pygame.movie 播放視頻
  • pygame.music 播放音頻
  • pygame.overlay 訪問高級視頻疊加
  • pygame.rect 管理矩形區(qū)域
  • pygame.scrap 本地剪貼板訪問
  • pygame.sndarray 操作聲音數(shù)據(jù)
  • pygame.sprite 操作移動圖像
  • pygame.surface 管理圖像和屏幕
  • pygame.surfarray 管理點(diǎn)陣圖像數(shù)據(jù)
  • pygame.time 管理時(shí)間和幀信息
  • pygame.transform 縮放和移動圖像

pygame入門案例

import pygame
import sys

pygame.init()  # 初始化pygame
size = width, height = 320, 240  # 設(shè)置窗口大小
screen = pygame.display.set_mode(size)  # 顯示窗口

while True:  # 死循環(huán)確保窗口一直顯示
    for event in pygame.event.get():  # 遍歷所有事件
        if event.type == pygame.QUIT:  # 如果單擊關(guān)閉窗口,則退出
            sys.exit()

pygame.quit()  # 退出pygame

pygame實(shí)現(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()


# 隨機(jī)生成游戲盤面
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()

# 設(shè)置窗口,窗口的寬度和高度取決于圖片的寬高
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)

總結(jié)

到此這篇關(guān)于使用Python的pygame模塊實(shí)現(xiàn)拼圖游戲的文章就介紹到這了,更多相關(guān)Python pygame實(shí)現(xiàn)拼圖游戲內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python語言描述機(jī)器學(xué)習(xí)之Logistic回歸算法

    Python語言描述機(jī)器學(xué)習(xí)之Logistic回歸算法

    這篇文章主要介紹了Python語言描述機(jī)器學(xué)習(xí)之Logistic回歸算法,涉及Sigmoid函數(shù),梯度上升法等相關(guān)內(nèi)容,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12
  • Window版下在Jupyter中編寫TensorFlow的環(huán)境搭建

    Window版下在Jupyter中編寫TensorFlow的環(huán)境搭建

    這篇文章主要介紹了Window版下在Jupyter中編寫TensorFlow的環(huán)境搭建,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • python通過SSH登陸linux并操作的實(shí)現(xiàn)

    python通過SSH登陸linux并操作的實(shí)現(xiàn)

    這篇文章主要介紹了python通過SSH登陸linux并操作的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • 詳解tensorflow載入數(shù)據(jù)的三種方式

    詳解tensorflow載入數(shù)據(jù)的三種方式

    這篇文章主要介紹了詳解tensorflow載入數(shù)據(jù)的三種方式,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-04-04
  • python常用數(shù)據(jù)結(jié)構(gòu)集合詳解

    python常用數(shù)據(jù)結(jié)構(gòu)集合詳解

    這篇文章主要介紹了python常用數(shù)據(jù)結(jié)構(gòu)集合詳解,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下,希望對你的學(xué)習(xí)有所幫助
    2022-08-08
  • python os模塊簡單應(yīng)用示例

    python os模塊簡單應(yīng)用示例

    這篇文章主要介紹了python os模塊簡單應(yīng)用,結(jié)合實(shí)例形式分析了Python os模塊操作目錄與路徑相關(guān)函數(shù)與使用技巧,需要的朋友可以參考下
    2019-05-05
  • 利用python獲取想要搜索的數(shù)據(jù)

    利用python獲取想要搜索的數(shù)據(jù)

    這篇文章主要介紹了利用Python爬蟲采集想要搜索的信息(利用某du的接口實(shí)現(xiàn))并且處理掉它的反爬手段,文中示例代碼很詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴快來一起學(xué)習(xí)吧
    2023-05-05
  • python mysqldb連接數(shù)據(jù)庫

    python mysqldb連接數(shù)據(jù)庫

    今天無事想弄下python做個(gè)gui開發(fā),最近發(fā)布的是python 3k,用到了數(shù)據(jù)庫,通過搜索發(fā)現(xiàn)有一個(gè)mysqldb這樣的控件,可以使用,就去官方看了下結(jié)果,沒有2.6以上的版本
    2009-03-03
  • Python網(wǎng)絡(luò)編程之ZeroMQ知識總結(jié)

    Python網(wǎng)絡(luò)編程之ZeroMQ知識總結(jié)

    這篇文章主要介紹了Python網(wǎng)絡(luò)編程之ZeroMQ知識總結(jié),文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)python的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • python安裝包出現(xiàn)Retrying?(Retry(total=4,?connect=None,?read=None,?redirect=None,?status=None))問題解決

    python安裝包出現(xiàn)Retrying?(Retry(total=4,?connect=None,?read=No

    這篇文章主要給大家介紹了關(guān)于python安裝包出現(xiàn)Retrying?(Retry(total=4,?connect=None,?read=None,?redirect=None,?status=None))問題的解決方法,需要的朋友可以參考下
    2022-09-09

最新評論

阿尔山市| 雷山县| 瓮安县| 廊坊市| 金乡县| 化州市| 淳安县| 缙云县| 淮滨县| 浑源县| 沙湾县| 精河县| 衡水市| 凤山市| 额尔古纳市| 鲁甸县| 榕江县| 合肥市| 砀山县| 高清| 达日县| 额尔古纳市| 织金县| 新密市| 佛学| 平利县| 兰考县| 柳河县| 长武县| 平阴县| 天气| 神农架林区| 嘉祥县| 肃宁县| 珠海市| 文化| 荆门市| 金平| 罗甸县| 玉屏| 合川市|