Кароче в шараге задание по видеоуроку змейку сделать, вроде все норм переписал, но при создании поля правая стенка вместо своего положения стоит вместе с левой, как фиксить? Стенки в q2 прописываются #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 lv=0; 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); void q8(); int main() { q8(); } void q8() { setlocale(0, ""); HKL keyboard = GetKeyboardLayout(0); int keyboard2 = LOWORD(keyboard); if (keyboard2 == 0x0419) { //cout << GetKeyboardLayout(0); cout << "Измените раскладку клавиатуры,для корректной работы игры"; cout << endl; } cout << "Введите уровень сложности: " << endl << endl; cout << "1 - Легко" << endl; cout << "2 - Средне" << endl; cout << "3 - Сложно" << endl; cin >> d11; cout << endl; int c = 0; if (d11 == 1 || d11 == 2 || d11 == 3) { q(); } else { while (true) { c = c + 1; if (c == 3) { d11 = 1; q(); break; } else { cout << "Введите уровень сложности: " << endl << endl; cout << "1 - Легко" << endl; cout << "2 - Средне" << endl; cout << "3 - Сложно" << endl; cout << endl; cin >> d11; if (d11 == 1 || d11 == 2 || d11 == 3) { q(); break; } } } } return ; } 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(400); break; case 3: Sleep(200); break; } } cout << "!Вы проиграли!" << endl << "Количество очков: " << score; cout << endl; lv = lv + 1; cout <<"lv " <<lv; cout << endl; cin.ignore(); int l; cin >> l; if (l == 0) { return; } else { q8(); } } 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; } q6(); } void q2() { for (int x = 0; x < width; x++) { for (int y = 0; y < height; y++) { cout << q7(play_field[x + y * width]); } cout << endl; } } char q7(int value) { if (value > 0) return 'o'; switch (value) { case -1: return 'O'; case -2: return 'f'; } }
Код не смотрел, так как неформатированный код смотреть нет желания, но могу предположить, что вывод идет построчно, и после вывода очередной строки забыли поставить cout << endl;