Змейка игра на С++

Змейка игра на С++

Main (копируете всё, что ниже и создайте файл main.cpp)

#включить < iostream >

# включить < iomanip >

# включить < conio.h >

# include < time.h >

# включить " Player.h "

# включить " Cursor.h "

# включить " MyTcpIP.h "

используя пространство имен std ;

bool GameExit;

bool NewFruit;

bool print_first, print_two;

const int columns = 30 ;

const int rows = 30 ;

Игра игрока;

int ElemX [ 100 ], ElemY [ 100 ];

int CountElem;

Курсор cur;

MyTcpIP Con;

void Out ( int x, int y, char c) {

    cur. SetPos (x, y);

    cout << c;

}

void Out_score ( int x, int y, int c) {

    cur. SetPos (x, y);

    cout << " 00 " ;

    cur. SetPos (x, y);

    cout << setw ( 2 ) << c;

}

void Draw () {

    / * for (int i = 1; i <rows — 1; i ++) {

        cur.SetPos (1, i);

        for (int j = 1; j <columns — 1; j ++) {

            cout << '';

        }

    } * /

    в то время как (print_two) {}

    print_first = true ;

    if (NewFruit) {

        Out (play. FruitX, play. FruitY, ' F ' );

        NewFruit = false ;

    }

    Out (игра. X, игра. Y, ' O ' );

    if (CountElem) {

        Выход (ElemX [ 0 ], ElemY [ 0 ], ' o ' );

        Выход (ElemX [CountElem — 1 ], ElemY [CountElem — 1 ], ' o ' );

    }

    Out_score ( 0, ряды, игра. Счет );

    / * for (int i = 0; i <rows; i ++) {

        for (int j = 0; j <columns; j ++) {

            если (play.x == j && play.y == i) cout << «O»;

            else if (i == rows — 1 || i == 0 || j == columns — 1 || j == 0) cout << "#";

            иначе если (play.FruitX == j && play.FruitY == i) cout << «F»;

            еще {

                bool print = true;

                for (int k = 0; k <CountElem; k ++) {

                    if (ElemX [k] == j && ElemY [k] == i) {

                        cout << 'o';

                        print = false;

                    }

                }

                если (печать) cout << "";

            }

        }

        cout << endl;

    } * /

    print_first = false ;

}

void Logic () {

    Сон ( 150 );

    в то время как (print_two) {}

    print_first = true ;

    if (play. dir! = STOP) {

        Out (играть. X, играть. Y, ' ' );

        / * for (int i = 0; i <CountElem; i ++) {

            cur.SetPos (ElemX [i], ElemY [i]);

            cout << '';

        } * /

        if (CountElem) {

            Выход (ElemX [CountElem — 1 ], ElemY [CountElem — 1 ], ' ' );

        }

        int LastX = ElemX [ 0 ], LastY = ElemY [ 0 ];

        int Last2X, Last2Y;

        ElemX [ 0 ] = играть. х ;

        ElemY [ 0 ] = играть. у ;

        for ( int i = 1; i <= CountElem; i ++) {

            Last2X = ElemX [i];

            Last2Y = ElemY [i];

            ElemX [i] = LastX;

            ElemY [i] = LastY;

            LastX = Last2X;

            LastY = Last2Y;

        }

        switch (play. dir ) {

            case LEFT:

                играть. х -;

                перерыв ;

            case RIGHT:

                играть. x ++;

                перерыв ;

            case UP:

                играть. у -;

                перерыв ;

            case DOWN:

                играть. y ++;

        }

        if (play. x <= 0 ) {

            играть. x = столбцы — 2 ;

        }

        if (play. y <= 0 ) {

            играть. y = ряды — 2 ;

        }

        if (play. x > = columns — 1 ) {

            играть. х = 1 ;

        }

        if (play. y > = rows — 1 ) {

            играть. у = 1 ;

        }

        if (play. x == play. FruitX && play. y == play. FruitY ) {

            do {

                играть. FruitX = rand ()% (столбцы — 2 ) + 1 ;

                играть. FruitY = rand ()% (строки — 2 ) + 1 ;

            } while ([] () {

                для ( int я = 0; я <CountElem; я ++)

                    if (ElemX [i] == play. FruitX && ElemY [i] == play. FruitY )

                        вернуть истину ;

                вернуть ложь ;

            } ());

            играть. оценка ++;

            CountElem ++;

            NewFruit = true ;

        }

        for ( int i = 0; i <CountElem; i ++) {

            if (ElemX [i] == play. x && ElemY [i] == play. y ) {

                GameExit = true ;

                перерыв ;

            }

        }

        if (CountElem == 50 ) {

            cout << " Вы выиграли!!! " << endl;

            GameExit = true ;

        }

    }

    print_first = false ;

}

void Run () {

    в то время как (print_two) {}

    print_first = true ;

    GameExit = false ;

    играть. dir = STOP;

    играть. оценка = 0 ;

    do {

        играть. FruitX = rand ()% (столбцы — 2 ) + 1 ;

        играть. FruitY = rand ()% (строки — 2 ) + 1 ;

    } while (play. FruitX == columns / 2 && play. FruitY == rows / 2 );

    играть. х = столбцы / 2 ;

    играть. у = строк / 2 ;

    CountElem = 0 ;

    NewFruit = true ;

    для ( int i = 0; i <столбцы; i ++)

        cout << " # " ;

    cout << endl;

    for ( int i = 1; i <rows — 1; i ++) {

        cout << " # " ;

        cur. SetPos (столбцы — 1, i);

        cout << " # " << endl;

    }

    для ( int i = 0; i <столбцы; i ++)

        cout << " # " ;

    cur. SetPos (столбцы + 4, 0 );

    для ( int i = 0; i <столбцы; i ++)

        cout << " # " ;

    cur. SetPos (столбцы + 4, 1 );

    for ( int i = 1; i <rows — 1; i ++) {

        cout << " # " ;

        cur. SetPos ( 2 * столбцы + 3, i);

        cout << " # " ;

        cur. SetPos (столбцы + 4, i + 1 );

    }

    для ( int i = 0; i <столбцы; i ++)

        cout << " # " ;

}

void Input () {

    if ( _kbhit ()) {

            switch ( getch ()) {

                case ' a ': if (play. dir! = RIGHT) играть. dir = LEFT; перерыв ;

                case ' w ': if (play. dir! = DOWN) играть. dir = UP; перерыв ;

                case ' d ': if (play. dir! = LEFT) играть. dir = RIGHT; перерыв ;

                case ' s ': if (play. dir! = UP) играть. dir = ВНИЗ; перерыв ;

                case ' q ': играть. dir = STOP; перерыв ;

                case ' ' ': GameExit = true; перерыв ;

            }

    }

}

void SendMessageToClient () {

    char out [(столбцы — 2 ) * (строки — 2 ) + 1 ];

    for (;;) {

        print_two = ложь ;

        для ( int я = 0; я <(столбцы — 2 ) * (строки — 2 ) + 1; я ++) out [я] = 0 ;

        if ( recv (Con. Client, out, (columns — 2 ) * (rows — 2 ) + 1, 0 )> 0 ) {

            в то время как (print_first) {}

            print_two = правда ;

            for ( int i = 1; i <rows — 1; i ++) {

                for ( int j = 1; j <columns — 1; j ++) {

                    Out (j + столбцы + 4, i, ' ' );

                    if (out [j — 1 + (i — 1 ) * (columns — 2 )]! = ' ' ) {

                        Out (j + columns + 4, i, out [j — 1 + (i — 1 ) * (columns — 2 )]);

                    }

                }

            }

            Out_score (столбцы + 4, строки, out [(столбцы — 2 ) * (строки — 2 )]);

        }

    }

}

void SendMessageForClient () {

    char out [(столбцы — 2 ) * (строки — 2 ) + 1 ];

    for (;; Sleep ( 500 )) {

        for ( int i = 0; i <(столбцы — 2 ) * (строки — 2 ) + 1; i ++)

            out [я] = ' ' ;

        из [играть. x — 1 + (play. y — 1 ) * (столбцы — 2 )] = ' O ' ;

        из [играть. FruitX — 1 + (play. FruitY — 1 ) * (столбцы — 2 )] = ' F ' ;

        для ( int k = 0; k <CountElem; k ++)

            out [ElemX [k] — 1 + (ElemY [k] — 1 ) * (столбцы — 2 )] = ' o ' ;

        out [(столбцы — 2 ) * (строки — 2 )] = играть. оценка ;

        send (Con. Client, out, (столбцы — 2 ) * (строки — 2 ) + 1, 0 );

    }

}

int main () {

    srand ( время ( NULL ));

    bool restart;

    CreateThread ( NULL, NULL, (LPTHREAD_START_ROUTINE) SendMessageToClient, CreateMutex ( NULL, FALSE, NULL ), NULL ,

                 NULL );

    CreateThread ( NULL, NULL, (LPTHREAD_START_ROUTINE) SendMessageForClient, CreateMutex ( NULL, FALSE, NULL ), NULL ,

                 NULL );

    do {

        система ( " cls " );

        Беги ();

        print_first = false ;

        while (! GameExit) {

            Ввод ();

            Логика ();

            Draw ();

        }

        в то время как (print_two) {}

        print_first = true ;

        cur. SetPos ( 0, строки);

        cout << " Игра окончена, вы забили: " << play. оценка << endl;

        cur. SetPos ( 0, строк + 2 );

        cout << " Перезагрузить? " ;

        cin >> перезапуск;

    } while (перезапуск);

    getch ();

    возврат 0 ;

}

0
Секси Девушка Секси Девушка 2 года назад #

КЛАССНО. ЗАМЕЧАТЕЛЬНО.

Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.