A simple puzzle game designed by Python and pyGame

From , 4 Years ago, written in Python, viewed 49 times.
URL https://pastebin.vip/view/01daa090
  1. import pygame, sys, random
  2. from pygame.locals import *
  3.  
  4. # 一些常量
  5. WINDOWWIDTH = 500
  6. WINDOWHEIGHT = 500
  7. BACKGROUNDCOLOR = (255, 255, 255)
  8. BLUE = (0, 0, 255)
  9. BLACK = (0, 0, 0)
  10. FPS = 40
  11.  
  12. VHNUMS = 3
  13. CELLNUMS = VHNUMS*VHNUMS
  14. MAXRANDTIME = 100
  15.  
  16. # 退出
  17. def terminate():
  18.     pygame.quit()
  19.     sys.exit()
  20.      
  21. # 随机生成游戏盘面
  22. def newGameBoard():
  23.     board = []
  24.     for i in range(CELLNUMS):
  25.         board.append(i)
  26.     blackCell = CELLNUMS-1
  27.     board[blackCell] = -1
  28.  
  29.     for i in range(MAXRANDTIME):
  30.         direction = random.randint(0, 3)
  31.         if (direction == 0):
  32.             blackCell = moveLeft(board, blackCell)
  33.         elif (direction == 1):
  34.             blackCell = moveRight(board, blackCell)
  35.         elif (direction == 2):
  36.             blackCell = moveUp(board, blackCell)
  37.         elif (direction == 3):
  38.             blackCell = moveDown(board, blackCell)
  39.     return board, blackCell
  40.  
  41. # 若空白图像块不在最左边,则将空白块左边的块移动到空白块位置  
  42. def moveRight(board, blackCell):
  43.     if blackCell % VHNUMS == 0:
  44.         return blackCell
  45.     board[blackCell-1], board[blackCell] = board[blackCell], board[blackCell-1]
  46.     return blackCell-1
  47.  
  48. # 若空白图像块不在最右边,则将空白块右边的块移动到空白块位置  
  49. def moveLeft(board, blackCell):
  50.     if blackCell % VHNUMS == VHNUMS-1:
  51.         return blackCell
  52.     board[blackCell+1], board[blackCell] = board[blackCell], board[blackCell+1]
  53.     return blackCell+1
  54.  
  55. # 若空白图像块不在最上边,则将空白块上边的块移动到空白块位置  
  56. def moveDown(board, blackCell):
  57.     if blackCell < VHNUMS:
  58.         return blackCell
  59.     board[blackCell-VHNUMS], board[blackCell] = board[blackCell], board[blackCell-VHNUMS]
  60.     return blackCell-VHNUMS
  61.      
  62. # 若空白图像块不在最下边,则将空白块下边的块移动到空白块位置  
  63. def moveUp(board, blackCell):
  64.     if blackCell >= CELLNUMS-VHNUMS:
  65.         return blackCell
  66.     board[blackCell+VHNUMS], board[blackCell] = board[blackCell], board[blackCell+VHNUMS]
  67.     return blackCell+VHNUMS
  68.  
  69. # 是否完成
  70. def isFinished(board, blackCell):
  71.     for i in range(CELLNUMS-1):
  72.         if board[i] != i:
  73.             return False
  74.     return True
  75.  
  76. # 初始化
  77. pygame.init()
  78. mainClock = pygame.time.Clock()
  79.  
  80. # 加载图片
  81. gameImage = pygame.image.load('pic.bmp')
  82. gameRect = gameImage.get_rect()
  83.      
  84.  
  85. # 设置窗口
  86. windowSurface = pygame.display.set_mode((gameRect.width, gameRect.height))
  87. pygame.display.set_caption('拼图')
  88.  
  89. cellWidth = int(gameRect.width / VHNUMS)
  90. cellHeight = int(gameRect.height / VHNUMS)
  91.  
  92. finish = False
  93.  
  94. gameBoard, blackCell = newGameBoard()
  95.  
  96.  
  97. # 游戏主循环
  98. while True:
  99.     for event in pygame.event.get():
  100.         if event.type == QUIT:
  101.             terminate()
  102.         if finish:
  103.             continue
  104.         if event.type == KEYDOWN:
  105.             if event.key == K_LEFT or event.key == ord('a'):
  106.                 blackCell = moveLeft(gameBoard, blackCell)
  107.             if event.key == K_RIGHT or event.key == ord('d'):
  108.                 blackCell = moveRight(gameBoard, blackCell)
  109.             if event.key == K_UP or event.key == ord('w'):
  110.                 blackCell = moveUp(gameBoard, blackCell)
  111.             if event.key == K_DOWN or event.key == ord('s'):
  112.                 blackCell = moveDown(gameBoard, blackCell)
  113.         if event.type == MOUSEBUTTONDOWN and event.button == 1:
  114.             x, y = pygame.mouse.get_pos()
  115.             col = int(x / cellWidth)
  116.             row = int(y / cellHeight)
  117.             index = col + row*VHNUMS
  118.             if (index == blackCell-1 or index == blackCell+1 or index == blackCell-VHNUMS or index == blackCell+VHNUMS):
  119.                 gameBoard[blackCell], gameBoard[index] = gameBoard[index], gameBoard[blackCell]
  120.                 blackCell = index
  121.  
  122.     if (isFinished(gameBoard, blackCell)):
  123.         gameBoard[blackCell] = CELLNUMS-1
  124.         finish = True
  125.      
  126.     windowSurface.fill(BACKGROUNDCOLOR)
  127.      
  128.     for i in range(CELLNUMS):
  129.         rowDst = int(i / VHNUMS)
  130.         colDst = int(i % VHNUMS)
  131.         rectDst = pygame.Rect(colDst*cellWidth, rowDst*cellHeight, cellWidth, cellHeight)
  132.  
  133.         if gameBoard[i] == -1:
  134.             continue
  135.  
  136.         rowArea = int(gameBoard[i] / VHNUMS)
  137.         colArea = int(gameBoard[i] % VHNUMS)
  138.         rectArea = pygame.Rect(colArea*cellWidth, rowArea*cellHeight, cellWidth, cellHeight)
  139.         windowSurface.blit(gameImage, rectDst, rectArea)
  140.  
  141.     for i in range(VHNUMS+1):
  142.         pygame.draw.line(windowSurface, BLACK, (i*cellWidth, 0), (i*cellWidth, gameRect.height))
  143.     for i in range(VHNUMS+1):
  144.         pygame.draw.line(windowSurface, BLACK, (0, i*cellHeight), (gameRect.width, i*cellHeight))
  145.  
  146.     pygame.display.update()
  147.     mainClock.tick(FPS)
  148. #//python/6836

Reply to "A simple puzzle game designed by Python and pyGame"

Here you can reply to the paste above

captcha

https://burned.cc - Burn After Reading Website