Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/21: Рейтинг темы: голосов - 21, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 14.01.2016
Сообщений: 10
1

Алгоритм движения змейки и роста в консоли

17.08.2016, 17:25. Показов 3793. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Пишу змейку, сделал движение 1-го символа. Много пытаюсь сделать движение с несколькими символами как в змейке, т.е по одному элементу. Это лучше делать через List или обычный массив? Советы мне не помешали бы)
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.08.2016, 17:25
Ответы с готовыми решениями:

Консоль - реализация движения змейки
Пишу змейку и хотел спросить у вас ребята, есть ли какая-нибудь функция, которой работает по такому...

Расставить учащихся с указаниям роста. Выяснить, перечислены ли ученики в списке в порядке убывания их роста
Имеется список учащихся класса с указанием роста каждого из них. Выяснить, перечислены ли ученики в...

Анимация движения прямоугольника в консоли
Пытался что то сделать,но без успешно. Module Module1 Dim TimerMove As New...

Рисование "звездного неба", алгоритм змейки
uses graphabc; var X1: array of integer;//массивы координат Y1: array of integer; ...

2
0 / 0 / 1
Регистрация: 22.10.2015
Сообщений: 25
31.08.2016, 21:52 2
Лучший ответ Сообщение было отмечено maskalik142 как решение

Решение

maskalik142, змейка ползет на pictureBox? Если да То создается двумерный массив
C#
1
byte [,] array;
нулей и единиц, и заполняется, там где змейка 1-черный пиксель, где пусто 0-белый пиксель и pictureBox перерисовывается каждый такт движения.
Последний пиксель хвоста пропадает каждый такт, появляется в направлении движения и тд по логике.
0
Заблокирован
01.09.2016, 12:55 3
если консоль, то заготовка:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
using System;
using System.Timers;
using System.Drawing;
using System.Threading;
 
namespace Змейка
{
    class Program
    {
        static Point[] snake = new Point[1];
        static int dir, newdir;
        static System.Timers.Timer Tm = new System.Timers.Timer();
        static Point[] apple = new Point[1];
        static void Main(string[] args)
        {
            int x = (Console.WindowWidth - snake.Length * 2) / 4 * 2;
            int y = Console.WindowHeight / 2;
            for (int i = 0; i < snake.Length; i++)
                snake[i] = new Point(x + i * 2, y);
            newdir = dir = 3;
            Tm.Elapsed += new ElapsedEventHandler(Tm_Tick);
            Tm.Interval = 300;
            Tm.Enabled = true;
 
            Console.CursorVisible = false;
            Console.ForegroundColor = ConsoleColor.Black;
            NewApple(0);
            ConsoleKey ck;
            do
            {
                if (Console.KeyAvailable) ck = Console.ReadKey(true).Key;
                else ck = ConsoleKey.Decimal;
                if (dir % 2 == 0)
                {
                    if (ck == ConsoleKey.LeftArrow) newdir = 3;
                    if (ck == ConsoleKey.RightArrow) newdir = 1;
                }
                else
                {
                    if (ck == ConsoleKey.UpArrow) newdir = 0;
                    if (ck == ConsoleKey.DownArrow) newdir = 2;
                }
                Thread.Sleep(50);
            } while (ck != ConsoleKey.Escape);
            Console.ForegroundColor = ConsoleColor.Gray;
            Console.BackgroundColor = ConsoleColor.Black;
        }
        //
        static void SetCursor(Point p)
        {
            Console.CursorLeft = p.X;
            Console.CursorTop = p.Y;
        }
        //
        static void NewApple(int i)
        {
            Random r=new Random();
            do 
                apple[i] = new Point(r.Next(Console.WindowWidth) / 2 * 2, 
                                     r.Next(Console.WindowHeight));
            while (Body(apple[i]));
            Console.BackgroundColor = ConsoleColor.Red;
            SetCursor(apple[i]);
            Console.Write("  ");
            //Console.Title = "" + apple[i].X + "  " + apple[i].Y;
        }
        //
        static bool Body(Point p)
        {
            for (int i = 0; i < snake.Length; i++) 
                if (p == snake[i]) return true;
            return false;
        }
        //
        static void Tm_Tick(object sender, ElapsedEventArgs e)
        {
            int k;
            Point p = new Point();
            for (k = 0; k < 2; k++)
            {
                int dx, dy;
                switch (newdir)
                {
                    case 0:  dx =  0; dy = -1; break;
                    case 1:  dx =  2; dy =  0; break;
                    case 2:  dx =  0; dy =  1; break;
                    default: dx = -2; dy =  0; break;
                }
                p.X = snake[0].X + dx;
                p.Y = snake[0].Y + dy;
                if (p.X >= 0 && p.X < Console.WindowWidth &&
                    p.Y >= 0 && p.Y < Console.WindowHeight && !Body(p)) break;
                else newdir = dir;
            }
            int needapple = -1;
            if (k < 2)
            {
                for (int i = 0; i < apple.Length && needapple < 0; i++)
                    if (p == apple[i]) needapple = i;
                if (needapple < 0)
                {
                    Console.BackgroundColor = ConsoleColor.Black;
                    SetCursor(snake[snake.Length - 1]);
                    Console.Write("  ");
                }
                else Array.Resize(ref snake, snake.Length + 1);
                for (int i = snake.Length - 1; i > 0; i--) snake[i] = snake[i - 1];
                snake[0] = p;
                if (k == 0) dir = newdir;
            }
            for (int i = snake.Length - 1; i >= 0; i--)
            {
                Console.BackgroundColor = i == 0 ? ConsoleColor.Yellow : ConsoleColor.Green;
                SetCursor(snake[i]);
                if (i == 0) 
                    if(dir==1)Console.Write(" :");
                    else
                        if (dir == 3) Console.Write(": ");
                        else Console.Write("..");
                else Console.Write("  ");
            }
            if (needapple >= 0) NewApple(needapple);
        }
    }
}
0
01.09.2016, 12:55
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.09.2016, 12:55
Помогаю со студенческими работами здесь

Комбинирований тип: определение середнего роста женщин и определение людей одинакового роста в группе
Нужна программа для апридиление середнего роста женщин та апределение людей одинакового роста в...

Алгоритм движения
Мне нада написать игру на АС 3 и вся задача упоролась в то что немогу придумать правильный...

Алгоритм элептического движения
Kto nibut podskazhet algortim(ili code) elipticheskovo dvizhenia I poproboval , no ne gladko na...

Алгоритм движения пули
Жму на пробел создается спрайт и он должен лететь к курсору с определеной скоростью... но не пойму...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Как конвертировать видео в GIF
hw_wired 24.01.2025
В современном мире анимированные изображения стали неотъемлемой частью цифровой коммуникации. Формат GIF (Graphics Interchange Format) представляет собой особый тип файлов, который позволяет. . .
Как скопировать текст в буфер обмена на JavaScript во всех браузерах
hw_wired 24.01.2025
Копирование текста в буфер обмена стало неотъемлемой частью современных веб-приложений, значительно улучшающей пользовательский опыт и упрощающей работу с контентом. В эпоху активного обмена. . .
Как скрыть клавиатуру на Android
hw_wired 24.01.2025
При разработке Android-приложений часто возникает необходимость управлять видимостью экранной клавиатуры для улучшения пользовательского опыта. Одним из наиболее эффективных способов контроля. . .
Как обучить нейросеть создания картинок на Python
bytestream 24.01.2025
В эпоху цифровых технологий искусственный интеллект становится неотъемлемой частью творческого процесса. Особое место в этой области занимает разработка и обучение нейронных сетей для создания. . .
Как обучить нейросеть генерации текста на Python
bytestream 24.01.2025
В современном мире искусственный интеллект и машинное обучение становятся неотъемлемой частью многих технологических решений. Одной из наиболее интересных и востребованных задач в этой области. . .
Машинное обучение на Python
bytestream 24.01.2025
Введение в машинное обучение на Python Машинное обучение представляет собой одну из наиболее динамично развивающихся областей информационных технологий, которая позволяет компьютерным системам. . .
Как удалить вирус-майнер с компьютера
hw_wired 24.01.2025
Вирусы-майнеры стали одной из наиболее серьезных угроз для пользователей компьютеров. Эти вредоносные программы тайно используют вычислительные ресурсы зараженного устройства для добычи криптовалюты. . .
Что такое веб-сервер, для чего он нужен и как работает
bytestream 24.01.2025
В современную эпоху цифровых технологий веб-сервер является фундаментальным компонентом интернет-инфраструктуры, обеспечивающим функционирование множества онлайн-сервисов и веб-сайтов. Этот. . .
Как в цикле for перебрать все элементы в словаре в Python
bytestream 24.01.2025
Словари в Python представляют собой мощные структуры данных, которые позволяют хранить информацию в формате ключ-значение. Эта особенность делает их незаменимыми при работе с данными, где требуется. . .
Как отменить rebase в Git
hw_wired 24.01.2025
Git rebase представляет собой мощный инструмент для управления историей коммитов в системе контроля версий Git. Этот механизм позволяет разработчикам изменять последовательность, комбинировать или. . .
Как поменять цвет input placeholder с помощью CSS
bytestream 24.01.2025
В веб-разработке оформление элементов пользовательского интерфейса играет ключевую роль в создании привлекательного и интуитивно понятного дизайна. Особое внимание уделяется формам ввода данных, где. . .
Как перебрать все значения в перечислении (enum) в C#
bytestream 24.01.2025
Перечисление (enum) в языке программирования C# представляет собой специальный тип данных, который позволяет определить набор именованных констант. Этот мощный инструмент особенно полезен, когда. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru