ify"> Рис. 1. Головна форма програми
Вибравши бажану швидкість, користувач натискає на кнопку Почати і гра починається (з'являється перший блок, починається рух), запускається лічильник очок. За кожен проміжок часу дається 1 очко (рис. 2):
Рис. 2. Початок гри
При зупинці падіння фігури з'являється інша фігура і починає падати. Можна натиснути кнопку Стоп (рис. 2) і тоді програма призупиниться, лічильник очок, рух фігур припиняться, назва кнопки зміниться на Почати, і користувач зможе змінити швидкість або просто перепочити (рис. 3):
Рис. 3. Призупинення програми
Коли блоки складають повну лінію, у користувача з'являється можливість прибрати лінію натисканням на кнопку Прибрати лінію і заробити додаткові очки. Для цього треба вибрати номер прибирається рядка і натиснути на кнопку. Якщо зазначена лінія повна, то вона зникне і окуляри збільшаться, інакше нічого не відбудеться (рис. 4):
Рис. 4. Натискання на кнопку Прибрати лінію
За горизонтальне переміщення вліво/вправо відповідають кнопки «ф»/«в» відповідно. А за поворот фігури? кнопка «ц» (рис. 5):
Рис. 5. Поворот і переміщення фігури вліво
Гра припиняється, як тільки фігура не може поміститися в ігровому полі і її частина залишається за його межами. При цьому очки перестають йти, фігури рухатися, з'являється вікно, яке повідомляє користувачеві, що гра закінчена, і він набрав певне число очок (рис. 6):
Рис. 6. Закінчення гри
Після чого можна почати гру заново натисканням кнопки Почати. ??
7. Реалізація
Опис даних
У програмі описані наступні типи:
class Block -//клас «Блок», батько всіх фігур
{
public const int l=15;// сторона квадрата з яких складаються фігури
protected Point Koor;// координати лівого верхнього кута фігури
public Point [] smes;// масив зміщень квадратів від лівого кута
protected bool stop=false;// ознака зупинки
}
class z1: Block//1 фігура, успадковується від «Блок» а
{
bool pov=true;// положення фігури (2 положення)
}
class z2: Block//2 фігура, успадковується від «Блок» а
{
bool pov=true;// положення фігури (2 положення)
}
class shpala: Block//3 фігура, успадковується від «Блок» а
{
bool pov=true;// положення фігури (2 положення)
}
class g1: Block//4 фігура, успадковується від «Блок» а
{
int pov=0;// положення фігури (4 положення)
}
class g2: Block//5 фігура, успадковується від «Блок» а
{
int pov=0;// положення фігури (4 положення)
} kub: Block//6 фігура, успадковується від «Блок» а
{}
class Pole//ігрове поле, у якому рухаються фігури
{
protected bool [] [] pole;// масив, що показує зайнята клітина чи ні
protected int X;// горизонтальні розміри поля
protected int Y;// вертикальні розміри поля
}
Використовуються такі змінні:
const int st=345;// ширина поля, відведеного під промальовування
int points=0;// кількість очок
Random rnd=new Random ();// випадкові числа
Block B=new shpala (150, - 15);// фігура (починається з прямої лінії)
Pole pole=new Pole (20, 25);// ігрове поле
Структура програми
Рис. 7. Структура програми
Процедури
private void Ticker (object sender, EventArgs e)? основна процедура додатки. Виконується через кожен інтервал таймера. Здійснює запуск інших процедур, що рухають, записуючих і промальовує процедур. Алгоритм роботи процедури вказано на схемі в кордонах Початок гри - Гра закінчена (рис. 8):
Рис. 8. Алгоритм про...