Server - Room.cs - 房间
//房间状态 enum RoomState {} class Room { private const int MAX_HP = 200; private List<Client> clientRoom = new List<Client>(); private RoomState state = RoomState.WaitingJoin; private Server server; public Room(Server server) {} //等待加入 public bool IsWaitingJoin(){} //加入用户 public void AddClient(客户端){} //移除用户 public void RemoveClient(客户端){} //获得房间的数据 public string GetHouseOwnerData() {} //获得ID public int GetId(){} //获得房间的数据 public String GetRoomData(){} //广播信息 public void BroadcastMessage(其他客户端,动作码,数据){} //是否房主 public bool IsHouseOwner(客户端){} //离开房间 public void QuitRoom(客户端){} //关闭房间 public void Close(){} //开始计时 public void StartTimer(){} //持续时间 private void RunTimer(){} //受到伤害 public void TakeDamage(伤害,其他客户端){} }
//房间状态 enum RoomState {} class Room { private const int MAX_HP = 200; private List<Client> clientRoom = new List<Client>(); private RoomState state = RoomState.WaitingJoin; private Server server; public Room(Server server) {} //等待加入 public bool IsWaitingJoin(){} //加入用户 public void AddClient(Client client){} //移除用户 public void RemoveClient(Client client){} //获得房间的数据 public string GetHouseOwnerData() {} //获得ID public int GetId(){} //获得房间的数据 public String GetRoomData(){} //广播信息 public void BroadcastMessage(Client excludeClient,ActionCode actionCode,string data){} //是否房主 public bool IsHouseOwner(Client client){} //离开房间 public void QuitRoom(Client client){} //关闭房间 public void Close(){} //开始计时 public void StartTimer(){} //持续时间 private void RunTimer(){} //受到伤害 public void TakeDamage(int damage,Client excludeClient){} }
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using Common;using System.Threading;namespace GameServer.Servers{ enum RoomState { WaitingJoin, WaitingBattle, Battle, End } class Room { private const int MAX_HP = 200; private List<Client> clientRoom = new List<Client>(); private RoomState state = RoomState.WaitingJoin; private Server server; public Room(Server server) { this.server = server; } //等待加入 public bool IsWaitingJoin() { return state == RoomState.WaitingJoin; } //加入用户 public void AddClient(Client client) { client.HP = MAX_HP; clientRoom.Add(client); client.Room = this; if (clientRoom.Count>= 2) { state = RoomState.WaitingBattle; } } //移除用户 public void RemoveClient(Client client) { client.Room = null; clientRoom.Remove(client); if (clientRoom.Count >= 2) { state = RoomState.WaitingBattle; } else { state = RoomState.WaitingJoin; } } //获得房间的数据 public string GetHouseOwnerData() { return clientRoom[0].GetUserData(); } //获得ID public int GetId() { if (clientRoom.Count > 0) { return clientRoom[0].GetUserId(); } return -1; } //获得房间的数据 public String GetRoomData() { StringBuilder sb = new StringBuilder(); foreach(Client client in clientRoom) { sb.Append(client.GetUserData() + "|"); } if (sb.Length > 0) { sb.Remove(sb.Length - 1, 1); } return sb.ToString(); } //广播信息 public void BroadcastMessage(Client excludeClient,ActionCode actionCode,string data) { foreach(Client client in clientRoom) { if (client != excludeClient) { server.SendResponse(client, actionCode, data); } } } //是否房主 public bool IsHouseOwner(Client client) { return client == clientRoom[0]; } //离开房间 public void QuitRoom(Client client) { if (client == clientRoom[0]) { Close(); } else clientRoom.Remove(client); } //关闭房间 public void Close() { foreach(Client client in clientRoom) { client.Room = null; } server.RemoveRoom(this); } //开始计时 public void StartTimer() { new Thread(RunTimer).Start(); } //持续时间 private void RunTimer() { Thread.Sleep(1000); for (int i = 3; i > 0; i--) { BroadcastMessage(null, ActionCode.ShowTimer, i.ToString()); Thread.Sleep(1000); } BroadcastMessage(null, ActionCode.StartPlay, "r"); } //受到伤害 public void TakeDamage(int damage,Client excludeClient) { bool isDie = false; foreach (Client client in clientRoom) { if (client != excludeClient) { if (client.TakeDamage(damage)) { isDie = true; } } } if (isDie == false) return; //如果其中一个角色死亡,要结束游戏 foreach (Client client in clientRoom) { if (client.IsDie()) { client.UpdateResult(false); client.Send(ActionCode.GameOver, ((int)ReturnCode.Fail).ToString()); } else { client.UpdateResult(true); client.Send(ActionCode.GameOver, ((int)ReturnCode.Success).ToString()); } } Close(); } }}