示例#1
0
        public Graphics(uint x, uint y)
        {
            Window = new RenderWindow(new VideoMode(x, y), "dsfdf");
            Window.SetVerticalSyncEnabled(true);
            Window.Closed += (obj, e) => { Window.Close(); };

            _groups = new List <Group>();

            Window.Resized += (obj, e) =>
            {
                FloatRect visibleArea = new FloatRect(0, 0, e.Width, e.Height);
                Window.SetView(new View(visibleArea));
                Window.Clear(Color.Cyan);
            };
            Window.MouseButtonPressed += (sender, args) =>
            {
                if (args.Button != Mouse.Button.Left)
                {
                    return;
                }
                foreach (var t in _groups)
                {
                    Message message = new Message();
                    message.Dict      = new Dictionary <string, int>();
                    message.Dict["X"] = args.X;
                    message.Dict["Y"] = args.Y;
                    t.Notify(EventType.Press, message);
                }
            };
            Window.MouseButtonReleased += (sender, args) =>
            {
                if (args.Button != Mouse.Button.Left)
                {
                    return;
                }
                foreach (var t in _groups)
                {
                    Message message = new Message();
                    message.Dict      = new Dictionary <string, int>();
                    message.Dict["X"] = args.X;
                    message.Dict["Y"] = args.Y;
                    t.Notify(EventType.Release, message);
                }
            };
            Window.KeyPressed += (sender, args) =>
            {
                switch (args.Code)
                {
                case Keyboard.Key.F:
                    PlayerField.GetGame().StartGame(9);
                    break;
                }
            };
            Window.MouseMoved += (sender, args) => { MousePosition = new Vector2f(args.X, args.Y); };
        }
示例#2
0
 public override void Update()
 {
     PlayerField.GetGame().MainFrame.Window.Draw(Text);
 }
示例#3
0
 public override void UpdateState()
 {
     Obj.Shape.Position = PlayerField.GetGame().MainFrame.MousePosition;
 }
