Browse Source

Merge branch 'new' of github.com:shangfengh/THUAI6 into new

tags/0.1.0
shangfengh 2 years ago
parent
commit
6019c4e334
8 changed files with 166 additions and 50 deletions
  1. +1
    -0
      .github/workflows/build.yml
  2. +10
    -19
      dependency/proto/Message2Clients.proto
  3. +1
    -0
      dependency/proto/Message2Server.proto
  4. +1
    -1
      dependency/proto/MessageType.proto
  5. +1
    -0
      dependency/proto/Services.proto
  6. +2
    -2
      dependency/proto/cpp_output.sh
  7. +147
    -25
      logic/Client/MainWindow.xaml.cs
  8. +3
    -3
      logic/Client/StatusBarOfSurvivor.xaml.cs

+ 1
- 0
.github/workflows/build.yml View File

@@ -2,6 +2,7 @@ name: build
on: [push, pull_request]
jobs:
dotnet-build:
if: false
runs-on: windows-latest
steps:
- uses: actions/checkout@v3


+ 10
- 19
dependency/proto/Message2Clients.proto View File

@@ -10,15 +10,15 @@ message MessageOfStudent
int32 y = 2;
int32 speed = 3;
int32 determination = 4; // 剩余的学习毅力,相当于血量
//int32 fail_num = 5; // 挂科的科目数
int32 addiction = 5; // 沉迷程度,相当于真实血量
repeated double time_until_skill_available = 6;
PlaceType place = 7;
repeated PropType prop = 8;
PlayerState player_state = 9;
int64 guid = 10;
PlayerState state = 11;
double fail_time = 12; // 挂科的时间
double emo_time = 14; // EMO的时间
// double fail_time = 12; // 挂科的时间
// double emo_time = 14; // EMO的时间
int64 player_id = 15;
int32 view_range = 16; // 视野距离
int32 radius = 17; // 半径
@@ -37,7 +37,7 @@ message MessageOfTricker
int32 y = 2;
int32 speed = 3;
int32 damage = 4; // 对学生造成的心理伤害
double time_until_skill_available = 5;
repeated double time_until_skill_available = 5;
PlaceType place = 6;
repeated PropType prop = 7;
TrickerType tricker_type = 8;
@@ -124,17 +124,6 @@ message MessageOfChest
int32 progress = 3;
}

message MessageOfMapObj
{
oneof message_of_map_obj
{
MessageOfClassroom classroom_message = 1;
MessageOfDoor door_message = 2;
MessageOfGate gate_message = 3;
MessageOfChest chest_message = 4;
}
}

message MessageOfMap
{
message Row
@@ -153,7 +142,10 @@ message MessageOfObj
MessageOfProp prop_message = 3;
MessageOfBullet bullet_message = 4;
MessageOfBombedBullet bombed_bullet_message = 5;
MessageOfMapObj map_obj_message = 6;
MessageOfClassroom classroom_message = 6;
MessageOfDoor door_message = 7;
MessageOfGate gate_message = 8;
MessageOfChest chest_message = 9;
}
}

@@ -173,9 +165,8 @@ message MessageOfAll
message MessageToClient
{
repeated MessageOfObj obj_message = 1;
MessageOfMap map_message = 2;
GameState game_state = 3;
MessageOfAll all_message = 4;
GameState game_state = 2;
MessageOfAll all_message = 3;
}

message MoveRes // 如果打算设计撞墙保留平行速度分量,且需要返回值则可用这个(大概没啥用)


+ 1
- 0
dependency/proto/Message2Server.proto View File

@@ -12,6 +12,7 @@ message PlayerMsg
StudentType student_type = 2;
TrickerType tricker_type = 3;
}
PlayerType player_type = 4;
}

message MoveMsg


+ 1
- 1
dependency/proto/MessageType.proto View File

@@ -73,7 +73,7 @@ enum PlayerState
ATTACKING = 12; // 前摇
LOCKING = 13;
RUMMAGING = 14;
CLIMBING = 15;
CLIMBING = 15; // 翻窗

}



+ 1
- 0
dependency/proto/Services.proto View File

@@ -29,4 +29,5 @@ service AvailableService
rpc StartOpenGate (IDMsg) returns (BoolRes); // 开闸门
rpc StartOpenChest (IDMsg) returns (BoolRes);
rpc EndAllAction (IDMsg) returns (BoolRes); // 结束所有动作
rpc GetMap (IDMsg) returns (MessageOfMap); // 游戏开始时候获取地图
}

+ 2
- 2
dependency/proto/cpp_output.sh View File

@@ -5,5 +5,5 @@ protoc Services.proto --grpc_out=. --plugin=protoc-gen-grpc=`which grpc_cpp_plug
protoc Services.proto --cpp_out=.
chmod -R 755 ./
./format.sh
mv -f ./*.h ../../CAPI/proto
mv -f ./*.cc ../../CAPI/proto
mv -f ./*.h ../../CAPI/cpp/proto
mv -f ./*.cc ../../CAPI/cpp/proto

+ 147
- 25
logic/Client/MainWindow.xaml.cs View File

@@ -53,27 +53,31 @@ namespace Client
listOfButcher = new List<MessageOfTricker>();
listOfBullet=new List<MessageOfBullet>();
listOfBombedBullet = new List<MessageOfBombedBullet>();
listOfAll=new List<MessageOfAll>();
listOfAll = new List<MessageOfAll>();
MapObjDict = new Dictionary<MessageOfMapObj.MessageOfMapObjOneofCase, List<MessageOfMapObj>>();
MapObjDict.Add(MessageOfMapObj.MessageOfMapObjOneofCase.ClassroomMessage, new List<MessageOfMapObj>());
MapObjDict.Add(MessageOfMapObj.MessageOfMapObjOneofCase.GateMessage, new List<MessageOfMapObj>());
MapObjDict.Add(MessageOfMapObj.MessageOfMapObjOneofCase.DoorMessage, new List<MessageOfMapObj>());
MapObjDict.Add(MessageOfMapObj.MessageOfMapObjOneofCase.ChestMessage, new List<MessageOfMapObj>());
WindowStartupLocation = WindowStartupLocation.CenterScreen;
comInfo[0] = "183.172.208.156";
comInfo[0] = "127.0.0.1";
comInfo[1] = "8888";
comInfo[2] = "0";
comInfo[3] = "1";
comInfo[4] = "1";

//ConnectToServer(comInfo);
//OnReceive();
DrawMap();
ZoomMap();
MessageOfStudent kurei = new MessageOfStudent();
kurei.X = 10000;
kurei.Y = 20000;
kurei.Speed = 1000;
kurei.PlayerId = 0;
listOfHuman.Add(kurei);
MessageOfAll all= new MessageOfAll();
all.HiddenGateRefreshed = false;
listOfAll.Add(all);

ConnectToServer(comInfo);
OnReceive();
//DrawMap();
//ZoomMap();
//MessageOfStudent kurei = new MessageOfStudent();
//kurei.X = 10000;
//kurei.Y = 20000;
//kurei.Speed = 1000;
//kurei.PlayerId = 0;
//listOfHuman.Add(kurei);
//MessageOfAll all= new MessageOfAll();
//all.HiddenGateRefreshed = false;
//listOfAll.Add(all);
// ReactToCommandline();
}

@@ -88,7 +92,7 @@ namespace Client
}
}

// 连接Server,comInfo[]的格式:0-ip 1- port 2-playerID 3-playerType 4-human/TrickerType
// 连接Server,comInfo[]的格式:0-ip 1- port 2-playerID 3-human/TrickerType
private void ConnectToServer(string[] comInfo)
{
if (!isPlaybackMode)
@@ -120,7 +124,6 @@ namespace Client
{
humanOrButcher = false;
}
playerMsg.PlayerType = playerType;
if (playerType == PlayerType.StudentPlayer)
{
switch (Convert.ToInt64(comInfo[4]))
@@ -204,7 +207,7 @@ namespace Client
{
for (int j = 0; j < 50; j++)
{
map[i, j] = Convert.ToInt32(obj.Row[i].Col[j]);
map[i, j] = Convert.ToInt32(obj.Row[i].Col[j])+4;//与proto一致
}
}
}
@@ -256,11 +259,11 @@ namespace Client
case 6:
mapPatches[i, j].Fill = Brushes.Brown;
mapPatches[i, j].Stroke = Brushes.Brown;
break;
break;//wall
case 7:
mapPatches[i, j].Fill = Brushes.Green;
mapPatches[i, j].Stroke = Brushes.Green;
break;
break;//grass
case 8:
mapPatches[i, j].Fill = Brushes.LightPink;
mapPatches[i, j].Stroke = Brushes.LightPink;
@@ -332,11 +335,14 @@ namespace Client
listOfBombedBullet.Clear();
listOfBullet.Clear();
listOfAll.Clear();
MapObjDict[MessageOfMapObj.MessageOfMapObjOneofCase.ClassroomMessage].Clear();
MapObjDict[MessageOfMapObj.MessageOfMapObjOneofCase.DoorMessage].Clear();
MapObjDict[MessageOfMapObj.MessageOfMapObjOneofCase.ChestMessage].Clear();
MapObjDict[MessageOfMapObj.MessageOfMapObjOneofCase.GateMessage].Clear();
MessageToClient content = responseStream.ResponseStream.Current;
switch (content.GameState)
{
case GameState.GameStart:
case GameState.GameRunning:
foreach (var obj in content.ObjMessage)
{
switch (obj.MessageOfObjCase)
@@ -364,11 +370,77 @@ namespace Client
case MessageOfObj.MessageOfObjOneofCase.BulletMessage:
listOfBullet.Add(obj.BulletMessage);
break;
case MessageOfObj.MessageOfObjOneofCase.MapObjMessage:
switch (obj.MapObjMessage.MessageOfMapObjCase)
{
case MessageOfMapObj.MessageOfMapObjOneofCase.ClassroomMessage:
MapObjDict[MessageOfMapObj.MessageOfMapObjOneofCase.ClassroomMessage].Add(obj.MapObjMessage);
break;
case MessageOfMapObj.MessageOfMapObjOneofCase.DoorMessage:
MapObjDict[MessageOfMapObj.MessageOfMapObjOneofCase.DoorMessage].Add(obj.MapObjMessage);
break;
case MessageOfMapObj.MessageOfMapObjOneofCase.ChestMessage:
MapObjDict[MessageOfMapObj.MessageOfMapObjOneofCase.ChestMessage].Add(obj.MapObjMessage);
break;
case MessageOfMapObj.MessageOfMapObjOneofCase.GateMessage:
MapObjDict[MessageOfMapObj.MessageOfMapObjOneofCase.GateMessage].Add(obj.MapObjMessage);
break;
}
break;
}
}
GetMap(content.MapMessage);
listOfAll.Add(content.AllMessage);
break;
case GameState.GameRunning:
foreach (var obj in content.ObjMessage)
{
switch (obj.MessageOfObjCase)
{
case MessageOfObj.MessageOfObjOneofCase.StudentMessage:
if (humanOrButcher && obj.StudentMessage.PlayerId == playerID)
{
human = obj.StudentMessage;
}
listOfHuman.Add(obj.StudentMessage);
break;
case MessageOfObj.MessageOfObjOneofCase.TrickerMessage:
if (!humanOrButcher && obj.TrickerMessage.PlayerId == playerID)
{
butcher = obj.TrickerMessage;
}
listOfButcher.Add(obj.TrickerMessage);
break;
case MessageOfObj.MessageOfObjOneofCase.PropMessage:
listOfProp.Add(obj.PropMessage);
break;
case MessageOfObj.MessageOfObjOneofCase.BombedBulletMessage:
listOfBombedBullet.Add(obj.BombedBulletMessage);
break;
case MessageOfObj.MessageOfObjOneofCase.BulletMessage:
listOfBullet.Add(obj.BulletMessage);
break;
case MessageOfObj.MessageOfObjOneofCase.MapObjMessage:
switch (obj.MapObjMessage.MessageOfMapObjCase)
{
case MessageOfMapObj.MessageOfMapObjOneofCase.ClassroomMessage:
MapObjDict[MessageOfMapObj.MessageOfMapObjOneofCase.ClassroomMessage].Add(obj.MapObjMessage);
break;
case MessageOfMapObj.MessageOfMapObjOneofCase.DoorMessage:
MapObjDict[MessageOfMapObj.MessageOfMapObjOneofCase.DoorMessage].Add(obj.MapObjMessage);
break;
case MessageOfMapObj.MessageOfMapObjOneofCase.ChestMessage:
MapObjDict[MessageOfMapObj.MessageOfMapObjOneofCase.ChestMessage].Add(obj.MapObjMessage);
break;
case MessageOfMapObj.MessageOfMapObjOneofCase.GateMessage:
MapObjDict[MessageOfMapObj.MessageOfMapObjOneofCase.GateMessage].Add(obj.MapObjMessage);
break;
}
break;
}
}
listOfAll.Add(content.AllMessage);
break;

case GameState.GameEnd:
foreach (var obj in content.ObjMessage)
@@ -390,6 +462,23 @@ namespace Client
case MessageOfObj.MessageOfObjOneofCase.BulletMessage:
listOfBullet.Add(obj.BulletMessage);
break;
case MessageOfObj.MessageOfObjOneofCase.MapObjMessage:
switch (obj.MapObjMessage.MessageOfMapObjCase)
{
case MessageOfMapObj.MessageOfMapObjOneofCase.ClassroomMessage:
MapObjDict[MessageOfMapObj.MessageOfMapObjOneofCase.ClassroomMessage].Add(obj.MapObjMessage);
break;
case MessageOfMapObj.MessageOfMapObjOneofCase.DoorMessage:
MapObjDict[MessageOfMapObj.MessageOfMapObjOneofCase.DoorMessage].Add(obj.MapObjMessage);
break;
case MessageOfMapObj.MessageOfMapObjOneofCase.ChestMessage:
MapObjDict[MessageOfMapObj.MessageOfMapObjOneofCase.ChestMessage].Add(obj.MapObjMessage);
break;
case MessageOfMapObj.MessageOfMapObjOneofCase.GateMessage:
MapObjDict[MessageOfMapObj.MessageOfMapObjOneofCase.GateMessage].Add(obj.MapObjMessage);
break;
}
break;
}
}
listOfAll.Add(content.AllMessage);
@@ -409,10 +498,18 @@ namespace Client
}
}

private int GetX(int x)
{
return x / 1000 + 1;
}
private int GetY(int y)
{
return y / 1000 + 1;
}
//待修改
private bool CanSee(MessageOfStudent msg)
{
if (msg.State == StudentState.Quit)
if (msg.State == PlayerState.Quit)
return false;
//if (playerID >= 2022 || teamID >= 2022)
// return true;
@@ -675,6 +772,24 @@ namespace Client
break;
}
}
foreach (var data in MapObjDict[MessageOfMapObj.MessageOfMapObjOneofCase.ClassroomMessage])
{
TextBox icon = new()
{
FontSize = 10 * UpperLayerOfMap.ActualHeight / 650,
Width = unitWidth,
Height = unitHeight,
Text = Convert.ToString(data.ClassroomMessage.Progress),
HorizontalAlignment = HorizontalAlignment.Left,
VerticalAlignment = VerticalAlignment.Top,
Margin = new Thickness(data.ClassroomMessage.Y * unitWidth / 1000.0 - unitWidth / 2, data.ClassroomMessage.X * unitHeight / 1000.0 - unitHeight / 2, 0, 0),
//Margin = new Thickness(25,25, 0, 0),
Background = Brushes.Transparent,
BorderBrush = Brushes.Transparent,
IsReadOnly = true
};
UpperLayerOfMap.Children.Add(icon);
}
//}
ZoomMap();
}
@@ -766,7 +881,13 @@ namespace Client
};
client.UseSkill(msgQ);
break;

case Key.K:
IDMsg msgK = new()
{
PlayerId = playerID,
};
client.StartLearning(msgK);
break;
default:
break;
}
@@ -936,6 +1057,7 @@ namespace Client
private List<MessageOfBullet> listOfBullet;
private List<MessageOfBombedBullet> listOfBombedBullet;
private List<MessageOfAll> listOfAll;
private Dictionary<MessageOfMapObj.MessageOfMapObjOneofCase, List<MessageOfMapObj>> MapObjDict;
private object drawPicLock = new object();
private MessageOfStudent? human = null;
private MessageOfTricker? butcher = null;


+ 3
- 3
logic/Client/StatusBarOfSurvivor.xaml.cs View File

@@ -62,8 +62,8 @@ namespace Client
}
private void SetDynamicValue(MessageOfStudent obj)
{
skillprogress.Value = 100 - obj.TimeUntilSkillAvailable / coolTime * 100;
if (obj.State == StudentState.Quit)
skillprogress.Value = 100 - obj.TimeUntilSkillAvailable[0] / coolTime * 100;
if (obj.State == PlayerState.Quit)
{
skillprogress.Value = 0;
skillprogress.Background = Brushes.Gray;
@@ -73,7 +73,7 @@ namespace Client
Func<MessageOfStudent, int> life =
(obj) =>
{
if (obj.State == StudentState.Quit || obj.State == StudentState.Addicted)
if (obj.State == PlayerState.Quit || obj.State == PlayerState.Addicted)
return 0;
else
return obj.Determination;


Loading…
Cancel
Save