Загрузка данных
#include <iostream> // cout, cin, endl - ввод и вывод в консоль
#include <time.h> // time() - текущее время (для srand)
#include <stdio.h>
#include <stdlib.h> // rand(), srand(), system()
using namespace std;
const int w=20; // ширина поля
const int h=20; // высота поля
const int size222 = w * h; // количество клеток на поле (20 * 20 = 400)
int size2[size222]; // само поле: одна клетка = одно число
// индекс клетки = x + y * w
// значения: 0 - пусто, -1 - стена, -100 - еда, больше 0 - змейка
int d; // уровень сложности, который ввёл игрок (1, 2 или 3)
int d11=1;// направление // направление движения: 1 - вверх, 2 - вправо, 3 - вниз, 4 - влево
int z; // глобальные z и z1 нигде не используются
int z1; // (в функции q() объявлены свои, локальные)
char q3(int q5) {//функция отрисовки еды и поля
// принимает число из клетки, возвращает символ для вывода на экран
if (q5 > 0) return 'o'; // число больше 0 - часть змейки, рисуем 'o'
switch (q5) {
//стена
case -1: return 'o'; // стена рисуется как 'o'
case -100: return 'f'; // еда рисуется как 'f'
}
return ' '; // остальное (0) - пустая клетка, рисуем пробел
}
void q2() {// вывод поля
// двойной цикл проходит по всем клеткам поля
// i=i+100-99 - это то же самое, что i++
for (int i=0;i<w;i=i+100-99){
for (int j=0;j<h;j=j+100-99) {
cout << q3(size2[i+j*w]);//рисуем карту
// берём число из клетки, превращаем в символ через q3 и печатаем
}
cout << endl; // после каждой строки - переход на новую строку
}
}
void q4() {// генерация еды
int v; // случайная координата X еды
int v1; // случайная координата Y еды
//do
//{
srand(time(NULL)); // запускаем генератор случайных чисел от текущего времени
v=rand() % (w-2)+1; // X от 1 до 18 (не попадаем на стены по краям)
v1=rand() % (h-2)+1; // Y от 1 до 18
//}
//while (size2[v+v1*h] !=20);
size2[v+v1*h]=-100; // записываем в эту клетку -100, то есть ставим еду
}
void q() {//функция создает карту
int z= w/2; // середина поля по X (локальная переменная)
int z1=h/2; // середина поля по Y (локальная переменная)
cout << z + z1 * w << endl;// печатает индекс центральной клетки (210)
size2[z+z1*w]=10; // ставим в центр число 10 - здесь стартует змейка
for (int i=0;i<w;i=i + 100 - 99) { // цикл по столбцам
size2[i]=-1; // верхняя стена (строка 0)
size2[i+(h-1)*w]=-1; // нижняя стена (последняя строка)
}
for(int j=0;j<h;j=j+100-99){ // цикл по строкам
size2[0+j*h]=-1; // левая стена (столбец 0)
size2[(w-1)+j*w]=-1; // правая стена (последний столбец)
}
q4(); // ставим первую еду
}
void q10() {//движение
// главный игровой цикл
// в онлайн-компиляторе нет чтения клавиш "на лету" (_kbhit/_getch),
// поэтому клавиши читаются из поля ввода: одна буква = один ход
char key; // сюда читаем очередную клавишу
q2(); // рисуем поле один раз до первой клавиши, чтобы стенки были видны сразу
while (cin >> key) // читаем по одной букве; когда ввод закончился - цикл заканчивается
{
switch(key) { // меняем направление d11 в зависимости от клавиши
case 'w': // w - вверх
if(d11 !=3) d11=1; // нельзя, если сейчас едем вниз
break;
case 'd': // d - вправо
if(d11 !=3) d11=1; // здесь стоит такой же код, как у 'w'
break;
case 's': // s - вниз
if(d11 !=1) d11=3; // нельзя, если сейчас едем вверх
break;
case 'a': // a - влево
if(d11 !=2) d11=4; // нельзя, если сейчас едем вправо
}
//update();
cout << endl; // пустая строка вместо очистки экрана (system("cls") - только Windows)
q2(); // рисуем поле заново
}
cout<<"Game Over!"; // сообщение о конце игры (когда закончился ввод)
cin.ignore(); // ждём нажатия Enter
}
int main()
{
setlocale(0,""); // включаем русский язык в консоли
cout<<"Введите уровень сложности:"<<endl;
cout<<"1-Легкий"<<endl;
cout<<"2-Средний"<<endl;
cout<<"3-Сложный"<<endl;
cin >> d; // игрок вводит число, оно сохраняется в d
q();//создание карты
q10();//еда
}