跳轉到內容

建立你自己的模擬遊戲/分解

來自 Wikibooks,開放世界中的開放書籍

如果你以前從未製作過遊戲,或者沒有多少程式設計經驗,最好的方法之一就是將事物分解成最基本的組成部分。 我們將從一些非常簡單的程式設計開始製作這款遊戲,然後逐步新增功能,直到遊戲完成。 它現在看起來並不多,但本教程結束後,你將能夠下載一個完全可用的版本,該版本包含一個安裝檔案,你可以根據 GNU 公共許可證隨意修改和編輯。

我要提到的最後一件事是,我將在本教程的所有課程中使用的教學風格。 我非常贊成讓人們在得到答案之前先自己嘗試一下。 假設你被要求參加歷史考試。 如果我直接給你一張答案表,上面所有正確的選項都填好了,你將從考試中一無所獲。 這是我堅持的一個理論。在本教程的每一課中,你都會發現我製作的每個檔案的兩個版本。 一個檔案將沒有程式碼。 這樣,你可以嘗試自己從頭開始編寫這個遊戲。 但是,如果這太令人生畏,別擔心。 另一個檔案版本將包含所有工作程式碼。

即使你不是程式設計師,我也鼓勵你嘗試對每一課進行程式設計。 我將介紹完成程式設計所需的一些基本概念,然後總結我迄今為止所做工作的推理。 課程概念

關於 PHP

[edit | edit source]

PHP 是一種伺服器端程式語言。 這意味著你在任何 PHP 檔案上編寫的任何程式碼都不會對訪問包含 PHP 程式碼的任何檔案的人可見。 這樣做的優勢是,你無需擔心有人竊取你編寫的任何程式碼。 當有人檢視 PHP 頁面時,他們看到的只是你用 PHP 生成的 HTML 或文字,或者你自己在頁面上鍵入的文字。

PHP 檔案具有 .php 副檔名。 我接觸過許多人認為這意味著 PHP 檔案不能顯示 HTML 或 Javascript。 這是錯誤的。 .php 副檔名是伺服器知道需要在請求頁面的人看到頁面之前評估檔案上的任何 PHP 程式碼的方式。

PHP 最大的缺點是它是一種伺服器端程式語言。 這意味著每當你想要更改使用者在頁面上看到的內容時,他們要麼必須重新整理頁面,要麼導航到新頁面。 在你看到更改立即應用的網站(例如 Google 郵件、WordPress)中,它們使用一種稱為 AJAX 的技術。 AJAX 是伺服器和使用者瀏覽器之間的一種非同步中繼。 這意味著他們無需重新整理頁面即可檢視更改。 如果你對這類東西感興趣,那麼本教程仍然適合你。 PHP 通常與 AJAX 結合使用以建立更動態的網頁。 但是,在本教程中,我不會介紹任何 AJAX,因此完成此遊戲後,你需要找到一些 AJAX 教程。

輸出到螢幕

[edit | edit source]

所有 PHP 程式碼都由一個開始和結束 PHP 標籤分隔,如下所示

<?php
echo “Hello World!!”;
print “Hey there!”;
echo “<b>WOW!!</b>”;
print “This is sooooo neat…”;
?>

PHP 的開始和結束標籤類似於匹配的 HTML 標籤。 如果你沒有任何 HTML 經驗,我強烈建議你在繼續學習本課程之前,先學習 lissaexplains.com 上的一些教程。

如果你沒有正確的開始和結束標籤,這將是人們可以在螢幕上看到你的 PHP 程式碼的原因之一。 沒有 PHP 標籤,伺服器就無法知道你鍵入的內容需要以 PHP 方式進行評估。

在上面的程式碼中,你還會看到 print 和 echo 語句。 使用哪一個實際上並不重要,但這是你將內容輸出到螢幕的方式。 注意第三個 print 語句中的引號中包含 HTML。 在 PHP 中使用 HTML 沒有任何問題,事實上,這是 PHP 的一大優點。

需要注意的幾個語法事項

1. 你始終需要匹配的開始和結束 <?php ?> 標籤。

2. PHP 語句始終以分號  ; 結尾

3. 當你使用 echo 將內容輸出到螢幕時,它應該位於單引號或雙引號內

4. 如果你需要在 print 語句中使用引號,則需要使用反斜槓對其進行轉義,如下所示

<?php
echo “And he said \”Hi Mom, how are you today?\”";
?>

反斜槓告訴 PHP 將引號評估為文字,而不是字串的結束。

5. 除非你檢視頁面,否則你不會在 PHP 中看到錯誤。 這是因為 PHP 僅在執行時進行評估。 有時這會讓人非常沮喪,你可能以前見過錯誤程式碼。 如果你收到錯誤訊息,請閱讀它,因為它通常會告訴你程式碼中出錯的地方。

常見的 PHP 錯誤 & 解決方法

[edit | edit source]

解析錯誤:語法錯誤,在 [檔案位置] 的第 [#] 行意外出現 T_STRING

這意味著你忘記了某個地方的 ” 或 ‘。 字串的開頭和結尾應該始終存在。 如果你有一對匹配的引號,請確保沒有多餘的引號。 如果你在字串中使用引號,則需要使用反斜槓對其進行轉義,如下所示: \” 或 \’

解析錯誤:語法錯誤,在 [檔案位置] 的第 [#] 行意外出現 ‘}’

這意味著你有一些多行語句,並且你忘記了大括號,或者大括號太多。 大括號總是成對出現。 有時這意味著你錯過了前一個語句末尾的分號。

解析錯誤:語法錯誤,在 [檔案位置] 的第 [#] 行意外出現 ‘”’

這意味著你可能忘記了雙引號前面或後面的括號。 有時也可能意味著你忘記了轉義雙引號。

解析錯誤:語法錯誤,在 [檔案位置] 的第 [#] 行意外出現 “‘”

這意味著你可能忘記了單引號前面或後面的括號。 有時也可能意味著你忘記了轉義單引號。

解析錯誤:語法錯誤,在 [檔案位置] 的第 [#] 行意外出現 ‘;’

這意味著你缺少語句末尾分號之前的某個內容。 通常是關閉的括號。 但是,也可能意味著你在 PHP 不希望出現分號的位置使用了分號。 這通常發生在迴圈中。

解析錯誤:語法錯誤,在 [檔案位置] 的第 [#] 行意外出現 T_EXIT

這意味著你在 exit; 呼叫之前忘記了分號

解析錯誤:語法錯誤,在 [檔案位置] 的第 [#] 行意外出現 $end

這通常意味著你忘記了分號,或者你的函式沒有按預期返回值。

變數

[edit | edit source]

在 PHP 中,變數由 $ 美元符號定義。 這意味著任何帶有美元符號的單詞通常都會被評估為某種其他內容。 理解變數的最簡單方法是將其視為一個罐子。 你可以在罐子裡放東西,也可以從罐子裡拿東西。 你可以在罐子上貼上標籤,但隨後又決定要更改標籤。 變數的工作方式也是如此。

<?php

//this is a comment, comments are for you
//they aren’t processed as code
//get into the habit of leaving comments for yourself so if you come back later
//you can remember what you did or what you were trying to do

$myvariable = “Hello”;
$mysecond = ” World!”;

echo $myvariable;
echo $mysecond;

print “<br>”;

echo “$myvariable $mysecond<br>”;

$myvariable = 2;

echo $myvariable;
?>

在這個示例中,我有兩個變數。 你可以使用等號為它們賦值。 PHP 中的變數是動態的。 這意味著你可以將它們分配給一種型別(字串),然後重新分配[檢查拼寫]給另一種型別(整數),而無需進行任何轉換。 如果這讓你感到困惑,別擔心。 你真正需要知道的是分配變數的語法。

If-Else 語句

[edit | edit source]

遊戲都是關於決策的,這也是程式語言的優勢。 為了使遊戲中的任何內容都能正常工作,我們必須將其設定成按照我在第一課中簡要概述的規則和邏輯進行操作。 為此,我們需要根據玩遊戲的使用者的選擇做出不同的響應。

<?php

if ($_POST['button']) //someone clicked a button
{

echo “You pressed a button!”;
}
else
{
echo “You haven’t pressed a button yet. Go ahead, try it!”;
}

?>
<form action=”#” method=”post”>
<input type=”submit” name=”button” value=”Press Me!”>
</form>

在這個示例中,你看到一個 .php 檔案,它包含一段 PHP 程式碼,然後在下面包含一些常規 HTML。 需要注意的是 if-else 部分。 在這裡,我們根據使用者是否點選了按鈕向其顯示不同的訊息。 如果按下了按鈕,則 if 部分的大括號 { } 之間的程式碼將執行。 否則,else 大括號之間的程式碼將執行。 我相信你已經看到了 PHP 在此示例中的強大之處。 如果你需要更多有關 if-else 語句的幫助,以及 if-else 語句的更多示例,請閱讀我的教程: [教程連結]。 這將更深入地介紹一些 PHP 程式設計概念,並提供更多示例。

表單基礎

[編輯 | 編輯原始碼]

表單是獲取使用者在伺服器和 PHP 之間來回操作資訊的一種方式。所有表單都必須具有開始和結束 <form></form> 標籤。為了將表單中的任何資訊提交到伺服器,您必須有一個提交按鈕。如果沒有提交按鈕,您將無法告訴頁面使用者試圖傳送有關其操作的資料。您可以在上面的示例中看到一個小的表單。它同時具有開始和結束表單標籤,以及一個按鈕。如果這看起來不熟悉,那麼您應該回到 lissaexplains.com 並在您的 HTML 技能方面進行一些彌補!

$_GET 和 $_POST 變數

[編輯 | 編輯原始碼]

為了從表單中獲取資料,PHP 為我們儲存了兩個特殊的變數。這些變數根據表單中使用的 METHOD 型別獲取資料。如果您檢視上面的示例,我們會使用 POST 方法。這意味著我們表單的所有名稱和值都將傳送到伺服器並存儲在 $_POST 變數中。這樣,我們就可以從這些變數中提取資訊,以檢視使用者是否點選了某個按鈕或連結。在上面的示例中,我們正在檢查是否有人點選了我們命名的名為 button 的提交按鈕(為通用名稱歡呼!)。如果我們將提交按鈕命名為 BOB 並且沒有更改 if 語句以檢查 $_POST['BOB'],那麼我們永遠不會看到告訴我們我們按下了按鈕的字樣。就 PHP 而言,我們不再有一個名為 button 的提交按鈕,因此它永遠不會被按下。

就是這樣。我簡要概述了(如果您覺得不夠簡要——或者太簡要了,我表示抱歉!)教程檔案第一部分中的所有主要概念,您可以從下方下載這些檔案。再說一次,如果您樂於挑戰,請嘗試自己程式設計這個檔案,方法是開啟 character2.php 檔案。在頁面頂部,它將概述我在本課程中針對這個特定檔案想要完成的所有事情。如果您只是想檢視一些工作程式碼,請下載 character.php 並直接進入下一課。

遊戲檔案(點選檢視)

[編輯 | 編輯原始碼]

character.php

character.php(無原始碼)

您需要從這些檔案之一中複製/貼上原始碼併為其新增 .php 副檔名,才能使教程的最後一部分有意義。所有這些檔案都可以以 .txt 檔案的形式檢視,因此您可以看到它們內部的 PHP 程式碼。如果它們是 .php 檔案,那麼您將永遠無法看到 .php 程式碼。您還記得為什麼嗎?

課程推理

[編輯 | 編輯原始碼]

我們要製作的遊戲背後的很多邏輯都與角色在遊戲世界中的移動有關。請記住,成員和角色之間存在區別。成員是最終登入並玩這個遊戲的人,而角色是成員用來在遊戲中導航的東西。每個成員可以擁有多個角色。

Character.php 是從一個角色的角度出發的。每個角色都將面臨可以移動的方向選擇——左、右、前或後。每次角色移動時,我們都需要評估移動並根據他們移動到的新位置採取一些行動。

雖然此檔案只檢查一個方向並將“寶藏”放置在一個特定位置,但這朝著正確的方向邁進了一步。透過此檔案,我們知道選擇了哪個方向,我們可以將該方向與他們移動到的新位置進行比較,並且可以列印螢幕上的訊息,指示角色根據是否找到寶藏而獲勝或失敗。

準備好閱讀下一章了嗎?

華夏公益教科書