C # створення простої гри на змію


12

Я думав над тим, щоб створити гру на змію за допомогою C #, тому я запустив ідеї в голові, і виникли деякі проблеми.

Як я можу відслідковувати та виводити в потрібному місці блоки, які бігають за головою змії?

Якщо змія побудована з п'яти блоків, і користувач починає ходити по колу, як я можу надрукувати тіло змії в потрібному місці?

Крім того, як я можу створити дію, яка буде виконуватись на задньому плані, яка перемістить змію вперед, незалежно від того, що робить користувач?

Яку структуру повинен мати мій код? (структура дизайну коду)

Це має бути консольний додаток, оскільки це єдиний я знайомий з ним фреймворк.

Я не шукаю готового коду, оскільки хочу по-справжньому зрозуміти, як він повинен працювати.

Відповіді:


23

Представляючи Змія

Створити гру Змія досить просто. Перше, що вам потрібно, це спосіб зобразити тіло вашої змії. Якщо ви вважаєте, що ваша змія складається з блоків або плиток, ваше тіло може просто скласти список цих блоків.

У вашому випадку, якщо ви збираєтесь зробити консольну програму, кожен з них буде символом на консолі, а позиція відповідатиме одному рядку або рядку консольного виводу. Отже, ви почнете з цього:

// List of 2D coordinates that make up the body of the snake
List<Point>() body = new List<Point>();

У цей момент ваш список порожній, тому ваша змія не має тіла. Скажімо, ви хочете, щоб змія завдовжки 5, а голова повинна починати в положенні (5,2) і рости донизу. Просто додайте ці позиції до списку, коли починається гра, наприклад:

// Initialize the snake with 5 blocks starting downwards from (5,2)
for(int i=0; i<5; ++i)
{
    body.Add(new Point(5, 2 + i));
}

Надання Змії

Для візуалізації просто намалюйте символ у кожній позиції зі списку тіла. Приклад, наведений вище, наприклад, можна зробити так:

...................
...................
.....O............. -- y = 2
.....#.............
.....#.............
.....#.............
.....V.............
...................
     |
     x = 5

Можна ускладнитись, вибравши різні символи для голови персонажа (перший елемент у списку) та хвоста (останній елемент у списку) та навіть орієнтувати їх залежно від позицій сусідніх блоків. Але для початку просто візьміть усе як #щось або щось.

Ви можете, наприклад, почати з двовимірного масиву символів, що містить такий фон:

// Array with map characters
char[,] render = new char[width, height];

// Fill with background
for(x=0; x<width; ++x)
    for(y=0; y<height; ++y)
        render[x,y] = '.';

А потім повторіть тіло змії, намалювавши її до масиву:

// Render snake
foreach(Point point in body)
    render[point.X, point.Y] = '#';

І, нарешті, ще раз повторіть масив і запишіть кожен символ на консоль, з рядком рядка в кінці кожного ряду.

// Render to console
for(y=0; y<height; ++y)
{
    for(x=0; x<width; ++x)
    {
        Console.Write(render[x,y]);
    }
    Console.WriteLine();
}

Переміщення Змії

Нарешті, рух. Перше, що вам потрібно - слідкувати за Directionпереміщенням змії. Це може бути проста перерахунок:

// Enum to store the direction the snake is moving
enum Direction { Left, Right, Up, Down }

А акт переміщення змії можна зробити, просто видаливши останній блок зі списку і додавши його на передній частині, у правильному напрямку . Іншими словами, щось на кшталт:

// Remove tail from body
body.RemoveAt(body.Count - 1);

// Get head position
Point next = body[0];

// Calculate where the head should be next based on the snake's direction
if(direction == Direction.Left) 
    next = new Point(next.X-1, next.Y);
if(direction == Direction.Right) 
    next = new Point(next.X+1, next.Y);
if(direction == Direction.Up) 
    next = new Point(next.X, next.Y-1);
if(direction == Direction.Down) 
    next = new Point(next.X, next.Y+1);

// Insert new head into the snake's body
body.Insert(0, next);

5
Гарний дзвінок про переміщення останнього блоку на фронт для руху!
SpartanDonut

Чудова відповідь. Мені подобається, як ти переміщуєш змію - це досить елегантно.
Cypher

-3
  1. Кожен раз, коли таймер тикає, ви оновлюєте місцезнаходження змії та малюєте фігури на нових місцях

  2. Використовуйте System.Windows.Forms.Timer для фонової дії, щоб запустити гру для переміщення змії.

  3. Використовуйте класи та успадкування для структури


Це дуже розпливчаста відповідь. Крок номер три особливо такий.
MichaelHouse
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.