主頁 > 軟體設計 > 魔改和上線你的合成大西瓜,超詳細圖文教程!原始碼分析!

魔改和上線你的合成大西瓜,超詳細圖文教程!原始碼分析!

2021-02-01 13:13:02 軟體設計

本文是從 0 到 1 的教程,讓小白也能夠魔改和上線發布屬于你的合成大西瓜!

最近,一款名為『 合成大西瓜 』的游戲突然火了!看來真的是大家吃瓜吃太多了,這個小游戲深抓人心!

圖片

當然,游戲本身非常有趣,玩法簡單,就是俄羅斯方塊、2048、水果忍者的結合,控制水果的下落,相同的兩個水果會合成更大的水果,然后消除,并發出濺射效果,

玩了一會后,看到朋友圈的曬圖,我也安耐不住了,開始思考怎么拿高分,對于程式員來說,最簡單的方式就是直接改造程式,

正好在知乎上偶然刷到了一個相關問題,“ 小游戲《合成大西瓜》源代碼有嗎?”

那就開工吧!

首先去 GitHub 搜索源代碼,發現原始碼已經被曝光的稀巴爛了,然后就下載了一份源代碼到本地,摩拳擦掌,

瀏覽原始碼后,發現只是魔改一些基礎功能的話,不要太簡單!

這是我魔改的自定義加分版,輕輕松松千萬分!可在線玩:https://dadaxigua.liyupi.com

圖片大西瓜魔改版

下面一起來打造自己的魔改合成大西瓜吧!


主要分為如下幾個步驟:

  1. 下載源代碼及本地運行
  2. 動手魔改及原理分析
  3. 發布上線

1. 下載原始碼,本地運行

下載原始碼

首先從 GitHub 上下載源代碼(地址在文末):

圖片下載源代碼

下載代碼后,我們得到這樣的目錄結構:

圖片目錄結構

可以看到整個代碼目錄并不復雜,是基于 cocos2d 游戲引擎開發,我們只需要了解幾個重要檔案:

  1. index.html,整個專案的主頁面
  2. project.js,專案核心代碼,游戲邏輯都在這里
  3. settings.js,專案組態檔
  4. res 目錄,存放圖片和音頻等資源

下面我們先試著在本地運行小游戲,

本地運行

如果直接雙擊 index.html,是無法運行游戲的,也就是很多同學遇到的 “卡在 99%” 問題,因為直接雙擊網頁檔案,訪問協議是 file,而不是 http,會導致一些資源無法請求,缺失檔案,

圖片

因此,我們需要在本地搭建一個 web 服務器,以支持 http 協議訪問,

最簡單的方式就是使用 serve 工具,只需三步,就能使用,已完成的步驟可以直接跳過:

  1. 安裝 Node 和 npm

    Node 是服務器端運行 Js 代碼的引擎;npm 則是依賴包管理工具,可以輕松安裝工具和代碼類別庫,

    進入 Node 中文網 http://nodejs.cn/download/,下載 Node.js,會自動安裝 npm,

    圖片

    安裝成功后,進入命令列 cmd,輸入命令來判斷 npm 是否安裝成功:

    npm -v
    

    輸出版本號,則安裝成功:

    圖片安裝成功

  2. 一行命令安裝 serve 工具:

    npm i -g serve
    
  3. 進入源代碼目錄(我這里是 daxigua),啟動 serve:

    serve
    

    啟動成功后,打開瀏覽器訪問 localhost:5000 即可!

    圖片啟動成功

動手魔改及原理

在魔改前,我們要先認清游戲程序,然后根據自己要修改的內容去找對應的檔案,再做修改,

游戲的程序是:點擊滑鼠 => 水果下落 => 水果碰撞 => 計算分數 => 展示分數

下面列舉幾種簡單的魔改方式,包括改游戲分數、替換游戲圖片、無敵模式、控制水果生成、由大水果合成小水果、讓水果更 Q 彈等,

(部分創意源于 B 站 UP GJhuxiao,給大佬跪了!)

1. 改分數

拿到源代碼后,怎么最快的定位要修改哪里呢?

通過分析游戲程序,發現改分數有兩種實作方式,在計算分數階段修改,或者直接修改最后要展示的分數,

