我使用OpenTK(OpenGL)在C#中創建了一個遊戲引擎。我的遊戲的更新系統在事件隊列中運行,當事件發生時,它被添加到事件隊列中。每個事件都有一組觸發器和一組操作。如何將if語句存儲爲字符串? C#
讓我們說玩家走。 'PlayerWalked'觸發器運行。遊戲中每一個在其列表中帶有「PlayerWalked」觸發器的事件都被添加到隊列中。
現在,遊戲的更新功能每秒被調用幾次。每次調用時,都會運行隊列中最舊的事件。事件操作列表中的每個操作都會運行。
現在,我想添加一個條件系統。在觸發器'PlayerWalked'上,不是將它添加到列表中,而是檢查觸發器,檢查條件,然後將其添加到隊列中。
實施例:
事件 名稱:事件1
觸發器: 'ChestOpened', 'PlayerDigs'
條件:球員位置爲1,1(2D遊戲)。
行動:給玩家10金幣。
現在,我有觸發器檢查和操作工作。現在我需要的是添加條件。這是我的困境:
當我存儲地圖時,我需要一種方法將條件存儲在事件的條件文件中。我以爲這個文件會包含這個內容: 'playerPosition |(1,1)' 但是,這是非常廣泛的,變量'playerPosition'可能不存在,我將不得不解析它怪異。
問題:如何在映射文件(字符串)中存儲conparisions(條件,if語句)?
更多信息: 地圖是存儲在遊戲可執行文件旁邊的地圖存儲文件夾中的目錄。在地圖文件夾中,有一個事件文件夾。在事件文件夾中,每個事件都有一個文件夾。在每個事件文件夾中都有用於觸發器的文件,用於條件的文件和用於操作的文件。觸發器和動作現在正在工作,但條件是我想要添加的。
文件結構:
Maps (Directory)
Map1 (Directory)
Events (Directory)
Event1 (Directory)
Triggers (File)
Conditions (File)
Actions (File)
Event2 (Directory)
Triggers (File)
Conditions (File)
Actions (File)
Event3 (Directory)
Triggers (File)
Conditions (File)
Actions (File)
我使用OpenTK作爲包裝到OpenGL,但沒有任何聲音引擎呢。這是一款2D RPG遊戲。
編輯:有人引起了我的注意,它看起來像我問如何寫在C#文件。我知道。
什麼我問的是:如何將
if (playerPosition == new Point(0, 0)) { }
翻譯成我會在一個變量分析和存儲的文本文件?我如何將If語句存儲在變量中,以及如何將該變量存儲在文件中?
解決:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web.Script.Serialization;
using System.Windows.Forms;
namespace Entropy
{
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
a b = new a { s = ":D" };
string json = new JavaScriptSerializer().Serialize(b);
Dictionary<string, object> c = (Dictionary<string, object>)new JavaScriptSerializer().DeserializeObject(json);
MessageBox.Show(c["s"].ToString());
//Out: ':D'
}
}
public class a
{
public string s = string.Empty;
}
}
您有哪些'if'邏輯裏面的它創造一些像'公共類PlayerAtPositionCondition'並創建一個方法'公佈爾IsSatisfied()'什麼?因此,不要在某處存儲'if'語句,只需將類名稱存儲爲通過反射實例化,或者稍後可以使用一些代碼使用'FactoryMethod'模式實例化適當的類?你會爲每個條件創建一個類,並且可能傳遞參數給這個類... – Alisson
好吧,會有很多比較。 PlayerLocation,PlayerHasInventoryItem,GameIsOver,GameHasStarted等等。可能有數百個。現在,我可以爲所有這些使用枚舉。 Mabey ... –