mirror of
https://github.com/babalae/better-genshin-impact.git
synced 2026-05-10 00:44:10 +08:00
由于偶尔观测到抛竿时“摇摆”行为的出现,设计了一种单元测试来为修改算法做准备。此commit中,改新添加的单元测试是通过不了的。
This commit is contained in:
@@ -197,6 +197,7 @@ namespace BetterGenshinImpact.GameTask.AutoFishing
|
||||
{
|
||||
noPlacementTimes = 0;
|
||||
noTargetFishTimes = 0;
|
||||
prevTargetFishRect = Rect.Empty;
|
||||
|
||||
input.Mouse.LeftButtonDown();
|
||||
blackboard.pitchReset = true;
|
||||
@@ -213,7 +214,12 @@ namespace BetterGenshinImpact.GameTask.AutoFishing
|
||||
drawContent.RemoveRect("PrevFish");
|
||||
}
|
||||
|
||||
Rect prevTargetFishRect = Rect.Empty; // 记录上一个目标鱼的位置
|
||||
Rect prevTargetFishRect; // 记录上一个目标鱼的位置
|
||||
|
||||
/// <summary>
|
||||
/// 当前鱼
|
||||
/// </summary>
|
||||
public OneFish? currentFish { get; private set; }
|
||||
|
||||
protected override BehaviourStatus Update(ImageRegion imageRegion)
|
||||
{
|
||||
@@ -228,6 +234,7 @@ namespace BetterGenshinImpact.GameTask.AutoFishing
|
||||
var result = blackboard.predictor.Detect(memoryStream);
|
||||
Debug.WriteLine($"YOLOv8识别: {result.Speed}");
|
||||
var fishpond = new Fishpond(result, includeTarget: timeProvider.GetLocalNow() <= ignoreObtainedEndTime);
|
||||
blackboard.fishpond = fishpond;
|
||||
Random _rd = new();
|
||||
if (fishpond.TargetRect == null || fishpond.TargetRect == Rect.Empty)
|
||||
{
|
||||
@@ -261,7 +268,7 @@ namespace BetterGenshinImpact.GameTask.AutoFishing
|
||||
Rect fishpondTargetRect = (Rect)fishpond.TargetRect;
|
||||
|
||||
// 找到落点最近的鱼
|
||||
OneFish? currentFish = null;
|
||||
currentFish = null;
|
||||
if (prevTargetFishRect == Rect.Empty)
|
||||
{
|
||||
var list = fishpond.FilterByBaitName(blackboard.selectedBaitName);
|
||||
|
||||
@@ -36,8 +36,7 @@ namespace BetterGenshinImpact.UnitTest.GameTaskTests.AutoFishingTests
|
||||
selectedBaitName = selectedBaitName
|
||||
};
|
||||
|
||||
DateTimeOffset dateTime = new DateTimeOffset(2025, 2, 26, 16, 13, 54, 285, TimeSpan.FromHours(8));
|
||||
FakeTimeProvider fakeTimeProvider = new FakeTimeProvider(dateTime);
|
||||
FakeTimeProvider fakeTimeProvider = new FakeTimeProvider();
|
||||
|
||||
//
|
||||
ThrowRod sut = new ThrowRod("-", blackboard, new FakeLogger(), false, new FakeInputSimulator(), fakeTimeProvider, drawContent: new FakeDrawContent());
|
||||
@@ -68,8 +67,7 @@ namespace BetterGenshinImpact.UnitTest.GameTaskTests.AutoFishingTests
|
||||
selectedBaitName = selectedBaitName
|
||||
};
|
||||
|
||||
DateTimeOffset dateTime = new DateTimeOffset(2025, 2, 26, 16, 13, 54, 285, TimeSpan.FromHours(8));
|
||||
FakeTimeProvider fakeTimeProvider = new FakeTimeProvider(dateTime);
|
||||
FakeTimeProvider fakeTimeProvider = new FakeTimeProvider();
|
||||
|
||||
//
|
||||
ThrowRod sut = new ThrowRod("-", blackboard, new FakeLogger(), false, new FakeInputSimulator(), fakeTimeProvider, drawContent: new FakeDrawContent());
|
||||
@@ -79,5 +77,46 @@ namespace BetterGenshinImpact.UnitTest.GameTaskTests.AutoFishingTests
|
||||
Assert.False(blackboard.noTargetFish);
|
||||
Assert.Equal(BehaviourStatus.Running, actual);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 抛竿时,给定三条炮鲀鱼,并且确定算法能将下杆点从鱼的左侧移动到最左侧的炮鲀鱼上,此时希望“当前鱼”能始终锁定在最左侧的鱼上
|
||||
/// 由于偶尔观测到“摇摆”行为的出现,故设计此测试
|
||||
/// </summary>
|
||||
[Fact]
|
||||
public void ThrowRodTest_Target_ShouldBeTheLeftOne()
|
||||
{
|
||||
//
|
||||
Bitmap bitmap = new Bitmap(@$"..\..\..\Assets\AutoFishing\202503082114541115.png");
|
||||
var imageRegion = new GameCaptureRegion(bitmap, 0, 0, new DesktopRegion(new FakeMouseSimulator()), converter: new ScaleConverter(1d), drawContent: new FakeDrawContent());
|
||||
|
||||
var predictor = YoloV8Builder.CreateDefaultBuilder().UseOnnxModel(Global.Absolute(@"Assets\Model\Fish\bgi_fish.onnx")).Build();
|
||||
|
||||
var blackboard = new Blackboard(predictor, sleep: i => { })
|
||||
{
|
||||
selectedBaitName = "fake fly bait"
|
||||
};
|
||||
|
||||
//
|
||||
ThrowRod sut = new ThrowRod("-", blackboard, new FakeLogger(), false, new FakeInputSimulator(), new FakeTimeProvider(), drawContent: new FakeDrawContent());
|
||||
sut.Tick(imageRegion);
|
||||
var actual = sut.currentFish;
|
||||
|
||||
//
|
||||
Assert.True(blackboard.fishpond.TargetRect != null && blackboard.fishpond.TargetRect.Value != OpenCvSharp.Rect.Empty);
|
||||
Assert.Equal(3, blackboard.fishpond.Fishes.Count(f => f.FishType.Name == "pufferfish"));
|
||||
Assert.Equal(blackboard.fishpond.Fishes.OrderBy(f => f.Rect.X).First(), actual);
|
||||
|
||||
//
|
||||
bitmap = new Bitmap(@$"..\..\..\Assets\AutoFishing\202503082114560489.png");
|
||||
imageRegion = new GameCaptureRegion(bitmap, 0, 0, new DesktopRegion(new FakeMouseSimulator()), converter: new ScaleConverter(1d), drawContent: new FakeDrawContent());
|
||||
|
||||
//
|
||||
sut.Tick(imageRegion);
|
||||
actual = sut.currentFish;
|
||||
|
||||
//
|
||||
Assert.Equal(3, blackboard.fishpond.Fishes.Count(f => f.FishType.Name == "pufferfish"));
|
||||
Assert.Equal(blackboard.fishpond.Fishes.OrderBy(f => f.Rect.X).First(), actual);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user