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

Змейка

05.07.2013, 07:06. Показов 1789. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru