コード例 #1
0
ファイル: ClientForm.cs プロジェクト: SomeCloud/DiceGame
        public void InitGameOverRoom(EasyRoom room)
        {
            Controls.Clear();
            ClientSize = new Size(800, 600);
            Text       = "Dice Game. " + room.Name + " - Game over";

            int k = 0;
            List <EasyPlayer> players = room.Players.OrderByDescending(u => u.Score).ToList();

            EList <Label> PlayersList = new EList <Label>();

            Label title = new Label {
                Parent = this, Location = new Point(10, 10), Width = 780, Text = "Игра окончена. Итоги: ", Font = new Font(Font.FontFamily, 14)
            };

            foreach (EasyPlayer player in players)
            {
                k++;
                PlayersList.Add(new Label {
                    Parent = this, Location = new Point(10, 60 + k * 40), Width = 780, Text = player.Name + ": " + player.Score, Font = new Font(Font.FontFamily, 14)
                });
            }

            Button BackToLobby = new Button()
            {
                Parent = this, Location = new Point(ClientRectangle.Width / 2 - 150, PlayersList.Last().Location.Y + 60), Size = new Size(300, 40), Text = "Вернуться в лобби", Font = new Font(Font.FontFamily, 14)
            };

            BackToLobby.Click += (object sender, EventArgs e) => {
                LocalServer.SendFrame(new Frame(room.Id, Name, MessageType.Disconnect, GameMessageType.Undefined));
                InLobby = true;
                RoomId  = -1;
                InitMain();
            };
        }
コード例 #2
0
ファイル: EList.cs プロジェクト: SomeCloud/DiceGame
        public EList <T> Clone()
        {
            EList <T> Temp = new EList <T>();

            foreach (T e in this)
            {
                Temp.Add(e);
            }
            return(Temp);
        }
コード例 #3
0
ファイル: ClientForm.cs プロジェクト: SomeCloud/DiceGame
        public new void Show()
        {
            LocalClient.StartReceive("ClientReceiver");

            Notes = new EList <EasyRoom>();

            LocalClient.Receive += (frame) => {
                if (InvokeRequired)
                {
                    Invoke(new Action <Frame>((s) => {
                        EasyRoom Room;
                        if (InLobby == true)
                        {
                            if (IsContaninsRoom(frame.RoomId, out Room, Notes) == false)
                            {
                                Notes.Add((EasyRoom)frame.Data);
                            }
                            else
                            {
                                Room = (EasyRoom)frame.Data;
                            }
                        }
                        else
                        {
                            Room = (EasyRoom)frame.Data;
                            if ((frame.RoomId == RoomId || Room.ActivePlayer == Name) && frame.GameMsgType.Equals(GameMessageType.Send))
                            {
                                RoomId = frame.RoomId;
                                switch (Room.Status)
                                {
                                case GameStatus.Wait:
                                    InitWaitingRoom(Room);
                                    break;

                                case GameStatus.Game:
                                    InitGameRoom(Room);
                                    break;

                                case GameStatus.Over:
                                    InitGameOverRoom(Room);
                                    break;

                                case GameStatus.Close:
                                    break;
                                }
                            }
                        }
                    }
                                              ), frame);
                }
            };
            base.Show();
            InitMain();
        }
コード例 #4
0
ファイル: ClientForm.cs プロジェクト: SomeCloud/DiceGame
 private bool IsContaninsRoom(int id, out EasyRoom Room, EList <EasyRoom> notes)
 {
     foreach (EasyRoom room in notes)
     {
         if (room.Id == id)
         {
             Room = room;
             return(true);
         }
     }
     Room = null;
     return(false);
 }
コード例 #5
0
        public NotesView(EList <EasyRoom> notes) : base()
        {
            Width      = 780;
            AutoScroll = true;
            Notes      = notes;

            Rows = new EList <GameNoteView>();

            GameNoteView row;

            for (int i = 0; i < notes.Count; i++)
            {
                GameNoteView temp;
                if (i > 0)
                {
                    temp = new GameNoteView(notes[i])
                    {
                        Parent = this, Location = new Point(0, Rows.Last().Location.Y + 60)
                    };
                }
                else
                {
                    temp = new GameNoteView(notes[i])
                    {
                        Parent = this, Location = new Point(0, 0)
                    };
                }
                temp.ConnectEvent += (r) => {
                    ConnectEvent?.Invoke(r, notes[i]);
                };
                temp.WatchEvent += (r) => {
                    WatchEvent?.Invoke(r, notes[i]);
                };
                Rows.Add(temp);
            }

            // обновление списка лобби при добвление новых записей
            Notes.AfterAddEvent += (item) => {
                if (Rows.Count > 0)
                {
                    row = new GameNoteView()
                    {
                        Parent = this, Location = new Point(0, Rows.Last().Location.Y + 60)
                    };
                    if (row.InvokeRequired)
                    {
                        row.Invoke(new Action <EasyRoom>((s) => row.SetSource(s)), item);
                    }
                    else
                    {
                        row.SetSource(item);
                    }
                }
                else
                {
                    row = new GameNoteView()
                    {
                        Parent = this, Location = new Point(0, 0)
                    };

                    if (row.InvokeRequired)
                    {
                        row.Invoke(new Action <EasyRoom>((s) => row.SetSource(s)), item);
                    }
                    else
                    {
                        row.SetSource(item);
                    }
                }
                row.ConnectEvent += (r) => {
                    ConnectEvent?.Invoke(r, item);
                };
                row.WatchEvent += (r) => {
                    WatchEvent?.Invoke(r, item);
                };
                Rows.Add(row);
            };

            // обновляем список лобби при удалении записи (при отключении сервера / завершении игры на сервере)
            Notes.BeforeRemoveEvent += (item) => {
                row = new GameNoteView(item);
                for (int i = Rows.Count - 1; i > Rows.IndexOf(row); i--)
                {
                    if (Rows[i].Equals(row) == false)
                    {
                        Rows[i].Location = Rows[i - 1].Location;
                    }
                }
                Rows.Remove(row);
            };
        }
コード例 #6
0
ファイル: GameView.cs プロジェクト: SomeCloud/DiceGame
        public GameView(EasyRoom room, string localPlayer, bool IsWatcher) : base()
        {
            Width      = 780;
            AutoScroll = true;
            Notes      = room.Players;
            lam s = () => { return(false); };

            Playerrows = new EList <PlayerNoteView>();

            for (int i = 0; i < room.Players.Count; i++)
            {
                s = () => { if (room.Players[i].Name == room.ActivePlayer)
                            {
                                return(true);
                            }
                            else
                            {
                                return(false);
                            } };
                PlayerNoteView pl;
                if (i > 0)
                {
                    pl = new PlayerNoteView(room.Players[i], s())
                    {
                        Parent = this, Location = new Point(0, Playerrows.Last().Location.Y + 60)
                    };
                }
                else
                {
                    pl = new PlayerNoteView(room.Players[i], s())
                    {
                        Parent = this, Location = new Point(0, 0)
                    };
                }

                Playerrows.Add(pl);
            }

            /*foreach (EasyPlayer player in Notes)
             * {
             *  s = ()=> { if (player.Name == room.ActivePlayer) return true; else return false; };
             *  PlayerNoteView pl;
             *  if (player.Id > 1)
             *  {
             *      pl = new PlayerNoteView(player, s()) { Parent = this, Location = new Point(0, Playerrows.Last().Location.Y + 60) };
             *  }
             *  else
             *  {
             *      pl = new PlayerNoteView(player, s()) { Parent = this, Location = new Point(0, 0) };
             *  }
             *
             *  Playerrows.Add(pl);
             * }*/

            s = () => { if (room.ActivePlayer == localPlayer)
                        {
                            return(true);
                        }
                        else
                        {
                            return(false);
                        } };

            RollButton = new Button()
            {
                Parent = this, Location = new Point(10, Playerrows.Last().Location.Y + 80), Size = new Size(200, 40), Text = "Roll", Enabled = s(), Visible = !IsWatcher
            };
            StopButton = new Button()
            {
                Parent = this, Location = new Point(220, Playerrows.Last().Location.Y + 80), Size = new Size(200, 40), Text = "Штап", Enabled = s(), Visible = !IsWatcher
            };

            RollButton.Click += (object sender, EventArgs e) => {
                ClickRoll?.Invoke();
            };

            StopButton.Click += (object sender, EventArgs e) => {
                ClickStop?.Invoke();
            };
        }