tft每日頭條

 > 遊戲

 > 怎麼用python做好玩的遊戲

怎麼用python做好玩的遊戲

遊戲 更新时间:2024-09-30 15:06:44

作為一個遊戲迷,(老哥是做軟件的)我就想自己用軟件做一個遊戲給老哥一個驚喜(驚吓?),聽說Python是一門入門非常簡單的一門語言,我就在網上找了Python的教程來看,在自己覺得學得可以了,就開始來制作一款屬于自己的遊戲,至于用了多久這裡略過,我把制作成功的遊戲(自我認為)發給了老哥看,老哥看完之後就發給了我以下内容:

怎麼用python做好玩的遊戲(老哥教我用Python用Python來制作屬于你自己的一款遊戲)1

本文使用 PyQt5 進行設計與實現,PyQt5 是該程序的一個呈現方式,最重要的是算法,學會了算法,完全可以使用 PyGame 或者 Tkinter 實現。

PyQt5安裝:pip in

stall PyQt5

本文使用環境:

  • 系統:Windows 10 64位
  • Python版本:3.6
1、布局設計

做一個簡版的數字華容道,布局設計如圖所示:

怎麼用python做好玩的遊戲(老哥教我用Python用Python來制作屬于你自己的一款遊戲)2

簡版數字華容道布局

  • 圖中灰色的部分使用 QWidget 作為整個遊戲的載體;
  • 黃色部分使用 QGridLayout 作為數字方塊的布局;
  • 紅色部分使用 QLabel 作為數字方塊。
2、算法設計

如上圖所示,本遊戲共需要15個方塊,每個方塊代表一個數字。我們可以使用 一個二維 list 來存儲方塊上的數字。其實我們要創建一個 4x4 的 list 存儲 0~15 各個數字,0 代表空的位置。

2.1 創建并初始化數組

創建數組的方法:

  • 創建一個長度為16的數組,并且在對應位置上保存着 0~15 ;
  • 打亂順序

怎麼用python做好玩的遊戲(老哥教我用Python用Python來制作屬于你自己的一款遊戲)3

2.2 移動算法

假如移動之前個數字位置如左圖所示,那麼當按下左箭頭時,會變成如右圖所示:

怎麼用python做好玩的遊戲(老哥教我用Python用Python來制作屬于你自己的一款遊戲)4

左移

可以看到 (1, 2)(1, 3) 兩個位置上的數字互換了,即 0 和 8 互換;如果右圖所示再次按下左箭頭,那麼所有數字都不會改變,因為 數字 0 右邊沒有數了。

總結一下:如果 數字 0 所在位置為 (row, column),并且 column≠3 那麼按下左箭頭之後,(row, column) 和 (row, column 1) 位置上的數組互換,同理可得:

  • 如果 數字 0 所在位置為 (row, column),并且 column≠0 那麼按下右箭頭之後,(row, column) 和 (row, column-1) 位置上的數組互換;
  • 如果 數字 0 所在位置為 (row, column),并且 row≠3 那麼按下上箭頭之後,(row, column) 和 (row 1, column) 位置上的數組互換;
  • 如果 數字 0 所在位置為 (row, column),并且 row≠0 那麼按下下箭頭之後,(row, column) 和 (row-1, column) 位置上的數組互換;

将移動算法封裝成一個函數如下:

怎麼用python做好玩的遊戲(老哥教我用Python用Python來制作屬于你自己的一款遊戲)5

2.3 是否勝利檢測算法

檢測是否勝利其實很簡單:前15個位置分别對應,最後一個為0即為勝利 ,不過為了避免不必要的計算,我們先檢測最後一個是否為 0 ,如果不為0 前面的就不用比較了。具體代碼實現如下:

怎麼用python做好玩的遊戲(老哥教我用Python用Python來制作屬于你自己的一款遊戲)6

3、實現

下面講解所有功能模塊的實現。

3.1 框架搭建

創建 QWidget 作為整個遊戲的載體:

怎麼用python做好玩的遊戲(老哥教我用Python用Python來制作屬于你自己的一款遊戲)7

