Source Змейки/Пакмена

Забаненный
Статус
Оффлайн
Регистрация
6 Ноя 2016
Сообщения
587
Реакции[?]
311
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Вообщем даю готовый сурс Змейки/Пакмена с комментариями.В сурсе описаны всё основные значения кода.
Пожалуйста, авторизуйтесь для просмотра ссылки.
 
Забаненный
Статус
Оффлайн
Регистрация
6 Ноя 2016
Сообщения
587
Реакции[?]
311
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Перезалил сурс
 
The end
Пользователь
Статус
Оффлайн
Регистрация
28 Янв 2017
Сообщения
448
Реакции[?]
127
Поинты[?]
0
Наконец-то , и вроде ты еще говорил ,что новая игра будет? Это правда? И если да, то какая ?)
 
Забаненный
Статус
Оффлайн
Регистрация
6 Ноя 2016
Сообщения
587
Реакции[?]
311
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Наконец-то , и вроде ты еще говорил ,что новая игра будет? Это правда? И если да, то какая ?)
Да будет, я ещё не доделал.
 
Будет несколько уровней, на подобие марио/дудла/ и ещё какая то игра в голове крутится(всё это я соединил в один проект.)
 
Забаненный
Статус
Оффлайн
Регистрация
6 Ноя 2016
Сообщения
587
Реакции[?]
311
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Да будет, я ещё не доделал.
 
Будет несколько уровней, на подобие марио/дудла/ и ещё какая то игра в голове крутится(всё это я соединил в один проект.)
Начинать вы будете с 1-ого уровня (минимальная сложность, а заканчивать не проходимым уровнем
 
Забаненный
Статус
Оффлайн
Регистрация
6 Ноя 2016
Сообщения
587
Реакции[?]
311
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Забаненный
Статус
Оффлайн
Регистрация
6 Ноя 2016
Сообщения
587
Реакции[?]
311
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Забаненный
Статус
Оффлайн
Регистрация
6 Ноя 2016
Сообщения
587
Реакции[?]
311
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
У самого не открываются ору
 
Вот сурс пакмена
Код:
#include <iostream>
#include <stdio.h>
#include <windows.h>
#include <string>
#include <vector>
HANDLE hConsole;
//HANDLE hStdout, hStdin;
HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);

using namespace std;

char tmp_map[32][64];
enum ConsoleColor
{
    Black = 0,
    Blue = 1,
    Green = 2,
    Cyan = 3,
    Red = 4,
    Magenta = 5,
    Brown = 6,
    LightGray = 7,
    DarkGray = 8,
    LightBlue = 9,
    LightGreen = 10,
    LightCyan = 11,
    LightRed = 12,
    LightMagenta = 13,
    Yellow = 14,
    White = 15
};
void SetColor(ConsoleColor text, ConsoleColor background)
{
    SetConsoleTextAttribute(hStdOut, (WORD)((background << 4) | text));
}

char map[32][64] =  {
    
    "+############################################################+",
    "|                             |           |                  |",
    "|                             |###########|      Pacman      |",
    "|## ########### ##   #########|           |        by        | ",
    "|   |                         |     ##    |   Shapord/Foran  | ",
    "| | |### |  |           |     |  ## ### # |                  | ",
    "| |      |  | |###  |   |  |  |           |##################| ",
    "| | #####|  | |      ## |     | ##### ####|                  | ",
    "| |           |###  |      |  |     # #   |##################| ",
    "| |##### ###         ##       |#### # # ##|      #       ## #| ",
    "|          ######  ####### ###|           | ### ### ## #    #| ",
    "|                             | ## ###### | ###     ## ## # #| ",
    "|# ### ####      ###   #######|              ## ###    ## # #| ",
    "|                             | ##### ####|# #      ## ##    | ",
    "|  ###  ####  #########   ### |           |  # # ## ##    ## | ",
    "|   # ##   #  #               |#########  | ## # ##   ## #   | ",
    "|                #    #   #               |    #    #      ##| ",
    "+############################################################+"
    
    
};

void ShowMap()
{
    for (int i = 0; i < 18; i++) {
        SetConsoleTextAttribute(hConsole, (WORD)((LightMagenta << 4) | LightMagenta));
        SetColor(LightMagenta, Black);
        setlocale(LC_ALL, "Russian");
        printf("%s\n", map[i], LightMagenta);
        SetConsoleTextAttribute(hConsole, (WORD)((LightMagenta << 4) | LightMagenta));

    }
}

void gotoxy(short x, short y)
{
    HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
    COORD position = { x, y };

    SetConsoleCursorPosition(hStdout, position);
}

class entity {
public:
    entity(int x, int y) {
        this->x = x;
        this->y = y;
    }

    void move_x(int p) {
        if (map[y][x + p] == ' ') x += p;
    }

    void move_y(int p) {
        if (map[y + p][x] == ' ') y += p;
    }

    void move(int p, int q) {
        x += p;
        y += q;
    }

    int get_x() { return x; }
    int get_y() { return y; }

    void draw(char p) {
        map[x][y] = p;
        gotoxy(x, y); printf("%c", p);
    }

private:
    int x;
    int y;
};

struct walk {
    short walk_count;
    short x;
    short y;
    short back;
};

struct target {
    short x;
    short y;
};

vector<target> walk_queue;

vector<walk> BFSArray;

void AddArray(int x, int y, int wc, int back) {
    if (tmp_map[y][x] == ' ' || tmp_map[y][x] == '.') {
        tmp_map[y][x] = '#';
        walk tmp;
        tmp.x = x;
        tmp.y = y;
        tmp.walk_count = wc;
        tmp.back = back;
        BFSArray.push_back(tmp);
    }
}

void FindPath(int sx, int sy, int x, int y) {
    memcpy(tmp_map, map, sizeof(map));
    BFSArray.clear();
    walk tmp;
    tmp.x = sx;
    tmp.y = sy;
    tmp.walk_count = 0;
    tmp.back = -1;
    BFSArray.push_back(tmp);

    int i = 0;
    while (i < BFSArray.size()) {
        if (BFSArray[i].x == x && BFSArray[i].y == y) {
            walk_queue.clear();
            target tmp2;
            while (BFSArray[i].walk_count != 0) {
                tmp2.x = BFSArray[i].x;
                tmp2.y = BFSArray[i].y;
                walk_queue.push_back(tmp2);

                i = BFSArray[i].back;
            }

            break;
        }

        AddArray(BFSArray[i].x + 1, BFSArray[i].y, BFSArray[i].walk_count + 1, i);
        AddArray(BFSArray[i].x - 1, BFSArray[i].y, BFSArray[i].walk_count + 1, i);
        AddArray(BFSArray[i].x, BFSArray[i].y + 1, BFSArray[i].walk_count + 1, i);
        AddArray(BFSArray[i].x, BFSArray[i].y - 1, BFSArray[i].walk_count + 1, i);

        /*
        AddArray( BFSArray[i].x+1, BFSArray[i].y+1, BFSArray[i].walk_count+1, i );
        AddArray( BFSArray[i].x-1, BFSArray[i].y+1, BFSArray[i].walk_count+1, i );
        AddArray( BFSArray[i].x+1, BFSArray[i].y+1, BFSArray[i].walk_count+1, i );
        AddArray( BFSArray[i].x+1, BFSArray[i].y-1, BFSArray[i].walk_count+1, i );

        AddArray( BFSArray[i].x+1, BFSArray[i].y-1, BFSArray[i].walk_count+1, i );
        AddArray( BFSArray[i].x-1, BFSArray[i].y-1, BFSArray[i].walk_count+1, i );
        AddArray( BFSArray[i].x-1, BFSArray[i].y+1, BFSArray[i].walk_count+1, i );
        AddArray( BFSArray[i].x-1, BFSArray[i].y-1, BFSArray[i].walk_count+1, i );
        */
        i++;
    }

    BFSArray.clear();
}


int main()
{
    bool running = true;
    int x = 15; // hero x
    int y = 16; // hero y
    int old_x;
    int old_y;

    int ex = 1;
    int ey = 1;


    int pts = 0;
    SetConsoleTextAttribute(hConsole, (WORD)((LightMagenta << 4) | LightMagenta));
    setlocale(LC_ALL, "Russian");
    Beep(659.26, 200);
    Beep(659.26, 200);
    Sleep(200);
    Beep(659.26, 200);
    Sleep(100);
    Beep(523.26, 200);
    Beep(659.26, 200);
    Sleep(200);
    Beep(783.98, 200);
    Sleep(400);
    Beep(391.99, 200);
    SetConsoleTextAttribute(hConsole, (WORD)((LightMagenta << 4) | LightMagenta));
    SetColor(Yellow, Black);
    cout << "                     ????? ????? ????? ?   ? ????? ?   ?  " << endl;
    cout << "                     ?   ? ?   ? ?     ?? ?? ?   ? ??  ?      " << endl;
    cout << "                     ????? ????? ?     ? ? ? ????? ? ? ? " << endl;
    cout << "                     ?     ?   ? ?     ?   ? ?   ? ?  ??" << endl;
    cout << "                     ?     ?   ? ????? ?   ? ?   ? ?   ?    " << endl;
    SetConsoleTextAttribute(hConsole, (WORD)((LightMagenta << 4) | LightMagenta));
    SetColor(Yellow, Black);
    cout << "                                     " << endl;
    cout << " ###########                   ???????                         " << endl;
    cout << " #         #                  ????????????         " << endl;
    cout << " #   ####  #                 ???????????????            " << endl;
    cout << " #   #  #  #                ? ????   ??????          " << endl;
    cout << " #   ####  #                ?????  ????      ???    ???   ???   ???   ???   ???" << endl;
    cout << " #         #                ?????????        ???    ???   ???   ???   ???   ???" << endl;
    cout << " #         #                ???????????       " << endl;
    cout << " # ### ### #                ??????????????             " << endl;
    cout << " # # # # # #                 ???????????????  " << endl;
    cout << " ### ### ###                  ???????????     " << endl;
    SetColor(LightGreen, Black);
    printf("Инструкция:\n1.Управление стрелочками\n2.Кушайте точки, созданные монстром , чтобы получить очки\n3.Не ловите монстра, он может вас убить.\n\n");
    printf("H -> Сложно\nN -> Нормально\nE -> Легко\nInput : ");
    char diffi;
    int speedmod = 3;

    cin >> diffi;

    if (diffi == 'Ж') {
        speedmod = 2;
    }
    else if (diffi == 'H') {
        speedmod = 1;
    }

    system("cls");
    ShowMap();

    gotoxy(x, y);
    SetColor(Yellow, Black);
    cout << "H";

    int frame = 0;

    FindPath(ex, ey, x, y);

    while (running) {
        gotoxy(x, y); cout << " ";

        old_x = x;
        old_y = y;

        if (GetAsyncKeyState(VK_UP)) {
            if (map[y - 1][x] == '.') { y--; pts++; }
            else
                if (map[y - 1][x] == ' ') y--;
        }
        if (GetAsyncKeyState(VK_DOWN)) {
            if (map[y + 1][x] == '.') { y++; pts++; }
            else
                if (map[y + 1][x] == ' ') y++;
        }
        if (GetAsyncKeyState(VK_LEFT)) {
            if (map[y][x - 1] == '.') { x--; pts++; }
            else
                if (map[y][x - 1] == ' ') x--;
        }
        if (GetAsyncKeyState(VK_RIGHT)) {
            if (map[y][x + 1] == '.') { x++; pts++; }
            else
                if (map[y][x + 1] == ' ') x++;
        }

        if (old_x != x || old_y != y) {
            FindPath(ex, ey, x, y);
        }
        SetColor(Yellow, Black);
        gotoxy(x, y); cout << "{";
        SetColor(White, Black);
        map[ey][ex] = '.';
        gotoxy(ex, ey); cout << ".";
        
        

        if (frame%speedmod == 0 && walk_queue.size() != 0) {
            ex = walk_queue.back().x;
            ey = walk_queue.back().y;
            walk_queue.pop_back();
        }

        gotoxy(ex, ey);
        SetColor(LightCyan, Black);
        cout << "Ж";

        if (ex == x && ey == y) {
            break;
        }

        SetColor(White, Black);
        gotoxy(32, 18);
        gotoxy(32, 1); cout << pts;
        Sleep(100);
        frame++;
    }

    system("cls");
    printf("You Lose and your score is : %i", pts);
    Beep(659.26, 200);
    Beep(659.26, 200);
    Sleep(200);
    Beep(659.26, 200);
    Sleep(100);
    Beep(523.26, 200);
    Beep(659.26, 200);
    Sleep(200);
    Beep(783.98, 200);
    Sleep(400);
    Beep(391.99, 200);
    cin.get();

    return 0;
}
 
