|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
04.11.2021, 16:55 | #1 |
Новичок
Джуниор
Регистрация: 04.11.2021
Сообщений: 1
|
Проблема в игре "змейка" на c++
Проблема в том, что поле для игры в консоли выводится в виде полоски, а должен быть квадрат или прямоугольник, почему так?
Вот код #include <iostream> #include <conio.h> #include <windows.h> #include <stdio.h> #include <stdlib.h> #include <time.h> using namespace std; const int width=20; const int height=20; const int size22 = width * height ; int play_field[size22]; //массив поля int head_x; int head_y; int direction = 1; //направление int snake_length = 3; int score = 0; bool game111; //выкл/вкл int d11; //сложность void q(); void q2(); void q3(); void q4(int x, int y); void q5(); void q6(); char q7(int value); int main() { setlocale(0, ""); //язык cout << "Выбери уровень сложности: " << endl<<endl; cout << "1) Легкий" << endl; cout << "2) Средний" << endl; cout << "3) БОГ" << endl; cin >> d11; cout << endl; q(); return 0; } void q() { q3(); game111 = true; //игра запущена while (game111) { if (_kbhit()) { //клавиши направления char key = _getch(); switch (key) { case 'w': if (direction != 3) direction = 1; break; case 'd': if (direction != 4) direction = 2; break; case 's': if (direction != 1) direction = 3; break; case 'a': if (direction != 2) direction = 4; break; } } q5(); //очистка области system("cls"); q2(); //сложность switch (d11) { case 1: Sleep(500); break; case 2: Sleep(300); break; case 3: Sleep(200); break; } } cout << "Игра окончена!" << endl << "Количество очков: " << score; cin.ignore(); } void q6() { //еда int x = 0; int y = 0; do { srand(time(NULL)); x = rand() % (width - 2) + 1; y = rand() % (height - 2) + 1; } while (play_field[x + y * width] != 0); play_field[x + y * width] = -2; } void q5() //обновление поля { switch (direction) { case 1: q4(-1, 0); break; case 2: q4(0, 1); break; case 3: q4(1, 0); break; case 4: q4(0, -1); break; } for (int i = 0; i < size22; i++) { if (play_field[i] > 0) play_field[i]--; } } void q4(int x, int y) { //движение, удлинение, очки, вкл/выкл int x1 = head_x+x; int y1 = head_y+y; if (play_field[x1 + y1 * width] == -2) { snake_length = snake_length + 1; score = score + 1; q6(); } else if (play_field[x1 + y1 * width] != 0) { game111 = false; } head_x = x1; head_y = y1; play_field[head_x + head_y * width] = snake_length + 1; } void q3() //карта { head_x = width / 2; head_y = height / 2; play_field[head_x + head_y * height] = 1; for (int x = 0; x < width; x++) { play_field[x] = -1; play_field[x + (height - 1) * width] = -1; } for (int y = 0; y < height; y++) { play_field[0 + y * height] = -1; play_field[(width - 1) + y * width] = -1; } } void q2() //вывод значений для будущей замены { for (int x = 0; x < width; x++) { for (int y = 0; x < height; y++) { cout << q7(play_field[x + y * width]); } cout << endl; } } char q7(int value) //замена значений для отрисовки { if (value > 0) return '+'; //змейка switch (value) { case -1: return'O'; //границы case -2: return'f'; //еда } } |
04.11.2021, 23:18 | #2 |
Высокая репутация
СуперМодератор
Регистрация: 27.07.2008
Сообщений: 15,580
|
Код не смотрел, так как неформатированный код смотреть нет желания, но могу предположить, что вывод идет построчно, и после вывода очередной строки забыли поставить cout << endl;
E-Mail: arigato.freelance@gmail.com
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Убрать папки "Pictures", "Music", "Видео", "Downloads" из "МОЙ КОМПЬЮТЕР" | Бахтиёр1916 | Windows | 1 | 05.04.2017 12:53 |
Нужно пояснить/прокомментировать код программы, или коды функций "Добавить" "Удалить" "Обновить(редактировать" "Поиск" "Период") | ZIRASS | PHP | 4 | 15.06.2016 14:23 |
Проблема с реализацией логики в игре "парные картинки" | Zaher | Помощь студентам | 4 | 22.12.2009 21:53 |
Информация по игре "Змейка" | Arions | Помощь студентам | 9 | 14.12.2009 17:28 |