public Obstacle SpawnObstacle(int value) { if (value == NumberOfFactories) { throw new Exception("Bad index"); } Obstacle obstacle = null; switch (value) { case 0: { _obstacleFactory = new SpikeFactory(); obstacle = _obstacleFactory.GetObstacle(); break; } case 1: { _obstacleFactory = new PitFactory(); obstacle = _obstacleFactory.GetObstacle(); break; } } return(obstacle); }
void Start() { //! Because the Unity Engine does not allow Interfaces to be assigned from Inspector we are using a factory to get the Strategies for our obstacle behaviour //! Therefore, it's not the best solution but it still gives more flexibility and reduce coupling ObstacleBehaviour = ObstacleFactory.GetObstacle(ObstacleType); ObstacleBehaviour.SetDoor(GetChildrenWithTag(DoorTag)); _player = GameObject.FindGameObjectWithTag("Player").GetComponent <PlayerController>(); _enemy = GameObject.FindGameObjectWithTag("Enemy").GetComponent <EnemyController>(); }
private void Update() { if (Time.time > last) { int obstacleId = Random.Range(0, 4); Vector3 spawn; if (obstacleId == 2) { spawn = spawns[2].position; } else { spawn = spawns[Random.Range(0, 5)].position; } IObstacleClick click = null; IObstacleFinish finish = null; switch (obstacleId) { case 0: // 반사 - 원 click = new ClickToDamagePlayer(engine.player); break; case 1: // 방어 - 사각형 click = new ClickToBlock(); break; case 2: // 추가 데미지 - 바 click = new ClickToGainMoreDamage(engine.monster, engine.player, 9); break; case 3: // 맨 밑 - 삼각형 click = new ClickToDestroy(); finish = new FinishToDamagePlayer(engine.player); break; } GameObject o = obstacleFactory.GetObstacle(obstacleId, new MovementFalling(100), click, finish); o.transform.position = spawn; last = Time.time + 1f; } }
// Singleton done // Factory done // Strategy done // Observer done // Adapter done // Decorator done // Facade done // Command done // Template Method - zaidimo temos // State - zaidimo busena // Proxy - // Iterator, Composite, Flyweight // Chain of Responsibility // Null Object - score null // Memento - restart/resume game // Visitor - when enemies die, they visit visitor // Interpreter - custom game mod public Form1() { InitializeComponent(); instance = this; //Singleton and Adapter logger.LogMessage("Adapter Works!"); guiLogger.LogMessage("Gui Logger Works!"); pacman = new Classes.Pacman(false); MoveDown moveDown = new MoveDown(pacman); MoveUp moveUp = new MoveUp(pacman); MoveLeft moveLeft = new MoveLeft(pacman); MoveRight moveRight = new MoveRight(pacman); //Command pacman.Move(moveDown); pacman.Move(moveUp); pacman.Move(moveLeft); pacman.Move(moveRight); //Strategy Enemy enemy = new Enemy(new AiAmbusher()); enemy.SelectStrategy(); enemy.strategy = new AiRandom(); enemy.SelectStrategy(); //Observer pacman.Attach(enemy); pacman.State = true; //Abstract factory AbstractFactory candyFactory = new CandyFactory(); ICandy candy1 = candyFactory.GetCandy("small"); candy1.CreateCandy(); ICandy candy2 = candyFactory.GetCandy("big"); candy2.CreateCandy(); ICandy candy3 = candyFactory.GetCandy("cherry"); candy3.CreateCandy(); ICandy candy4 = candyFactory.GetCandy("BANANA"); candy4.CreateCandy(); AbstractFactory colorFactory = new ColorFactory(); IColor color1 = colorFactory.GetColor("yellow"); color1.CreateColor(); IColor color2 = colorFactory.GetColor("red"); color2.CreateColor(); //Facade FoodFacade food = new FoodFacade(); food.CreateRedCherry(); food.CreateRedSmall(); food.CreateYellowBanana(); food.CreateYellowBig(); //Decorator with Template Method pacman.weapon = new Gun(); Debug.WriteLine(pacman.weapon.Shoot()); pacman.weapon = new Cannon(pacman.weapon); Debug.WriteLine(pacman.weapon.Shoot()); pacman.weapon = new SpeedTrap(pacman.weapon); Debug.WriteLine(pacman.weapon.Shoot()); // State // Changes game state from resumed to paused and vice versa StateContext stateContext = new StateContext(); StateResumed stateResumed = new StateResumed(); StatePaused statePaused = new StatePaused(); stateResumed.Handle(stateContext); Console.WriteLine(stateContext.GetState().GetString()); statePaused.Handle(stateContext); Console.WriteLine(stateContext.GetState().GetString()); // Proxy // Loads background image for gameboard IBackgroundImage image = new ProxyBackgroundImage("Background1.jpg"); image.Display(); Console.WriteLine(""); // Image will not be loaded from disk again image.Display(); // Flyweight // Pattern used to generate obstacles based on their length for (int i = 0; i < 8; i++) { //Creating duplicate objects Obstacle obs = ObstacleFactory.GetObstacle(i < 4 ? i : i / 2); obs.SetX(4); obs.SetY(4); obs.SetRotation(0); obs.Draw(); } // Chain of responsibility // For handling scores AllScoresHandler handler1 = new NullObject(); AllScoresHandler handler2 = new BonusHandler(); AllScoresHandler handler3 = new PointsHandler(); handler1.SetNextHandler(handler2); handler2.SetNextHandler(handler3); int[] points = { 0, 15, 5, 10, -5, 16, 18, 0, 0, 13, 1, 2, 3 }; foreach (int point in points) { handler1.HandleScore(point); } Console.WriteLine("Final points: " + Highscore.Instance.score); // Mediator // Implemented chatroom Chatroom chatroom = new Chatroom(); Participant player = new Participant("Player"); Participant spectator1 = new Participant("Spectator1"); Participant spectator2 = new Participant("Spectator2"); chatroom.Register(player); chatroom.Register(spectator1); chatroom.Register(spectator2); player.Send("Spectator1", "Hello, spectator!"); spectator1.Send("Player", "Hello, player!"); spectator2.Send("Player", "Hey, don't forget me!"); // Memento // Saving player score for later use CareTaker careTaker = new CareTaker(); careTaker.Add(Highscore.Instance.SetMemento()); Console.WriteLine("Memento saved state: " + careTaker.Get(0).GetScore()); Highscore.Instance.score = 2222; careTaker.Add(Highscore.Instance.SetMemento()); Console.WriteLine("Memento saved state: " + careTaker.Get(1).GetScore()); Console.WriteLine("Restoring to first memento."); Highscore.Instance.SetMemento(careTaker.Get(0)); Console.WriteLine("Restored score is: " + Highscore.Instance.score); // Interpreter // Eating yellow banana will binary shift your score to the left and add 10 points to the result Console.WriteLine("Score before interpreter: " + Highscore.Instance.score); Counter originalCounter = new ConcreteCounter(Highscore.Instance.score); Counter bananaCounter = new ConcreteCounter(10); Counter counter = new ShiftCounter(bananaCounter, originalCounter); Highscore.Instance.score = counter.Count(); Console.WriteLine("Score before interpreter: " + Highscore.Instance.score); }