Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
1 / 1 / 0
Регистрация: 07.04.2020
Сообщений: 27
1

Нужно найти ошибку в коде игры "змейка" в консоли

26.04.2020, 16:14. Показов 635. Ответов 3

Author24 — интернет-сервис помощи студентам
проблемы начались при работе с функцией Process (логика игры). Я пробовала гуглить и вообще ничего не поняла


#include <iostream>
#include <stdlib.h>
#include <conio.h> //для фун.Tracker, дабы консоль не закрывалась когда ввод происходил

using namespace std;

//изначально false, ибо мы ещё НЕ проиграли
bool game_over;
const int wh = 20; //ширина поля, равна 20 единицам (width)
const int ht = 20; //высота поля, равна 20 единицам (height)
int x, y, itemX, itemY, score; //itemX и itemY - это фрукты которые подбирает змейка.
enum eDirection { STOP = 0, LEFT, RIGHT, UP, DOWN }; //создание перечисления
eDirection direct;



//1 функция - при старте настраивает все нужные параметры
void Setup() {
game_over = false;
direct = STOP; //дабы змейка при запуске стояла на месте
x = wh / 2 - 1; //что бы змейка заспавнилась на середине карты, -1 ибо снизу +1 дописывали
y = ht / 2 - 1; //аналогично с высотой - спавн по середине поля, -1 ибо снизу +1 дописывали
itemX = rand() % wh; //рандом + остаток при делении по иксу = рандомный спавн по ширине
itemY = rand() % ht; //рандом + остаток при делении по игрику = рандомный спавн по высоте
score = 0; //счёт изначально равен нулю
}

//2 функция - рисует игровое поле
void Map() {
system("cls");//очищает консоль каждый раз когда вызывается Map

/*верхняя граница*/for (int i = 0; i < wh + 1 /*20 единиц*/; i++) {
cout << "_";
}
cout << endl; // перевод строки нужен в конце, а не после каждого символа.


/*левая граница*/for (int i = 0; i < ht /*20 единиц + одна котрой нехватало*/; i++) {
for (int j = 0; j < wh; j++) /*что бы проверить каждую "ячейку" по ширине*/ {
if (j == 0 || j == wh - 1) //проверка(!) если j==0, то это первый элемент, а значит нужна граница || там же нижняя граница 2-, а значит -1 ещё
cout << "|";
if (i == y && j == x) //координата самой змейки
cout << "О";
else if (i == itemY && j == itemX) //координата item
cout << "o";
else // остальные значит else
cout << " ";//остальные поля заполняем пустотой

}

cout << endl; //когда проходим ряд по ширине, то нас перекидывает на новую строку
}


/*нижняя граница*/for (int i = 0; i < wh + 1/*20 единиц + одна котрой нехватало*/; i++) {
cout << "=";
}
cout << endl; // аналогично верхней границе
}

