Programming on C++

Rambler's Top100

Как я писал игру арканоид

 

Главная страница

Статьи

Программы

Ссылки

Форум

Игра арканоид была создана очень давно. Суть игры в следующем: наверху экрана стоят кубики, внизу ездит бита(арканоид), есть мячик. Надо отбивать мячик битой и сбивать кубики.

Картинка взята из игры DXBall2.

В стандартном арканоиде угол отлёта шарика зависит от точки, куда упал шарик на биту. Т.е если шарик упал на самый центр биты, то шарик полетит вверх, а если шарик упал на правый край биты, то шарик полетит вверх вправо.

А вот мой арканоид:

Естественно мой арканоид хуже :(

Итак: как же я его писал?

Для начала надо было определиться с функциями. Т.е. какие я функции буду использовать. Я решил использовать следующие функции: arcanoid(), ball(), kubic(), cubes(), main(). Ну с main() всё понятно. Arcanoid() - функция рисования самой биты. Ball() - функция рисования шарика и проверка столкновений шарика со стенками и с кубиками. Kubic() - рисует символ \376 (эта функция удобна потому, что для изменения символа кубика надо это изменить только в одном месте). Cubes() - рисует ряды кубиков. У меня в программе все функции (void). Все переменные хранятся в глобальной памяти. Вот какие переменные оказались:

 

x double x координата шарика
y double y координата шарика
vx double скорость шарика по x
vy double скорость шарика по y
arcx double x координата биты
kub int количество сбитых кубиков
diff int сложность игры
timet int время задержки в секундах
k1, k2, k3, k4, k5 int сбит/не сбит кубик
timetime long* указатель на таймер
t1, t2, t3, t4 long переменные для времени

А теперь, как я писал функции:

  • arcanoid() - сначала весь последний ряд (25) стирается, а потом рисуется сама бита с позиции arcx.
  • main() - сначала все кубики устанавливаются как не сбитые, потом просят ввести сложность, рисуются кубики и потом в цикле проверка на нажатие кнопки.
  • ball() - сначала проверка, на время, потом проверка на стенки (если ударился об стенки, то скорость * (-1)), потом проверка упал ли мячик на биту и проверка на столкновение с кубиками.

Я решил использовать для направления движения мячика скорость. Т.е. если скорость например по иксу положительна, то икс-координата мячика увеличивается. И получается очень простая реализация: x += vx; y += vy;

Переменная timtime указывает на таймер по адресу 0040:006C.

Получился арканоид, моя первая игра.

Исходник.

Назад, на рубрику Статьи.

 

 

 

Rambler's Top100 Рейтинг@Mail.ru

 

Copyright ©2002 Safronov Pavel

Hosted by uCoz