Реализация игры "Змейка" - C#
Формулировка задачи:
Решил написать змейку на Windows Forms с полноценным ООП, нужна ваша помощь.
Вот что я решил делать:
Теперь собственно вопросы:
1) Как задавать координаты всех звеньев вначале и в любой момент времени? Где лучше хранить текущие ячейки змеи с их координатами? (Я думал ArrayList или массив типа Point)
2) Как и где реализовывать метод СьестьЦветок? (когда змея сьедает его, то новая клетка прибавляется к хвосту?)
3) Как заполнять двумерный массив игрового поля зависимо от координат звеньев змеи? (Я думал в классе Змея добавить поле класса ИгровоеПоле)
4) Как лучше рисовать и перерисовывать игровое поле на каждом тике таймера чтобы экран “не мигал“?
Я просто розлинею поле и буду закрашивать клетки разными цветами.
5) Что добавить, убрать, поправить по проэктированию?
Класс для змеи
//Поля:
начальноеКоличествоЗвеньев (константа)
текущееКоличествоЗвеньев
направлениеДвижения (будет типа перечисления)
координатыГоловы(наверно типа Point)
Конструктор(количествоЗвеньев, координатыГоловы, направлениеДвижения)
//Свойства:
НачальноеКоличествоЗвеньев
ТекущееКоличествоЗвеньев
КоординатыГоловы
НаправлениеДвижения
//Методы:
Point Двигаться(направлениеДвижения) // Имеется ввиду только для головы
{
// В зависимости от направления увеличивать или уменьшать координату X или Y головы
}
ПеремещатьВсеЗвенья()
{
// задавать координаты для всех звеньев через координаты им предыдущих, кроме головы
}
СменитьНаправлениеДвижения(направлениеДвижения)
{
// return направлениеДвижения
}
bool МожетДвигаться()
{
// Если координаты головы находятся в пределах игрового поля и координаты головы не совпадают с
кординатами каждого звена
return true
}
Класс ИгровоеПоле
//Поля:
Ширина, Высота(в количестве клеток)
размерКлетки
цветПростойКлеткиПоля, цветГоловыЗмеи, цветЭлементаЗмеи, цветЦветка (змея поедает цветы)
текущееКоличествоЦветковНаПоле
двумерный массив типа перечисления [ширина, высота]
// Перечисление тип клетки: пустая – 1, голова – 2, звенозмеи – 3, цветок – 4
Конструктор
…
Свойства
…
Методы:
СоздатьЦветок()
{
// если на поле 0 цветков то случайной клетке поля присвоить тип цветок
}
НарисоватьПоле
{
// в зависимости от типа каждой клетки красить их разными цветами
}Решение задачи: «Реализация игры "Змейка"»
textual
Листинг программы
private void Game() // метод который будет вызываться по таймеру.
{
update();
redraw();
}
private void update() // в этом методе будет апдэйт всей игры - то есть, изменение координат,
//появление новой еды и т.д.
//так же можно разделить на отдельные методы апдэйт змейки и еды на поле, и в эту записывать
//лишь эти сами методы, для удобного дебагинга
{
}
private void redraw() // в этом же методе будет все перерисовываться. аналогично
{
}
//так же потребуется функция для инициализации всего игрового контента
private void init()
{
}