С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 28.04.2013
Сообщений: 10

Змейка

05.07.2013, 07:06. Показов 1793. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Решил написать собственный аналог змейки. Создал костяк программы, и у меня возникло три вопроса.
1. Змейка отказывается двигаться влево(нажат CapsLock и раскладка английская, при других параметрах все ОК).
2. Как сделать управление с помощью клавиш?(+Page Up, Page Down, Home, End)
3. Экран сильно мерцает при передвижении змейки. Возможно из-за system("cls"). Можно ли изменять положение змейки как-нибудь по другому.
Собственно, сам код:
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
126
127
128
129
130
131
132
133
134
135
136
#include <iostream>
#include <conio.h>
#include <windows.h>
using namespace std;
 
int main() 
{   
   CONSOLE_CURSOR_INFO CCI;
   CCI.bVisible=false;
   CCI.dwSize=1;
   SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&CCI);
   
   int m1=15, n1=5,
       m2=16, n2=5,
       m3=17, n3=5,
       m4=18, n4=5;
   char floor[24][48];
   for (int i=0; i<24; i++)
         for (int j=0; j<48; j++)
            floor[i][j]=' ';
   for (int i=0; i<24; i++)
   {
      floor[i][0]=178;
      floor[i][46]=178;
   }
   for (int i=0; i<48; i++)
   {
      floor[0][i]=178;
      floor[23][i]=178;
   }
   floor[m1][n1]=219;
   floor[m2][n2]=219;
   floor[m3][n3]=219;
   floor[m4][n4]=219;
   floor[5][5]='*';
   char a=0;
   
   while (a!=VK_SPACE)
   {
      for (int i=0; i<24; i++)
      {
         for (int j=0; j<47; j++)
            cout << floor[i][j];
         cout << endl;
      }
      a=getch();
      switch(a)
      {
         //Вверх
         case 119:
         case 87:
         case 150:
         case 230:
            if (floor[m1-1][n1]!=' ' || m1-1<0)
               break;
            else
            {
               floor[m4][n4]=' ';
               n4=n3;
               n3=n2;
               n2=n1;
               m4=m3;
               m3=m2;
               m2=m1;
               m1--;
               break;
            }
         //Вниз
         case 83:
         case 115:
         case 235:
         case 155:
            if (floor[m1+1][n1]!=' ' || m1+1>23)
               break;
            else
               {
                  floor[m4][n4]=' ';
                  m4=m3;
                  m3=m2;
                  m2=m1;
                  n4=n3;
                  n3=n2;
                  n2=n1;
                  m1++;
                  break;
               }
         //Влево
         case 65:
         case 97:
         case 228:
         case 48:
            if (floor[m1][n1-1]!=' ' || n1-1<0)
               break;
            else
               {
                  floor[m4][n4]=' ';
                  n4=n3;
                  n3=n2;
                  n2=n1;
                  m4=m3;
                  m3=m2;
                  m2=m1;
                  n1--;
                  break;
               }
         //Вправо
         case 68:
         case 100:
         case 130:
         case 162:
            if (floor[m1][n1+1]!=' ' || n1+1>47)
               break;
            else
               {
                  floor[m4][n4]=' ';
                  n4=n3;
                  n3=n2;
                  n2=n1;
                  m4=m3;
                  m3=m2;
                  m2=m1;
                  n1++;
                  break;
               }
         default:
            break;
      }  
      floor[m1][n1]=219;
      floor[m2][n2]=219;
      floor[m3][n3]=219;
      floor[m4][n4]=219; 
      system ("cls");
   }
   system ("pause");
    return 0;
}
Заранее, спасибо.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.07.2013, 07:06
Ответы с готовыми решениями:

Змейка на C++
Здравствуйте, буквально неделю назад я начала программировать в С++. И многое изначально не понятно, сижу очень долго с самыми...

