На нашем сайте мы используем cookie для сбора информации технического характера и обрабатываем IP-адрес вашего местоположения. Продолжая использовать этот сайт, вы даете согласие на использование файлов cookies. Здесь вы можете узнать, как мы пользуемся файлами cookies.
Я согласен
логотип upread.ru

Доработка программ, или игра Змейка


Одна из услуг, которую я оказываю – это доработка программ на C#, Java или C++. В чем это заключается? В расширении функционала или изменении дизайна у существующего проекта. Рассмотрим пример.

Потребовалось заказчику модифицировать исходный код игры «Змейка». Ну знаете, такая обычная игра – управляем крестиком (клавишами) и бегаем за яблоками. Съедая яблоко, змея становится длиннее на одну ячейку. Врезаясь в себя (хвост) или стену – игра прекращается.



Так вот, у заказчика уже был проект для Visual Studio на C# для данной игры. И требовалось добавить одну деталь: чтобы появлялись яблоки не только обычные, съедобные, но и червивые. При съедении которых игра бы также прекращалась.

Причём яблоки должны были появляться с интервалом раз в пять секунд на новом месте. Что ж, давайте посмотрим на исходный код Змейки. А видим мы тут, что яблоrо для змейки – это просто объект класса Circle:

private Circle food;
Вот таким методом он инициализируется/генерируется.

private void GenerateFood(){
int maxXPos = pbCanvas.Size.Width / Settings.Width;
int maxYPos = pbCanvas.Size.Height / Settings.Height;
int vspomX = random.Next(0, maxXPos);
food = new Circle {X = vspomX, Y = random.Next(0, maxYPos)};
Console.WriteLine(vspomX);        }
А в методе движения (MovePlayer()), который вызывается при каждой обрисовке экрана, проверяется на столкновение голова и это яблоко:

if (Snake[0].X == food.X && Snake[0].Y == food.Y){
Eat();}
Метод Eat:

private void Eat(){
Circle circle = new Circle{
X = Snake[Snake.Count - 1].X,
Y = Snake[Snake.Count - 1].Y
};
Snake.Add(circle);
//Счёт
Settings.Score += Settings.Points;
lblScore.Text = Settings.Score.ToString();
GenerateFood();
}
Рисуется, кстати, вот так:

canvas.FillEllipse(Brushes.Red,
new Rectangle(food.X * Settings.Width,
food.Y * Settings.Height, Settings.Width, Settings.Height));
}
Отлично. Тогда самое простое решение, которое приходит в голову – это добавить private Circle food2 – объект еды, но червивый.Также инициализировать его:

private void GenerateFood2(){
int maxXPos = pbCanvas.Size.Width / Settings.Width;
int maxYPos = pbCanvas.Size.Height / Settings.Height;
int vspomX = random.Next(0, maxXPos);
food2 = new Circle { X = vspomX, Y = random.Next(0, maxYPos) };
Console.WriteLine(vspomX);}
Нарисовать:

canvas.FillEllipse(Brushes.DimGray,new Rectangle(food2.X * Settings.Width, food2.Y * Settings.Height, Settings.Width, Settings.Height));
Обработать столкновение

if (Snake[0].X == food2.X && Snake[0].Y == food2.Y){
 Die();
}
Все хорошо, но один момент. Наше отравленное яблоко будет рисовать только один раз, а нам надо чтобы менялось раз в пять секунд его расположение. Кидаем на форму таймер и приписываем такой код:

private void timer1_Tick(object sender, EventArgs e){
int maxXPos = pbCanvas.Size.Width / Settings.Width;
int maxYPos = pbCanvas.Size.Height / Settings.Height;
int vspomX = random.Next(0, maxXPos);
food2 = new Circle { X = vspomX, Y = random.Next(0, maxYPos) };        }
И все прекрасно работает:



Если вам требуется помочь с проектами по C# или Java, то пишите мне и узнавайте актуальные цены на мои услуги по программированию. Пишите, договоримся!



Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.



тегизаметки, услуги, си шарп, программы

Читайте также:




Внешний вид radiobutton
Помощь в создании сайта портфолио


© upread.ru 2013-2020
При перепечатке активная ссылка на сайт обязательна.
Задать вопрос
письмо
Здравствуйте! Вы можете задать мне любой вопрос. Если не получается отправить сообщение через эту форму, то пишите на почу up777up@yandex.ru
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.