//3 функция -отслеживает движения мыши/ввод с клавы
void Tracker() {
if (_kbhit()) { //keyboard hit, возвращает true если нажимается на нужную кнопку
switch (_getch()) //помощью _getch можно отследит на какую кнопку нажал пользователь
{

case 'a': //если пользователь нажимает на "а", то змейка влево двигается
direct = LEFT;
break;

case 'w': //если пользователь нажимает на "w", то змейка вверх двигается
direct = UP;
break;

case 'd': //если пользователь нажимает на "d", то змейка вправо двигается
direct = RIGHT;
break;

case 's': //если пользователь нажимает на "s", то змейка вниз двигается
direct = DOWN;
break;

case 'x': //если пользователь нажимает на "x", то игра заканчивается
game_over = true;
break;
}
}

//4 функция - логика игры и все процессы
void Process()
{
switch (direct)
{

case LEFT:
x--; //координату х на еденицу меньше
break;

case RIGHT:
x++;//координату х на еденицу больше
break;

case UP:
y--;//координату y на еденицу меньше
break;

case DOWN:
y++;//координату у на еденицу больше
break;
}
}

//ВСЕ ФУНКЦИИ МЫ ВЫЗЫВАЕМ В main
int main() {
Setup();
while (!game_over) //"проверка" game_over, пока она запущена и равна false, то будут выполняться вписанные функции, "!" - значит логическое НЕ, Цикл продолжается, если gameOver НЕ равен true
{
Map();
Tracker();
Process();
}


return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.04.2020, 16:14
Ответы с готовыми решениями:

Не могу найти ошибку в коде игры Змейка
Просидел очень долго, но не удалось исправить то, что при запуску кода функция gameOver сразу-же...

Дописать 3 функции в коде игры змейка
Здравствуйте, извините, если создал тему, которая уже была поднята. Необходима помощь, в связи с...

Найти ошибку в коде игры. (Файлы прикреплены)
uses ABCobjects, graphABC, timers; var object2, Spawn, winTable: PictureABC; spPlayer,...

Не могу найти ошибку в коде игры tetris
Доброе утро, начал изучать JS (самоучка) , беру код разных разработчиков и пытаюсь в нем...

3
5268 / 2866 / 481
Регистрация: 05.10.2013
Сообщений: 7,623
Записей в блоге: 154
26.04.2020, 19:00 2
Товарищ ford D опубликовал свою консольную змейку в первом сообщении своей темы. Я компилировал с помощью g++ и запускал его змейку - это играбельная демка. Возможно, его демка вам поможет.
0
Just Do It!
4012 / 2396 / 639
Регистрация: 23.09.2014
Сообщений: 7,684
Записей в блоге: 2
26.04.2020, 22:29 3
Цитата Сообщение от MariaAiram Посмотреть сообщение
проблемы начались при работе с функцией Process (логика игры)
какие именно проблемы:
Кликните здесь для просмотра всего текста

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
#include <iostream>
#include <stdlib.h>
#include <conio.h> //для фун.Tracker, дабы консоль не закрывалась когда ввод происходил
#include <windows.h>
 
using namespace std;
 
//изначально false, ибо мы ещё НЕ проиграли
bool game_over;
const int wh = 20; //ширина поля, равна 20 единицам (width)
const int ht = 20; //высота поля, равна 20 единицам (height)
int x, y, itemX, itemY,
    score; //itemX и itemY - это фрукты которые подбирает змейка.
enum eDirection { STOP = 0, LEFT, RIGHT, UP, DOWN }; //создание перечисления
eDirection direct;
 
//1 функция - при старте настраивает все нужные параметры
void Setup()
{   game_over = false;
    direct = STOP; //дабы змейка при запуске стояла на месте
    x = wh / 2 -
        1; //что бы змейка заспавнилась на середине карты, -1 ибо снизу +1 дописывали
    y = ht / 2 -
        1; //аналогично с высотой - спавн по середине поля, -1 ибо снизу +1 дописывали
    itemX = rand() %
            wh; //рандом + остаток при делении по иксу = рандомный спавн по ширине
    itemY = rand() %
            ht; //рандом + остаток при делении по игрику = рандомный спавн по высоте
    score = 0; //счёт изначально равен нулю
}
 
//2 функция - рисует игровое поле
void Map()
{   Sleep(100);
    system("cls");//очищает консоль каждый раз когда вызывается Map
 
    /*верхняя граница*/
    for (int i = 0; i < wh + 1 /*20 единиц*/; i++)
    {   cout << "_";
    }
    cout << endl; // перевод строки нужен в конце, а не после каждого символа.
 
 
    /*левая граница*/
    for (int i = 0; i < ht /*20 единиц + одна котрой нехватало*/;
                          i++)
                          
    {   for (int j = 0; j < wh; j++) /*что бы проверить каждую "ячейку" по ширине*/
        {   if (j == 0
                    || j == wh -
                    1) //проверка(!) если j==0, то это первый элемент, а значит нужна граница || там же нижняя граница 2-, а значит -1 ещё
                cout << "|";
            if (i == y && j == x) //координата самой змейки
                cout << "О";
            else if (i == itemY && j == itemX) //координата item
                cout << "o";
            else // остальные значит else
                cout << " ";//остальные поля заполняем пустотой
 
        }
 
        cout << endl;
    }
 
 
    /*нижняя граница*/for (int i = 0;
                           i < wh + 1/*20 единиц + одна котрой нехватало*/; i++)
    {   cout << "=";
    }
    cout << endl; // аналогично верхней границе
    cout << x << " " << y << endl;
}
 
//3 функция -отслеживает движения мыши/ввод с клавы
void Tracker()
{   if (_kbhit())   //keyboard hit, возвращает true если нажимается на нужную кнопку
    {   char a = _getch();
    
        switch (a) //помощью _getch можно отследит на какую кнопку нажал пользователь
        {   
 
            case 'a': //если пользователь нажимает на "а", то змейка влево двигается
                direct = LEFT;
                break;
 
            case 'w': //если пользователь нажимает на "w", то змейка вверх двигается
                direct = UP;
                break;
 
            case 'd': //если пользователь нажимает на "d", то змейка вправо двигается
                direct = RIGHT;
                break;
 
            case 's': //если пользователь нажимает на "s", то змейка вниз двигается
                direct = DOWN;
                break;
 
            case 'x': //если пользователь нажимает на "x", то игра заканчивается
                game_over = true;
                break;
        }
    }
}
 
//4 функция - логика игры и все процессы
void Process()
{   switch (direct)
    {
 
        case LEFT:
            x--; //координату х на еденицу меньше
            break;
 
        case RIGHT:
            x++;//координату х на еденицу больше
            break;
 
        case UP:
            y--;//координату y на еденицу меньше
            break;
 
        case DOWN:
            y++;//координату у на еденицу больше
            break;
    }
}
 
//ВСЕ ФУНКЦИИ МЫ ВЫЗЫВАЕМ В main
int main()
{   setlocale(0, "");
 
    Setup();
    while (!game_over) //"проверка" game_over, пока она запущена и равна false, то будут выполняться вписанные функции, "!" - значит логическое НЕ, Цикл продолжается, если gameOver НЕ равен true
    {   Map();
        Tracker();
        Process();
    }
    return 0;
}
0
1 / 1 / 0
Регистрация: 07.04.2020
Сообщений: 27
27.04.2020, 17:16  [ТС] 4
УРА!! спасли меня просто! я тупая дура скобку не закрыла
0
27.04.2020, 17:16
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.04.2020, 17:16
Помогаю со студенческими работами здесь

Не могу понять в чем ошибка в коде, создание игры змейка
процедура game не работает корректно при вызове через другую процедуру (difficult) , но корректно...

Нужно найти ошибку в коде
не могу найти ошибку в коде. задание такое: (1/a)+(1/a^2)+(1/a^4)+...+(1/a^2^n) вот код: var...

Нужно найти ошибку в коде
| sin x ; x &gt;= p/2 У = | tg x ; – p /2 &lt; x &lt; p/2 | cos x ; x &lt;= -p/2 ^^ | | ...

Нужно найти ошибку в коде
Вообщем, при вводе 13, у меня должно выходить 21, но выходит 15, что здесь не правильно, не вижу,...

Нужно найти ошибку в коде
&lt;html&gt; &lt;head&gt; &lt;title&gt;javascript массивы&lt;/title&gt; &lt;link rel=&quot;stylesheet&quot;...

Нужно найти ошибку в коде
Пример: у= 1)a*b*sin(x) 2)a+ln(a+b*x) 3)cos^2(a+b*x) Условия: 1)sin(x)&lt;2,5*a...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru