π» β¨ ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Β«ΠΠΈΡΡΡΠ·ΠΈΡΒ», ΠΌΠΎΠ΄Π΅Π»ΠΈΡΡΡΡΠ°Ρ ΡΠ΅Π°Π»ΡΠ½ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡ Π²Π·Π°ΠΈΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ ΠΌΠΎΠ»Π΅ΠΊΡΠ» ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π²Π΅ΡΠ΅ΡΡΠ²Π° ΠΌΠ΅ΠΆΠ΄Ρ ΠΌΠΎΠ»Π΅ΠΊΡΠ»Π°ΠΌΠΈ Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΠΈ Π½Π°ΠΏΠΈΡΠ°Π½Π½Π°Ρ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΠΈΠ·ΡΡΠ΅Π½ΠΈΡ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ Windows Forms ΠΈ ΠΠΠ.
ΠΠΊΡΠ°Π½ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ Π½Π° Π΄Π²Π΅ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½ΠΊΠΈ. Π ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΠ°ΡΡΠΈ ΡΠΊΡΠ°Π½Π° ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ°ΡΠΈΠΊΠΎΠ², Π½ΠΎ ΡΠ°Π·Π½ΠΎΠ³ΠΎ ΡΠ²Π΅ΡΠ°. ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ°ΡΠΈΠΊΠΎΠ² Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΠ°ΡΡΠΈ ΡΠΊΡΠ°Π½Π° ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΡ ΠΏΠΎΠ»Π·ΡΠ½ΠΊΠΎΠ².
ΠΠΎ ΡΠ΅Π»ΡΠΊΡ ΠΌΡΡΠΈ Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΠΎΠΌ ΠΌΠ΅ΡΡΠ΅ ΡΠ°ΡΠΈΠΊΠΈ Π½Π°ΡΠΈΠ½Π°ΡΡ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎΠ΅ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅. ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π³ΡΠ°Π½ΠΈΡΡ ΡΠΊΡΠ°Π½Π° ΡΡΠΈΡΠ°Π΅ΡΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠΎΡΠ΄Π°ΡΠ΅Π½ΠΈΠΉ ΡΠΎ ΡΡΠ΅Π½ΠΊΠΎΠΉ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ²Π΅ΡΠ° ΡΠ°ΡΠΈΠΊΠΎΠ².
ΠΠΎ ΡΠ΅Π»ΡΠΊΡ ΠΌΡΡΠΈ ΡΠ°ΡΠΈΠΊΠΈ ΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡΡΡ ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ "Π΄Π°Π²Π»Π΅Π½ΠΈΠ΅ Π³Π°Π·Π° Π½Π° ΡΡΠ΅Π½ΠΊΠΈ ΡΠΎΡΡΠ΄Π° Π΄Π»Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ Π³Π°Π·ΠΎΠ²".
ΠΠΎΠ³Π΄Π° ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ "ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠΈΠ²Π°Π½ΠΈΠ΅ Π³Π°Π·ΠΎΠ²" ΠΏΡΠΎΡΠ΅ΡΡ ΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ. ΠΠΈΡΡΡΠ·ΠΈΡ ΡΠ²Π»ΡΠ΅ΡΡΡ Π·Π°Π²Π΅ΡΡΠ΅Π½Π½ΠΎΠΉ, ΠΊΠΎΠ³Π΄Π° ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ΄Π°ΡΠΎΠ² Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡΡ Π΄Π»ΠΈΠ½Ρ Π½Π° Π²ΡΠ΅Ρ ΡΡΠ΅Π½ΠΊΠ°Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ΅. ΠΠ΅Π»ΠΈΡΠΈΠ½Ρ ΠΏΠΎΠ³ΡΠ΅ΡΠ½ΠΎΡΡΠΈ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΡ ΠΏΠΎΠ»Π·ΡΠ½ΠΊΠΎΠ².
ΠΡΠΈΠΌΠ΅Ρ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ:
- ΠΡΠΎΠ΅ΠΊΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅ Windows Forms.
- ΠΡΠΏΠΎΠ»Π½Π΅Π½ Ρ ΡΠΎΠ±Π»ΡΠ΄Π΅Π½ΠΈΠ΅ΠΌ ΠΏΡΠΈΠ½ΡΠΈΠΏΠΎΠ² ΠΠΠ.
Π‘ΡΡΡΠΊΡΡΡΠ° ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° ΡΠ΅ΡΠ΅Π½ΠΈΡ:
ΠΡΠΎΠ΅ΠΊΡ "Common" ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ΅ΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΎΠΉ ΠΊΠ»Π°ΡΡΠΎΠ² Π΄Π»Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ²:
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΎΠ±ΡΠΈΠΉ ΠΊΠ»Π°ΡΡ "Ball" ΠΎΡ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π½Π°ΡΠ»Π΅Π΄ΡΡΡΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠ°ΡΠΈΠΊΠΈ ΡΠΎ ΡΠ²ΠΎΠΈΠΌΠΈ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡΠΌΠΈ.
Π§Π°ΡΡΡ ΠΊΠΎΠ΄Π° Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΌΠΎΠΌΠ΅Π½ΡΠ° Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠ° Π΄ΠΈΡΡΡΠ·ΠΈΠΈ:
private double CalculateEvennessFactor(int wallCountHitted, int wallLength)
{
return Math.Round(wallCountHitted / (double)wallLength, 4);
}
private bool EqualTo(double value1, double value2, double epsilon)
{
return Math.Abs(value1 - value2) < epsilon;
}
public List<EvennessFactor> CalculateEvennessFactor()
{
var evennessFactors = new List<EvennessFactor>();
var topEvenessFactor = CalculateEvennessFactor(topCountHitted, width);
var bottomEvenessFactor = CalculateEvennessFactor(bottomCountHitted, width);
var leftEvenessFactor = CalculateEvennessFactor(leftCountHitted, height);
var rightEvenessFactor = CalculateEvennessFactor(rightCountHitted, height);
evennessFactors.Add(new EvennessFactor(Side.Top, topEvenessFactor));
evennessFactors.Add(new EvennessFactor(Side.Bottom, bottomEvenessFactor));
evennessFactors.Add(new EvennessFactor(Side.Left, leftEvenessFactor));
evennessFactors.Add(new EvennessFactor(Side.Right, rightEvenessFactor));
return evennessFactors;
}
public bool IsEnd()
{
var evennessFactors = CalculateEvennessFactor();
var isEnd = false;
if(evennessFactors.Max(x => x.EvennessFactorValue) > epsilon)
{
var evennessFactorsMin = evennessFactors.Min(x => x.EvennessFactorValue);
var evennessFactorsMax = evennessFactors.Max(x => x.EvennessFactorValue);
isEnd = EqualTo(evennessFactorsMin, evennessFactorsMax, epsilon);
}
return isEnd;
}