OpenTK (OpenGL)을 사용하여 C#으로 게임 엔진을 만듭니다. 내 게임의 업데이트 시스템은 이벤트 대기열에서 작동합니다. 무언가가 발생하면 이벤트 대기열에 추가됩니다. 각 이벤트에는 일련의 트리거와 일련의 작업이 있습니다.if 문을 문자열로 저장하는 방법은 무엇입니까? C#
플레이어가 걷는다고 가정 해 봅시다. 'PlayerWalked'트리거가 실행됩니다. 목록에 'PlayerWalked'트리거가있는 게임의 모든 이벤트가 대기열에 추가됩니다.
이제 게임의 업데이트 기능을 몇 초에 한 번씩 호출합니다. 호출 될 때마다 대기열에서 가장 오래된 이벤트가 실행됩니다. 이벤트의 조치 목록에있는 모든 조치가 실행됩니다.
이제 조건 시스템을 추가하고 싶습니다. 방아쇠 'PlayerWalked'에, 다만 그것을 명부에 추가하기보다는 오히려 방아쇠를 검사하고, 조건을 검사하고, 그 후에 그것을 너무 큐 추가한다.
예 :
이벤트 이름 :합니다 Event1
트리거 : 'ChestOpened', 'PlayerDigs'
조건 : 플레이어 위치는 1 일 (2D 게임)에서이다.
액션 : 플레이어에게 10 골드를줍니다.
이제 트리거 검사 및 동작이 수행됩니다. 이제 조건을 추가하면됩니다. 여기 내 딜레마가 있습니다 :
지도를 저장할 때 이벤트 조건 파일에 조건을 저장하는 방법이 필요합니다. 파일에 다음과 같은 내용이 포함될 것이라고 생각했습니다. 'playerPosition | (1,1)' 하지만 매우 넓기 때문에 'playerPosition'변수가 존재하지 않을 수 있으며 이상하게 해석해야합니다.
질문 : 지도 파일 (문자열)에 conparisions (조건, if 문)을 어떻게 저장합니까?
자세한 정보 : 지도는 게임의 실행 파일 옆에있는지도 저장 폴더에 저장된 디렉토리입니다. 지도 폴더에는 이벤트를위한 폴더가 있습니다. events 폴더에는 각 이벤트에 대한 폴더가 있습니다. 각 이벤트 폴더에는 트리거에 대한 파일, 조건에 대한 파일 및 작업에 대한 파일이 있습니다. 트리거와 동작은 현재 작동하지만 조건은 내가 추가하려고하는 것입니다.
파일 구조 :
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)
나는 OpenGL을에 래퍼로 OpenTK 사용하고 있지만 사운드 엔진은 아직 없다. 그것은 2D RPG 게임입니다.
편집 : 누군가가 내 관심을 끌었습니다. 나는 그것을 안다.
는 내가 뭘 부탁 해요 것은 어떻게
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;
}
}
'public class PlayerAtPositionCondition'과 같은 것을 만들고 그것의 내부에있는'if '논리를 사용하는'public bool IsSatisfied()'메서드를 만들까요? 따라서'if' 문을 어딘가에 저장하는 대신 리플렉션을 통해 인스턴스화하기 위해 클래스 이름을 저장하거나 나중에'FactoryMethod' 패턴을 사용하여 적절한 클래스를 인스턴스화하는 데 사용할 수있는 코드를 저장하면됩니까? 각 조건에 맞는 클래스를 만들고 클래스에 인수를 전달하십시오. – Alisson
글쎄, 많은 비교가있을 것입니다. PlayerLocation, PlayerHasInventoryItem, GameIsOver, GameHasStarted 등이 있습니다. 자, 저는이 모든 것에 enum을 사용할 수 있습니다. Mabey ... –