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

Ошибки в игре: недопустимые локальные определения функций - C++

Восстановить пароль Регистрация
 
leksik131
Сообщений: n/a
14.04.2014, 01:28     Ошибки в игре: недопустимые локальные определения функций #1
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
#include <iostream> //Содержит потоки ввода/вывода std::cin и std::cout и все для работы с ними
#include <stdlib.h> //Содержит функции randomize и random
#include <conio.h> //Содержит функции clrscr и getch
 
 
int Field[4][4];
int EmptyX, EmptyY;
enum Direction {LEFT, UP, RIGHT, DOWN};
 
 
 
 
 
void CreateField()
{
bool NumIsFree[15]; //NumIsFree[i] показывает, определили ли мы уже позицию i-й костяшки
int Nums[15]; //Nums[i] содержит номер костяшки, находящейся в i-й позиции
for (int i = 0; i < 15; i++) //Объявляем, что изначально все костяшки свободны
NumIsFree[i] = true;
rand(); //randomize позволяет при каждом прогоне программы получать разные последовательности псевдослучайных чисел
bool Ok; //Флаг, определяющий корректность выбора костяшки для данной позиции
int RandNum; //Номер костяшки, генерируемый в дальнейшем случайным образом
for (int i = 0; i < 15; i++) //Нам надо определить номер костяшки, находящейся в каждой из 15 позиций поля
{
Ok = false; //Каждый раз сбрасываем значение флага
while (!Ok) //Продолжаем случайным образом определять номер костяшки, пока он не окажется корректным
{
RandNum = (rand()%15) + 1; //random(n) генерирует псевдослучайное число от 0 до n - 1, а нам нужно от 1 до 15
if (NumIsFree[RandNum - 1]) //Если костяшка с таким номером еще свободна (помним, что массивы нумеруются начиная с нуля)
Ok = true; //то мы определили ее номер корректно
}
Nums[i] = RandNum; //Записываем этот корректный номер в i-ю позицию
NumIsFree[RandNum - 1] = false; //Костяшка с этим номером теперь занята
}
int Chaos = 0; //Количество беспорядков на поле
int CurrNum; //Костяшка, для которой мы рассматриваем беспорядки
for (int i = 0; i < 14; i++) //Считаем для костяшек на первых 14 позициях (для 15-й это бессмысленно)
{
CurrNum = Nums[i];
for (int j = i + 1; j < 15; j++)
if (CurrNum > Nums[j])
Chaos++;
}
if (Chaos % 2 == 1) //Если общее число беспорядков нечетное,
{ //меняем местами костяшки на 14-й и 15-й позициях
int temp = Nums[13];
Nums[13] = Nums[14];
Nums[14] = temp;
}
 
 
for (int i = 0; i < 15; i++)
Field[i % 4][i / 4] = Nums[i]; //a % b - остаток от деления a на b
Field[3][3] = 0;
EmptyX = 3; EmptyY = 3;
 
void DrawField() //Вариант, подходящий для всех реализаций
{
clrscr(); //Очищаем экран
for (int j = 0; j < 4; j++) //Рисуем построчно четыре горизонтальных ряда костяшек
{
for (int i = 0; i < 4; i++) //Рисуем верхнюю часть ряда
{
if (Field[i][j])
std::cout << "++++";
else
std::cout << " ";
}
std::cout << '\n';
for (int i = 0; i < 4; i++) //Рисуем среднюю часть ряда (с номерами)
{
if (Field[i][j])
{
std::cout << "+";
std::cout.width(2);
std::cout << Field[i][j] << "+";
}
else
std::cout << " ";
}
std::cout << '\n';
for (int i = 0; i < 4; i++) //Рисуем нижнюю часть ряда
{
if (Field[i][j])
std::cout << "++++";
else
std::cout << " " ;
}
std::cout << '\n';
}
}
 
void Move (Direction dir)
{
switch (dir)
{
case LEFT:
{
if (EmptyX < 3)
{
Field[EmptyX][EmptyY] = Field[EmptyX + 1][EmptyY];
Field[EmptyX + 1][EmptyY] = 0;
EmptyX++;
}
} break;
case UP:
{
if (EmptyY < 3)
{
Field[EmptyX][EmptyY] = Field[EmptyX][EmptyY + 1];
Field[EmptyX][EmptyY + 1] = 0;
EmptyY++;
}
} break;
case RIGHT:
{
if (EmptyX > 0)
{
Field[EmptyX][EmptyY] = Field[EmptyX - 1][EmptyY];
Field[EmptyX - 1][EmptyY] = 0;
EmptyX--;
}
} break;
case DOWN:
{
if (EmptyY > 0)
{
Field[EmptyX][EmptyY] = Field[EmptyX][EmptyY - 1];
Field[EmptyX][EmptyY - 1] = 0;
EmptyY--;
}
} break;
}
}
 
bool FieldIsCorrect()
{
for (int i = 0; i < 15; i++)
if (Field[i % 4][i / 4] != i + 1)
return false; //При первом же нахождении несоответствия выходим и возвращаем false
return true;//Если не найдено ни одного несоответствия - поле собрано верно
}
 
int main()
 
{
CreateField(); //Генерация поля
DrawField(); //Первоначальное рисование поля
char c; //В эту переменную мы считываем символ нажатой клавиши
while (!FieldIsCorrect()) //Игровой цикл (выполняется пока поле не будет собрано)
{
c = getch(); //Считываем нажатие клавиши
switch(c) //В зависимости от нажатой клавиши (от ее целочисленного кода) двигаем костяшки
{
case 75: Move(LEFT); break; //Нажата клавиша "Влево"
case 72: Move(UP); break; //Нажата клавиша "Вверх"
case 77: Move(RIGHT); break; //Нажата клавиша "Вправо"
case 80: Move(DOWN); break; //Нажата клавиша "Вниз"
case 27: return 0; //Нажата клавиша "Escape"
}
DrawField(); //Рисование поля
}
std::cout << "\n\nCongratulations! Press Enter to exit!"; //Поздравление игрока
std::cin.get(); //Ждем ввода строки и нажатия Enter перед выходом
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.04.2014, 01:28     Ошибки в игре: недопустимые локальные определения функций
Посмотрите здесь:

C++ Недопустимые локальные определения функций
C++ Используя перегрузку функций, написать программу определения максимального значения элемента массива разного типа
Массив: Используя перегрузку функций, написать программу определения минимального значения элемента массива разного типа C++
C++ исправьте ошибки в игре
main: недопустимые локальные определения функций C++
C++ Error C2601: main: недопустимые локальные определения функций
C++ Ошибки в почти готовой игре Змейка
Ошибки в покерной игре: 'players' was not declared in this scope C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
14.04.2014, 02:44     Ошибки в игре: недопустимые локальные определения функций #2
Скобки, завершающей тело CreateField() нет.
Yandex
Объявления
14.04.2014, 02:44     Ошибки в игре: недопустимые локальные определения функций
Ответ Создать тему
Опции темы

Текущее время: 18:33. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru