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

Python加pyGame實現(xiàn)的簡單拼圖游戲?qū)嵗?/h1>
 更新時間:2015年05月15日 15:02:15   作者:songguo  
這篇文章主要介紹了Python加pyGame實現(xiàn)的簡單拼圖游戲,以一個完整實例形式分析了pyGame模塊操作圖片的相關(guān)技巧,需要的朋友可以參考下

本文實例講述了Python加pyGame實現(xiàn)的簡單拼圖游戲。分享給大家供大家參考。具體實現(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()
# 設(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)

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

相關(guān)文章

  • python繪制分組條形圖的示例代碼

    python繪制分組條形圖的示例代碼

    本文主要介紹了如何使用python繪制分組條形圖,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • 連接pandas以及數(shù)組轉(zhuǎn)pandas的方法

    連接pandas以及數(shù)組轉(zhuǎn)pandas的方法

    今天小編就為大家分享一篇連接pandas以及數(shù)組轉(zhuǎn)pandas的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-06-06
  • Python高并發(fā)解決方案實現(xiàn)過程詳解

    Python高并發(fā)解決方案實現(xiàn)過程詳解

    這篇文章主要介紹了Python高并發(fā)解決方案實現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-07-07
  • Python實現(xiàn)冒泡排序算法的完整實例

    Python實現(xiàn)冒泡排序算法的完整實例

    這篇文章主要給大家介紹了關(guān)于Python實現(xiàn)冒泡排序算法的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • python PIL模塊的基本使用

    python PIL模塊的基本使用

    這篇文章主要介紹了python PIL模塊的基本使用,幫助大家更好的利用python處理圖片,感興趣的朋友可以了解下
    2020-09-09
  • Python 字典dict使用介紹

    Python 字典dict使用介紹

    這篇文章主要介紹了Python 字典dict使用介紹,需要的朋友可以參考下
    2014-11-11
  • Python可變參數(shù)用法實例分析

    Python可變參數(shù)用法實例分析

    這篇文章主要介紹了Python可變參數(shù)用法,結(jié)合實例形式分析了Python可變參數(shù)的具體定義、使用方法與相關(guān)注意事項,需要的朋友可以參考下
    2017-04-04
  • Python2.7:使用Pyhook模塊監(jiān)聽鼠標鍵盤事件-獲取坐標實例

    Python2.7:使用Pyhook模塊監(jiān)聽鼠標鍵盤事件-獲取坐標實例

    這篇文章主要介紹了Python2.7:使用Pyhook模塊監(jiān)聽鼠標鍵盤事件-獲取坐標實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • 在unittest中使用 logging 模塊記錄測試數(shù)據(jù)的方法

    在unittest中使用 logging 模塊記錄測試數(shù)據(jù)的方法

    今天小編就為大家分享一篇在unittest中使用 logging 模塊記錄測試數(shù)據(jù)的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11
  • python數(shù)據(jù)結(jié)構(gòu):數(shù)據(jù)類型

    python數(shù)據(jù)結(jié)構(gòu):數(shù)據(jù)類型

    這篇文章主要介紹了python數(shù)據(jù)結(jié)構(gòu)中的數(shù)據(jù)類型,在?Python?以及其他所有面向?qū)ο缶幊陶Z言中,類都是對數(shù)據(jù)的構(gòu)成(狀態(tài))以及數(shù)據(jù)?能做什么(行為)的描述,下面我們就來你看看python數(shù)據(jù)結(jié)構(gòu)中的數(shù)據(jù)類型商務(wù)詳細介紹,需要的小伙伴可以參考一下
    2021-12-12

最新評論

子洲县| 封开县| 保康县| 乌什县| 定日县| 巴马| 山东| 江门市| 玛纳斯县| 客服| 新安县| 苗栗县| 大名县| 监利县| 邯郸县| 石阡县| 正阳县| 双流县| 东莞市| 阳西县| 隆子县| 凭祥市| 赫章县| 郴州市| 太康县| 临泉县| 日照市| 山西省| 太谷县| 竹北市| 平南县| 广德县| 湟源县| 会宁县| 高淳县| 深泽县| 尼木县| 洪江市| 金秀| 祁门县| 宜兰市|