本文实例讲述了python加pygame实现的简单拼图游戏。分享给大家供大家参考。具体实现方法如下:
import pygame, sys, randomfrom pygame.locals import *# 一些常量windowwidth = 500windowheight = 500backgroundcolor = (255, 255, 255)blue = (0, 0, 255)black = (0, 0, 0)fps = 40vhnums = 3cellnums = vhnums*vhnumsmaxrandtime = 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 = 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 = falsegameboard, blackcell = newgameboard()# 游戏主循环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程序设计有所帮助。