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)
{
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();
using (StreamWriter sw = new StreamWriter(path))
{
@@ -99,10 +98,9 @@ namespace Server
protected virtual void SendGameResult() // 天梯的 Server 给网站发消息记录比赛结果
{
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
(
new JObject
@@ -166,9 +164,23 @@ namespace Server
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)
@@ -205,19 +217,7 @@ namespace Server
msg.StudentScore = 0;
msg.TrickerScore = 0;
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.HiddenGateRefreshed
//msg.HiddenGateOpened


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

@@ -42,6 +42,12 @@ namespace Server
gameServer.WaitForEnd();
Console.WriteLine("Server end!");
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)
{


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

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


Loading…
Cancel
Save