Загрузка данных


#include <iostream>   // cout, cin, endl - ввод и вывод в консоль
#include <time.h>     // time() - текущее время (для srand)
#include <conio.h>    // _kbhit() и _getch() - чтение нажатий клавиш (только Windows)
#include <windows.h>  // Sleep() - пауза в миллисекундах (только Windows)
#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() {//движение
  // главный игровой цикл
  
  while (true)                  // повторяется бесконечно
  {

    if (_kbhit()) {             // была ли нажата клавиша

      char key = _getch();      // читаем нажатую клавишу

      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();
      
      system("cls");            // очищаем экран консоли
      q2();                     // рисуем поле заново

      switch (d)                // пауза зависит от сложности (d - то, что ввели в main)
      {
       case 1: Sleep(500);      // сложность 1 - пауза 500 мс
       case 2: Sleep(400);      // сложность 2 - пауза 400 мс
       case 3: Sleep(400);      // сложность 3 - пауза 400 мс
       // break нет, поэтому после совпавшего case выполняются и все следующие
      }

  }

  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();//еда
  
}