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();
}
}
}