Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.11.2021, 16:55   #1
R1PPPP
Новичок
Джуниор
 
Регистрация: 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'; //еда
}
}
R1PPPP вне форума Ответить с цитированием
Старый 04.11.2021, 23:18   #2
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,580
По умолчанию

Цитата:
Сообщение от R1PPPP Посмотреть сообщение
Проблема в том, что поле для игры в консоли выводится в виде полоски, а должен быть квадрат или прямоугольник, почему так?
Код не смотрел, так как неформатированный код смотреть нет желания, но могу предположить, что вывод идет построчно, и после вывода очередной строки забыли поставить cout << endl;
Arigato вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Убрать папки "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