Забаненный
Статус
Оффлайн
Регистрация
6 Ноя 2016
Сообщения
587
Реакции[?]
311
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Код:
#include <iostream>  //стандартная библиотека
#include <time.h> //случайные числа
#include <stdio.h> //для printf
#include <windows.h> // для HANDLE, курсора, цвета
#include <conio.h>  //для kbhit



using namespace std;



HANDLE hConsole;
//HANDLE hStdout, hStdin;
HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);

void GotoXY(int X, int Y)
{
    COORD coord = { X, Y };
    SetConsoleCursorPosition(hStdOut, coord);
}
//Цвет
enum ConsoleColor
{
    Black = 0,
    Blue = 1,
    Green = 2,
    Cyan = 3,
    Red = 4,
    Magenta = 5,
    Brown = 6,
    LightGray = 7,
    DarkGray = 8,
    LightBlue = 9,
    LightGreen = 10,
    LightCyan = 11,
    LightRed = 12,
    LightMagenta = 13,
    Yellow = 14,
    White = 15
};

void SetColor(ConsoleColor text, ConsoleColor background)
{
    SetConsoleTextAttribute(hStdOut, (WORD)((background << 4) | text));
}


class Zmeja  // структура змейка
{
public:COORD *t; //точки
public:int PCount; //количество яблок
};
enum uprawlenie { LEFT, UP, RIGHT, DOWN }; //направление змейки
class Game //даные-точности: змейки, яблок, передвижение по X и Y, задержка, направление
{
public:Zmeja gaduka; //змейка
public:COORD jabloko[5]; //яблоко
public:int dx, dy; //передвижение
public:int pause; //задержка
public:int nap; //направление

};

void add_yabloko(int index, Game &g)
{
    int n = g.gaduka.PCount;

    int x = rand() % 56 + 3; //
    int y = rand() % 19 + 3; //кординаты яблока


    g.jabloko[index].X = x; //
    g.jabloko[index].Y = y; //запоминаем позицию яблока
    SetConsoleCursorPosition(hConsole, g.jabloko[index]); //переносим курсор в эту позицию
    SetConsoleTextAttribute(hConsole, 0x0c); //цвет яблока 
    printf("%c", 4); //рисуем яблоко каким хотим символом
}
void PlusJabloko(Game &g, int Yabloko_index = 5) //Функция разброски яблок
{
    if (Yabloko_index != 5)
    {
        add_yabloko(Yabloko_index, g);
    }
    else
    {
        for (int i = 0; i<5; i++)
            add_yabloko(i, g);
    }
}


void skorostGame(Game &g) // Функцыя старта змейки ее координат и скорости
{

    system("cls");
    g.gaduka.PCount = 3; //сколько точек в змейке
    g.gaduka.t = new COORD[3];//создали точки
    for (int i = 0; i < 3; i++)
    {
        g.gaduka.t[i].X = 20 + i;
        g.gaduka.t[i].Y = 20;

    }
    g.dx = 1;
    g.dy = 0;
    g.pause = 150;//скорость передвижение змеи
    PlusJabloko(g);//рисуем яблока

}


