Змейка игра на С++
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 ;
}
Секси Девушка 2 years ago #
КЛАССНО. ЗАМЕЧАТЕЛЬНО.