再簡單瀏覽下專案里的各個檔案,發現 project.js 就是影響游戲邏輯的核心檔案,

那么很簡單,直接在 project.js 中搜索代碼,分數對應的英文單詞是 “score” ,添加分數的英文單詞是 “addScore”,搜搜看能不能找到線索,

果然,很快就發現了,分數是由 default.score 變數作為統計值的,有這么一行代碼:

a.default.score += this.fruitNumber + 1

顯然,"+1" 是參與分數計算的,那我只要把基數 “1” 改為自己定義的數字即可~

// extraScore 可以自己改為任意值
a.default.score += this.fruitNumber + extraScore

當然也可以在進入游戲前讓用戶自己輸入!我在 project.js 開頭加入了這樣一段代碼:

// 讓用戶輸入分數加成
let extraScore;
let extraScoreStr = '';

// 輸入有效數字才進入游戲
while (isNaN(extraScore)) {
  extraScoreStr = prompt('請輸入分數加成數字', '1').trim();
  extraScore = parseInt(extraScoreStr);
}

效果如下:

圖片自行輸入加分

當然,這種方式玩游戲更多地是曬個圈,希望別影響大家的樂趣~

通過這種方式,代碼中的所有變數和配置,理論上都可以支持讓用戶來輸入,可以通過新增一個選單頁面來實作,有大佬已經做出來了,效果很好,瑞思拜!

圖片GitHub xiaopengand 哥制作

2. 改圖片

改圖片應該是目前樂趣最大的魔改了吧!我看到了很多有趣的創意,合成 B 站硬幣、合成大胸、合成 xx 等等,

但其實,改圖片的原理非常簡單!

直接在 res 資源目錄下,找到原有的圖片,然后用相同名稱、相同格式、相同尺寸的圖片進行替換即可!

我幫大家整理了圖片替換表哦,幫助提升替換效率,地址如下:

魔改大西瓜可替換的素材:https://docs.qq.com/sheet/DS0d2VVVJYmpvZ0pZ

圖片替換素材表

3. 無敵模式

無敵模式是指水果堆積到頂部、超出線條,游戲依然不會結束,

既然游戲會結束,那么必定有一個判斷游戲結束的邏輯,也就是條件運算式,

那就在代碼中搜索 “end”(結束),果然找到了下面這串判斷邏輯,運算結果為 true 則游戲結束,為 false 則繼續,

圖片

這里 B 站 UP GJhuxiao 哥提供了非常好的思路,增加一個條件判斷,而不是修改原有判斷邏輯,極大地方便大家修改!

4. 控制水果生成

能不能控制下一個水果是什么呢?比如每次都出現大西瓜,

當然,同樣的思路,先找到水果生成的邏輯在代碼的哪個位置,通過搜索 “fruit”、“create” 等關鍵字,定位到了這段代碼:

圖片生成指定水果

這段代碼的功能是,根據當前的水果決定下一個水果,

邏輯看起來很復雜,但其實就是,前 5 個水果的生成是固定的,類似新手教程,總不能剛開始就給大水果吧!

當生成第幾個水果(用 createFruitCount 統計)之后,開始隨機生成水果,

每一個水果都對應一個數字序號(下標),由小到大依次是 0-9,葡萄到西瓜,因此剛開始是兩次 createOneFruit(0),即生成兩次葡萄,后面就是隨機生成葡萄(0)到西紅柿(5),

那如果想要生成第一個水果,怎么辦?

第一個水果是葡萄,對應序號 0,那直接搜索 createOneFruit(0) 不就成了!

直接找到對應代碼,可以把 0 修改成其他數字~

圖片修改第一個水果

5. 大水果合成小水果

大水果合成小水果聽起來很有趣,即可以把游戲 “倒著玩”,兩個西瓜合成椰子,最終合成葡萄即勝利!??

如果把水果膨脹理解為 “升級”,那說白了,就是反轉下水果的升級順序,這里的代碼不是很好定位,主要是先找到水果的合成邏輯,可以通過搜索邊界值(比如 < 9)、或者關鍵詞 LevelUp 的方式找到下面代碼,將 “+1” 變為 “-1” 即可!

每次合并水果,升級改為降級,

圖片修改合成水果邏輯

當然,只改這里肯定是有問題的,B 站的 UP GJhuxiao 也犯了一個小小小小的錯誤,就是沒有處理邊界值,

原本當合成大西瓜后,會有特殊邏輯,比如閃光特效,在順序反轉后,我們要把邊界值由 9 改為 0,同時記得修改一下初始生成的水果,應該是大西瓜而不是小葡萄啦!

6. 讓水果更 Q 彈

現在的水果好像沒什么彈性,怎么讓它們像果味香濃、Q 彈多汁的旺仔 QQ 糖一樣彈性十足呢?

這就涉及到物理引擎層面的修改,由于我本人對 cocos2d 不熟悉,以下依然是 B 站的 UP GJhuxiao 的實作方式,

在生成水果的函式中,可以看到 cc.PhysicsCircleCollider,就是控制水果下落行為的物理引擎,

由于整個游戲是基于 cocos2d 開發,我們可以看看官方 API 檔案中,該物理引擎有哪些引數,很快就找到了彈性系數:

圖片cocos2d API 檔案

然后去修改物理引擎的引數即可,此處設定為 0.9,

圖片修改物理引擎引數

別看數值改動不大,設定 0.9 后,水果就已經能飛起來了,如果你樂意,想要讓它一飛沖天也是可以的!

圖片飛了起來

記得打開無敵模式,否則一下就 GameOver 了!

還可以看看 cocos2d 有什么其他的引數,試著修改一下,也許會發現新的創意和驚喜哦~

發布上線

最多同學關心的問題,在本地修改好代碼后,怎么發布到網上供其他人訪問呢?

這里提供最簡單的兩種方法,使用『 騰訊云靜態網站托管 』或『 Vercel 』,不需要購買域名、也不需要買服務器!

而且自己娛樂、用戶量不大的話,免費空間完全夠用!

1. 騰訊云靜態網站托管

使用騰訊云靜態網站托管,服務器完全在國內,還有 CDN(靜態內容分發)加速,讓你的網站飛起來~

使用步驟也很簡單,

首先進入騰訊云的云開發 (cloudbase) 控制臺,地址:https://cloud.tencent.com/product/wh:

圖片進入控制臺

點擊立即創建,開通一個云環境:

圖片一定要開啟免費資源

點擊立即開通,喝杯 ??,稍等片刻即可創建完成,

創建完成后,進入到提示頁,點擊開始使用,初始化靜態網站服務,

圖片初始化靜態服務

現在我們就可以使用云開發提供的靜態網站服務了,可以通過界面上傳,也可以使用 cloudbase 命令列上傳,推薦后者,效率更高!

首先,安裝 cloudbase 命令列工具:

npm install -g @cloudbase/cli

執行登錄命令:

cloudbase login

圖片登錄

在彈出的頁面確認授權:

圖片授權

進入到已開通的云環境查看頁面,復制剛剛創建的云環境 id:

圖片復制云環境 id

接著,在 index.html 所在目錄中(我的是 daxigua),執行 cloudbasedeploy 命令將目錄中的網站檔案全部發布:

cd daxigua
cloudbase hosting:deploy . -e <EnvID>

這里的 <EnvID> 要替換為剛剛復制的云環境 id!

看到如下結果,就算成功啦,點擊鏈接即可訪問和分享!

圖片發布網頁檔案

2. Vercel

Vercel 是免費網站托管平臺,可以幫我們部署網站,并生成可訪問的簡短網址,還能夠和自己購買的域名進行系結,

圖片

先在命令列通過 npm 命令安裝 Vercel:

npm install -g vercel

安裝完成后,進入 index.html 所在目錄(我的是 daxigua),使用 vercel 命令發布網站:

cd daxigua
vercel --prod

然后會讓你輸入一些選項,比如專案名稱、是否修改配置等,一路回車就可以了~

發布成功,會得到一個網址,打開就可以看到游戲啦,還可以把網址分享給別人!

圖片發布成功

專案地址

https://github.com/liyupi/daxigua

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/255266.html

標籤:其他

上一篇:基于Mac下使用c++11

下一篇:淺談:Spring框架的學習(面試收藏!!!)

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more