void ZmejaStart()
{
    setlocale(LC_ALL, "Russian");
  
}
void STENA_2() //Вся информация, отображаемая на стене
{
    SetColor(LightGreen, Black); GotoXY(20, 0); cout << "Игра змейка by Shapord1488" << endl; 
    GotoXY(64, 2); cout << "Данные:" << endl; //Данные
    GotoXY(64, 3); cout << "Яблок:0" << endl; //Яблок
    GotoXY(64, 4); cout << "Длина:3" << endl; //Длина
    GotoXY(64, 5); cout << "Скорость:0" << endl; //Скорость
    GotoXY(64, 7); cout << "Управление:" << endl; //Управление
    GotoXY(64, 8); cout << "Esc:Выход" << endl; //Выход
    GotoXY(64, 9); cout << "P:Пауза "<< endl; //Пауза
    GotoXY(64, 10); cout << "S:Старт" << endl; //Старт
    GotoXY(64, 13); printf("%c", 24); cout << ":Вверх" << endl; //Вверх
    GotoXY(64, 14); printf("%c", 25); cout << ":Вниз" << endl;   //Вниз
    GotoXY(64, 15); printf("%c", 27); cout << ":Влево" << endl;  //Влево
    GotoXY(64, 16); printf("%c", 26); cout << ":Вправо" << endl; //Вправо
    {SetColor(Yellow, Black);

    GotoXY(2, 2); //Рисуем верхнюю горизонтальную линию-стенку
    int m = 0;
    for (m = 0; m < 60; m++)
    {
        printf("*");
    }
    }

    {
        GotoXY(2, 24); //Рисуем нижнюю горизонтальную линию-стенку
        int m = 0;
        for (m = 0; m < 60; m++)
        {
            printf("*");
        }
    }
    {   //Рисуем левую вертикальную линию-стенку
        GotoXY(2, 3); cout << "*" << endl;
        GotoXY(2, 4); cout << "*" << endl;
        GotoXY(2, 5); cout << "*" << endl;
        GotoXY(2, 6); cout << "*" << endl;
        GotoXY(2, 7); cout << "*" << endl;
        GotoXY(2, 8); cout << "*" << endl;
        GotoXY(2, 9); cout << "*" << endl;
        GotoXY(2, 10); cout << "*" << endl;
        GotoXY(2, 11); cout << "*" << endl;
        GotoXY(2, 12); cout << "*" << endl;
        GotoXY(2, 13); cout << "*" << endl;
        GotoXY(2, 14); cout << "*" << endl;
        GotoXY(2, 15); cout << "*" << endl;
        GotoXY(2, 16); cout << "*" << endl;
        GotoXY(2, 17); cout << "*" << endl;
        GotoXY(2, 18); cout << "*" << endl;
        GotoXY(2, 19); cout << "*" << endl;
        GotoXY(2, 20); cout << "*" << endl;
        GotoXY(2, 21); cout << "*" << endl;
        GotoXY(2, 22); cout << "*" << endl;
        GotoXY(2, 23); cout << "*" << endl;
    }
    {   //Рисуем правую вертикальную линию-стенку
        GotoXY(61, 3); cout << "*" << endl;
        GotoXY(61, 4); cout << "*" << endl;
        GotoXY(61, 5); cout << "*" << endl;
        GotoXY(61, 6); cout << "*" << endl;
        GotoXY(61, 7); cout << "*" << endl;
        GotoXY(61, 8); cout << "*" << endl;
        GotoXY(61, 9); cout << "*" << endl;
        GotoXY(61, 10); cout << "*" << endl;
        GotoXY(61, 11); cout << "*" << endl;
        GotoXY(61, 12); cout << "*" << endl;
        GotoXY(61, 13); cout << "*" << endl;
        GotoXY(61, 14); cout << "*" << endl;
        GotoXY(61, 15); cout << "*" << endl;
        GotoXY(61, 16); cout << "*" << endl;
        GotoXY(61, 17); cout << "*" << endl;
        GotoXY(61, 18); cout << "*" << endl;
        GotoXY(61, 19); cout << "*" << endl;
        GotoXY(61, 20); cout << "*" << endl;
        GotoXY(61, 21); cout << "*" << endl;
        GotoXY(61, 22); cout << "*" << endl;
        GotoXY(61, 23); cout << "*" << endl;
    }
}


//Функция которая двигает и рисует
enum { KONEC, STENA, PLUS, MOVE };
int Move(Game &g)
{
    int & n = g.gaduka.PCount;
    COORD head = g.gaduka.t[n - 1]; //голова
    COORD tail = g.gaduka.t[0]; //хвост
    COORD next;
    next.X = head.X + g.dx;
    next.Y = head.Y + g.dy; //проверка следующей точки по направлению

    if (next.X < 3 || next.Y < 3 || next.X > 60 || next.Y > 23)//не уперлась ли в стену?
        return STENA;

    if (n > 4)
    {
        for (int i = 0; i < n; i++)
            if (next.X == g.gaduka.t[i].X && next.Y == g.gaduka.t[i].Y) //не наехали ли на себя?

                return KONEC;
    }
    for (int tt = 0; tt<5; tt++)
        if (next.X == g.jabloko[tt].X && next.Y == g.jabloko[tt].Y)
        {
            COORD*temp = new COORD[++n]; //новый масив больший на 1
            for (int i = 0; i < n; i++)
                temp[i] = g.gaduka.t[i]; //перекопируем
            temp[n - 1] = next; //добавляем одну
            delete[] g.gaduka.t;
            g.gaduka.t = temp;

            SetConsoleCursorPosition(hConsole, head);
            SetConsoleTextAttribute(hConsole, 0x0a); //закрашиваем яблоко которое съели         
            printf("*");
            Beep(100, 100);
            Sleep(0);
            SetConsoleCursorPosition(hConsole, next);
            SetConsoleTextAttribute(hConsole, 0x0a);
            printf("%c", 1);
            PlusJabloko(g, tt);
            return PLUS;
        }

    for (int i = 0; i < n - 1; i++)
        g.gaduka.t[i] = g.gaduka.t[i + 1];
    g.gaduka.t[n - 1] = next;
    SetConsoleCursorPosition(hConsole, tail);//закрашиваем хвостик
    printf(" ");
    
    SetConsoleCursorPosition(hConsole, head);
    SetConsoleTextAttribute(hConsole, 0x0b);//красим хвост змеи в зелений цвет
    
    printf("*");
    SetConsoleCursorPosition(hConsole, next);
    SetConsoleTextAttribute(hConsole, 0x0f); //красим курсор в белый цвет (голову змеи)
    printf("%c", 1);

    return MOVE;
}int intro()
{
    SetColor(LightGreen, Black);
    cout <<"                          ????? ??  ? ????? ?  ? ?????   " << endl;
    cout <<"                          ?     ??  ? ?   ? ? ?  ?   " << endl;
    cout <<"                          ????? ? ? ? ????? ??   ????? " << endl;
    cout <<"                              ? ?  ?? ?   ? ? ?  ?   " << endl;
    cout <<"                          ????? ?   ? ?   ? ?  ? ????? " << endl;
    cout << "   " << endl;
    SetColor(LightCyan, Black);
    printf("                          ********************D ");
    SetColor(LightRed, Black);
    printf("  %c", 4);
    SetColor(LightGreen, Black);
    
    SetColor(LightGreen, Black);
    setlocale(LC_ALL, "rus");
    Beep(659.26, 200);
    Beep(659.26, 200);
    Sleep(200);
    Beep(659.26, 200);
    Sleep(100);
    Beep(523.26, 200);
    Beep(659.26, 200);
    Sleep(200);
    Beep(783.98, 200);
    Sleep(400);
    Beep(391.99, 200);
    GotoXY(7, 9); //Интруха
    printf("           Управление - стрелочки. Esc - выход из игры.");
    GotoXY(15,10);
    printf("     Для продолжения нажмите любую кнопку...");
    _getch();
    return 0;
}

int main()
{


    hConsole = GetStdHandle(STD_OUTPUT_HANDLE); //получаем дескриптор консоли
    intro();
    int key = 0, count = 0;
    bool Pause = false;
    Game g;
    skorostGame(g);
    STENA_2();
    srand(time(0));
    bool pause = false;
    while (key != 27)
    {
        while (!_kbhit()) //ждет пока нажмем
        {
            if (Pause == true)
            {
                Sleep(1);
                continue;
            }
        
            switch (Move(g))//движение
            {

            case PLUS:
                ++count;
                g.pause -= 1;
                SetColor(LightGreen, Black);
                GotoXY(64, 2); cout << "Данные:" << endl;
                GotoXY(64, 3); cout << "Яблок:" << count << endl;
                GotoXY(64, 4); cout << "Длина:" << g.gaduka.PCount << endl;
                GotoXY(64, 5); cout << "Скорость:" << g.pause << endl;
                GotoXY(64, 7); cout << "Упркавление:" << endl;
                GotoXY(64, 8); cout << "Esc:Выход" << endl;
                GotoXY(64, 9); cout << "Q:Пауза" << endl;
                GotoXY(64, 10); cout << "W:Старт" << endl;
                GotoXY(64, 13); printf("%c", 24); cout << ":Вверх" << endl;
                GotoXY(64, 14); printf("%c", 25); cout << ":Вниз" << endl;
                GotoXY(64, 15); printf("%c", 27); cout << ":Влево" << endl;
                GotoXY(64, 16); printf("%c", 26); cout << ":Вправо" << endl;
                if (count == 50)
                {
                    SetColor(Yellow, Black);
                    GotoXY(24, 1); cout << "Вы выиграли!" << endl; //Вы выиграли                   
                    _getch();
                    return(0);
                }
                break;

            case STENA:

            case KONEC:
                GotoXY(23, 1); printf("Ты проиграл!  \n\n\t\t\t"); //Вы проиграли
                Beep(659.26, 200);
                Beep(659.26, 200);
                Sleep(200);
                Beep(659.26, 200);
                Sleep(100);
                Beep(523.26, 200);
                Beep(659.26, 200);
                Sleep(200);
                Beep(783.98, 200);
                Sleep(400);
                Beep(391.99, 200);
                SetColor(LightRed , Black);
                _getch();
                break;
            }

            Sleep(g.pause); //Задержка
        }
        key = _getch();

        if (key == 'q' || key == 'q')
            Pause = !Pause;
        else if (key == 'w' || key == 'w')
            ZmejaStart();
        else if (key == 0 || key == 224)
        {
            key = _getch();

            if (key == 72 && g.nap != DOWN)
            {
                g.nap = UP;
                g.dx = 0;
                g.dy = -1;
            }
            else if (key == 80 && g.nap != UP)
            {
                g.nap = DOWN;
                g.dx = 0;
                g.dy = 1;
            }
            else if (key == 75 && g.nap != RIGHT)
            {
                g.nap = LEFT;
                g.dx = -1;
                g.dy = 0;
            }
            else if (key == 77 && g.nap != LEFT)
            {
                g.nap = RIGHT;
                g.dx = 1;
                g.dy = 0;
            }
        }
    }
}
 
Забаненный
Статус
Оффлайн
Регистрация
6 Ноя 2016
Сообщения
587
Реакции[?]
311
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
В змейке есть
 
Забаненный
Статус
Оффлайн
Регистрация
6 Ноя 2016
Сообщения
587
Реакции[?]
311
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Ща сделаю
 
Забаненный
Статус
Оффлайн
Регистрация
6 Ноя 2016
Сообщения
587
Реакции[?]
311
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Код:
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <Windows.h>
#include <time.h>
#include <string.h>


HANDLE hConsole;
//HANDLE hStdout, hStdin;
HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);

void GotoXY(int X, int Y)
{
    COORD coord = { X, Y };
    SetConsoleCursorPosition(hStdOut, coord);
}
//Цвет
enum ConsoleColor
{
    Black = 0,
    Blue = 1,
    Green = 2,
    Cyan = 3,
    Red = 4,
    Magenta = 5,
    Brown = 6,
    LightGray = 7,
    DarkGray = 8,
    LightBlue = 9,
    LightGreen = 10,
    LightCyan = 11,
    LightRed = 12,
    LightMagenta = 13,
    Yellow = 14,
    White = 15
};

void SetColor(ConsoleColor text, ConsoleColor background)
{
    SetConsoleTextAttribute(hStdOut, (WORD)((background << 4) | text));
}
/* */
void gotoxy(int xpos, int ypos); //прототип функции помещения курсора в точку xpos, ypos
/* */
using namespace std;
#define KEY_UP 72 //определение клавиши "вверх"
#define KEY_DOWN 80 //определение клавиши "вниз"
#define KEY_LEFT 75 //определение клавиши "влево"
#define KEY_RIGHT 77 //определение клавиши "вправо"
#define KEY_SPACE 32 //определение клавиши "пробел"
#define KEY_ESC 27 //определение клавиши "escape"
#define KEY_ENTER 13 //определение клавиши "enter"
 
#define SIZEX 24//-ширина поля
#define SIZEY 24//-длина поля
#define FMAP_COUNTS 7 //количество фигур тетриса

#define TRUE 1
#define FALSE 0  //логические переменные для создания фигур
 
#define SCR_SP  '\xB2' //закрашивание поля
#define SCR_OB  '\xFE' //закрашивание фигуры
//char main_color[] = "color ##";

int screen[SIZEX][SIZEY] = {0}; //размер экрана
int map[4][4]; //фигура
int px, py, score, nextmap;
const char* GAME_TITLE ="      ??????????  ?????????  ???????????  ???????? ????    ????  ?????????  \n"
                        "      ??  ??  ??  ??         ??   ??  ??  ??    ??  ??    ????   ??     ??  \n"
                        "      ??  ??  ??  ??         ??   ??  ??  ??    ??  ??   ?? ??   ??         \n"
                        "          ??      ?????????       ??      ????????  ??  ??  ??   ??         \n"
                        "          ??      ??              ??      ??        ?? ??   ??   ??         \n"
                        "          ??      ??              ??      ??        ????    ??   ??     ??  \n"
                        "        ??????    ?????????     ???????   ????     ?????    ???  ?????????  \n\n";
int fmap[FMAP_COUNTS][4][4] = //инициализация фигур тетриса
{
    {
        {1, 1, 0, 0},
        {1, 1, 0, 0},
        {0, 0, 0, 0},
        {0, 0, 0, 0}
    },
    {
        {1, 0, 0, 0},
        {1, 0, 0, 0},
        {1, 0, 0, 0},
        {1, 0, 0, 0}
    },
    {
        {0, 0, 1, 0},
        {1, 1, 1, 0},
        {0, 0, 0, 0},
        {0, 0, 0, 0}
    },
    {
        {1, 1, 1, 0},
        {0, 0, 1, 0},
        {0, 0, 0, 0},
        {0, 0, 0, 0}
    },
    {
        {0, 1, 1, 0},
        {1, 1, 0, 0},
        {0, 0, 0, 0},
        {0, 0, 0, 0}
    },
    {
        {1, 1, 0, 0},
        {0, 1, 1, 0},
        {0, 0, 0, 0},
        {0, 0, 0, 0}
    },
    {
        {1, 1, 1, 0},
        {0, 1, 0, 0},
        {0, 0, 0, 0},
        {0, 0, 0, 0}
    }
};
 
void print(void) //печать
{
    int i, j;
    int buff[SIZEX][SIZEY];
  
    for(i = 0; i < SIZEY; i++) for(j = 0; j < SIZEX; j++) buff[j][i] = screen[j][i]; //вывод из буфера на экран
    for(i = 0; i < 4; i++) for(j = 0; j < 4; j++) if(map[j][i]) buff[j + px][i + py] = 1; //если часть фигуры, то в буфере обозначить 1
 
    gotoxy(0, 0); //перейти в точку с координатами 0, 0
    for(i = 0; i < SIZEY; i++)
    {
        for(j = 0; j < SIZEX; j++)
        {
            putchar(buff[j][i] == 0 ? SCR_SP : SCR_OB); //если элемент в буфере не часть фигуры, то закрасить полем
        }
        putchar('\n');
    }
 
    gotoxy(SIZEX + 1, 0); //уйти вбок
    printf("Number of points: %i              by Shapord1488/Foran", score); //вывести количество очков, набираемое в ходе игры
}
////////////////////////////////////////////////////////////////////////////////////////////////
void printnextmap(void) //напечатать следующую идущую фигуру в поле
{
    int i, j;
 
    gotoxy(SIZEX + 1, 2);
    SetColor(Yellow, Black);
    printf("Next: ");
 
    for(i = 0; i < 4; i++)
    {
        gotoxy(SIZEX + 2, i + 3);
        for(j = 0; j < 4; j++)
        {
            putchar(fmap[nextmap][j][i] == 0 ? ' ' : SCR_OB); //если не часть фигуры, то закрасить пробелами, иначе закрасить фигурой
        }
    }
}
//////////////////////////////////////////////////////////////////////////////////////
int getkey(void)//-пауза во время игры
{
    int c;
    if(_kbhit()) //если нажата клавиша
    {
        if((c = _getch()) == 224)
        c = _getch();
         //если нажата клавиша p (пауза), то нажать любую клавишу для продолжения игры
        return c;
    }
    return FALSE;
}
//////////////////////////////////////////////////////////////////////////////////////
void gotoxy(int xpos, int ypos) //стандартная функция перехода курсором в точку с координатами xpos, ypos
{
    COORD scrn; 
    HANDLE hOuput = GetStdHandle(STD_OUTPUT_HANDLE);//создание "ручки" для вывода на экран консоли текста и прочего
    scrn.X = xpos; scrn.Y = ypos;//-присваем значения
    SetConsoleCursorPosition(hOuput,scrn);//-ставим курсор,на нужную позицию.
}
/////////////////////////////////////////////////////////////////////////////////////////
int valnewpos(int x, int y) //необходимость движения фигуры вниз
{
    int i, j;
    if(x < 0) return FALSE;
    for(i = 0; i < 4; i++)
    {
        for(j = 0; j < 4; j++)
        {
            if(map[j][i])
            {
                if((j + x >= SIZEX) || (i + y >= SIZEY)) return FALSE;//-проверка не зашла ли фигура за границы нашего экрана.
                if(screen[j + x][i + y])
                {
                    return FALSE;//-если да то вернем "фолс"
                }
            }
        }
    }
    return TRUE;//-если нет возвращаем "тру" - фигура движется вниз.
}

#define inv(x) ((x * (-1)) + 3)
/////////////////////////////////////////////////////////////////////////////////////////////////////
void rotatemap(void) //поворот фигуры
{
    /* Optimize! */
    int _map[4][4];
    int i, j, sx = 4, sy = 4;
 
    for(i = 0; i < 4; i++)
        for(j = 0; j < 4; j++)
        {
            _map[j][i] = map[j][i];//-создае копию фигуры,для того что бы вернуть первоначальный вид.
            if(map[j][i])//цикл с услевием ЕСЛИ - фигура равна нулю ,то
            {
                if(i < sx) sx = i;//проходим по фигурке запоминаем новую координату х
                if(inv(j) < sy) sy = inv(j);//новую координату у
            }
            map[j][i] = 0;//-обнуляем матрицу с фигурой
        }
 
    for(i = 0; i < 4; i++)
        for(j = 0; j < 4; j++)
            if(_map[inv(i)][j]) map[j - sx][i - sy] = 1;//рисуем перевортыш
    if(!valnewpos(px,py)) for(i = 0; i < 4; i++)
                                for(j = 0; j < 4; j++)
                                       map[j][i] = _map[j][i];//возвращаем обратно на изначальную фигурку
}
//////////////////////////////////////////////////////////////////////////////////////////////////////
int rnd(int max) //рандомизация
{
    max++;
    return (int)(rand() * max / RAND_MAX);
}
///////////////////////////////////////////////////////////////////////////////////
void sleep(int milsec) //задержка
{
    clock_t t = clock();
    while(clock() - t < milsec);
}
///////////////////////////////////////////////////////////////////////////////////
void deleteline(void) //убить собранную линию
{
    int i, j, k, cl;
 
    for(i = SIZEY - 1; i >= 0; i--)
    {
        cl = 1;
        for(j = 0, cl = 1; j < SIZEX; j++)
        {
            if(!screen[j][i]) cl = 0;
        }
        if(cl)
        {
            /* Animation */
            gotoxy(0, i);
            for(k = 0; k < SIZEX; k++) putchar('_'), sleep(20);
            /* --------- */
          
            score += (((i * (-1)) + SIZEY) * 10);
 
            for(k = i; k > 0; k--)
            {
                for(j = 0; j < SIZEX; j++)
                {
                    screen[j][k] = screen[j][k - 1];
                }
            }
            i++;
            print();
        }
    }
}
////////////////////////////////////////////////////////////////////////////////////
void createmap(void) //создание фигуры
{
    int i, j;
 
    for(i = 0; i < 4; i++)
        for(j = 0; j < 4; j++)
            map[j][i] = fmap[nextmap][j][i];
    py = 0;
    px = SIZEX / 2;
 
    nextmap = rnd(FMAP_COUNTS - 1);
    printnextmap();
}
///////////////////////////////////////////////////////////////////////////////////////
void clearscreen(void) //очистка экрана
{
    int i, j;
    for(i = 0; i < SIZEY; i++)
        for(j = 0; j < SIZEX; j++)
            screen[j][i] = 0;
}
/////////////////////////////////////////////////////////////////////////////////////
void createrndscreen(void) //создать случайный экран
{
    int i, j, rn;
    clearscreen();
    rn = rnd(10);
    for(i = SIZEY - 1; i >= (SIZEY - 1) - rn; i--)
        for(j = 0; j < SIZEX; j++)
        {
            screen[j][i] = rnd(1);
        }
}
////////////////////////////////////////////////////////////////////////////////////
void startgame(void) //игра
{
    int i, j, c;
    time_t tm;
 
    system("cls");
    px = SIZEX / 2;//значение для падения фигуры по х,выход из центра
    py = 0;
    score = 0;
 
    tm = clock();
 
    nextmap = rnd(FMAP_COUNTS - 1);//следующая фигура выбирается из 6
    createmap();//создание фигурки
 
    while(TRUE)
    {
        c = getkey();
 
        switch(c)
        {
        case KEY_UP:
            rotatemap();//поворот
            break;
        case KEY_SPACE:
           rotatemap();//поворот
           break;
        case KEY_DOWN://движение вниз
            for(; valnewpos(px, py + 1); py++);
            for(i = 0; i < 4; i++)
                    for(j = 0; j < 4; j++)
                        if(map[j][i]) screen[px + j][py + i] = 1;
 
            print();
            deleteline();//проход по функции проверки заполнилась ли линия и её удаление
            createmap();//новая фигура
            break;
        case KEY_LEFT:
            if(valnewpos(px - 1, py)) px--;//движение влево ,уменьшаем значение пера по х
            break;
        case KEY_RIGHT:
            if(valnewpos(px + 1, py)) px++;//движение вправо ,увеличиваем значение пера по х
            break;
        case 'p'://пауза
            _getch();
            break;
        case KEY_ESC://выход
            return;
        }
 
        if((clock() - tm) > 720)//-время падения фигуры
        {
            tm = clock();
 
            if(!(valnewpos(px, py + 1)))
            {
                for(i = 0; i < 4; i++)
                    for(j = 0; j < 4; j++)
                        if(map[j][i]) screen[px + j][py + i] = 1;
 
                createmap();
                deleteline();
            }
            else py++;//падение вниз
        }
 
        print();
 
        for(i = 0; i < SIZEX; i++)
        {
            if(screen[i][0])//если экраный у и у фигуры совпали и равны 0,то конец игры ,поле заполнилось до верха
            {
                system("cls");
                gotoxy(2, 8);
                cout << "                   ##### #   # #####   ##### #   # #" << endl;
                cout << "                       #   #   # #       #     ##  # ## " << endl;
                cout << "                       #   ##### #####   ##### # # # # #" << endl;
                cout << "                       #   #   # #       #     #  ## #  #" << endl;
                cout << "                       #   #   # #####   ##### #   # #####" << endl;
                Beep(659.26, 200);
                Beep(659.26, 200);
                Sleep(200);
                Beep(659.26, 200);
                Sleep(100);
                Beep(523.26, 200);
                Beep(659.26, 200);
                Sleep(200);
                Beep(783.98, 200);
                Sleep(400);
                Beep(391.99, 200);
                return;
            }
        }
    }
}
///////////////////////////////////////////////////////////////////////////////////
void gamemenu(void) //игровое меню
{
    int p = 1, c = 0;
    const char* GAME_MENU =  "                     +===============================+\n"
                             "                     |  1. START                     |\n"
                             "                     +===============================+\n"
                             "                     |  2. START (HARD LEVEL)        |\n"
                             "                     +===============================+\n"
                             "                     |  3. CONTROL                   |\n"
                             "                     +===============================+\n"
                             "                     |  4. EXIT                      |\n "
                              "                    +===============================+";
    system("cls"); printf("%s%s", GAME_TITLE, GAME_MENU);
    while(TRUE) //навигация по меню
    {
        c = _getch();
        printf("\a");
        switch(c)
        {
        case '1':
        case '2':
        case '3':
        case '4':
            p = c - '0';
        case KEY_ENTER:
            switch(p)
            {
            case 1:
                clearscreen();
                startgame();
                gotoxy(0, SIZEY); printf("Press ESC to exit to the main menu...\n");printf("\a"); while(_getch() != KEY_ESC);
                break;
            case 2:
                clearscreen();
                createrndscreen();
                startgame();
                gotoxy(0, SIZEY); printf("Press ESC to exit to the main menu...\n");printf("\a"); while(_getch() != KEY_ESC);
                break;
            case 3:
                system("cls");
                printf( "%s%s", GAME_TITLE,
                        "                              +=======+=======+\n"
                        "                              |\x1B      |Left   |\n"
                        "                              |\x1A      |Right  |\n"
                        "                              |\x19      |Down   |\n"
                        "                              |\x18/Space|Turn   |\n"
                        "                              |P      |Pause  |\n"
                        "                              |ESC    |Exit   |\n"
                        "                              +=======+=======+\n\n"
                        "\n\n\n\n\n\nPress any key to continue...");
                        _getch();
                        printf("\a");
                        if(_kbhit())
                           _getch();
                break;
            case 4: return;
            }
            system("cls"); printf("%s%s", GAME_TITLE, GAME_MENU);
            p = 1;
            break;
        case KEY_UP:
            if(p > 1) p--;
            break;
        case KEY_DOWN:
            if(p < 4) p++;
            break;
        case KEY_ESC:
            return;
        }
      
    }
}
///////////////////////////////////////////////////////////////////////////////////
int main()
{ 
    system("color 0");
    SetColor(Yellow, Black);
    Beep(659.26, 200);
    Beep(659.26, 200);
    Sleep(200);
    Beep(659.26, 200);
    Sleep(100);
    Beep(523.26, 200);
    Beep(659.26, 200);
    Sleep(200);
    Beep(783.98, 200);
    Sleep(400);
    Beep(391.99, 200);
    printf( "%s", GAME_TITLE);
    printf( "                         Press any key to continue...");
    _getch();
    printf("\a");
    if(_kbhit()) _getch();
    gamemenu();
}
 
Всё, устал комменты ставить фухх. Надеюсь поёмешь все
 
Забаненный
Статус
Оффлайн
Регистрация
6 Ноя 2016
Сообщения
587
Реакции[?]
311
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
The end
Пользователь
Статус
Оффлайн
Регистрация
28 Янв 2017
Сообщения
448
Реакции[?]
127
Поинты[?]
0
Сверху Снизу