Skip to content

Commit a410ded

Browse files
authored
Merge branch 'eesast:dev' into dev
2 parents 4967db0 + f9f16c8 commit a410ded

16 files changed

Lines changed: 1000 additions & 642 deletions

File tree

dependency/proto/Message2Clients.proto

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,7 @@ message MessageOfAll
204204
message TeamInfo {
205205
int32 score = 1;
206206
int32 material = 2;
207-
int32 computing_power = 3;
207+
int32 compute_power = 3;
208208
int32 factory_hp = 4;
209209
}
210210

dependency/proto/Message2Server.proto

Lines changed: 66 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,18 @@ message NullRequest {}
77

88
message IDMsg
99
{
10-
int64 character_id = 1;
10+
int64 player_id = 1;
1111
int64 team_id = 2;
1212
protobuf.GameMode mode = 3; // 客户端发起连接/请求时声明希望的游戏模式
1313
}
1414

15+
message CharacterMsg
16+
{
17+
int64 player_id = 1;
18+
int64 team_id = 2;
19+
CharacterType character_type = 3;
20+
int32 side_flag = 4;
21+
}
1522

1623
message RegisterFactoryMsg
1724
{
@@ -22,18 +29,24 @@ message RegisterFactoryMsg
2229
int32 side_flag = 5; // 客户端希望的阵营标识
2330
}
2431

25-
message CreateCharacterMsg
32+
message MoveMsg
2633
{
27-
CharacterType character_type = 1;
28-
int64 team_id = 2;
29-
int32 birthpoint_index = 3;
30-
protobuf.GameMode mode = 4; // 创建角色时可以指明模式
34+
int64 player_id = 1;
35+
double angle = 2;
36+
int64 time_in_milliseconds = 3;
37+
int64 team_id = 4;
3138
}
3239

40+
message RecoverMsg
41+
{
42+
int64 player_id = 1;
43+
int64 recovered_hp = 2;
44+
int64 team_id = 3;
45+
}
3346

34-
message MaterialResourceMsg
47+
message ResourceMsg
3548
{
36-
int64 character_id = 1;
49+
int64 player_id = 1;
3750
int64 team_id = 2;
3851
int64 resource_id = 3;
3952
int32 target_x = 4; // 目标坐标,或许可用
@@ -42,68 +55,52 @@ message MaterialResourceMsg
4255
//HarvestAction action = 7; // 采集动作类型
4356
}
4457

45-
message MoveMsg
46-
{
47-
int64 character_id = 1;
48-
double angle = 2;
49-
int64 time_in_milliseconds = 3;
50-
int64 team_id = 4;
51-
}
52-
53-
message SendMsg
54-
{
55-
int64 character_id = 1;
56-
int64 to_character_id = 2;
57-
oneof message
58-
{
59-
string text_message = 3;
60-
bytes binary_message = 4;
61-
}
62-
int64 team_id = 5;
63-
}
64-
6558
message AttackMsg // 普通攻击
6659
{
67-
int64 character_id = 1;
60+
int64 player_id = 1;
6861
int64 team_id = 2;
6962
int32 attack_range = 3; // 攻击范围
70-
int64 attacked_character_id = 4; // 攻击对象
63+
int64 attacked_player_id = 4; // 攻击对象
7164
int64 attacked_team_id = 5;
7265
}
7366

67+
/*
7468
message AttackFactoryMsg
7569
{
76-
int64 character_id = 1;
70+
int64 player_id = 1;
7771
int64 team_id = 2;
7872
int32 attack_range = 3;
7973
int64 attacked_Factory_id = 4;
8074
int64 attacked_team_id = 5;
8175
}
76+
*/
8277

83-
message RecoverMsg
78+
message OccupyMsg
8479
{
85-
int64 character_id = 1;
86-
int64 recovered_hp = 2;
87-
int64 team_id = 3;
88-
}
89-
90-
message RepairFactory
91-
{
92-
int64 character_id = 1;
80+
int64 player_id = 1;
9381
int64 team_id = 2;
82+
int32 target_x = 3;
83+
int32 target_y = 4;
84+
int64 target_compute_center_id = 5;
9485
}
9586

96-
message ProduceGoodsMeg
87+
message SendMsg
9788
{
98-
GoodsType product_type = 1;
99-
int64 team_id = 2;
100-
int32 max_produce_num = 3;
89+
int64 player_id = 1;
90+
int64 to_player_id = 2;
91+
oneof message
92+
{
93+
string text_message = 3;
94+
bytes binary_message = 4;
95+
}
96+
int64 team_id = 5;
10197
}
10298

99+
103100
message LoadMeg
104101
{
105102
int64 team_id = 1;
106-
int64 character_id = 2;
103+
int64 player_id = 2;
107104
int32 semiconductor_num = 3;
108105
int32 medicine_num = 4;
109106
int32 handiwork_num = 5;
@@ -115,7 +112,7 @@ message LoadMeg
115112
message SellMeg
116113
{
117114
int64 team_id = 1;
118-
int64 character_id = 2;
115+
int64 player_id = 2;
119116
int32 semiconductor_num = 3;
120117
int32 medicine_num = 4;
121118
int32 handiwork_num = 5;
@@ -125,6 +122,29 @@ message SellMeg
125122
}
126123

127124

125+
message CreateCharacterMsg
126+
{
127+
CharacterType character_type = 1;
128+
int64 team_id = 2;
129+
int32 birthpoint_index = 3;
130+
protobuf.GameMode mode = 4; // 创建角色时可以指明模式
131+
}
132+
133+
message ProduceGoodsMeg
134+
{
135+
GoodsType product_type = 1;
136+
int64 team_id = 2;
137+
int32 max_produce_num = 3;
138+
}
139+
140+
message RepairFactoryMeg
141+
{
142+
int64 player_id = 1;
143+
int64 team_id = 2;
144+
}
145+
146+
147+
128148
// 智慧大脑相关
129149
message StrategicAIRequest
130150
{

dependency/proto/Services.proto

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import "Message2Server.proto";
66

77
service AvailableService
88
{
9+
// 连接和初始化服务
910
rpc TryConnection(IDMsg) returns (BoolRes);
1011

1112
// 游戏开局调用一次的服务
@@ -15,18 +16,19 @@ service AvailableService
1516
// 游戏过程中普通角色执行操作的服务
1617
rpc Move(MoveMsg) returns (MoveRes); // 移动
1718
rpc Recover(RecoverMsg) returns (BoolRes); // 回复
18-
rpc Harvesting(MaterialResourceMsg) returns (BoolRes); // 开采原料资源
19+
rpc Harvest(ResourceMsg) returns (BoolRes); // 开采原料资源
1920
rpc Attack(AttackMsg) returns (BoolRes); // 普通攻击
20-
rpc AttackConstruction(AttackFactoryMsg) returns (BoolRes); // 攻击工厂(基地)
21-
rpc Repair(RepairFactory) returns (BoolRes); // 修理工厂
21+
rpc Occupy(OccupyMsg) returns (BoolRes); // 占领算力中心
22+
// rpc AttackConstruction(AttackFactoryMsg) returns (BoolRes); // 攻击工厂(基地)
2223
rpc Send(SendMsg) returns (BoolRes); // 传递信息
23-
rpc Produce(ProduceGoodsMeg) returns (BoolRes); // 生产产品
2424
rpc Load(LoadMeg) returns (BoolRes); // 装载产品
2525
rpc Sell(SellMeg) returns (BoolRes); // 出售产品
2626

27-
// 游戏过程中核心角色(工厂)可以另外执行操作的服务
27+
// 游戏过程中核心角色(工厂)可以执行操作的服务
2828
rpc CreatCharacter(CreateCharacterMsg) returns (BoolRes); // 创建角色
2929
rpc CreatCharacterRID(CreateCharacterMsg) returns (CreatCharacterRes); // 获取角色编号
30+
rpc Produce(ProduceGoodsMeg) returns (BoolRes); // 生产产品
31+
rpc Repair(RepairFactoryMeg) returns (BoolRes); // 修理工厂
3032
rpc EndAllAction(IDMsg) returns (BoolRes); // 结束所有动作
3133

3234
// 智慧大脑

docs/规则.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
## 简则:
1717

1818
* 每场游戏四个玩家参与,每个玩家要经营一个智能工厂,尽可能地获取算力,升级科技,占领市场。
19-
* 选手需要编写无人驾驶汽车,无人机,机器人,打印机的控制代码
19+
* 选手需要编写无人驾驶汽车,无人机,机器人的控制代码
2020
* 比赛时长10min。
2121

2222
## 地图:

logic/GameClass/GameObj/Areas/Market.cs

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,38 @@ public void SetPrice(GoodsType type, int price)
6464
public int AddTradedQuantity(GoodsType type, int delta)
6565
{
6666
int idx = (int)type;
67-
return traded[idx].AddPositiveRNow(delta);
67+
int newVal = traded[idx].AddPositiveRNow(delta);
68+
69+
// update price based on traded quantity (decay mechanism)
70+
double marketMul = marketType switch
71+
{
72+
MarketType.SMALL_MARKET => GameData.SmallMarketMultiplier,
73+
MarketType.MEDIUM_MARKET => GameData.MediumMarketMultiplier,
74+
MarketType.LARGE_MARKET => GameData.LargeMarketMultiplier,
75+
_ => GameData.MediumMarketMultiplier
76+
};
77+
78+
// base price for the good
79+
int basePrice = type switch
80+
{
81+
GoodsType.SEMICONDUCTOR => GameData.BasePriceSemiconductor,
82+
GoodsType.MEDICINE => GameData.BasePriceMedicine,
83+
GoodsType.TOYS => GameData.BasePriceToys,
84+
GoodsType.CLOTHES => GameData.BasePriceClothes,
85+
GoodsType.FOOD => GameData.BasePriceFood,
86+
_ => 1
87+
};
88+
89+
// decay steps based on thresholds
90+
int steps = newVal / GameData.MarketDecayThreshold;
91+
double mulDecay = 1.0 - steps * GameData.MarketDecayStep;
92+
if (mulDecay < GameData.MarketMinMultiplier) mulDecay = GameData.MarketMinMultiplier;
93+
94+
int newPrice = (int)Math.Round(basePrice * marketMul * mulDecay);
95+
if (newPrice < 0) newPrice = 0;
96+
prices[idx].SetROri(newPrice);
97+
98+
return newVal;
6899
}
69100

70101
public System.Collections.Generic.IReadOnlyDictionary<GoodsType, int> SnapshotTraded()

logic/GameClass/GameObj/Factory.cs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,19 @@ public long SubComputingPower(long sub)
111111
return ComputingPower.SubRNow(sub);
112112
}
113113

114+
115+
public void TickComputingPower(int elapsedMs)
116+
{
117+
if (elapsedMs <= 0) return;
118+
long add = (long)(GameData.FactoryComputePowerPerSecond * (elapsedMs / 1000.0));
119+
if (add > 0) ComputingPower.AddRNow(add);
120+
}
121+
122+
public void ProduceComputingPowerOneSecond()
123+
{
124+
ComputingPower.AddRNow(GameData.FactoryComputePowerPerSecond);
125+
}
126+
114127
public void Interupt()
115128
{
116129
CanProduce.SetROri(false);

logic/Gaming/ActionManager.cs

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,8 @@ public bool MoveCharacter(Character characterToMove, int moveTimeInMilliseconds,
5555
characterToMove.ThreadNum.Release();
5656
return;
5757
}
58-
moveEngine.MoveObj(characterToMove, moveTimeInMilliseconds, moveDirection, characterToMove.StateNum, characterToMove.Efficiency);
58+
59+
moveEngine.MoveObj(characterToMove, moveTimeInMilliseconds, moveDirection, characterToMove.StateNum, 0);
5960
Thread.Sleep(moveTimeInMilliseconds);
6061
characterToMove.ResetCharacterState(stateNum);
6162
}
@@ -141,10 +142,15 @@ public bool Harvest(Character character)
141142
character.ResetCharacterState(stateNum);
142143
return false;
143144
}
145+
146+
int effLevel = (int)character.Efficiency.GetValue();
147+
double effMultiplier = 1.0 + effLevel * GameData.EfficiencyMultiplierPerLevel;
148+
long adjustedAdd = (long)Math.Round(addresource * effMultiplier);
149+
144150
var teamFactory = game.GetTeamFactory((long)character.TeamID.Get());
145151
if (teamFactory != null)
146152
{
147-
teamFactory.AddSource(addresource);
153+
teamFactory.AddSource(adjustedAdd);
148154
}
149155
if (resource.HP == 0)
150156
{
@@ -182,7 +188,10 @@ public bool Occupy(Character character)
182188
return;
183189
}
184190
Thread.Sleep(GameData.CheckInterval);
185-
int occupyTimeMs = GameData.ComputeCenterOccupyTimeMs;
191+
int effLevel = (int)character.Efficiency.GetValue();
192+
double effMultiplier = 1.0 + effLevel * GameData.EfficiencyMultiplierPerLevel;
193+
int occupyTimeMs = Math.Max(1, (int)Math.Round(GameData.ComputeCenterOccupyTimeMs / effMultiplier));
194+
186195
int elapsed = 0;
187196
new FrameRateTaskExecutor<int>
188197
(

0 commit comments

Comments
 (0)