Skip to content

Commit 1debd74

Browse files
committed
Update TetrisEngineTest.cs
1 parent 9816b4a commit 1debd74

1 file changed

Lines changed: 152 additions & 0 deletions

File tree

osu.Game.Tests/NonVisual/Tetris/TetrisEngineTest.cs

Lines changed: 152 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
using NUnit.Framework;
99
using osu.Game.Screens.Tetris;
1010
using osu.Game.Screens.Tetris.Definitions;
11+
using osu.Game.Screens.Tetris.Judgements;
1112
using osu.Game.Screens.Tetris.Rotations;
1213
using osuTK.Graphics;
1314

@@ -331,6 +332,114 @@ public void TestGravityPropertiesStayInSync()
331332
Assert.That(settings.BaseGravityInterval, Is.EqualTo(1000.0 / (0.02 * 60)).Within(0.000001));
332333
}
333334

335+
[Test]
336+
public void TestComboTracksConsecutiveLineClears()
337+
{
338+
var pieceSet = createSingleCellSequencePieceSet();
339+
var engine = new TetrisEngine(new TetrisGameSettings
340+
{
341+
PieceSet = pieceSet,
342+
RotationSystem = pieceSet.DefaultRotationSystem,
343+
BoardWidth = 2,
344+
VisibleRows = 8,
345+
HiddenRows = 2,
346+
RandomSeed = 5,
347+
});
348+
349+
engine.Press(TetrisAction.HardDrop);
350+
Assert.That(engine.Combo, Is.EqualTo(0));
351+
352+
engine.Press(TetrisAction.MoveRight);
353+
engine.Press(TetrisAction.HardDrop);
354+
Assert.That(engine.Combo, Is.EqualTo(1));
355+
356+
engine.Press(TetrisAction.HardDrop);
357+
Assert.That(engine.Combo, Is.EqualTo(0));
358+
}
359+
360+
[Test]
361+
public void TestBackToBackTracksTetrisesAndBreaksOnRegularLineClear()
362+
{
363+
var pieceSet = createBackToBackTestPieceSet();
364+
var engine = new TetrisEngine(new TetrisGameSettings
365+
{
366+
PieceSet = pieceSet,
367+
RotationSystem = pieceSet.DefaultRotationSystem,
368+
BoardWidth = 1,
369+
VisibleRows = 12,
370+
HiddenRows = 2,
371+
RandomSeed = 6,
372+
});
373+
374+
engine.Press(TetrisAction.HardDrop);
375+
Assert.That(engine.BackToBack, Is.True);
376+
Assert.That(engine.Combo, Is.EqualTo(1));
377+
378+
engine.Press(TetrisAction.HardDrop);
379+
Assert.That(engine.BackToBack, Is.False);
380+
Assert.That(engine.Combo, Is.EqualTo(2));
381+
382+
engine.Press(TetrisAction.HardDrop);
383+
Assert.That(engine.BackToBack, Is.True);
384+
Assert.That(engine.Combo, Is.EqualTo(3));
385+
}
386+
387+
[Test]
388+
public void TestCustomLockJudgementSystemCanDefineBackToBack()
389+
{
390+
var pieceSet = createSingleCellSequencePieceSet();
391+
var engine = new TetrisEngine(new TetrisGameSettings
392+
{
393+
PieceSet = pieceSet,
394+
RotationSystem = pieceSet.DefaultRotationSystem,
395+
BoardWidth = 1,
396+
VisibleRows = 8,
397+
HiddenRows = 2,
398+
RandomSeed = 8,
399+
LockJudgementSystem = new TetrisLockJudgementSystem("All Singles", context =>
400+
new TetrisLockJudgement(TetrisSpinKind.Full, context.LinesCleared > 0)),
401+
});
402+
403+
engine.Press(TetrisAction.HardDrop);
404+
405+
Assert.That(engine.BackToBack, Is.True);
406+
Assert.That(engine.LastSpin, Is.EqualTo(TetrisSpinKind.Full));
407+
}
408+
409+
[Test]
410+
public void TestStandardJudgementRecognisesFullTSpin()
411+
{
412+
TetrisPieceDefinition t = TetrisPieceSetDefinitions.Modern.Pieces.Single(p => p.Name == "T");
413+
var board = new TetrisPieceDefinition[10, 24];
414+
415+
board[4, 5] = t;
416+
board[6, 5] = t;
417+
board[4, 7] = t;
418+
419+
var context = new TetrisLockContext(t, 1, 4, 5, 2, true, 1, true, new[] { 5, 6 }, board);
420+
TetrisLockJudgement judgement = TetrisLockJudgementSystems.Standard.Evaluate(context);
421+
422+
Assert.That(judgement.Spin, Is.EqualTo(TetrisSpinKind.Full));
423+
Assert.That(judgement.MaintainsBackToBack, Is.True);
424+
}
425+
426+
[Test]
427+
public void TestAllSpinJudgementRecognisesGenericSpin()
428+
{
429+
TetrisPieceDefinition l = TetrisPieceSetDefinitions.Modern.Pieces.Single(p => p.Name == "L");
430+
var board = new TetrisPieceDefinition[10, 24];
431+
432+
board[4, 5] = l;
433+
board[6, 5] = l;
434+
board[5, 4] = l;
435+
436+
var context = new TetrisLockContext(l, 1, 4, 5, 1, true, 1, true, new[] { 5 }, board);
437+
TetrisLockJudgement judgement = TetrisLockJudgementSystems.AllSpin.Evaluate(context);
438+
439+
Assert.That(judgement.Spin, Is.EqualTo(TetrisSpinKind.Full));
440+
Assert.That(judgement.MaintainsBackToBack, Is.True);
441+
}
442+
334443
private static TetrisEngine createDasCutEngine(TetrisPieceSetDefinition pieceSet)
335444
{
336445
return new TetrisEngine(new TetrisGameSettings
@@ -380,5 +489,48 @@ private static TetrisPieceSetDefinition createRotatingBarPieceSet()
380489

381490
return new TetrisPieceSetDefinition("Rotating Bar", new[] { bar }, new[] { rotationSystem }, rotationSystem);
382491
}
492+
493+
private static TetrisPieceSetDefinition createSingleCellSequencePieceSet()
494+
{
495+
var dot = new TetrisPieceDefinition("Dot", Color4.White, new[]
496+
{
497+
new[] { new PiecePoint(0, 0) },
498+
}, "dot");
499+
500+
var rotationSystem = new TetrisRotationSystem("Identity", (_, _, _, _) => new[]
501+
{
502+
new PiecePoint(0, 0),
503+
});
504+
505+
return new TetrisPieceSetDefinition("Single Cell Sequence", new[] { dot }, new[] { rotationSystem }, rotationSystem,
506+
(_, pieces) => Enumerable.Repeat(pieces[0], 16));
507+
}
508+
509+
private static TetrisPieceSetDefinition createBackToBackTestPieceSet()
510+
{
511+
var tetris = new TetrisPieceDefinition("Tetris", Color4.Cyan, new[]
512+
{
513+
new[]
514+
{
515+
new PiecePoint(0, 0),
516+
new PiecePoint(0, 1),
517+
new PiecePoint(0, 2),
518+
new PiecePoint(0, 3),
519+
},
520+
}, "tetris");
521+
522+
var dot = new TetrisPieceDefinition("Dot", Color4.White, new[]
523+
{
524+
new[] { new PiecePoint(0, 0) },
525+
}, "dot");
526+
527+
var rotationSystem = new TetrisRotationSystem("Identity", (_, _, _, _) => new[]
528+
{
529+
new PiecePoint(0, 0),
530+
});
531+
532+
return new TetrisPieceSetDefinition("Back To Back Test", new[] { tetris, dot }, new[] { rotationSystem }, rotationSystem,
533+
(_, __) => new[] { tetris, dot, tetris, dot, tetris, dot });
534+
}
383535
}
384536
}

0 commit comments

Comments
 (0)