運行結果如下圖所示:

怎麼用python做好玩的遊戲(老哥教我用Python用Python來制作屬于你自己的一款遊戲)8

框架運行結果

3.2 數字方塊實現

前面已經提到,用一個二維數組來存放 0~16 個數字,最終我們要轉換成一個數字方塊,單獨創建一個類:

怎麼用python做好玩的遊戲(老哥教我用Python用Python來制作屬于你自己的一款遊戲)9

該類繼承自 QLablel ,初始化需要傳入一個參數 number ,number就是數字方塊上顯示的數字。

3.3 将數字轉換成方塊添加到布局

布局采用 QGridLayout 創建一個 4X4 的 self.gltMain,将16個 Block 添加到 self.gltMain:

怎麼用python做好玩的遊戲(老哥教我用Python用Python來制作屬于你自己的一款遊戲)10

3.4 初始化布局

初始化布局包括随機數據的産生與将數字轉換成方塊添加到布局

怎麼用python做好玩的遊戲(老哥教我用Python用Python來制作屬于你自己的一款遊戲)11

3.5 按鍵檢測

QWidget 有一個 keyPressEvent 事件句柄,我們隻需要重新實現該方法即可:

怎麼用python做好玩的遊戲(老哥教我用Python用Python來制作屬于你自己的一款遊戲)12

按鍵檢測到按鍵按下之後判斷該鍵值是否為 “↑↓←→”或“WSAD”,并作出相應的移動(move),移動之後刷新布局(updatePannel),最後檢測是否完成挑戰(checkResult),如果完成挑戰,彈出提示框。如果點擊了 OK 按鈕,遊戲重新開始(onInit)。

3.6 試玩測試

至此,所有功能模塊介紹完畢,不要着急看完整代碼,我們先運行一下程序看是否還有 Bugs。

玩了幾局之後發現,并不是所有的局都能都還原,如下面這種情況:

怎麼用python做好玩的遊戲(老哥教我用Python用Python來制作屬于你自己的一款遊戲)13

無法還原

如圖所示,1415 方塊位置反了,無論如何也還原不聊了,這種情況是随機出現的。到底是怎麼回事呢?經過一番上網搜索,确實如果隻有兩個數字的位置反了,無論如何也還原不了的。那這是由什麼造成的呢?還記得我們的二維數組是怎麼産生的吧,随機的,也就是說可能會随機到無法還原的情況。

如何避免這種情況呢?初始化數組時,所有的位置都是正确的數字,然後使用 move 進行移動打亂。

3.7 改進完善

由于前面已經将各個功能模塊單獨寫成了方法,因此我們隻需修改 onInit 方法即可。

怎麼用python做好玩的遊戲(老哥教我用Python用Python來制作屬于你自己的一款遊戲)14

先生成一個順序數組,裡面保存着[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0],然後轉為二維數組 blocks,再後随即移動500次,最後添加到布局。

4、完整代碼

怎麼用python做好玩的遊戲(老哥教我用Python用Python來制作屬于你自己的一款遊戲)15

怎麼用python做好玩的遊戲(老哥教我用Python用Python來制作屬于你自己的一款遊戲)16

怎麼用python做好玩的遊戲(老哥教我用Python用Python來制作屬于你自己的一款遊戲)17

怎麼用python做好玩的遊戲(老哥教我用Python用Python來制作屬于你自己的一款遊戲)18

怎麼用python做好玩的遊戲(老哥教我用Python用Python來制作屬于你自己的一款遊戲)19

5、總結

在做的過程中遇到最大的坑就是随機數組導緻無法還原。另外在做這個遊戲的時候我已經找到還原規律了,這樣在測試的時候可以做完完整測試,否則根本無法測試都挑戰成功那一步。

給大家分享個遊戲

太空飛機

怎麼用python做好玩的遊戲(老哥教我用Python用Python來制作屬于你自己的一款遊戲)20

關注私信我回複【學習資料】,發你Python零基礎視頻教程 太空飛機源代碼

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关遊戲资讯推荐

热门遊戲资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved