【多人欢乐】<胎神游戏集> 双人贪吃蛇(win11适配版更新)
胎神游戏集第八篇之!
双人贪吃蛇!
win 11 适配版如下:
(24/8/24 11:25)
#include<iostream>
#include<cmath>
#include<cstdlib>
#include<cstdio>
#include<ctime>
#include<ctime>
#include<conio.h>
#include<windows.h>
#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0)
using namespace std;
HANDLE hout = GetStdHandle(STD_OUTPUT_HANDLE);
COORD coord;
void locate(int x, int y) // 用来在屏幕特定区域输出
{
coord.X=y*2;
coord.Y=x;
SetConsoleCursorPosition(hout,coord);
};
void Color(int a) // 改颜色
{
if(a==0) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);
if(a==1) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);
if(a==2) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);
if(a==3) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_BLUE);
if(a==4) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
if(a==5) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN);
if(a>=6) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE);
}
void hide() {CONSOLE_CURSOR_INFO cursor_info={1,0};SetConsoleCursorInfo(hout,&cursor_info);} // 隐藏鼠标
double random(double start, double end) {return start+(end-start)*rand()/(RAND_MAX+1.0);} // 生成两数之间的随机数
int m,n,hard;
char g;
bool b11,b21,b12,b22,b13,b23,b14,b24;
const int Ti=1e4;
struct node {int x, y;}snake1[1000],snake2[1000]; // 用于存储蛇每一个点的位置
node food[2]; // 存储食物位置
int snake_length1,snake_length2,dir1,dir2; // 蛇长
int direct[4][2]={{-1,0},{1,0},{0,-1},{0,1}}; // 四个方向
void print_wall() // 输出边界框
{
cout<<"[]";for(int i=1;i<=n+1;i++) cout<<"[]";cout<<endl;
for(int j=0;j<=m-1;j++)
{
cout<<"[]";
for(int i=1;i<=n;i++)
cout<<" ";cout<<"[]"<<endl;
}
cout<<"[]";for(int i=1;i<=n+1;i++) cout<<"[]";
}
void print_snake() // 输出蛇
{
locate(snake1[0].x,snake1[0].y);
Color(3),cout<< "㊣",Color(0); // 蛇头特殊显示:紫色
for(int i=1;i<snake_length1-1;i++) {locate(snake1[i].x,snake1[i].y);Color(5),cout<<"㊣",Color(0);} // 蛇身黄色
locate(snake2[0].x,snake2[0].y);
Color(3),cout<<"㊣",Color(0);
for (int i=1;i<snake_length2-1;i++) {locate(snake2[i].x,snake2[i].y);Color(1),cout<<"㊣",Color(0);}
}
bool is_correct1() // 查看玩家一是否死亡
{
if(g!='3'&&(snake1[0].x== 0||snake1[0].y==0 || snake1[0].x == m + 1 || snake1[0].y == n + 1)) return false; // 普通模式碰墙会死
if(g=='3') // 无限宇宙模式墙体可以传送
{
if(snake1[0].x == 0) snake1[0].x =m;
if(snake1[0].x == m+1) snake1[0].x =1;
if(snake1[0].y == 0) snake1[0].y =n;
if(snake1[0].y == n+1) snake1[0].y =1;
}
for(int i=1;i<=snake_length1-1;i++)if(snake1[0].x==snake1[i].x&&snake1[0].y==snake1[i].y) return false; // 头碰到自己身体死
for(int i=0;i<=snake_length2-1;i++)if(snake1[0].x==snake2[i].x&&snake1[0].y==snake2[i].y) return false; // 头碰到别人身体死
return true;
}
bool is_correct2() // 查看玩家二是否死亡
{
if(g!='3'&&(snake2[0].x == 0 || snake2[0].y == 0 || snake2[0].x == m + 1 || snake2[0].y == n + 1))return false;
if(g=='3')
{
if(snake2[0].x == 0) snake2[0].x =m;
if(snake2[0].x == m+1) snake2[0].x =1;
if(snake2[0].y == 0) snake2[0].y =n;
if(snake2[0].y == n+1) snake2[0].y =1;
}
for (int i = 1; i <= snake_length2 - 1; i++)if(snake2[0].x == snake2[i].x && snake2[0].y == snake2[i].y)return false;
for (int i = 0; i <= snake_length1 - 1; i++)if(snake2[0].x == snake1[i].x && snake2[0].y == snake1[i].y)return false;
return true;
}
bool create_food(bool a) // 生成食物
{
while (1) // 寻找一个可以生成食物的位置
{
int i=(int)random(0,m)+1;
int j=(int)random(0,n)+1; // 随机位置
food[a].x = i; food[a].y = j;
for (int k = 0; k <= snake_length1 - 1; k++)
if (snake1[k].x == food[a].x && snake1[k].y == food[a].y) continue; // 食物不能生成在蛇身上
for (int k = 0; k <= snake_length2 - 1; k++)
if (snake2[k].x == food[a].x && snake2[k].y == food[a].y) continue;
if (food[0].x == food[1].x && food[0].y == food[1].y) continue; // 食物不能生成在食物上
break; // 成功生成
}
locate(food[a].x,food[a].y);
Color(2),cout << "⊙",Color(0); // 新食物
return true;
}
bool go_ahead1() // 玩家一向前移动
{
node tmp;
bool e = false;
tmp = snake1[snake_length1-1]; // 存储尾部位置
for (int i = snake_length1 - 1; i >= 1;i--) snake1[i] = snake1[i - 1]; // 头以后的所有点前移
snake1[0].x += direct[dir1][0];
snake1[0].y += direct[dir1][1]; // 头部前移
locate(snake1[1].x, snake1[1].y); //旧头位置输出身体
Color(5),cout << "㊣",Color(0);
if(snake1[0].x==food[0].x&&snake1[0].y==food[0].y){snake_length1++;e=true;snake1[snake_length1-1]=tmp;create_food(0);} // 吃到食物1,添加一个点到尾部
if(snake1[0].x==food[1].x&&snake1[0].y==food[1].y){snake_length1++;e=true;snake1[snake_length1-1]=tmp;create_food(1);} // 吃到食物2
if (!e) // 输出空格
{
locate(tmp.x, tmp.y);
cout<<" ";
}
locate(snake1[0].x, snake1[0].y); //输出新头
Color(3),cout << "㊣",Color(0);
if (!is_correct1()) // 死亡
{
system("color 7F");Color(5);
if(g=='1') locate(10,8),cout << "You lose!";
if(g=='2'||g=='3') {locate(9,8);cout << "1p lose!";locate(11,8);cout<<"Length: "<<snake_length1;}
Color(0);
return false;
}
return true;
}
bool go_ahead2() // 玩家二向前移动
{
node tmp;
bool e=false;
tmp=snake2[snake_length2-1];
for (int i=snake_length2-1;i>=1;i--) snake2[i]=snake2[i - 1];
snake2[0].x+=direct[dir2][0];
snake2[0].y+=direct[dir2][1];
locate(snake2[1].x, snake2[1].y);Color(1),cout << "㊣",Color(0);
if(snake2[0].x==food[0].x&&snake2[0].y==food[0].y) {snake_length2++;e=true;snake2[snake_length2-1]=tmp;create_food(0);}
if(snake2[0].x==food[1].x&&snake2[0].y==food[1].y) {snake_length2++;e=true;snake2[snake_length2-1]=tmp;create_food(1);}
if(!e) {locate(tmp.x, tmp.y);cout<<" ";}
locate(snake2[0].x, snake2[0].y);Color(3),cout << "㊣",Color(0);
if(!is_correct2())
{
system("color 7F");Color(1);
if(g=='1') locate(10,8),cout << "You lose!";
if(g=='2'||g=='3') {locate(9,8);cout<<"2p lose!";locate(11,8);cout<<"Length: "<<snake_length2;Color(0);return false;}
}
return true;
}
int Start() // 游戏封面
{
print_wall();
print_snake();Color(2);
locate(8,5);cout<<"◆";Color(4),cout<<" 双 人 贪 吃 蛇";Color(2),cout<<" ◆"; Color(5);
locate(10,1);cout<<" 1.单人模式(A W S D↑←↓→八键位系统)"; Color(1);
locate(12,1);cout<<" 2.双人模式(双人 2*4 键位系统)";Color(3);
locate(14,1);cout<<" 3.双人·“无限宇宙”模式";Color(0);
A:if(kbhit()) g=_getch();
if(g!='1'&&g!='2'&&g!='3') goto A; // 选关
}
int main()
{
system("mode con cols=45 lines=26");
CONSOLE_CURSOR_INFO cursor_info={1,0};
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);
srand((unsigned)time(NULL));
m=20,n=20,hard=3*Ti;ST:
snake_length1=snake_length2 = 5;
double hard_len;
dir1=3;dir2=2;
for(int i=0;i<=4;i++) {snake1[i].x=6;snake1[i].y=6-i;}
for(int i=0;i<=4;i++) {snake2[i].x=15;snake2[i].y=15+i;} // 游戏初始化
Start();
system("cls"); //输出封面
hide();
print_wall();
create_food(0);
if(g=='2'||g=='3') create_food(1); // 双人模式新增一个食物
print_snake();
locate(m+2,0);cout<<"Now Length 1:";
locate(m+3,0);cout<<"Now Length 2:";
locate(m+4,0);cout<<"按 k/l 加/减 速 速度:";locate(m+4,13),cout<<2000-hard/100;
locate(10,4);Color(4);cout<<"Please point 'y' to Start";Color(0);
SS: char ee=_getch(); if(ee!='y') goto SS;
locate(10,4);cout<<" ";
while (1)
{
b11=b21=b12=b22=b13=b23=b14=b24=0; // 保证一轮只能移动一次
for(int i=1;i<=hard;i++) // hard越大,游戏速度越慢
{
if(g=='1') // 模式一AWSD与上下左右操作
{
if(KEY_DOWN(87)||KEY_DOWN(40)) {if (dir1 == 2 || dir1 == 3){dir1 = 0;if(b11==0) b11=1,go_ahead1();}} // 只能90度转向
else if(KEY_DOWN(83)||KEY_DOWN(38)) {if (dir1 == 2 || dir1 == 3){dir1 = 1;if(b12==0) b12=1,go_ahead1();}}
else if(KEY_DOWN(65)||KEY_DOWN(39)) {if (dir1 == 0 || dir1 == 1){dir1 = 2;if(b13==0) b13=1,go_ahead1();}}
else if(KEY_DOWN(68)||KEY_DOWN(37)) {if (dir1 == 0 || dir1 == 1){dir1 = 3;if(b14==0) b14=1,go_ahead1();}}
if(KEY_DOWN(38)||KEY_DOWN(83)) {if (dir2 == 2 || dir2 == 3){dir2 = 0;if(b21==0) b21=1,go_ahead2();}}
else if(KEY_DOWN(40)||KEY_DOWN(87)) {if (dir2 == 2 || dir2 == 3){dir2 = 1;if(b22==0) b22=1,go_ahead2();}}
else if(KEY_DOWN(37)||KEY_DOWN(68)) {if (dir2 == 0 || dir2 == 1){dir2 = 2;if(b23==0) b23=1,go_ahead2();}}
else if(KEY_DOWN(39)||KEY_DOWN(65)) {if (dir2 == 0 || dir2 == 1){dir2 = 3;if(b24==0) b24=1,go_ahead2();}}
}
if(g=='2'||g=='3') // 模式二三AWSD与上下左右操作
{
if(KEY_DOWN(87)) {if (dir1 == 2 || dir1 == 3){dir1 = 0;if(b11==0) b11=1,go_ahead1();}}
else if(KEY_DOWN(83)) {if (dir1 == 2 || dir1 == 3){dir1 = 1;if(b12==0) b12=1,go_ahead1();}}
else if(KEY_DOWN(65)) {if (dir1 == 0 || dir1 == 1){dir1 = 2;if(b13==0) b13=1,go_ahead1();}}
else if(KEY_DOWN(68)) {if (dir1 == 0 || dir1 == 1){dir1 = 3;if(b14==0) b14=1,go_ahead1();}}
if(KEY_DOWN(38)) {if (dir2 == 2 || dir2 == 3){dir2 = 0;if(b21==0) b21=1,go_ahead2();}}
else if(KEY_DOWN(40)) {if (dir2 == 2 || dir2 == 3){dir2 = 1;if(b22==0) b22=1,go_ahead2();}}
else if(KEY_DOWN(37)) {if (dir2 == 0 || dir2 == 1){dir2 = 2;if(b23==0) b23=1,go_ahead2();}}
else if(KEY_DOWN(39)) {if (dir2 == 0 || dir2 == 1){dir2 = 3;if(b24==0) b24=1,go_ahead2();}}
}
if(KEY_DOWN(76)) hard=min(hard+10,20*Ti),locate(m+4,13),cout<<2000-hard/100<<" ";
if(KEY_DOWN(75)) hard=max(hard-10,2*Ti),locate(m+4,13),cout<<2000-hard/100<<" "; // 调节游戏速度
}
if(snake_length1>snake_length2) {if(!go_ahead2()) break;if(!go_ahead1()) break;} // 同时死亡,长度大者获胜
if(snake_length1<snake_length2) {if(!go_ahead1()) break;if(!go_ahead2()) break;}
if(snake_length1==snake_length2) {int r=rand()%2;if(r==0&&!go_ahead1()) break;if(r==0&&!go_ahead2()) break;if(r==1&&!go_ahead2()) break;if(r==1&&!go_ahead1()) break;}
locate(m+2,12);cout<<snake_length1;
locate(m+3,12);cout<<snake_length2;
}
char e;
locate(13,4);cout<<"Please point 'y' to Play AGain.";
A:e=_getch(); if(e=='y') goto ST; else goto A;
return 0;
}
先声明,这个代码只有40%左右是我自己写的,这是胎神大大的第一个改编游戏!
最新修改时间:2019/11/14/20:45
最新修改:开创全新三种爆好玩模式!
封面来了!
#include<iostream>
#include<cmath>
#include<cstdlib>
#include<cstdio>
#include<ctime>
#include<ctime>
#include<conio.h>
#include<windows.h>
#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0)
using namespace std;
HANDLE hout = GetStdHandle(STD_OUTPUT_HANDLE);
COORD coord;
void locate(int x, int y)
{
coord.X=y*2;
coord.Y=x;
SetConsoleCursorPosition(hout,coord);
};
void Color(int a)
{
if(a==0) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);
if(a==1) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);
if(a==2) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);
if(a==3) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_BLUE);
if(a==4) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
if(a==5) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN);
if(a>=6) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE);
}
void hide() {CONSOLE_CURSOR_INFO cursor_info={1,0};SetConsoleCursorInfo(hout,&cursor_info);}
double random(double start, double end) {return start+(end-start)*rand()/(RAND_MAX+1.0);}
int m,n,hard;
char g;
bool b11,b21,b12,b22,b13,b23,b14,b24;
const int Ti=1e4;
struct node {int x, y;}snake1[1000],snake2[1000];
node food[2];
int snake_length1,snake_length2,dir1,dir2;
int direct[4][2]={{-1,0},{1,0},{0,-1},{0,1}};
void print_wall()
{
cout<<"■";for(int i=1;i<=n+1;i++) cout<<"■";cout<<endl;
for(int j=0;j<=m-1;j++)
{
cout<<"■";
for(int i=1;i<=n;i++)
cout<<" ";cout<<"■"<<endl;
}
cout<<"■";for(int i=1;i<=n+1;i++) cout<<"■";
}
void print_snake()
{
locate(snake1[0].x,snake1[0].y);
Color(3),cout<< "●",Color(0);
for(int i=1;i<snake_length1-1;i++) {locate(snake1[i].x,snake1[i].y);Color(5),cout<<"●",Color(0);}
locate(snake2[0].x,snake2[0].y);
Color(3),cout<<"●",Color(0);
for (int i=1;i<snake_length2-1;i++) {locate(snake2[i].x,snake2[i].y);Color(1),cout<<"●",Color(0);}
}
bool is_correct1()
{
if(g!='3'&&(snake1[0].x== 0||snake1[0].y==0 || snake1[0].x == m + 1 || snake1[0].y == n + 1)) return false;
if(g=='3')
{
if(snake1[0].x == 0) snake1[0].x =m;
if(snake1[0].x == m+1) snake1[0].x =1;
if(snake1[0].y == 0) snake1[0].y =n;
if(snake1[0].y == n+1) snake1[0].y =1;
}
for(int i=1;i<=snake_length1-1;i++)if(snake1[0].x==snake1[i].x&&snake1[0].y==snake1[i].y) return false;
for(int i=0;i<=snake_length2-1;i++)if(snake1[0].x==snake2[i].x&&snake1[0].y==snake2[i].y) return false;
return true;
}
bool is_correct2()
{
if(g!='3'&&(snake2[0].x == 0 || snake2[0].y == 0 || snake2[0].x == m + 1 || snake2[0].y == n + 1))return false;
if(g=='3')
{
if(snake2[0].x == 0) snake2[0].x =m;
if(snake2[0].x == m+1) snake2[0].x =1;
if(snake2[0].y == 0) snake2[0].y =n;
if(snake2[0].y == n+1) snake2[0].y =1;
}
for (int i = 1; i <= snake_length2 - 1; i++)if(snake2[0].x == snake2[i].x && snake2[0].y == snake2[i].y)return false;
for (int i = 0; i <= snake_length1 - 1; i++)if(snake2[0].x == snake1[i].x && snake2[0].y == snake1[i].y)return false;
return true;
}
bool print_food(bool a)
{
bool e;
while (1)
{
e=true;
int i=(int)random(0,m)+1;
int j=(int)random(0,n)+1;
food[a].x = i; food[a].y = j;
for (int k = 0; k <= snake_length1 - 1; k++)
if (snake1[k].x == food[a].x && snake1[k].y == food[a].y){e= false; break; }
for (int k = 0; k <= snake_length2 - 1; k++)
if (snake2[k].x == food[a].x && snake2[k].y == food[a].y){e= false;break; }
if (food[0].x == food[1].x && food[0].y == food[1].y) e= false;
if (e)break;
}
locate(food[a].x,food[a].y);
Color(2),cout << "◆",Color(0);
return true;
}
bool go_ahead1()
{
node tmp;
bool e = false;
tmp = snake1[snake_length1-1];
for (int i = snake_length1 - 1; i >= 1;i--) snake1[i] = snake1[i - 1];
snake1[0].x += direct[dir1][0];
snake1[0].y += direct[dir1][1];
locate(snake1[1].x, snake1[1].y);
Color(5),cout << "●",Color(0);
if(snake1[0].x==food[0].x&&snake1[0].y==food[0].y){snake_length1++;e=true;snake1[snake_length1-1]=tmp;print_food(0);}
if(snake1[0].x==food[1].x&&snake1[0].y==food[1].y)
{
snake_length1++;e=true;
snake1[snake_length1-1]=tmp;
print_food(1);
}
if (!e)
{
locate(tmp.x, tmp.y);
cout<<" ";
}
locate(snake1[0].x, snake1[0].y);
Color(3),cout << "●",Color(0);
if (!is_correct1())
{
system("color 7F");Color(5);
if(g=='1') locate(10,8),cout << "You lose!";
if(g=='2'||g=='3') {locate(9,8);cout << "1p lose!";locate(11,8);cout<<"Length: "<<snake_length1;}
Color(0);
return false;
}
return true;
}
bool go_ahead2()
{
node tmp;
bool e=false;
tmp=snake2[snake_length2-1];
for (int i=snake_length2-1;i>=1;i--) snake2[i]=snake2[i - 1];
snake2[0].x+=direct[dir2][0];
snake2[0].y+=direct[dir2][1];
locate(snake2[1].x, snake2[1].y);Color(1),cout << "●",Color(0);
if(snake2[0].x==food[0].x&&snake2[0].y==food[0].y) {snake_length2++;e=true;snake2[snake_length2-1]=tmp;print_food(0);}
if(snake2[0].x==food[1].x&&snake2[0].y==food[1].y) {snake_length2++;e=true;snake2[snake_length2-1]=tmp;print_food(1);}
if(!e) {locate(tmp.x, tmp.y);cout<<" ";}
locate(snake2[0].x, snake2[0].y);Color(3),cout << "●",Color(0);
if(!is_correct2())
{
system("color 7F");Color(1);
if(g=='1') locate(10,8),cout << "You lose!";
if(g=='2'||g=='3') {locate(9,8);cout<<"2p lose!";locate(11,8);cout<<"Length: "<<snake_length2;Color(0);return false;}
}
return true;
}
int Start()
{
print_wall();
print_snake();Color(2);
locate(8,5);cout<<"◆";Color(4),cout<<" 双 人 贪 吃 蛇";Color(2),cout<<" ◆"; Color(5);
locate(10,1);cout<<" 1.单人模式(A W S D↑←↓→八键位系统)"; Color(1);
locate(12,1);cout<<" 2.双人模式(双人 2*4 键位系统)";Color(3);
locate(14,1);cout<<" 3.双人·“无限宇宙”模式";Color(0);
A:if(kbhit()) g=_getch();
if(g!='1'&&g!='2'&&g!='3') goto A;
}
int main()
{
system("mode con cols=45 lines=26");
CONSOLE_CURSOR_INFO cursor_info={1,0};
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);
srand((unsigned)time(NULL));
m=20,n=20,hard=10*Ti;ST:
snake_length1=snake_length2 = 5;
double hard_len;
dir1=3;dir2=2;
for(int i=0;i<=4;i++) {snake1[i].x=6;snake1[i].y=6-i;}
for(int i=0;i<=4;i++) {snake2[i].x=15;snake2[i].y=15+i;}
Start();
system("cls");
hide();
print_wall();
print_food(0);
if(g=='2'||g=='3') print_food(1);
print_snake();
locate(m+2,0);cout<<"Now Length 1:";
locate(m+3,0);cout<<"Now Length 2:";
locate(m+4,0);cout<<"按 k/l 加/减 速 速度:";locate(m+4,13),cout<<2000-hard/100;
locate(10,4);Color(4);cout<<"Please point 'y' to Start";Color(0);
SS: char ee=_getch(); if(ee!='y') goto SS;
locate(10,4);cout<<" ";
while (1)
{
b11=b21=b12=b22=b13=b23=b14=b24=0;
for(int i=1;i<=hard;i++)
{
if(g=='1')
{
if(KEY_DOWN(87)||KEY_DOWN(40)) {if (dir1 == 2 || dir1 == 3){dir1 = 0;if(b11==0) b11=1,go_ahead1();}}
else if(KEY_DOWN(83)||KEY_DOWN(38)) {if (dir1 == 2 || dir1 == 3){dir1 = 1;if(b12==0) b12=1,go_ahead1();}}
else if(KEY_DOWN(65)||KEY_DOWN(39)) {if (dir1 == 0 || dir1 == 1){dir1 = 2;if(b13==0) b13=1,go_ahead1();}}
else if(KEY_DOWN(68)||KEY_DOWN(37)) {if (dir1 == 0 || dir1 == 1){dir1 = 3;if(b14==0) b14=1,go_ahead1();}}
if(KEY_DOWN(38)||KEY_DOWN(83)) {if (dir2 == 2 || dir2 == 3){dir2 = 0;if(b21==0) b21=1,go_ahead2();}}
else if(KEY_DOWN(40)||KEY_DOWN(87)) {if (dir2 == 2 || dir2 == 3){dir2 = 1;if(b22==0) b22=1,go_ahead2();}}
else if(KEY_DOWN(37)||KEY_DOWN(68)) {if (dir2 == 0 || dir2 == 1){dir2 = 2;if(b23==0) b23=1,go_ahead2();}}
else if(KEY_DOWN(39)||KEY_DOWN(65)) {if (dir2 == 0 || dir2 == 1){dir2 = 3;if(b24==0) b24=1,go_ahead2();}}
}
if(g=='2'||g=='3')
{
if(KEY_DOWN(87)) {if (dir1 == 2 || dir1 == 3){dir1 = 0;if(b11==0) b11=1,go_ahead1();}}
else if(KEY_DOWN(83)) {if (dir1 == 2 || dir1 == 3){dir1 = 1;if(b12==0) b12=1,go_ahead1();}}
else if(KEY_DOWN(65)) {if (dir1 == 0 || dir1 == 1){dir1 = 2;if(b13==0) b13=1,go_ahead1();}}
else if(KEY_DOWN(68)) {if (dir1 == 0 || dir1 == 1){dir1 = 3;if(b14==0) b14=1,go_ahead1();}}
if(KEY_DOWN(38)) {if (dir2 == 2 || dir2 == 3){dir2 = 0;if(b21==0) b21=1,go_ahead2();}}
else if(KEY_DOWN(40)) {if (dir2 == 2 || dir2 == 3){dir2 = 1;if(b22==0) b22=1,go_ahead2();}}
else if(KEY_DOWN(37)) {if (dir2 == 0 || dir2 == 1){dir2 = 2;if(b23==0) b23=1,go_ahead2();}}
else if(KEY_DOWN(39)) {if (dir2 == 0 || dir2 == 1){dir2 = 3;if(b24==0) b24=1,go_ahead2();}}
}
if(KEY_DOWN(76)) hard=min(hard+10,20*Ti),locate(m+4,13),cout<<2000-hard/100<<" ";
if(KEY_DOWN(75)) hard=max(hard-10,2*Ti),locate(m+4,13),cout<<2000-hard/100<<" ";
}
if(snake_length1>snake_length2) {if(!go_ahead2()) break;if(!go_ahead1()) break;}
if(snake_length1<snake_length2) {if(!go_ahead1()) break;if(!go_ahead2()) break;}
if(snake_length1==snake_length2) {int r=rand()%2;if(r==0&&!go_ahead1()) break;if(r==0&&!go_ahead2()) break;if(r==1&&!go_ahead2()) break;if(r==1&&!go_ahead1()) break;}
locate(m+2,12);cout<<snake_length1;
locate(m+3,12);cout<<snake_length2;
}
char e;
locate(13,4);cout<<"Please point 'y' to Play AGain.";
A:e=_getch(); if(e=='y') goto ST; else goto A;
return 0;
}