Доработка программ, или игра Змейка
Одна из услуг, которую я оказываю – это доработка программ на 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 - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.
Читайте также:
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.