示例#4
0
        public Goban(GoRulesBase rulesBase)
        {
            _rulesBase    = rulesBase;
            _grid         = new GameObject[rulesBase[0], rulesBase[0]];
            _scoreObjects = new TextObject[2];
            Vector2u   windowSize = PlayerField.GetGame().MainFrame.Window.Size;
            GameObject back       = new GameObject(new RectangleShape((Vector2f)windowSize));

            back.Shape.FillColor = Color.Blue;
            AddShape(back);
            int        minDimension = (int)Math.Min(windowSize.X, windowSize.Y);
            int        offset       = minDimension / 20;
            int        placeSize    = minDimension - offset;
            GameObject place        = new GameObject(new RectangleShape(new Vector2f(placeSize, placeSize)));

            place.Subscribe = new NotifierSub(place);

            place.Subscribe.AddObserver(new OnPressMessage(((i, i1) =>
            {
                if (!rulesBase.GetActivePerson().IsBot&& !rulesBase.IsFinished)
                {
                    int id = rulesBase.GetActivePerson().Id - 1;
                    Console.WriteLine(id.ToString());
                    _selectedStone = new Stone(_cubeSize / 3f);
                    Color customColor = new Color();
                    customColor.A = 255;
                    customColor.R = (byte)(255 * id);
                    customColor.G = (byte)(255 * id);
                    customColor.B = (byte)(255 * id);
                    _selectedStone.Shape.FillColor = customColor;
                    _selectedStone.ChangeState(new GrabedState(_selectedStone));
                    _selectedStone.Update();
                    AddShape(_selectedStone);
                }
            })));

            place.Subscribe.AddObserver(new OnReleaseMessage(((x, y) =>
            {
                if (!rulesBase.GetActivePerson().IsBot)
                {
                    if (_selectedStone != null)
                    {
                        (bool canPlace, int xStone, int yStone) = CanTookStone(x, y);
                        bool isStepDone = rulesBase.GetActivePerson().MakeStep(xStone, yStone);
                        if (isStepDone)
                        {
                            _selectedStone.ChangeState(null);
                            TookOnGrid(_selectedStone, xStone, yStone);
                            CheckConfirmity();
                        }
                        else
                        {
                            RemoveShape(_selectedStone);
                        }
                        _selectedStone = null;
                    }
                }
            })));

            AddShape(place);
            place.Shape.Position  = new Vector2f(offset / 2.0f, offset / 2.0f);
            place.Shape.FillColor = Color.Green;

            int size = rulesBase[0];

            _cubeSize   = (float)placeSize / size;
            _rectOffset = offset / 2.0f + _cubeSize / 2;
            for (int i = 0; i < size; i++)
            {
                RectangleShape lineHorizontal = new RectangleShape(new Vector2f(placeSize - _cubeSize, 1));
                lineHorizontal.FillColor = Color.Black;
                lineHorizontal.Position  = new Vector2f(_rectOffset, _rectOffset + _cubeSize * i);
                AddShape(new GameObject(lineHorizontal));

                RectangleShape lineVertical = new RectangleShape(new Vector2f(1, placeSize - _cubeSize));
                lineVertical.FillColor = Color.Black;
                lineVertical.Position  = new Vector2f(_rectOffset + _cubeSize * i, _rectOffset);
                AddShape(new GameObject(lineVertical));
            }


            _scoreObjects[0] = new TextObject("Score: 0", new Font("C:/CurrentProjects/LetsGo/Game/FONT.ttf"));
            _scoreObjects[0].Text.FillColor = Color.Black;
            _scoreObjects[1] = new TextObject("Score: 0", new Font("C:/CurrentProjects/LetsGo/Game/FONT.ttf"));
            _scoreObjects[1].Text.FillColor = Color.White;
            Vector2f textSize = new Vector2f(_scoreObjects[0].Text.GetGlobalBounds().Width,
                                             _scoreObjects[0].Text.GetGlobalBounds().Height + 20);

            _scoreObjects[0].Text.Position = (Vector2f)PlayerField.GetGame().MainFrame.Window.Size - textSize;

            textSize = new Vector2f(_scoreObjects[1].Text.GetGlobalBounds().Width,
                                    _scoreObjects[1].Text.GetGlobalBounds().Height);
            _scoreObjects[1].Text.Position =
                new Vector2f((PlayerField.GetGame().MainFrame.Window.Size.X - textSize.X), 0);
            AddShape(_scoreObjects[0]);
            AddShape(_scoreObjects[1]);



            TextObject passText = new TextObject("Pass", new Font("C:/CurrentProjects/LetsGo/Game/FONT.ttf"));
            GameObject pass     = new GameObject(new RectangleShape(new Vector2f(
                                                                        passText.Text.GetGlobalBounds().Width * 1.5f, passText.Text.GetGlobalBounds().Height * 1.5f)));

            //ButtonObject Pass = new ButtonObject("Pass", new Font("C:/CurrentProjects/LetsGo/Game/FONT.ttf"));
            pass.Shape.Position     = new Vector2f(650, 300);
            passText.Text.Position  = new Vector2f(650, 300);
            passText.Text.FillColor = Color.Magenta;
            pass.Subscribe          = new NotifierSub(pass);
            pass.Subscribe.AddObserver(new OnPressMessage(((i, i1) =>
            {
                if (!rulesBase.GetActivePerson().IsBot)
                {
                    ((Player)rulesBase.GetActivePerson()).Pass();
                }

                if (rulesBase.IsFinished)
                {
                    string endText;
                    if (rulesBase.Persons[0].Score < rulesBase.Persons[1].Score)
                    {
                        endText = "WHITE WIN";
                    }
                    else if (rulesBase.Persons[0].Score > rulesBase.Persons[1].Score)
                    {
                        endText = "BLACK WIN";
                    }
                    else
                    {
                        endText = "DRAW";
                    }
                    TextObject finishText = new TextObject(endText, new Font("C:/CurrentProjects/LetsGo/Game/FONT.ttf"));
                    finishText.Text.Position = new Vector2f(250, 250);
                    finishText.Text.FillColor = Color.Blue;

                    AddShape(finishText);
                }
                pass.Shape.FillColor = Color.Green;
            })));
            pass.Subscribe.AddObserver(new OnReleaseMessage(((i, i1) => { pass.Shape.FillColor = Color.White; })));
            AddShape(pass);
            AddShape(passText);
        }