###WinForms Remake of the AA Game
Предмет на оваа проектна задача е креирање на PC верзија на популарната мобилна игра АА. Играта е многу едноставна и на почетокот навидум лесна, но по изминување на првите неколку нивоа таа станува вистински предизвик. Оригиналната мобилна апликација може да ја пронајдете тука за Android и тука за iOS.
###Имплементација
Имплементацијата на играта е релативно едноставна и се состои од две форми. Првата фрома се појавува при стартување на играта и служи за стартување на нивото. Истата форма се користи и при крај на дадено ниво, било тоа да е поради успешно завршено ниво или поради загубен обид.
Втората форма претставува главното платно каде се игра играта. Формата содржи само пет класни променливи:
public partial class Game : Form
{
Rotator Rotator;
StartScreen parentForm;
Timer closeTimer;
GameLevels Levels;
...
}
Инстанцата од класата Rotator е главната компонента која се исцртува на платното. Таа содржи информации за брзината на ротација, бројот на топчиња кои ротираат како и аголното поместување на секое топче. Истата класа има и методи кои овозможуваат проверка на колизија помеѓу топчиња.
Инстанцата од класата StartScreen e инстанца од првата форма и служи за транзиција помеѓу формите.
Инстанцата oд класата Timer служи за креирање на ефекти при крајот на дадено ниво.
Инстанцата од класата GameLevels служи за чување на инфромации за соодветното ниво. Таа содржи инфромации за бројот на топчиња кои треба да ги употреби натпреварувачот како и брзината која треба да биде поставена во Ротаторот. Класата исто така обезбедува и методи за запишување и читање на моменталното ниво во датотека, со што доколку дојде до затворање на играта натпреварувачот нема да го загуби својот напредок. При првото стартување класата ќе ја креира датотеката.
Формата има исто така уште една инстанца од класата Timer која е поставена преку Designer и истата служи за ротацијата и повикување на paint.
Во конструктортот на формата на почетокот се инцијализираат компонентите од Designer, се поставува DoubleBuffered на true со цел да имаме побрзо исцртување на формите и позадината на формата се поставува да биде бела. Потоа правиме инстанци од класта за нивото и го земаме ротаторот за соодветното ниво. На крајот поставување динамички офсет со цел ротаторот да биде центриран и рачно додаваме listener за KeyDown.
public Game()
{
InitializeComponent();
DoubleBuffered = true;
this.BackColor = Color.White;
Levels = new GameLevels();
Rotator = Levels.GetLevel();
Rotator.HorizontalOffset = (this.Width / 2) - Rotator.Padding - Rotator.Radius;
KeyDown += Game_KeyDown;
}
Формата има пет listener методи:
private void Game_Paint(object sender, PaintEventArgs e)
{
Rotator.Draw(e.Graphics);
}
Paint методот е едноставен и повикува исцртување на Ротаторот.
private void timer1_Tick(object sender, EventArgs e)
{
Rotator.Rotate();
Invalidate();
}
timer1_Tick e исто така едноставен метод кој само предизвикува ротација и повторно исцртување на формата.
private void Game_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Space)
{
Rotator.AddNewBall();
if (Rotator.CheckForCollision())
{
LoseGame();
Invalidate();
}
if (Rotator.NumberOfBallsToShoot == 0)
{
WinLevel();
Invalidate();
}
}
}
KeyDown методот служи за регистирање кога играчот притиснал на space копчето и во тој момент проверува за колизија. Доколку имало колизија се повикува метод за завршување на играта. Доколку немало колизија и тоа е последното топче од нивото се преминува на следно ниво.
private void fadeOutTick(object sender, EventArgs e)
{
this.Opacity -= 0.05;
if (this.Opacity <= 0.05)
{
closeTimer.Stop();
this.Close();
}
}
fadeOutTick e едноставен метод за ефект при завржување на играта.
private void Game_SizeChanged(object sender, EventArgs e)
{
Rotator.HorizontalOffset = (this.Width / 2) - Rotator.Padding - Rotator.Radius;
}
SizeChanged е метод кој при помена на големината на формата обезбедува центрирање на ротаторот.
#Изглед и правила на игра
Со кликања на копчето Start Game започнува играта во одредено ниво.
Изглед на играта во одренено ниво. Наша цел е да сместиме n топчина (зависно од нивото) на ротаторот во средина и притоа нитуедно топче да не се допира со друго топче. За ланистање на топчиња се користи Space копчето. Доколку ги сместиме сите топчиња ќе преминеме на следното ниво, но доколку настане колизија нивото ќе мора да го започенме од ново.
Форма која се појавува по загубено ниво.
Форма која се појавува по успешно поминато ниво.
###Пријатно играње!