Python加pyGame实现的简单拼图游戏实例
本文实例讲述了Python加pyGame实现的简单拼图游戏。分享给大家供大家参考。具体实现方法如下:
importpygame,sys,random frompygame.localsimport* #一些常量 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 #退出 defterminate(): pygame.quit() sys.exit() #随机生成游戏盘面 defnewGameBoard(): board=[] foriinrange(CELLNUMS): board.append(i) blackCell=CELLNUMS-1 board[blackCell]=-1 foriinrange(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) returnboard,blackCell #若空白图像块不在最左边,则将空白块左边的块移动到空白块位置 defmoveRight(board,blackCell): ifblackCell%VHNUMS==0: returnblackCell board[blackCell-1],board[blackCell]=board[blackCell],board[blackCell-1] returnblackCell-1 #若空白图像块不在最右边,则将空白块右边的块移动到空白块位置 defmoveLeft(board,blackCell): ifblackCell%VHNUMS==VHNUMS-1: returnblackCell board[blackCell+1],board[blackCell]=board[blackCell],board[blackCell+1] returnblackCell+1 #若空白图像块不在最上边,则将空白块上边的块移动到空白块位置 defmoveDown(board,blackCell): ifblackCell<VHNUMS: returnblackCell board[blackCell-VHNUMS],board[blackCell]=board[blackCell],board[blackCell-VHNUMS] returnblackCell-VHNUMS #若空白图像块不在最下边,则将空白块下边的块移动到空白块位置 defmoveUp(board,blackCell): ifblackCell>=CELLNUMS-VHNUMS: returnblackCell board[blackCell+VHNUMS],board[blackCell]=board[blackCell],board[blackCell+VHNUMS] returnblackCell+VHNUMS #是否完成 defisFinished(board,blackCell): foriinrange(CELLNUMS-1): ifboard[i]!=i: returnFalse returnTrue #初始化 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=False gameBoard,blackCell=newGameBoard() #游戏主循环 whileTrue: foreventinpygame.event.get(): ifevent.type==QUIT: terminate() iffinish: continue ifevent.type==KEYDOWN: ifevent.key==K_LEFTorevent.key==ord('a'): blackCell=moveLeft(gameBoard,blackCell) ifevent.key==K_RIGHTorevent.key==ord('d'): blackCell=moveRight(gameBoard,blackCell) ifevent.key==K_UPorevent.key==ord('w'): blackCell=moveUp(gameBoard,blackCell) ifevent.key==K_DOWNorevent.key==ord('s'): blackCell=moveDown(gameBoard,blackCell) ifevent.type==MOUSEBUTTONDOWNandevent.button==1: x,y=pygame.mouse.get_pos() col=int(x/cellWidth) row=int(y/cellHeight) index=col+row*VHNUMS if(index==blackCell-1orindex==blackCell+1orindex==blackCell-VHNUMSorindex==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) foriinrange(CELLNUMS): rowDst=int(i/VHNUMS) colDst=int(i%VHNUMS) rectDst=pygame.Rect(colDst*cellWidth,rowDst*cellHeight,cellWidth,cellHeight) ifgameBoard[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) foriinrange(VHNUMS+1): pygame.draw.line(windowSurface,BLACK,(i*cellWidth,0),(i*cellWidth,gameRect.height)) foriinrange(VHNUMS+1): pygame.draw.line(windowSurface,BLACK,(0,i*cellHeight),(gameRect.width,i*cellHeight)) pygame.display.update() mainClock.tick(FPS)
希望本文所述对大家的Python程序设计有所帮助。