独一无二的《斗罗大陆》小游戏火爆上线,玩家闯关等你来~(等级有点儿难)
前言
大家好!我是梨子同學!
希望大家多多支持我!哈哈
為了感謝每一個關注我的小可愛:💓每篇文章的項目源碼都是無償分享滴💓👇👇👇👇
點這里藍色這行字體自取,需要什么源碼記得說標題名字哈!私信我也可!
很多csdn的功能還在研究中,還有小編的文筆不好勿怪,會慢慢進步跟大家一起學習的
小編也一直在學習編程,如果代碼小程序出現錯誤歡迎大家評論區留言哈!
最后——如果文章有幫助到你,記得“關注”、“點贊”、“評論”三連哦~
正文
對于《斗羅大陸》動畫粉絲而言,春節即將到來,除了蘊藏對新年的憧憬外,還承載著更多期盼。
小編最希望的就是導演能每個星期多更新一集,這部動畫作品帶給粉絲無數難忘的回憶。(當然也
包括我啦~)嗯哼~今天的話也給大家帶來一款斗羅小拼圖游戲給大家。希望大家喜歡~💖💖
一、素材環境
1)準備好相應的素材圖片,這里是隨機到網上尋找的斗羅的背景圖片,記得設置好小程序的屏幕
大小跟素材大小大概一致,能一致更好!不然圖片顯示不全的哈!
2)環境安裝準備好Python版本基本上都可以、小編用的Python3.7、Pycharm2021的,然后寫游
戲的話基本上用的都是Pygame專屬游戲模塊寫的,然后一些自帶的不用管 直接導入即可。
安裝模塊也就是第三方模塊的小編經常用的方法是:pip install +模塊名或者提速需要用到鏡像源,
百度下或者csdn搜下就會出來很多安裝模塊的鏡像源這里就不一一介紹了!
二、代碼演示
完整的源碼展示,主要分為2個py小源碼。
主程序game.py
import os import sys import cfg import random import pygame'''判斷游戲是否結束''' def isGameOver(board, size):assert isinstance(size, int)num_cells = size * sizefor i in range(num_cells-1):if board[i] != i: return Falsereturn True'''將空白Cell左邊的Cell右移到空白Cell位置''' def moveR(board, blank_cell_idx, num_cols):if blank_cell_idx % num_cols == 0: return blank_cell_idxboard[blank_cell_idx-1], board[blank_cell_idx] = board[blank_cell_idx], board[blank_cell_idx-1]return blank_cell_idx - 1'''將空白Cell右邊的Cell左移到空白Cell位置''' def moveL(board, blank_cell_idx, num_cols):if (blank_cell_idx+1) % num_cols == 0: return blank_cell_idxboard[blank_cell_idx+1], board[blank_cell_idx] = board[blank_cell_idx], board[blank_cell_idx+1]return blank_cell_idx + 1'''將空白Cell上邊的Cell下移到空白Cell位置''' def moveD(board, blank_cell_idx, num_cols):if blank_cell_idx < num_cols: return blank_cell_idxboard[blank_cell_idx-num_cols], board[blank_cell_idx] = board[blank_cell_idx], board[blank_cell_idx-num_cols]return blank_cell_idx - num_cols'''將空白Cell下邊的Cell上移到空白Cell位置''' def moveU(board, blank_cell_idx, num_rows, num_cols):if blank_cell_idx >= (num_rows-1) * num_cols: return blank_cell_idxboard[blank_cell_idx+num_cols], board[blank_cell_idx] = board[blank_cell_idx], board[blank_cell_idx+num_cols]return blank_cell_idx + num_cols'''獲得打亂的拼圖''' def CreateBoard(num_rows, num_cols, num_cells):board = []for i in range(num_cells): board.append(i)# 去掉右下角那塊blank_cell_idx = num_cells - 1board[blank_cell_idx] = -1for i in range(cfg.NUMRANDOM):# 0: left, 1: right, 2: up, 3: downdirection = random.randint(0, 3)if direction == 0: blank_cell_idx = moveL(board, blank_cell_idx, num_cols)elif direction == 1: blank_cell_idx = moveR(board, blank_cell_idx, num_cols)elif direction == 2: blank_cell_idx = moveU(board, blank_cell_idx, num_rows, num_cols)elif direction == 3: blank_cell_idx = moveD(board, blank_cell_idx, num_cols)return board, blank_cell_idx'''隨機選取一張圖片''' def GetImagePath(rootdir):imagenames = os.listdir(rootdir)assert len(imagenames) > 0return os.path.join(rootdir, random.choice(imagenames))'''顯示游戲結束界面''' def ShowEndInterface(screen, width, height):screen.fill(cfg.BACKGROUNDCOLOR)font = pygame.font.Font(cfg.FONTPATH, width//15)title = font.render('恭喜! 你成功完成了拼圖!', True, (233, 150, 122))rect = title.get_rect()rect.midtop = (width/2, height/2.5)screen.blit(title, rect)pygame.display.update()while True:for event in pygame.event.get():if (event.type == pygame.QUIT) or (event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE):pygame.quit()sys.exit()pygame.display.update()'''顯示游戲開始界面''' def ShowStartInterface(screen, width, height):screen.fill(cfg.BACKGROUNDCOLOR)tfont = pygame.font.Font(cfg.FONTPATH, width//4)cfont = pygame.font.Font(cfg.FONTPATH, width//20)title = tfont.render('斗羅大陸', True, cfg.RED)content1 = cfont.render('按H、M、L開始游戲', True, cfg.BLUE)content2 = cfont.render('H為難度模式, M為中級模式, L簡易模式', True, cfg.BLUE)trect = title.get_rect()trect.midtop = (width/2, height/10)crect1 = content1.get_rect()crect1.midtop = (width/2, height/2.2)crect2 = content2.get_rect()crect2.midtop = (width/2, height/1.8)screen.blit(title, trect)screen.blit(content1, crect1)screen.blit(content2, crect2)while True:for event in pygame.event.get():if (event.type == pygame.QUIT) or (event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE):pygame.quit()sys.exit()elif event.type == pygame.KEYDOWN:if event.key == ord('l'): return 3elif event.key == ord('m'): return 4elif event.key == ord('h'): return 5pygame.display.update()'''主函數''' def main():# 初始化pygame.init()clock = pygame.time.Clock()# 加載圖片game_img_used = pygame.image.load(GetImagePath(cfg.PICTURE_ROOT_DIR))game_img_used = pygame.transform.scale(game_img_used, cfg.SCREENSIZE)game_img_used_rect = game_img_used.get_rect()# 設置窗口screen = pygame.display.set_mode(cfg.SCREENSIZE)pygame.display.set_caption('王者拼圖小游戲')# 游戲開始界面size = ShowStartInterface(screen, game_img_used_rect.width, game_img_used_rect.height)assert isinstance(size, int)num_rows, num_cols = size, sizenum_cells = size * size# 計算Cell大小cell_width = game_img_used_rect.width // num_colscell_height = game_img_used_rect.height // num_rows# 避免初始化為原圖while True:game_board, blank_cell_idx = CreateBoard(num_rows, num_cols, num_cells)if not isGameOver(game_board, size):break# 游戲主循環is_running = Truewhile is_running:# --事件捕獲for event in pygame.event.get():# ----退出游戲if (event.type == pygame.QUIT) or (event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE):pygame.quit()sys.exit()# ----鍵盤操作elif event.type == pygame.KEYDOWN:if event.key == pygame.K_LEFT or event.key == ord('a'):blank_cell_idx = moveL(game_board, blank_cell_idx, num_cols)elif event.key == pygame.K_RIGHT or event.key == ord('d'):blank_cell_idx = moveR(game_board, blank_cell_idx, num_cols)elif event.key == pygame.K_UP or event.key == ord('w'):blank_cell_idx = moveU(game_board, blank_cell_idx, num_rows, num_cols)elif event.key == pygame.K_DOWN or event.key == ord('s'):blank_cell_idx = moveD(game_board, blank_cell_idx, num_cols)# ----鼠標操作elif event.type == pygame.MOUSEBUTTONDOWN and event.button == 1:x, y = pygame.mouse.get_pos()x_pos = x // cell_widthy_pos = y // cell_heightidx = x_pos + y_pos * num_colsif idx == blank_cell_idx-1:blank_cell_idx = moveR(game_board, blank_cell_idx, num_cols)elif idx == blank_cell_idx+1:blank_cell_idx = moveL(game_board, blank_cell_idx, num_cols)elif idx == blank_cell_idx+num_cols:blank_cell_idx = moveU(game_board, blank_cell_idx, num_rows, num_cols)elif idx == blank_cell_idx-num_cols:blank_cell_idx = moveD(game_board, blank_cell_idx, num_cols)# --判斷游戲是否結束if isGameOver(game_board, size):game_board[blank_cell_idx] = num_cells - 1is_running = False# --更新屏幕screen.fill(cfg.BACKGROUNDCOLOR)for i in range(num_cells):if game_board[i] == -1:continuex_pos = i // num_colsy_pos = i % num_colsrect = pygame.Rect(y_pos*cell_width, x_pos*cell_height, cell_width, cell_height)img_area = pygame.Rect((game_board[i]%num_cols)*cell_width, (game_board[i]//num_cols)*cell_height, cell_width, cell_height)screen.blit(game_img_used, rect, img_area)for i in range(num_cols+1):pygame.draw.line(screen, cfg.BLACK, (i*cell_width, 0), (i*cell_width, game_img_used_rect.height))for i in range(num_rows+1):pygame.draw.line(screen, cfg.BLACK, (0, i*cell_height), (game_img_used_rect.width, i*cell_height))pygame.display.update()clock.tick(cfg.FPS)# 游戲結束界面ShowEndInterface(screen, game_img_used_rect.width, game_img_used_rect.height)配置文件定義一些屏幕大小等。
'''配置文件''' import os'''屏幕大小''' SCREENSIZE = (1080, 700) '''圖片素材根目錄''' PICTURE_ROOT_DIR = os.path.join(os.getcwd(), 'resources/pictures') '''字體路徑''' FONTPATH = os.path.join(os.getcwd(), 'resources/font/FZSTK.TTF') '''定義一些顏色''' BACKGROUNDCOLOR = (255, 255, 255) RED = (255, 0, 0) BLUE = (0, 0, 255) BLACK = (0, 0, 0) '''FPS''' FPS = 40 '''隨機打亂拼圖次數''' NUMRANDOM = 100三、效果展示
1)第一組隨機展示唐三原圖VS效果圖
?
?2)第二組隨機展示唐三原圖VS效果?
3)前面都是簡單L的3*3模式,這里開始中級模式
?
?o_o ....好了不多說了,我先攻克中級模式去了......最難的等你們慢慢發掘了~
?總結
嘿,最后來欣賞下小舞的美貌~百看不厭,當然斗羅建模人物都挺精致的。棒棒~
關注小編獲取更多精彩內容!
?制作不易,記得一鍵三連哦!!?如需打包好的源碼+素材免費分享滴!!傳送門
?
總結
以上是生活随笔為你收集整理的独一无二的《斗罗大陆》小游戏火爆上线,玩家闯关等你来~(等级有点儿难)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Opencv实战】图像修复神技?看我一
- 下一篇: 【Opencv探索】基于OpenCV的“