我使用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 ... –