Browse Source

refactor: 🎨 improve score function

tags/0.1.0
gsy1519 2 years ago
parent
commit
8a0ee85e09
3 changed files with 30 additions and 26 deletions
  1. +22
    -22
      logic/Server/GameServer.cs
  2. +6
    -0
      logic/Server/Program.cs
  3. +2
    -4
      logic/Server/RpcServices.cs

+ 22
- 22
logic/Server/GameServer.cs View File

@@ -83,10 +83,9 @@ namespace Server
private void SaveGameResult(string path) private void SaveGameResult(string path)
{ {
Dictionary<string, int> result = new Dictionary<string, int>(); Dictionary<string, int> result = new Dictionary<string, int>();
for (int i = 0; i < TeamCount; i++)
{
result.Add("Team" + i.ToString(), GetTeamScore(i)); //Team待修改
}
int[] score = GetScore();
result.Add("Student", score[0]);
result.Add("Tricker", score[1]);
JsonSerializer serializer = new JsonSerializer(); JsonSerializer serializer = new JsonSerializer();
using (StreamWriter sw = new StreamWriter(path)) using (StreamWriter sw = new StreamWriter(path))
{ {
@@ -99,10 +98,9 @@ namespace Server
protected virtual void SendGameResult() // 天梯的 Server 给网站发消息记录比赛结果 protected virtual void SendGameResult() // 天梯的 Server 给网站发消息记录比赛结果
{ {
var scores = new JObject[options.TeamCount]; var scores = new JObject[options.TeamCount];
for (ushort i = 0; i < options.TeamCount; ++i)
{
scores[i] = new JObject { ["team_id"] = i.ToString(), ["score"] = GetTeamScore(i) };
} // Team待修改
int[] score = GetScore();
scores[0] = new JObject { ["team_name"] = "Student", ["score"] = score[0] };
scores[1] = new JObject { ["team_name"] = "Tricker", ["score"] = score[1] };
httpSender?.SendHttpRequest httpSender?.SendHttpRequest
( (
new JObject new JObject
@@ -166,9 +164,23 @@ namespace Server
kvp.Value.Item2.Wait(); kvp.Value.Item2.Wait();
} }
} }
public int GetTeamScore(long teamID)
public int[] GetScore()
{ {
return game.GetTeamScore(teamID);
int[] score = new int[2]; // 0代表Student,1代表Tricker
try
{
foreach (Character character in game.GameMap.GameObjDict[GameObjType.Character])
{
if (!character.IsGhost()) score[0] += character.Score;
else score[1] += character.Score;
}

}
finally
{
game.GameMap.GameObjLockDict[GameObjType.Character].ExitReadLock();
}
return score;
} }


private int PlayerIDToTeamID(long playerID) private int PlayerIDToTeamID(long playerID)
@@ -205,19 +217,7 @@ namespace Server
msg.StudentScore = 0; msg.StudentScore = 0;
msg.TrickerScore = 0; msg.TrickerScore = 0;
game.GameMap.GameObjLockDict[GameObjType.Character].EnterReadLock(); game.GameMap.GameObjLockDict[GameObjType.Character].EnterReadLock();
try
{
foreach (Character character in game.GameMap.GameObjDict[GameObjType.Character])
{
if (!character.IsGhost()) msg.StudentScore += character.Score;
else msg.TrickerScore += character.Score;
}


}
finally
{
game.GameMap.GameObjLockDict[GameObjType.Character].ExitReadLock();
}
//msg.GateOpened //msg.GateOpened
//msg.HiddenGateRefreshed //msg.HiddenGateRefreshed
//msg.HiddenGateOpened //msg.HiddenGateOpened


+ 6
- 0
logic/Server/Program.cs View File

@@ -42,6 +42,12 @@ namespace Server
gameServer.WaitForEnd(); gameServer.WaitForEnd();
Console.WriteLine("Server end!"); Console.WriteLine("Server end!");
server.ShutdownAsync().Wait(); server.ShutdownAsync().Wait();

Thread.Sleep(50);
Console.WriteLine("");
Console.WriteLine("=================== Final Score ====================");
Console.WriteLine($"Studnet: {gameServer.GetScore()[0]}");
Console.WriteLine($"Tricker: {gameServer.GetScore()[1]}");
} }
catch (Exception ex) catch (Exception ex)
{ {


+ 2
- 4
logic/Server/RpcServices.cs View File

@@ -65,9 +65,9 @@ namespace Server
//Console.WriteLine("Send!"); //Console.WriteLine("Send!");
} }
} }
catch (Exception ex)
catch (Exception)
{ {
Console.WriteLine(ex);
//Console.WriteLine(ex);
} }
finally finally
{ {
@@ -97,7 +97,6 @@ namespace Server
if (newPlayerID == GameObj.invalidID) if (newPlayerID == GameObj.invalidID)
return; return;
communicationToGameID[request.PlayerId] = newPlayerID; communicationToGameID[request.PlayerId] = newPlayerID;
// 内容待修改
var temp = (new SemaphoreSlim(0, 1), new SemaphoreSlim(0, 1)); var temp = (new SemaphoreSlim(0, 1), new SemaphoreSlim(0, 1));
bool start = false; bool start = false;
Console.WriteLine($"Id: {request.PlayerId} joins."); Console.WriteLine($"Id: {request.PlayerId} joins.");
@@ -172,7 +171,6 @@ namespace Server
} }
var gameID = communicationToGameID[request.PlayerId]; var gameID = communicationToGameID[request.PlayerId];
game.MovePlayer(gameID, (int)request.TimeInMilliseconds, request.Angle); game.MovePlayer(gameID, (int)request.TimeInMilliseconds, request.Angle);
// 之后game.MovePlayer可能改为bool类
moveRes.ActSuccess = true; moveRes.ActSuccess = true;
if (!game.GameMap.Timer.IsGaming) moveRes.ActSuccess = false; if (!game.GameMap.Timer.IsGaming) moveRes.ActSuccess = false;
return Task.FromResult(moveRes); return Task.FromResult(moveRes);


Loading…
Cancel
Save