рдЬрд┐рдВрдЬрд░рдмреНрд░реЗрдб рдореИрди рд╡рд┐рдЬрд┐рдЯрд┐рдВрдЧ рд╡рд┐рдВрдбреЛрдЬ 8: рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдбрд╛рдпрд░реА (рднрд╛рдЧ 1)

рдХреБрдЫ рд╣рдлрд╝реНрддреЗ рдкрд╣рд▓реЗ рд╣рдордиреЗ рдЕрдкрдиреА рдкрд╣рд▓реА рд╕рд╛рдордЧреНрд░реА, "рдж рдЬрд┐рдВрдЬрд░рдмреНрд░реЗрдб рдореИрди рд╡рд┐рдЬрд┐рдЯрд┐рдВрдЧ рд╡рд┐рдВрдбреЛрдЬ 8: рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдбрд╛рдпрд░реАрдЬрд╝ (рдкрд░рд┐рдЪрдп) " рдкреНрд░рдХрд╛рд╢рд┐рдд рдХреА рдереА , рдЖрдЬ рд╣рдо рдЗрд╕ рд╡рд┐рд╖рдп рдХреЛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВ рдФрд░ рдЕрдкрдиреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рдЕрдореВрд░реНрдд рд╕реНрддрд░ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрддрд╛рддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рдЖрдЬ рдЗрд╕реЗ рдЖрдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ред

рдкрд╣рд▓реЗ рд╕реНрдХреЗрдЪ


рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рд╣рдореЗрдВ рдХрд▓рд╛рдХрд╛рд░ рд╕реЗ рдкрд╣рд▓реА рддрд╕реНрд╡реАрд░реЗрдВ рдорд┐рд▓реАрдВред рдЗрд╕ рд╕рдордп рдРрд╕реА рдЕрд╡рдзрд╛рд░рдгрд╛ рд╣реИ:



рдмреЗрд╕рдЧреЗрдо рд╕рд╛рд░ рд╡рд░реНрдЧ


рдпрд╣ рд╡рд░реНрдЧ рдЦреЗрд▓ рдХреЗ рдореБрдЦреНрдп рдЬреАрд╡рди рдЪрдХреНрд░ рдХреЗ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░рд┐рдпреЛрдВ рдХреЛ рд▓реЗрддрд╛ рд╣реИ, рдФрд░ рдЦреЗрд▓ рдХреЗ рддрд░реНрдХ рдФрд░ рднреМрддрд┐рдХреА рдХреЛ рднреА рд╢рд╛рдорд┐рд▓ рдХрд░рддрд╛ рд╣реИред

рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕рд╛рд░ рд╡рд░реНрдЧ BaseGame: DisposeSupport
/// <summary> /// Describes an abstract game /// </summary> public abstract class BaseGame:DisposeSupport { /// <summary> /// The game Logic /// </summary> protected abstract ILogic Logic { get; } /// <summary> /// The game Physics /// </summary> protected abstract IPhysics Physics { get; } /// <summary> /// Initialize the game /// </summary> public void Initialize(){} /// <summary> /// Start the new game /// </summary> public void StartNewGame(){} /// <summary> /// Activate the game /// </summary> public void ActivateGame(){} /// <summary> /// Pause on game /// </summary> public void Pause(){} /// <summary> /// Restart the game /// </summary> public void Restart(){} /// <summary> /// Resume the game /// </summary> public void Resume(){} /// <summary> /// Exit the game /// </summary> public void Exit(){} public event Action Win; public event Action GameOver; public event Action Lose; } 


рдЬреАрд╡рди рдЪрдХреНрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:


рджреГрд╢реНрдп


рд╢реАрд░реНрд╖ рд╕реНрддрд░ рдкрд░ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдЦреЗрд▓ рд╕реЗ рдЬреБрдбрд╝рд╛ рдирд╣реАрдВ рд╣реИред рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд░ рдХреЗрд╡рд▓ рдЦреЗрд▓ рдХреЗ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рд╣реЛрддрд╛ рд╣реИред
рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЗ рд▓рд┐рдП, IRenderer рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ, рдЬреЛ рддреАрди рддрд░реАрдХреЛрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ:

рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ IRenderer <TInit, TRender>: IDisposable
 /// <summary> /// Describes a renderer class /// </summary> /// <typeparam name="TInit">Type that used for method Initialize parameter</typeparam> /// <typeparam name="TRender">Type that used for methods Render and ScreenSizeChanged parameters</typeparam> public interface IRenderer<TInit, TRender>: IDisposable { /// <summary> /// On initialize a device /// </summary> /// <param name="initParameter">Initialize parameter</param> void Initialize(TInit initParameter); /// <summary> /// On render per frame /// </summary> /// <param name="renderParameter">Render parameter</param> void Render(TRender renderParameter); /// <summary> /// On screen size changed /// </summary> /// <param name="renderParameter">Render parameter</param> void ScreenSizeChanged(TRender renderParameter); } 


рд░реЗрдВрдбрд░ рдЪрдХреНрд░:

рдЗрд░реЗрдиреНрдбрд░рд░ рдХреЛ рдЖрдЗрдбреАрд╕реЛрдкрд╛рдпрд░реА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рднреА рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИ, рдЬреЛ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдирд┐рд░реНрдзрд╛рд░рдХ рд╡рд┐рдирд╛рд╢ рдХреЗ рд▓рд┐рдП рдХрдИ рддрд░реАрдХреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ, рдбреНрд░рд╛рдЗрдВрдЧ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ SharpDX рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ рдШрдЯрдХ рд╡рд░реНрдЧ рд╕реЗ рднреА рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИ, рдЬрд╣рд╛рдБ рдЖрдк рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдирд╖реНрдЯ рдХрд░рдиреЗ рдХреА рд╕реВрдЪреА рдореЗрдВ рд░рдЦрдиреЗ рд╕реЗ рдЬреБрдбрд╝реЗ рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рд╡рд┐рдирд╛рд╢ рд╕реЗ рдкрд╣рд▓реЗ рдЧреБрдЬрд░рддрд╛ рд╣реИ, рдФрд░ рд╣рдореЗрдВ рдЖрдИрдбреАрдЖрдИрдПрд╕рдУрдкреА рдХреЗ рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдорд┐рд▓рддреЗ рд╣реИрдВред

рддрд░реНрдХ


рд╣рдорд╛рд░реЗ рдЦреЗрд▓ рдореЗрдВ, ILogic рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ

рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ ILogic
 /// <summary> /// Describes a game logic /// </summary> public interface ILogic { /// <summary> /// Start game /// </summary> void StartGame(); /// <summary> /// Stop game /// </summary> void StopGame(); /// <summary> /// Pause game /// </summary> void PauseGame(); /// <summary> /// Resume game /// </summary> void ResumeGame(); /// <summary> /// Fire game event /// </summary> void FireEvent(IGameEvent @event); /// <summary> /// Win game event /// </summary> event Action Win; /// <summary> /// Lose game event /// </summary> event Action Lose; /// <summary> /// Delete game object event /// </summary> event Action<string> ObjectDeleted; /// <summary> ///Character moved event /// </summary> event Action<string,float,float,float> CharacterMoved; /// <summary> ///Character moved by path event /// </summary> event Action<string, IList<PathData>> CharacterMovedPath; /// <summary> ///Character patrol by path event /// </summary> event Action<string, IList<PathData>> CharacterPatrolPath; /// <summary> ///Character patrol event /// </summary> event Action<string, float, float, float> CharacterPatrol; /// <summary> ///Character moved to object event /// </summary> event Action<string, string, float> CharacterMovedToObject; /// <summary> ///Character in chase for object event /// </summary> event Action<string, string, float> CharacterChase; /// <summary> /// watch if the one object look at another; /// </summary> event Action<string, string> WatchedLook; /// <summary> /// watch the distance between two objects; /// </summary> event Action<string, string, float> WatchedDistance; /// <summary> /// character stop; /// </summary> event Action<string> ActionStopped; /// <summary> ///The rules factory /// </summary> IRuleFactory RuleFactory { get; } } 

рдЬрдм рдХреЛрдИ рдЧреЗрдо рдИрд╡реЗрдВрдЯ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рддрд░реНрдХ рдирд┐рдпрдореЛрдВ рдХреЗ рд╕реЗрдЯ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИ, рд╢рд░реНрддреЛрдВ рдФрд░ рдЙрдирдХреА рдкреВрд░реНрддрд┐ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рд╡рд┐рди, рд▓реВрдЬрд╝, рдпрд╛ рдЧреЗрдо рдУрд╡рд░ рдХреА рдШрдЯрдирд╛рдУрдВ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЧреЗрдо рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред

рдЦреЗрд▓ рддрд░реНрдХ рдХрд╛рд░реНрдп рдЪрдХреНрд░:


рднреМрддрд┐рдХ рд╡рд┐рдЬреНрдЮрд╛рди



рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ IPhysics
 public interface IPhysics { /// <summary> /// add object to simulation /// </summary> /// <param name="obj">object</param> void AddObject(IObject obj); /// <summary> /// remove object from simulation /// </summary> /// <param name="obj">object</param> void RemoveObject(IObject obj); /// <summary> /// simulate world on specified time after start /// </summary> /// <param name="time">seconds</param> void Simulate(float time); /// <summary> /// signal that initialization starts /// </summary> void BeginInitialization(); /// <summary> /// signal that initialization included adding of objects is finished /// </summary> void EndInitialization(); /// <summary> /// getting movement observer for observing different events related to movement of objects /// </summary> /// <returns>moevement observer</returns> IMovementObserver GetMovementObserver(); /// <summary> /// get object factory /// </summary> /// <returns>getting object factory</returns> IObjectFactory GetObjectFactory(); } 


рднреМрддрд┐рдХреА рдХреЗ рд▓рд┐рдП рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рднреМрддрд┐рдХ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ, рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рддрд░реАрдХреЗ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ,
рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдордп рдХреЗ рд▓рд┐рдП рджреБрдирд┐рдпрд╛ рдХрд╛ рдЕрдиреБрдХрд░рдг, рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдПрдХ рдХрд╛рд░рдЦрд╛рдирд╛ рдФрд░ рдПрдХ рдШрдЯрдирд╛ рд╢реНрд░реЛрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛
рд╡рд╕реНрддреБрдУрдВ рдХреА рдЖрд╡рд╛рдЬрд╛рд╣реАред рднреМрддрд┐рдХ рд╡рд╕реНрддреБ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдиреАрдЪреЗ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ IObject
 public interface IObject { /// <summary> /// getting transformation matrix of object /// </summary> /// <returns>matrix</returns> Matrix GetTransform(); float X { get; set; } float Y { get; set; } float Z { get; set; } } 


рдЗрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рд╕реЗрдЯ рдФрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рд╛рде рд╣реА рд╕рд╛рде
рджреБрдирд┐рдпрд╛ рдХреЗ рдЕрдиреБрдХрд░рдг рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдкрд░рд┐рд╡рд░реНрддрди рдореИрдЯреНрд░рд┐рдХреНрд╕ред

рдирд┐рд╖реНрдХрд░реНрд╖:


рд╣рдо рдпрд╣ рдХрд╣рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдбрд╛рдпрд░реЗрдХреНрдЯрдПрдХреНрд╕ рдХреЗ рд╕рд╛рде рдкрд░рд┐рдЪрд┐рдд рдФрд░ рдЦреЗрд▓реЛрдВ рдХрд╛ рд╡рд┐рдХрд╛рд╕ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд рд╣реА рд░реЛрдЪрдХ рдФрд░ рдирдпрд╛ рдХреНрд╖реЗрддреНрд░ рд╣реИред

Windows рд╕реНрдЯреЛрд░ рдХреЗ рд▓рд┐рдП C # 5.0 рдФрд░ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:

Source: https://habr.com/ru/post/In169981/


All Articles