首页 > 编程 > Python > 正文

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

2020-01-04 19:15:38
字体:
来源:转载
供稿:网友

这篇文章主要介绍了Python加pyGame实现的简单拼图游戏,以一个完整实例形式分析了pyGame模块操作图片的相关技巧,需要的朋友可以参考下

本文实例讲述了Python加pyGame实现的简单拼图游戏。分享给大家供大家参考。具体实现方法如下:

 

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

希望本文所述对大家的Python程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表