Реализация игры "Змейка" - C#

Узнай цену своей работы

Формулировка задачи:

Решил написать змейку на Windows Forms с полноценным ООП, нужна ваша помощь. Вот что я решил делать:
Класс для змеи
//Поля:
начальноеКоличествоЗвеньев (константа)
текущееКоличествоЗвеньев
направлениеДвижения (будет типа перечисления)
координатыГоловы(наверно типа Point)

Конструктор(количествоЗвеньев, координатыГоловы, направлениеДвижения)

//Свойства:
НачальноеКоличествоЗвеньев
ТекущееКоличествоЗвеньев
КоординатыГоловы
НаправлениеДвижения

//Методы:
Point Двигаться(направлениеДвижения) // Имеется ввиду только для головы
{
// В зависимости от направления увеличивать или уменьшать координату X или Y головы
}

 ПеремещатьВсеЗвенья()
{
// задавать координаты для всех звеньев через координаты им предыдущих, кроме головы
}

СменитьНаправлениеДвижения(направлениеДвижения)
{
// return направлениеДвижения
}

bool МожетДвигаться()
{
// Если координаты головы находятся в пределах игрового поля и координаты головы не совпадают с 
кординатами каждого звена 
return true
}

Класс ИгровоеПоле

//Поля:
Ширина, Высота(в количестве клеток)
размерКлетки
цветПростойКлеткиПоля, цветГоловыЗмеи, цветЭлементаЗмеи, цветЦветка (змея поедает цветы)
текущееКоличествоЦветковНаПоле

двумерный массив типа перечисления [ширина, высота]
// Перечисление тип клетки: пустая – 1, голова – 2, звенозмеи – 3, цветок – 4

Конструктор
…
Свойства
…
Методы:
СоздатьЦветок()
{
// если на поле 0 цветков то случайной клетке поля присвоить тип цветок
}

НарисоватьПоле
{
// в зависимости от типа каждой клетки красить их разными цветами
}
Теперь собственно вопросы: 1) Как задавать координаты всех звеньев вначале и в любой момент времени? Где лучше хранить текущие ячейки змеи с их координатами? (Я думал ArrayList или массив типа Point) 2) Как и где реализовывать метод СьестьЦветок? (когда змея сьедает его, то новая клетка прибавляется к хвосту?) 3) Как заполнять двумерный массив игрового поля зависимо от координат звеньев змеи? (Я думал в классе Змея добавить поле класса ИгровоеПоле) 4) Как лучше рисовать и перерисовывать игровое поле на каждом тике таймера чтобы экран “не мигал“? Я просто розлинею поле и буду закрашивать клетки разными цветами. 5) Что добавить, убрать, поправить по проэктированию?

Решение задачи: «Реализация игры "Змейка"»

textual
Листинг программы
private void Game() // метод который будет вызываться по таймеру.
{
       update();
       redraw();
}
private void update() // в этом методе будет апдэйт всей игры - то есть, изменение координат, 
//появление новой еды и т.д.
//так же можно разделить на отдельные методы апдэйт змейки и еды на поле, и в эту записывать 
//лишь эти сами методы, для удобного дебагинга
{
}
private void redraw() // в этом же методе будет все перерисовываться. аналогично 
{
}
 
//так же потребуется функция для инициализации всего игрового контента
private void init()
{
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4 из 5