Professional Documents
Culture Documents
Codes
Codes
using
using
using
using
using
System;
System.Collections.Generic;
System.Drawing;
System.Drawing.Drawing2D;
System.Windows.Forms;
TestingRoom;
namespace Billiards
{
public static class Program
{
[STAThread]
private static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new TestRoom(CreateTestCases()));
}
private static IEnumerable<TestCase> CreateTestCases()
{
yield return BilliardTestCase.VerticalWall(45, 135);
yield return BilliardTestCase.VerticalWall(10, 170);
yield return BilliardTestCase.VerticalWall(171, 9);
yield return BilliardTestCase.VerticalWall(90, 90);
yield return BilliardTestCase.VerticalWall(91, 89);
yield return BilliardTestCase.HorizontalWall(90, 270);
yield return BilliardTestCase.HorizontalWall(270, 90);
yield return BilliardTestCase.HorizontalWall(-95, 95);
yield return BilliardTestCase.HorizontalWall(10, 350);
yield return BilliardTestCase.HorizontalWall(40, 320);
yield return BilliardTestCase.ArbitraryWall(0, 45, 90);
yield return BilliardTestCase.ArbitraryWall(45, 45, 45);
yield return BilliardTestCase.ArbitraryWall(44, 45, 46);
yield return BilliardTestCase.ArbitraryWall(-44, -45, -4
6);
yield return BilliardTestCase.ArbitraryWall(44, -45, -13
4);
yield return BilliardTestCase.ArbitraryWall(0, 10, 20);
yield return BilliardTestCase.ArbitraryWall(0, -10, -20)
;
}
}
public enum BillartTaskType
{
HorizontallWall,
VerticalWall,
ArbitraryWall
}
public class BilliardTestCase : TestCase
{
private readonly double expectedFinalDirection;
private readonly double initialDirection;
private readonly BillartTaskType taskType;
private readonly double wallInclanation;
private double angle;
private BilliardTestCase(double initialDirection, double wallInc
if (taskType == BillartTaskType.ArbitraryWall)
return tasks.BounceWall(initialDirection, wallIn
clanation);
else if (taskType == BillartTaskType.HorizontallWall)
return tasks.BounceHorizontalWall(initialDirecti
on);
else
return tasks.BounceVerticalWall(initialDirection
);
}
private string ToGradus(double radians)
{
return radians*180/Math.PI + "";
}
}
}