簡體   English   中英

如何將if語句存儲為字符串? C#

[英]How do I store if statements as strings? C#

我使用OpenTK(OpenGL)在C#中創建一個游戲引擎。 我的游戲的更新系統不在事件隊列中工作,事件發生時將其添加到事件隊列中。 每個事件都有一組觸發器和一組動作。

假設玩家走路。 “ PlayerWalked”觸發器運行。 游戲列表中具有“ PlayerWalked”觸發器的每個事件都將添加到隊列中。

現在,游戲的更新功能每秒被調用幾次。 每次調用它時,都會運行隊列中最舊的事件。 運行事件動作列表中的每個動作。

現在,我想添加一個條件系統。 在觸發器“ PlayerWalked”上,不僅將其添加到列表中,還檢查觸發器,檢查條件,然后將其也添加到隊列中。

例:

事件名稱:event1
觸發器:“ ChestOpened”,“ PlayerDigs”
條件:玩家位置為1、1(2D游戲)。
行動:給玩家10金幣。

現在,我可以進行觸發器檢查和操作了。 現在,我需要添加條件。 這是我的難題:

在存儲地圖時,我需要一種將條件存儲在事件的條件文件中的方法。 我以為文件將包含以下內容:'playerPosition |(1,1)'但這很廣泛,變量'playerPosition'可能不存在,因此我不得不將其解析得很奇怪。

問題: 如何將比較條件(條件,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;
    }
}

將比較存儲在字符串中,然后將它們轉換為代碼...。這稱為編寫編譯器! 計算機科學對此表示支持!

所以您問,對於我的領域特定語言,最簡單的編譯器是什么?

您的迷你語言非常小:它只有謂詞(可能是嵌套謂詞)

您可以查看C#編譯器解析器/生成器。 您前面有一些閱讀樂趣。

或者,您可以創建一個包含這些嵌套謂詞的類結構,然后將它們序列化為json,並存儲json。

所以你可能有

var condition = new Condition { 
    Object = Objects.Player, 
    Comparison = Comparisons.Equals, 
    Value = new Value { type = Position, innerValue = "2,1" }
};

然后將其序列化為可以保存的字符串...

var json = new JavaScriptSerializer().Serialize(obj);

然后,您可以稍后通過將json反序列化回一個對象來再次加載它。

在比較對象上調用了一些“評估”方法,該方法遍歷對象層次結構,為您計算答案。

過去,我是通過引用腳本語言來完成這種事情的,Lua在游戲中的這種活動中很流行,但是Python也具有良好的互操作性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM