最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

pvzclass是如何實現(xiàn)的?pvzclass源代碼初步分析(1) 概覽

2021-06-11 18:48 作者:__W1thoutD0ubt  | 我要投稿

0. 寫在前面

為什么我要寫這篇分析?

天青開發(fā)的pvzclass(C++),給PVZ二次創(chuàng)作者提供了除匯編以外的另一選擇。

不過,本應(yīng)是降低開發(fā)門檻的工具,卻因自身的門檻,反倒是勸退了一些創(chuàng)作者。

而PVZ自制圈內(nèi)出名的作品中,使用pvzclass的并不很多。

雖然有Z2改版、皓月的PVZ Rogue,以及百花壇的作品等等佳作,但使用匯編的作品依然占據(jù)絕大多數(shù)。

這固然有匯編自身的原因,但是匯編語言相比C++而言有很多勸退性的缺點,比如難以維護、指令復(fù)雜、極難上手等。

而且有OI基礎(chǔ)的人顯然更熟悉C++。他們上手pvzclass的難度更低,實現(xiàn)較復(fù)雜的功能也更輕松。

除此之外,我自己接觸pvzclass時,走了很多彎路。

我撰寫本文,也是希望能把自己對pvzclass的理解和大家分享,讓大家能更快上手pvzclass。

接下來的部分中,筆者將默認讀者已有C++的編程基礎(chǔ)。

如果你要學(xué)習pvzclass,建議結(jié)合天青的教程觀看。

雖然是代碼分析,但也有可能會摻雜一些其他的東西,還請見諒。

1.pvzclass初見

從github上下載下來的應(yīng)該是一個名為"pvzclass-master.zip"的壓縮文件。

將其解包,可以得到一個文件夾(顯然),主要包含以下內(nèi)容:

大概有這些

其中".gitattributes"和".gitignore"不影響pvzclass的使用,我們忽略它們。

"LICENSE"是pvzclass的許可證,打開(用自帶的記事本打開即可)后可以看到pvzclass使用的是MIT許可證。(許可證相關(guān)內(nèi)容請自行百度)

"MemoryAddressList"看似無擴展名,實際上只是一份普通的文本文檔。

該文檔包含PVZ中大部分內(nèi)容的指針和內(nèi)部常量的儲存地址,可以說是對PVZ本體進行二次創(chuàng)作(尤其是使用匯編語言時)的必備文檔。

但本文主要是講pvzclass的,所以我們跳過它。

接下來的"pvzclass.sln"是Visual Studio(以下簡稱"VS")的解決方案文件,沒有安裝VS應(yīng)該是無法打開它來使用pvzclass的。

這也是盡量使用VS(而不是其他軟件)完成pvzclass創(chuàng)作的理由之一。

"Readme.md"我想不用多說,這里跳過。

打開剩下的"pvzclass"文件夾,會看到這些內(nèi)容:

一頁放不下,于是有了這張圖

看上去就很多很雜,對于習慣了單文件編程的人而言會有些目不暇接。我們分別來看。

這些文件中"pvzclass.sln""pvzclass.vcxporj""pvzclass.vcxproj.filters""pvzclass.vcxproj.user"是VS的文件,不要動它們(除非你不用VS)。

尤其是"pvzclass.sln",不要通過打開這個文件來開始應(yīng)用pvzclass!

"README.md"是較舊版本的,不用理它。

"MemoryAddressList"和上一級文件夾中的那一份相比含有額外內(nèi)容,也建議保留(但不一定留在這個文件夾里)。

剩下的頭文件和源代碼文件,以及"Classes""Enums"中的文件,就是pvzclass的核心組件了。

2.pvzclass組件間的關(guān)系

除去主要源代碼文件"pvzclass.cpp",剩下的文件間具有如下的從屬關(guān)系:

“文件夾”指該文件夾下的全部文件

在pvzclass中,除去"pvzclass.cpp",剩余的文件均遵循“頭文件包含頭文件,源代碼文件解釋頭文件”的原則。

這是什么意思呢?

"頭文件包含頭文件"很好理解,即頭文件中包含其他的頭文件。(說了和沒說一樣

以"pvzclass.h"為例,實際上這個文件只有6行:

就這些?這就夠了。

除去第一行的編譯指令,剩下的就是其包括的頭文件。整個"pvzclass.h"只是一個索引。

而其他頭文件中,除去索引類文件,剩余的代碼主要包括三個部分:定義變量,定義函數(shù)與過程,以及實現(xiàn)函數(shù)與過程。

但實際上,變量的賦值、函數(shù)與過程的實現(xiàn)只有很小一部分,這類代碼大部分都在源代碼文件中。此即所謂“源代碼文件解釋頭文件”。

就先講這么多吧。

每個基于pvzclass的作品,必然要在程序的一開始調(diào)用來自"ProcessOpener.h"的方法。

因此,下篇將從"ProcessOpener.h"開始,分析pvzclass代碼的運行規(guī)則。

pvzclass是如何實現(xiàn)的?pvzclass源代碼初步分析(1) 概覽的評論 (共 條)

分享到微博請遵守國家法律
日喀则市| 巩留县| 高碑店市| 张北县| 凤翔县| 怀化市| 托克托县| 灵寿县| 丹巴县| 襄城县| 克什克腾旗| 葵青区| 孙吴县| 湖州市| 密山市| 大方县| 鄂托克前旗| 前郭尔| 弥渡县| 东台市| 普格县| 迁西县| 凤阳县| 年辖:市辖区| 南安市| 防城港市| 阜平县| 涞水县| 资阳市| 商南县| 麻阳| 叶城县| 辽阳县| 巴里| 苍梧县| 三穗县| 榕江县| 庆阳市| 民权县| 阜阳市| 左权县|