Browse Source

Merge pull request #458 from shangfengh/new

fix: 🚑 fix a bug about Rescuing
tags/0.1.0
shangfengh GitHub 2 years ago
parent
commit
8c4333ed95
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 42 additions and 12 deletions
  1. +25
    -2
      docs/QandA.md
  2. +0
    -1
      logic/GameClass/GameObj/Map/Chest.cs
  3. +3
    -3
      logic/GameClass/GameObj/Map/Map.cs
  4. +8
    -4
      logic/GameEngine/MoveEngine.cs
  5. +4
    -0
      logic/Gaming/CharacterManager .cs
  6. +1
    -1
      logic/Server/CopyInfo.cs
  7. +1
    -1
      logic/cmd/gameServerAndClient.cmd
  8. BIN
      resource/vector.png
  9. BIN
      resource/wrongType.png

+ 25
- 2
docs/QandA.md View File

@@ -22,6 +22,11 @@ Q:卡死在第一帧不动


A:大概率是你的代码死循环了 A:大概率是你的代码死循环了


Q:
![wrongType](https://raw.githubusercontent.com/shangfengh/THUAI6/new/resource/wrongType.png)

A:命令行参数的type设置有误

## C++ ## C++


Q:显示API项目已卸载 Q:显示API项目已卸载
@@ -56,7 +61,11 @@ A:
2. 不要点重新生成,要点生成 2. 不要点重新生成,要点生成
3. 开启下图选项 3. 开启下图选项
![CompileFaster](https://raw.githubusercontent.com/shangfengh/THUAI6/new/resource/CompileFaster.png) ![CompileFaster](https://raw.githubusercontent.com/shangfengh/THUAI6/new/resource/CompileFaster.png)

Q:这是什么错误啊
![vector](https://raw.githubusercontent.com/shangfengh/THUAI6/new/resource/vector.png)

A:调用了容量为0的vector


## Python ## Python


@@ -73,6 +82,20 @@ A:
- 可能措施3. 更新pip - 可能措施3. 更新pip
`python -m pip install --upgrade pip` (pip 版本最好为23.1) `python -m pip install --upgrade pip` (pip 版本最好为23.1)


## 游戏引擎/机制
Q:咱们这边play函数调用机制究竟是怎么样的?如果50ms内没有执行完当前程序,是在下一帧不会重新调用play吗
还是只有move这样的明确有时间为参量的才会有上面那个机制

A:
- 调用任何主动指令都不会占用你play函数多少时间,你可以把它想成一个信号,告诉游戏引擎你想做什么
- 50ms内没有执行完当前程序,是指你的play函数例如求最短路之类的操作会占用的时间
- 准确地说,50ms内没有执行完当前程序,在下一帧一般会重新调用play
- 比如说,你第一次调用花了70ms
那么下一次调用会在这次之后立刻开始
如果你三次都70ms,就会4帧3次play了
- 当然第一次调用花了110ms,第二帧自然不调用了


## 比赛相关 ## 比赛相关
Q:职业数值会修改吗? Q:职业数值会修改吗?


@@ -80,4 +103,4 @@ A:初赛结束会调数值及机制,增加新角色


Q:初赛后会修改什么呢? Q:初赛后会修改什么呢?


A:可能的修改:技能冷却时间等属性设为不可见;出生点随机性或可选性;增强教师等职业,削弱职业;规范Debug信息;提供不同格式的信息传递;增加职业;优化游戏结束条件;角色毅力值清空不在使捣蛋鬼产生BGM;HaveView()修改;Move覆盖先前的Move
A:可能的修改:技能冷却时间等属性设为不可见;出生点随机性或可选性;增强教师等职业,削弱职业;规范Debug信息;提供不同格式的信息传递;增加职业;优化游戏结束条件;角色毅力值清空不在使捣蛋鬼产生BGM;HaveView()修改 等

+ 0
- 1
logic/GameClass/GameObj/Map/Chest.cs View File

@@ -23,7 +23,6 @@ namespace GameClass.GameObj
private int openStartTime = 0; private int openStartTime = 0;
public int OpenStartTime => openStartTime; public int OpenStartTime => openStartTime;
private Character? whoOpen = null; private Character? whoOpen = null;

public Character? WhoOpen => whoOpen; public Character? WhoOpen => whoOpen;
public void Open(int startTime, Character character) public void Open(int startTime, Character character)
{ {


+ 3
- 3
logic/GameClass/GameObj/Map/Map.cs View File

@@ -232,14 +232,14 @@ namespace GameClass.GameObj
break; break;
} }
} }
if (ToDel != null)
GameObjDict[gameObj.Type].Remove(ToDel);
} }
finally finally
{ {
GameObjLockDict[gameObj.Type].ExitWriteLock(); GameObjLockDict[gameObj.Type].ExitWriteLock();
} }
if (ToDel == null) return false;
GameObjDict[gameObj.Type].Remove(ToDel);
return true;
return ToDel != null;
} }
public bool RemoveJustFromMap(GameObj gameObj) public bool RemoveJustFromMap(GameObj gameObj)
{ {


+ 8
- 4
logic/GameEngine/MoveEngine.cs View File

@@ -147,14 +147,16 @@ namespace GameEngine
isDestroyed = true; isDestroyed = true;
return false; return false;
case AfterCollision.MoveMax: case AfterCollision.MoveMax:
MoveMax(obj, res);
if (threadNum == 0 || ((ICharacter)obj).ThreadNum == threadNum)
MoveMax(obj, res);
moveVecLength = 0; moveVecLength = 0;
res = new XY(direction, moveVecLength); res = new XY(direction, moveVecLength);
break; break;
} }
} while (flag); } while (flag);


deltaLen += moveVecLength - Math.Sqrt(obj.MovingSetPos(res, GetPlaceType(obj.Position + res)));
if (threadNum == 0 || ((ICharacter)obj).ThreadNum == threadNum)
deltaLen += moveVecLength - Math.Sqrt(obj.MovingSetPos(res, GetPlaceType(obj.Position + res)));


return true; return true;
}, },
@@ -172,7 +174,8 @@ namespace GameEngine
res = new XY(direction, moveVecLength); res = new XY(direction, moveVecLength);
if ((collisionObj = collisionChecker.CheckCollisionWhenMoving(obj, res)) == null) if ((collisionObj = collisionChecker.CheckCollisionWhenMoving(obj, res)) == null)
{ {
obj.MovingSetPos(res, GetPlaceType(obj.Position + res));
if (threadNum == 0 || ((ICharacter)obj).ThreadNum == threadNum)
obj.MovingSetPos(res, GetPlaceType(obj.Position + res));
} }
else else
{ {
@@ -186,7 +189,8 @@ namespace GameEngine
isDestroyed = true; isDestroyed = true;
break; break;
case AfterCollision.MoveMax: case AfterCollision.MoveMax:
MoveMax(obj, res);
if (threadNum == 0 || ((ICharacter)obj).ThreadNum == threadNum)
MoveMax(obj, res);
moveVecLength = 0; moveVecLength = 0;
res = new XY(direction, moveVecLength); res = new XY(direction, moveVecLength);
break; break;


+ 4
- 0
logic/Gaming/CharacterManager .cs View File

@@ -37,10 +37,14 @@ namespace Gaming
case PlayerStateType.Addicted: case PlayerStateType.Addicted:
if (value == PlayerStateType.Rescued) if (value == PlayerStateType.Rescued)
player.ChangePlayerStateInOneThread(value, gameObj); player.ChangePlayerStateInOneThread(value, gameObj);
else
player.ChangePlayerState(value, gameObj);
break; break;
case PlayerStateType.Rescued: case PlayerStateType.Rescued:
if (value == PlayerStateType.Addicted) if (value == PlayerStateType.Addicted)
player.ChangePlayerStateInOneThread(value, gameObj); player.ChangePlayerStateInOneThread(value, gameObj);
else
player.ChangePlayerState(value, gameObj);
break; break;
default: default:
player.ChangePlayerState(value, gameObj); player.ChangePlayerState(value, gameObj);


+ 1
- 1
logic/Server/CopyInfo.cs View File

@@ -272,7 +272,7 @@ namespace Server
Y = chest.Position.y Y = chest.Position.y
} }
}; };
int progress = (chest.OpenStartTime > 0) ? ((time - chest.OpenStartTime) * chest.WhoOpen!.SpeedOfOpenChest) : 0;
int progress = (chest.WhoOpen != null) ? ((time - chest.OpenStartTime) * chest.WhoOpen.SpeedOfOpenChest) : 0;
msg.ChestMessage.Progress = (progress > GameData.degreeOfOpenedChest) ? GameData.degreeOfOpenedChest : progress; msg.ChestMessage.Progress = (progress > GameData.degreeOfOpenedChest) ? GameData.degreeOfOpenedChest : progress;
return msg; return msg;
} }


+ 1
- 1
logic/cmd/gameServerAndClient.cmd View File

@@ -1,6 +1,6 @@
@echo off @echo off


start cmd /k ..\Server\bin\Debug\net6.0\Server.exe --ip 0.0.0.0 --port 8888 --studentCount 4 --trickerCount 1 --gameTimeInSecond 600 --fileName test
start cmd /k ..\Server\bin\Debug\net6.0\Server.exe --ip 0.0.0.0 --port 8888 --studentCount 0 --trickerCount 1 --gameTimeInSecond 600 --fileName test


ping -n 2 127.0.0.1 > NUL ping -n 2 127.0.0.1 > NUL



BIN
resource/vector.png View File

Before After
Width: 929  |  Height: 731  |  Size: 37 kB

BIN
resource/wrongType.png View File

Before After
Width: 856  |  Height: 420  |  Size: 28 kB

Loading…
Cancel
Save