Форум программистов, компьютерный форум CyberForum.ru

Консольная змейка - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Подсчитать количество строк заданной целочисленной матрицы N*N http://www.cyberforum.ru/cpp-beginners/thread931503.html
Подсчитать количество строк заданной целочисленной матрицы N*N, являющихся перестановкой чисел 1,2,...,N(т.е. содержащих каждое из чисел 1,2,....,N ровно один раз). Пожалуйста помогите!!! int flag,k=0; for (int i=0; i < 5; i++) { flag=0; for (int j=0; j < 5; j++) {
C++ Строка: Добавить в строковый класс функцию, которая создает строку, содержащую пересечение двух строк, то есть общие символы для двух строк. Добавить в строковый класс функцию, которая создает строку, содержащую пересечение двух строк, то есть общие символы для двух строк. Например, результатом пересечения строк "sdqcg" "rgfas34" будет строка "sg". Для реализации функции перегрузить оператор * (бинарное умножение). #include <iostream> #include <string> using namespace std; class myString { private: string s1; http://www.cyberforum.ru/cpp-beginners/thread931499.html
C++ Подскажите быстрый поиск количества интервалов в отрезке
Есть массив H Есть отрезок x+dx. Задача найти количество интервалов на которое делится отрезок x+dx массивом H. Наверняка с такой задачей уже кучу раз сталкивались, и есть оптимальное по быстродействию решение. Подскажите его, а то у меня как то коряво получается.
symbol(s) not found for architecture x86_64 как это побороть? C++
Привет всем тем кто это читает! Я не очень компетентен в сфере программирования, так как только учусь (С++). У меня такая проблема: Мне интересно использование технологии OpenCL, скачал мануал с оф сайта, скачал библиотеку cl.hpp и подсунул туда куда надо, подключаю #include <cl.hpp> Но вот беда, при проверке кода вылетает ошибка "symbol(s) not found for architecture x86_64". даже в том...
C++ istream состояние bad http://www.cyberforum.ru/cpp-beginners/thread931476.html
Всем привет! Как можно вызвать состояние bad у потока istream? (т.е. не так, что "состояние bad может быть вызвано серьезной ошибкой чтения", а небольшой пример, как просто можно это состояние вызвать (конечно, не используя clear)).
C++ Проблемы с include Здравствуйте! Возникла проблема. Пользовался поиском, не помогло. Понимаю, что я не первый, кто просит помощи в подобной ситуации, но отнеситесь с пониманием, пожалуйста. Пытался гуглить и прочее, результатов не дало, к сожалению. подробнее

Показать сообщение отдельно
Dani
1263 / 621 / 50
Регистрация: 11.08.2011
Сообщений: 2,236
Записей в блоге: 2
Завершенные тесты: 1
31.07.2013, 16:39     Консольная змейка
По ходу, лажа в ф-ции change_direction, там эти условия левые наверно. Я удалил их и змейка стала двигаться.
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
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
#include "stdafx.h"
# include <iostream>
# include <windows.h>
# include <time.h>
// библиотека, нужна для использования функции Sleep()
# include <conio.h>
// библиотека, нужна для использования функций kbhit() и getch()
using namespace std;char main_color[] = "color ##";
// шаблон для цвета
int snake_size, change_x, change_y, coordinates_x[1000], coordinates_y[1000], food_x = -1, food_y = -1;
/*
    snake_size - размер змейки
    change_x, change_y - в какую сторону движется змейка
    coordinates_x[1000], coordinates_y[1000] - массивы, хранящие координаты частей тела змейки
    food_x, food_y - координаты еды
    PS: координаты головы змейки хранятся в coordinates_x[1], coordinates_y[1]
*/
char symbol, a[1000][1000];
/*
    symbol - хранит в себе ASCII код нажатой клавиши
    a[1000][1000] - наша таблица, в которой происходит вся игра
*/
const int N = 13, M = 17, INTERVAL = 200;
/*
    константы,
    N - размер таблицы, а именно высота
    M - ширина таблицы
    INTERVAL - интервал в миллисекундах, через каждый этот промежуток времени змейка будет передвигаться
*/
void change_color()
// функция изменения цвета консоли
{
     char x = rand() % 16, y = rand() % 16;
     if (x == y)
      ++y;
     y %= 16;
     if (x > 9)
      x += 'A' - 10;
     else
      x += '0';
     if (y > 9)
      y += 'A' - 10;
     else
      y += '0';
     // выбираем рандомные цвета
     main_color[6] = x;
     main_color[7] = y;
     system(main_color);
     // меняем цвет
}
void change_direction()
// функция, считывающая нажатую клавишу
{
     symbol = getch();
     // считываем нажатую клавишу с помощью функции getch()
     switch (symbol)
     {
         case 'w': { change_x = -1; change_y = 0; } break;
         case 'a': { change_x = 0; change_y = -1; } break;
         case 's': { change_x = 1; change_y = 0; } break;
         case 'd': { change_x = 0; change_y = 1; } break;
         // управление змейкой у нас через wasd 
         case 32 : change_color(); break;
         // если нажат пробел, то меняем цвет консоли
         default : break; 
     }
}
void show_table()
// функция для вывода таблицы
{
    system("cls");
    // очищаем консоль
    for (int i = 0; i <= N + 1; ++i)
     for (int j = 0; j <= M + 1; ++j)
      cout << (i == 0 || j == 0 || i == N + 1 || j == M + 1 ? '#' : a[i][j]) << (j <= M ? "" : "\n");
    // выводим таблицу и края
}
void clear_snake_on_table()
// очищаем координаты, в которых располагалась змейка
{
     for (int i = 1; i <= snake_size; ++i)
      a[coordinates_x[i]][coordinates_y[i]] = ' ';
}
void show_snake_on_table()
// красим координаты змейки
{
     if(change_x == 1 && change_y == 0) a[coordinates_x[1]][coordinates_y[1]] = 'v';
     if(change_x == -1 && change_y == 0) a[coordinates_x[1]][coordinates_y[1]] = '^';
     if(change_x == 0 && change_y == 1) a[coordinates_x[1]][coordinates_y[1]] = '>';
     if(change_x == 0 && change_y == -1) a[coordinates_x[1]][coordinates_y[1]] = '<';
     // изменяем тип головы
 
     for (int i = 2; i <= snake_size; ++i)
      a[coordinates_x[i]][coordinates_y[i]] = '@';
     // красим змейку
}
bool game_over()
// проверяем, съела ли змейка саму себя
{
     for (int i = 2; i <= snake_size; ++i)
      if (coordinates_x[1] == coordinates_x[i] && coordinates_y[1] == coordinates_y[i]) return true;
     // если координаты головы змейки равны координате какой-либо части тела змейки, то змейка съела саму себя
     return false;
     // если все координаты различны, то все в порядке - играем дальше
}
void check_coordinates()
// проверяем, не вышла ли змейка за поле, если да то возвращаем ее обратно
{
    if (coordinates_x[1] > N) coordinates_x[1] = 1;
    if (coordinates_x[1] < 1) coordinates_x[1] = N;
    if (coordinates_y[1] > M) coordinates_y[1] = 1;
    if (coordinates_y[1] < 1) coordinates_y[1] = M;
}
void next_step()
// функция следующего хода, в которой наша змейка сдвигается в сторону на 1 ячейку
{
     clear_snake_on_table();
     // чистим таблицу от змейки
 
     for (int i = snake_size; i >= 2; --i)
     {
         coordinates_x[i] = coordinates_x[i - 1];
         coordinates_y[i] = coordinates_y[i - 1];
     }
     // передвигаем тело змейки
 
     coordinates_x[1] += change_x;
     coordinates_y[1] += change_y;
     // передвигаем голову змейки
 
     check_coordinates();
     // проверяем в порядке ли координаты
 
     if(coordinates_x[1] == food_x && coordinates_y[1] == food_y)
     {
         snake_size++;
         food_x = -1;
         food_y = -1;
     }
     // если голова змейки там же где и еда, то увеличиваем размер змейки и очищаем координаты змейки
 
     show_snake_on_table();
     // рисуем змейку
 
     if (game_over() == true)
     // если змея укусила себя
     {
         cout << "You're looser! \n";
         // сообщаем всю правду о игроке
         system("pause");
         // приостанавливаем игру
         exit(0);
         // завершаем программу
     }
}
bool food_check()
// функция проверки на наличие еды на карте
{
     if(food_x == -1 && food_y == -1) return false;
     // если координаты еды неопределенны то возвращаем true
     return true;
     // в остальных случаях false
}
void place_food()
// функция добавления еды на карту
{
     srand(time(NULL));
     for (int i = 1; i <= 9; ++i)
     {
         int x = rand(), y = rand();
         if(x < 0) x *= -1;
         if(y < 0) y *= -1;
         x %= (N + 1);
         y %= (M + 1);
         if(x == 0) ++x;
         if(y == 0) ++y;
         if(a[x][y] != '@' && a[x][y] != 'v' && a[x][y] != '^' && a[x][y] != '<' && a[x][y] != '>')
         {
             food_x = x;
             food_y = y;
             a[x][y] = '+';
             return;
         }
     }
     // ставим в рандомное место еду
}
void standart_settings()
// начальные установки
{
     snake_size = 2;
     // размер змеи - 2
 
     coordinates_x[1] = 1;
     coordinates_y[1] = 2;
     coordinates_x[2] = 1;
     coordinates_y[2] = 1;
     // змейка занимает две клетки вправо от координаты {1,1}
 
     change_x = 0;
     change_y = 1;
     // змейка движется вправо
}
int main ()
{
    standart_settings();
    // задаем стандартные настройки
 
    while (1)
    // бесконечный цикл
    {
        if (kbhit() == true)
        // если нажата клавиша
         change_direction();
         // обрабатываем нажатую клавишу
 
        next_step();
        // двигаем змейку
 
        if(food_check() == false)
         place_food();
        // если нет еды, то ставим ее
 
        show_table();
        // рисуем змейку
 
        Sleep(INTERVAL);
        // "усыпляем" программу на заданный интервал
    }
}
 
Текущее время: 13:10. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru