Step3:游戲主界面 OK , 有了前面的鋪墊 , 我們可以開始實現(xiàn)我們的游戲主界面了 。
首先 , 我們需要打亂拼圖 , 但是隨機打亂很可能導致拼圖無解 , 因此我們通過隨機移動拼圖來實現(xiàn)打亂拼圖的效果 , 這也是我們先定義拼圖的移動操作的主要原因:
'''獲得打亂的拼圖'''def CreateBoard(num_rows, num_cols, num_cells): board = [] for i in range(num_cells): board.append(i) # 去掉右下角那塊 blank_cell_idx = num_cells - 1 board[blank_cell_idx] = -1 for 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復制代碼 游戲主界面初始化:

文章插圖
最后實現(xiàn)主界面的顯示刷新以及事件響應等功能:
while True:game_board, blank_cell_idx = CreateBoard(num_rows, num_cols, num_cells)if not isGameOver(game_board, size):break # 游戲主循環(huán) is_running = True while 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)復制代碼
以上關于本文的內容,僅作參考!溫馨提示:如遇健康、疾病相關的問題,請您及時就醫(yī)或請專業(yè)人士給予相關指導!
「愛刨根生活網」www.malaban59.cn小編還為您精選了以下內容,希望對您有所幫助:- 5款免費制造電子名片的工具 制作名片用什么軟件好
- 春餅面怎么和才能軟軟的 春餅的制作方法
- 臘八蒜可以用樂扣盒子制作嗎
- 教你把照片制作mv視頻 怎么制作mv視頻加帶字
- 游戲簡潔有寓意的名字,有深意好聽的游戲名字
- 蘿卜蹲名字
- 小黑貓是什么意思
- 微星游戲本深度評測 微星游戲本怎么樣
- 拯救者R7000開箱評測 拯救者游戲本怎么樣
- 雙飛燕J95游戲鼠標開箱測評 雙飛燕鼠標怎么樣