Змейка
Надо заполнить массив нулями по змейке как на рисунке. Не могу придумать как заполнять нулями по строкам( Вот код : #include...

Змейка в С
Доброй ночи всем. Подскажите пожалуйста как можно написать игру змейку в консольном окне на С? 3аранее спасибо

6
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
05.07.2013, 10:53
Цитата Сообщение от Chamenur Посмотреть сообщение
2. Как сделать управление с помощью клавиш?(+Page Up, Page Down, Home, End)
https://www.cyberforum.ru/blogs/34326/blog263.html, тебе останется измнить коды клавишь
VK_PRIOR21PAGE UP key
VK_NEXT22PAGE DOWN key
http://delphi.about.com/od/obj... /blvkc.htm

Полная ин-ция о функции парсинга нажатия GetAsynKeyState здесь
http://msdn.microsoft.com/en-u... s.85).aspx

Добавлено через 1 минуту
Цитата Сообщение от Chamenur Посмотреть сообщение
a=getch();
- изъять
Цитата Сообщение от Chamenur Посмотреть сообщение
Экран сильно мерцает при передвижении змейки. Возможно из-за system("cls"). Можно ли изменять положение змейки как-нибудь по другому.
- да если использовать не псевдографику а GDI

Добавлено через 35 секунд
Цитата Сообщение от Chamenur Посмотреть сообщение
1. Змейка отказывается двигаться влево(нажат CapsLock и раскладка английская, при других параметрах все ОК).
- на гетче застряёт видимо не охота править, т.к надеюсь прислушаешся к советам выше

Добавлено через 2 минуты
Chamenur, всё что нужно для начала написания GDI графики найдёшь здесь
Построить на экране рисунок одно подъездного дома, если известны координаты левого верхнего угла дома
1
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
05.07.2013, 11:05
Открой для себя массивы и циклы, а уж потом пиши змейку.
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
05.07.2013, 11:06
Чтобы экран не моргал, можно, например, напрямую работать с консолью, "затирая старые секции" змейки
1
0 / 0 / 0
Регистрация: 28.04.2013
Сообщений: 10
05.07.2013, 11:14  [ТС]
-=ЮрА=-, Спасибо, за подробный ответ.
Kuzia domovenok, Я их неправильно и неэффективно применяю?
Цитата Сообщение от Croessmah Посмотреть сообщение
напрямую работать с консолью
Как?
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
05.07.2013, 11:16
Цитата Сообщение от Chamenur Посмотреть сообщение
Я их неправильно и неэффективно применяю?
Принцип змейки прост:
есть структура "клетка змейки", содержащая координаты одной клетки.
Змейка это очередь из таких клеток, имеющих соответственно соседние координаты.
При очередном шаге игры надо:
удалить одну клетку из хвоста очереди,
создать новую клетку с координатами головы очереди.
прибавить к этим координатам направление движения, например (1,0)
добавить созданную клетку в голову очереди.
отрисовать змейку в соответствии с координатами клеток из очереди.
подождать следующего кадра.
Если замечены нажатия стрелок, изменить направление движение с (1,0) на соответствующее
1
0 / 0 / 0
Регистрация: 28.04.2013
Сообщений: 10
05.07.2013, 11:27  [ТС]
Kuzia domovenok,
У меня нет автоматического передвижения, я управляю своей змейкой(или псевдо-змейкой, как я теперь понял) только клавишами.
Спасибо, за принцип, попробую создать программу по нему.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.07.2013, 11:27
Помогаю со студенческими работами здесь

змейка
Хочу написать игру змейка, как на первых телефонах. не могу придумать классы которые, при этом использовать(свои). Помогите...

змейка с++
ребят,вот наработки,не могу придумать нормальный алгоритм перемещения змейки,точнее перемещение,когда она будет увеличиваться... ведь ей...

Игра змейка
Кто делал подобную игру отзовитесь, есть пару вопросов! заранее спасибо!

игра змейка
Здравствуйте! Знакомый попросил помощи, объяснить подробно как работает программа и как сделать разные уровни в игре. Но я не особо ее...

Консольная змейка
Добрый день. С недавнего времени я пишу в консоли игру с одноименным названием. Занятие, прошу заметить, довольно увлекательное :) ...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru