fix: 🚑 fix a bug about Rescuing
tags/0.1.0
| @@ -22,6 +22,11 @@ Q:卡死在第一帧不动 | |||||
| A:大概率是你的代码死循环了 | A:大概率是你的代码死循环了 | ||||
| Q: | |||||
|  | |||||
| A:命令行参数的type设置有误 | |||||
| ## C++ | ## C++ | ||||
| Q:显示API项目已卸载 | Q:显示API项目已卸载 | ||||
| @@ -56,7 +61,11 @@ A: | |||||
| 2. 不要点重新生成,要点生成 | 2. 不要点重新生成,要点生成 | ||||
| 3. 开启下图选项 | 3. 开启下图选项 | ||||
|  |  | ||||
| Q:这是什么错误啊 | |||||
|  | |||||
| 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()修改 等 | |||||
| @@ -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) | ||||
| { | { | ||||
| @@ -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) | ||||
| { | { | ||||
| @@ -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; | ||||
| @@ -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); | ||||
| @@ -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,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 | ||||