头像

单单纯纯的丫头




离线:21分钟前


最近来访(122)
用户头像
brivia
用户头像
尔玉
用户头像
迷人的杰凯瑞
用户头像
大雪莱
用户头像
潘潘_the_panda
用户头像
CLOVER
用户头像
qyzyqwq
用户头像
幼辞.
用户头像
luoyutao
用户头像
嘉然是牛马
用户头像
萌王赛高
用户头像
嘉然今天吃了么
用户头像
_404
用户头像
空银子
用户头像
_wyp_
用户头像
我是xlz
用户头像
柠檬果仁
用户头像
我是sun
用户头像
修罗神唐三
用户头像
NBxiang

新鲜事 原文

请问各位大佬们,你们知道怎么删掉这些发的贴子(动态)呢?


新鲜事 原文

第1题 分数 在sicily在线测试系统里,有一种特别评分方法。题目被越多的用户解出,每个用户该题的得分就越少。现在按照解出题目的用户数划分区间,给出了每个区间的题目的得分情况,如下表: 解题用户数 分数 1-10 10 11-30 8 31-50 6 51-75 4 76-100 2 100以上 1 已知解决每个题目的用户数,你的任务是计算出指定用户的分数。 输入/输出例子1 输入: 10 100 10 11 3 45 7 34 200 70 1 4 2 1000 1001 2 1001 1002 0 3 1000 1007 1008 输出: 12 18 0 7 #include<bits/stdc++.h> using namespace std; int n,t,c,a[305],b,s=0; int main(){ cin>>n; for(int i=0;i<n;i++) cin>>a[i]; cin>>t; for(int i=1;i<=t;i++) { cin>>c; s=0; for(int j=1;j<=c;j++) { cin>>b; if(a[b%1000]>=1 && a[b%1000]<=10) s=s+10; else if(a[b%1000]>10 && a[b%1000]<=30) s=s+8; else if(a[b%1000]>30 && a[b%1000]<=50) s=s+6; else if(a[b%1000]>50 && a[b%1000]<=75) s=s+4; else if(a[b%1000]>75 && a[b%1000]<=100) s=s+2; else if(a[b%1000]>100) s=s+1; } cout<<s<<endl; } return 0; }



新鲜事 原文

没有举报广东,请不要再喷了好吗


新鲜事 原文

贪吃蛇,不是原创 #include<stdio.h> #include<conio.h> #include<windows.h> #include<time.h> #define framex 5 #define framey 5 #define wide 20 #define high 20 int i,j,a[2]; void gotoxy(HANDLE hout,int x,int y){ COORD pos; pos.X=x; pos.Y=y; SetConsoleCursorPosition(hout,pos); } void cover (HANDLE hout){ gotoxy(hout,framex+wide,framey); printf("欢迎使用贪吃蛇游戏1.2"); gotoxy(hout,framex+wide,framey+5); printf("开始游戏前请关闭中文输入法"); gotoxy(hout,framex+wide*2,framey+20); printf( "游戏制作者:Lin"); gotoxy(hout,framex+wide*2,framey+22); printf("制作时间:2016年12月"); char a; a=getchar(); system("cls"); } struct Snake{ int x[100]; int y[100]; int speed; int length; int count; }; struct Food{ int x; int y; }; void makeframe(struct Snake snake){ HANDLE hout=GetStdHandle(STD_OUTPUT_HANDLE); gotoxy(hout,framex+wide*2+5,framey); printf( " 贪吃蛇游戏"); gotoxy(hout,framex+wide*2+5,framey+3); printf("使用方向键或wasd移动"); gotoxy(hout,framex+wide*2+5,framey+5); printf("长按方向键可加速"); gotoxy(hout,framex+wide*2+5,framey+7); printf("按任意键暂停,方向键继续"); for(i=0;i<wide*2+1;i++){ gotoxy(hout,framex+i,framey); printf("*"); } for(i=0;i<wide*2+2;i++){ gotoxy(hout,framex+i,framey+high); printf("*"); } for(i=0;i<high;i++){ gotoxy(hout,framex,framey+i); printf("*"); } for(i=0;i<high;i++){ gotoxy(hout,framex+wide*2+1,framey+i); printf("*"); } } void infor(HANDLE hout,struct Snake* snake){ gotoxy(hout,framex+wide*2+5,framey+15); printf("当前速度:%d",-snake->speed+500); gotoxy(hout,framex+wide*2+5,framey+17); printf("当前得分:%d",snake->count); gotoxy(hout,framex+wide*2+5,framey+19); printf("当前长度:%d",snake->length); } void initsnake(struct Snake *snake){ snake->x[0]=framex+2; snake->y[0]=framey+high/2; snake->count=0; snake->length=3; snake->speed=400; for(i=1;i<snake->length;i++){ snake->x[i]=snake->x[i-1]+1; snake->y[i]=snake->y[i-1]; } } void printsnake(HANDLE hout ,struct Snake *snake){ for(i=0;i<snake->length;i++){ gotoxy(hout,snake->x[i],snake->y[i]); if(i==snake->length-1) printf("头"); else if(i==0) printf("尾"); else printf("身"); } } void movesnake(HANDLE hout,struct Snake *snake){ gotoxy(hout,snake->x[0],snake->y[0]); printf(" "); for(i=1;i<snake->length;i++){ snake->x[i-1]=snake->x[i]; snake->y[i-1]=snake->y[i]; } } void printfood (HANDLE hout,struct Snake *snake,struct Food* food){ srand((unsigned)time(NULL)); while(1){ food->x=rand()%(wide-2)+1; food->y=rand()%(high-2)+1; if(food->x==0&&food->y==0) continue; food->x=2*food->x+framex; food->y+=framey; for(i=0;i<snake->length;i++){ if(food->x==snake->x[i]&&food->y==snake->y[i]) break; } if(i==snake->length){ gotoxy(hout,food->x,food->y); printf("食"); break; } } } void eatfood(HANDLE hout,struct Snake * snake,struct Food *food){ if(snake->x[snake->length-1]==food->x&&snake->y[snake->length-1]==food->y){ snake->length++; for(i=snake->length-1;i>0;i--){ snake->x[i]=snake->x[i-1]; snake->y[i]=snake->y[i-1]; } snake->x[0]=a[0]; snake->y[0]=a[1]; printfood(hout,snake,food); snake->count++; if(snake->count%3==0) snake->speed-=50; } } int ifdead(struct Snake* snake){ if(snake->x[snake->length-1]==framex) return 0; if(snake->x[snake->length-1]==framex+wide*2) return 0; if(snake->y[snake->length-1]==framey) return 0; if(snake->y[snake->length-1]==framey+high) return 0; for(i=0; i<snake->length-1; i++) if( snake->x[snake->length-1]==snake->x[i] && snake->y[snake->length-1]==snake->y[i] ) return 0; return 1; } int main(){ unsigned char ch =77; HANDLE hout = GetStdHandle(STD_OUTPUT_HANDLE); cover(hout); struct Snake s, *snake=&s; struct Food f, *food=&f; makeframe(*snake); initsnake(snake); printfood(hout,snake,food); Sleep(500); while(1){ infor(hout,snake); a[0]=snake->x[0]; a[1]=snake->y[0]; j=0; if(kbhit()){ ch=getch(); if(kbhit()){ Sleep(20); j=1; } } switch(ch){ case'W': case 'w' : case 72:{ movesnake(hout,snake); snake->y[snake->length-1]-=1; break; } case'S': case 's': case 80:{ movesnake(hout,snake); snake->y[snake->length-1]+=1; break; } case'A': case 'a': case 75:{ movesnake(hout,snake); snake->x[snake->length-1]-=2; break; } case'D': case 'd': case 77:{ movesnake(hout,snake); snake->x[snake->length-1]+=2; break; } } eatfood(hout,snake,food); printsnake(hout,snake); if(ifdead(snake)==0||ch==27||snake->speed==0){ gotoxy(hout,framex+wide/2,framey-2); if(snake->speed==0) printf("恭喜你通关了!!!"); else printf("糟糕 T_T"); break; } if(j==0) Sleep(snake->speed); else Sleep(20); } Sleep(3000); system("cls"); if(snake->speed==0) printf("\n\n\n\n\n\t\t\t哈哈,你赢了\n\n\t\t\t你得到了满分:24\n\n\n"); else printf("\n\n\n\n\n\t\t\t哈哈,你输了\n\n\t\t\t你的最终得分是:%d\n\n\n",snake->count); Sleep(3000); return 0; }



新鲜事 原文

这个有些幼稚,因为这是以前做的了 #include<bits/stdc++.h> using namespace std; int a,b,c,d,e; int main(){ cout<<"作者 元气汤圆"<<endl<<endl; cout<<"你在一间恐怖小屋里面,你决定......"<<endl<<endl; cout<<"1探索恐怖小屋 2蹦迪 3睡觉"<<endl<<endl; cin>>a; if(a==1) { cout<<"很好"<<endl; cout<<"你想先去哪个房间"<<endl<<endl; cout<<"1大厅 2卧室 3走到哪就去哪"<<endl<<endl; cin>>b; if(b==1) cout<<"太黑了,你不知道哪条是通往大厅的路" <<endl; if(b==2) cout<<"太黑了,你不知道哪条是通往卧室的路"<<endl; if(b==3) { cout<<"你来到了卧室"<<endl; cout<<"你看到了床上有一把沾满鲜血的刀,你决定......"<<endl<<endl; cout<<"1啥也不干 2躺在床上 3当防身武器"<<endl<<endl; cin>>c; if(c==1) cout<<"你被人刺杀了" <<endl; if(c==2) cout<<"你被刀给插死了"<<endl; if(c==3) { cout<<"你走出了卧室 "<<endl; cout<<"你来到了客厅,看到桌子上有一个被重新沾好的家庭照,你决定......"<<endl<<endl; cout<<"1拿起来蹦迪 2仔细观察 3拆开相框"<<endl<<endl; cin>>d; if(d==1) cout<<"还蹦迪?" <<endl; if(d==2) cout<<"你最终啥也没有发现"<<endl; if(d==3) { cout<<"你拆开了相框"<<endl; cout<<"你发现里面有一把钥匙,你决定......"<<endl<<endl; cout<<"1别选我 2别选我 3开门并离开恐怖小屋"<<endl<<endl; cin>>e; if(e==1) cout<<"选第三个" <<endl; if(e==2) cout<<"选第三个"<<endl; if(e==3) { cout<<"你成功的逃出了恐怖小屋 "<<endl; } } } } } if(a==2) cout<<"你太累了,最后饿死了"<<endl; if(a==3) { cout<<"不可以(没有原因)"<<endl; } return 0; }



新鲜事 原文

坦克大战,不是原创 #include <stdio.h> #include <windows.h> #include <time.h> //里规格:长39*2=78 (真坐标)(假坐标宽为39) 高39 //外规格:长41*2=82 (真坐标)(假坐标宽为41) 高41 #define UP 1 #define DOWN 2 #define LEFT 3 #define RIGHT 4 #define MAX_LEVEL 8 #define BULLET_NUM 20 #define MAX_LIFE 4 //程序中未写入函数参数表中且未说明的变量只有map二维数组,level_info数组和level /* 此程序中涉及的x,y类的坐标值,分为以下两种: 假坐标:这里的坐标指的是以一个■长度为单位的坐标,而不是真正的coord坐标 (用于map数组的坐标) 真坐标:头文件自带的坐标结构coord中的坐标(也可以说是控制台里的真正坐标值) 区别:纵坐标y两值一致,假横坐标x值与真正coord横坐标(真坐标)关系是 x * 2 = coord 横坐标 coord横坐标既指GoTo函数中的x参数,因为本程序游戏界面以一个■长度为基本单位, 可以说涉及的coord横坐标全是偶数。既假坐标要变真坐标(变真坐标才能发挥真正作用),横坐标须乘以2 */ typedef struct //这里的出现次序指的是一个AI_tank变量中的次序,游戏共有四个AI_tank变量 { //∵设定每个AI_tank每种特殊坦克只出现一次 ∴fast_tank & firm_tank 最多出现次数不超过1 int fast_tank_order; //fast_tank出现的次序(在第fast_tank_order次复活出现,从第0次开始),且每个AI_tank只出现一次 int firm_tank_order; //firm_tank出现的次序,同上 } LevInfo; //关卡信息(准确说是该关出现的坦克信息) LevInfo level_info [MAX_LEVEL] = {{-1,-1},{3,-1},{-1,3},{2,3},{2,3},{2,3},{2,3},{2,3}}; //初始化,-1代表没有该类型坦克 typedef struct //子弹结构体 { int x,y; //子弹坐标,假坐标 int direction; //子弹方向变量 bool exist; //子弹存在与否的变量,1为存在,0不存在 bool initial; //子弹是否处于建立初状态的值,1为处于建立初状态,0为处于非建立初状态 bool my; //区分AI子弹与玩家子弹的标记,0为AI子弹,1为玩家(我的)子弹 } Bullet; Bullet bullet [BULLET_NUM]; //考虑到地图上不太可能同时存在20颗子弹,所以数组元素设置20个 typedef struct //坦克结构体 { int x,y; //坦克中心坐标 int direction; //坦克方向 int color; //颜色参方向数,1到6分别代表不同颜色,具体在PrintTank函数定义有说明 int model; //坦克图案模型,值为1,2,3,分别代表不同的坦克图案,0为我的坦克图案,AI不能使用 int stop; //只能是AI坦克使用的参数,非0代表坦克停止走动,0为可以走动 int revive; //坦克复活次数 int num; //AI坦克编号(固定值,为常量,初始化函数中定下)0~3 int CD; //发射子弹冷却计时 bool my; //是否敌方坦克参数,我的坦克此参数为1,为常量 bool alive; //存活为1,不存活为0 } Tank; Tank AI_tank[4] , my_tank; //my_tank为我的坦克,Ai_tank 代表AI坦克 //∵所有的函数都有可能对全局变量map进行读写(改变), //∴函数中不另说明是否会对全局变量map读写 //基本操作与游戏辅助函数 void GoToxy(int x,int y); //光标移动 void HideCursor(); //隐藏光标 void keyboard (); //接受键盘输入 void Initialize(); //初始化(含有对多个数据的读写) void Stop(); //暂停 void Getmap(); //地图数据存放与获取 void Frame (); //打印游戏主体框架 void PrintMap(); //打印地图(地图既地图障碍物)(含对level的读取) void SideScreen (); //副屏幕打印 void GameCheak(); //检测游戏输赢 void GameOver( bool home ); //游戏结束 void ClearMainScreen(); //主屏幕清屏函数∵system("cls")后打印框架有一定几率造成框架上移一行的错误∴单独编写清屏函数 void ColorChoose(int color); //颜色选择函数 void NextLevel(); //下一关(含有对level全局变量的读写) //子弹部分 void BuildAIBullet(Tank *tank); //AI坦克发射子弹(含有对my_tank的读取,只读取了my_tank坐标) void BuildBullet (Tank tank); //子弹发射(建立)(人机共用)(含全局变量bullet的修改)我的坦克发射子弹直接调用该函数,AI通过AIshoot间接调用 void BulletFly (Bullet bullet[BULLET_NUM]); //子弹移动和打击(人机共用), void BulletHit (Bullet* bullet); //子弹碰撞(人机共用)(含Tank全局变量的修改),只通过BulletFly调用,子弹间的碰撞不在本函数,子弹间碰撞已在BulletShoot中检测并处理 void PrintBullet (int x,int y,int T); //打印子弹(人机共用) void ClearBullet (int x,int y,int T); //清除子弹(人机共用) int BulletCheak (int x,int y); //判断子弹前方情况(人机共用) //坦克部分 void BuildAITank (int* position, Tank* AI_tank); //建立AI坦克 void BuildMyTank (Tank* my_tank); //建立我的坦克 void MoveAITank (Tank* AI_tank); //AI坦克移动 void MoveMyTank (int turn); //我的坦克移动,只通过keyboard函数调用,既键盘控制 void ClearTank (int x,int y); //清除坦克(人机共用) void PrintTank (Tank tank); //打印坦克(人机共用) bool TankCheak (Tank tank,int direction); //检测坦克dirtection方向的障碍物,返值1阻碍,0 畅通 int AIPositionCheak (int position); //检测AI坦克建立位置是否有障碍物AIPositionCheak //DWORD WINAPI InputX(LPVOID lpParameter); //声明线程函数,用于检查X键输入并设置X键的输入冷却时间 //注意map数组应是纵坐标在前,横坐标在后,既map[y][x],(∵数组行长度在前,列长度在后) //map里的值: 个位数的值为地图方块部分,百位数的值为坦克,子弹在map上没有值(子弹仅仅是一个假坐标) //map里的值: 0为可通过陆地,1为红砖,2黄砖,5为水,100~103为敌方坦克,200为我的坦克, //全局变量 int map[41][41]; //地图二维数组 int key_x; // X键是否被“读入”的变量,也是子弹是否可以发射的变, int bul_num; //子弹编号 int position; //位置计数,对应AI坦克生成位置,-1为左位置,0为中间,1为右,2为我的坦克位置 int speed=7; //游戏速度,调整用 int level=1; //游戏关卡数 int score=0; //游戏分数 int remain_enemy; //剩余敌人(未出现的敌人) char* tank_figure[4][3][4]= { { {"◢┃◣", "◢━◣", "◢┳◣", "◢┳◣"}, {"┣●┫", "┣●┫", "━●┃", "┃●━"}, {"◥━◤", "◥┃◤", "◥┻◤", "◥┻◤"} }, { {"┏┃┓", "┏┳┓", "┏┳┓", "┏┳┓"}, {"┣●┫", "┣●┫", "━●┫", "┣●━"}, {"┗┻┛", "┗┃┛", "┗┻┛", "┗┻┛"} }, { {"┏┃┓", "◢━◣", "┏┳◣", "◢┳┓"}, {"┣●┫", "┣●┫", "━●┃", "┃●━"}, {"◥━◤", "┗┃┛", "┗┻◤", "◥┻┛"} }, { {"╔┃╗", "╔╦╗", "╔╦╗", "╔╦╗"}, {"╠█╣", "╠█╣", "━█╣", "╠█━"}, {"╚╩╝", "╚┃╝", "╚╩╝", "╚╩╝"} } }; int main () //主函数 { int i; unsigned int interval[12]={1,1,1,1,1,1,1,1,1,1,1,1} ; //间隔计数器数组,用于控制速度 srand(time(NULL)); //设置随机数种子(若不设置种子而调用rand会使每次运行的随机数序列一致)随机数序列指:如首次调用rand得到1,第二次得2,第三次3,则此次随机数序列为1,2,3 HideCursor(); //隐藏光标 system("mode con cols=112 lines=42"); //控制窗口大小 Frame (); //打印游戏主体框架 Initialize(); //初始化,全局变量level初值便是1 // HANDLE h1 , h2 ; //定义句柄变量 for(;;) { if(interval[0]++%speed==0) //速度调整用,假设interval[0]为a, 语句意为 a % 2==0,a=a+1; { GameCheak(); //游戏胜负检测 BulletFly ( bullet ); for(i=0 ; i<=3 ; i++) //AI坦克移动循环 { if(AI_tank[i].model==2 && interval[i+1]++%2==0) //四个坦克中的快速坦克单独使用计数器1,2,3,4 MoveAITank( & AI_tank[i]); if(AI_tank[i].model!=2 && interval[i+5]++%3==0) //四个坦克中的慢速坦克单独使用计数器5,6,7,8 MoveAITank( & AI_tank[i]); } for(i=0;i<=3;i++) //建立AI坦克部分 if(AI_tank[i].alive==0 && AI_tank[i].revive<4 && interval[9]++%90==0) //一个敌方坦克每局只有4条命 { //如果坦克不存活。计时,每次建立有间隔 1750 ms BuildAITank( &position, & AI_tank[i] ); //建立AI坦克(复活) break; //每次循环只建立一个坦克 } for(i=0;i<=3;i++) if(AI_tank[i].alive) BuildAIBullet(&AI_tank[i]); //AIshoot自带int自增计数CD,不使用main中的CD interval if(my_tank.alive && interval[10]++%2==0 ) keyboard (); if(my_tank.alive==0 && interval[11]++%30==0 && my_tank.revive < MAX_LIFE) BuildMyTank( &my_tank ); } Sleep(5); } return 0; } /*//这里的多线程暂时不用 //x键用于子弹发射,x键的冷却时间不能和上下左右一同设置,那样就太快了 DWORD WINAPI InputX(LPVOID lpParameter) //如果不用多线程运行,那么在x键冷却时间内程序会因Sleep将会挂起,暂停运行 { //因为只有一个变量改变,而且变量改变先后顺序是显而易见的,所以不必设置缓冲区 for(;;) { if(GetAsyncKeyState( 88 )& 0x8000) //88为x键键值,当摁下x并且x键处于可输入状态 { key_x=1; // X键是否允许被“读入”的变量,也是子弹是否可以发射的变量 Sleep(600); // 子线程Sleep中,x就不能被"读入",主线程每操作完一次子弹发射,key_x会归零 } Sleep(10); } return 0; }*/ void keyboard () { // kbhit() getch() 用法可用但是不好用 /* 函数功能:该函数判断在此函数被调用时,某个键是处于UP状态还是处于DOWN状态,及前次调用GetAsyncKeyState函数后, 是否按过此键.如果返回值的最高位被置位,那么该键处于DOWN状态;如果最低位被置位,那么在前一次调用此函数后,此键被按过, 否则表示该键没被按过. 这里GetAsyncKeyState比 kbhit() + getch() 好用,操作更顺畅. GetAsyncKeyState的返回值表示两个内容, 一个是最高位bit的值,代表这个键是否被按下。一个是最低位bit的值,代表上次调用GetAsyncKeyState后,这个键是否被按下。 &为与操作,&0x8000就是判断这个返回值的高位字节。如果high-order bit是1,则是按下状态,否则是弹起状态,为0 */ int count=0; if (GetAsyncKeyState(VK_UP)& 0x8000) MoveMyTank( UP ); else if (GetAsyncKeyState(VK_DOWN)& 0x8000) MoveMyTank( DOWN ); else if (GetAsyncKeyState(VK_LEFT)& 0x8000) MoveMyTank( LEFT ); else if (GetAsyncKeyState(VK_RIGHT)& 0x8000) MoveMyTank( RIGHT ); else if (GetAsyncKeyState( 0x1B )& 0x8000) // Esc键 exit(0); //退出程序函数 else if (GetAsyncKeyState( 0x20 )& 0x8000) //空格 Stop(); else if (count++%7==0) //这里添加计数器是为了防止按键粘连不能达到微调效果 { if (speed>1 && GetAsyncKeyState( 0x6B )& 0x8000) // +键 { speed--; GoToxy(102,11); //在副屏幕打印出当前速度 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE|FOREGROUND_RED); printf("%d ",21-speed); //副屏幕显示的速度为1~10 } else if (speed<20 && GetAsyncKeyState( 0x6D )& 0x8000) // - 键 { speed++; GoToxy(102,11); //在副屏幕打印出当前速度 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE|FOREGROUND_RED); printf("%d ",21-speed); //副屏幕显示的速度为1~10 } } if(my_tank.CD==7) { if(GetAsyncKeyState( 88 )& 0x8000) { BuildBullet(my_tank); my_tank.CD=0; } } else my_tank.CD++; } void BuildAIBullet(Tank *tank) //AI子弹发射(建立)含有对my_tank的读取 { if(tank->CD==15) { if(!(rand()%11)) //冷却结束后在随后的每个游戏周期中有10分之一的可能发射子弹 { BuildBullet(*tank); tank->CD=0; } } else tank->CD++; if(tank->CD >= 14) //AI强化部分,在冷却到达一定范围即可使用 { if(tank->y==38 ) //如果坦克在底部(这个最优先) { if(tank->x < 20) //在老家左边 { if(tank->direction==RIGHT) //坦克方向朝左 { BuildBullet(*tank); //发射子弹 tank->CD=0; } } else //在老家右边 if(tank->direction==LEFT) //坦克方向朝右 { BuildBullet(*tank); //发射子弹 tank->CD=0; } } else if(tank->x==my_tank.x+1 || tank->x==my_tank.x || tank->x==my_tank.x-1) //AI坦克在纵向上"炮口"对准我的坦克 { if(tank->direction==DOWN && my_tank.y > tank->y || tank->direction==UP && my_tank.y < tank->y) { //若是AI朝下并且我的坦克在AI坦克下方(数值大的在下面)或者AI朝上我的坦克在AI上方 int big=my_tank.y , smal=tank->y , i; if(my_tank.y < tank->y) { big=tank->y; smal=my_tank.y; } for(i=smal+2;i<=big-2;i++) //判断AI炮口的直线上两坦克间有无障碍 if(map[i][tank->x]!=0 || map[i][tank->x]!=5) //若有障碍 break; if(i==big-1) //若i走到big-1说明无障碍 { BuildBullet(*tank); //则发射子弹 tank->CD=0; } } } else if(tank->y==my_tank.y+1 || tank->y==my_tank.y || tank->y==my_tank.y-1) //AI坦克在横向上"炮口"对准我的坦克 { if(tank->direction==RIGHT && my_tank.x > tank->x || tank->direction==LEFT && my_tank.x < tank->x) { //若是AI朝右并且我的坦克在AI坦克右方(数值大的在下面)或者AI朝左我的坦克在AI左方 int big=my_tank.y , smal=tank->y , i; if(my_tank.x < tank->x) { big=tank->x; smal=my_tank.x; } for(i=smal+2;i<=big-2;i++) //判断AI炮口的直线上两坦克间有无障碍 if(map[tank->y][i]!=0 || map[tank->y][i]!=5) //若有障碍 break; if(i==big-1) //若i走到big-1说明无障碍 { BuildBullet(*tank); //则发射子弹 tank->CD=0; } } } } } void BuildBullet(Tank tank) //子弹发射(建立),传入结构体Tank,这里包含改变了全局变量结构体bullet { //∵实现方式为顺序循环建立子弹,每次调用改变的bullet数组元素都不同 switch(tank.direction) //∴为了方便,不将bullet放入参数,bullet作为全局变量使用 { case UP : bullet [bul_num].x = tank.x; bullet [bul_num].y = tank.y-2; bullet [bul_num].direction=1; break; case DOWN : bullet [bul_num].x = tank.x; bullet [bul_num].y = tank.y+2; bullet [bul_num].direction=2; break; case LEFT : bullet [bul_num].x = tank.x-2; bullet [bul_num].y = tank.y; bullet [bul_num].direction=3; break; case RIGHT : bullet [bul_num].x = tank.x+2; bullet [bul_num].y = tank.y; bullet [bul_num].direction=4; break; } bullet [bul_num].exist = 1; //子弹被建立,此值为1则此子弹存在 bullet [bul_num].initial = 1; //子弹处于初建立状态 bullet [bul_num].my=tank.my; //如果是我的坦克发射的子弹bullet.my=1,否则为0 bul_num++; if(bul_num==BULLET_NUM) //如果子弹编号增长到20号,那么重头开始编号 bul_num=0; //考虑到地图上不可能同时存在20颗子弹,所以数组元素设置20个 } void BulletFly(Bullet bullet[BULLET_NUM]) //子弹移动和打击 { //含有全局变量Bullet的改变 for(int i =0; i<BULLET_NUM;i++) { if(bullet [i].exist) //如果子弹存在 { if(bullet [i].initial==0) //如果子弹不是初建立的 { if(map[bullet[i].y] [bullet[i].x]==0 || map[bullet[i].y] [bullet[i].x]==5) //如果子弹坐标当前位置无障碍 ClearBullet( bullet[i].x , bullet[i].y , BulletCheak(bullet[i].x , bullet[i].y )); //抹除子弹图形 switch(bullet [i].direction) //然后子弹坐标变化(子弹变到下一个坐标) { case UP :(bullet [i].y)--;break; case DOWN :(bullet [i].y)++;break; case LEFT :(bullet [i].x)--;break; case RIGHT :(bullet [i].x)++;break; } } int collide = BulletCheak ( bullet [i].x , bullet [i].y ); //判断子弹当前位置情况,判断子弹是否碰撞,是否位于水面上。 if( collide ) //如果检测到当前子弹坐标无障碍(无碰撞)(包括在地面上与在水面上) PrintBullet( bullet[i].x , bullet[i].y , collide); //则打印子弹,若有碰撞则不打印 else BulletHit( & bullet [i] ); //若有碰撞则执行子弹碰撞函数 if(bullet [i].initial) //若子弹初建立,则把初建立标记去除 bullet [i].initial = 0; for(int j=0; j< BULLET_NUM ; j++) //子弹间的碰撞判断,若是我方子弹和敌方子弹碰撞则都删除,若为两敌方子弹则无视 if(bullet [j].exist && j!=i && (bullet[i].my || bullet[j].my) && bullet[i].x==bullet[j].x && bullet[i].y==bullet[j].y) { //同样的两颗我方子弹不可能产生碰撞 bullet [j].exist=0; bullet [i].exist=0; ClearBullet( bullet[j].x , bullet[j].y , BulletCheak(bullet[j].x , bullet[j].y )); //抹除j子弹图形,子弹i图形已被抹除 break; } } } } void BulletHit(Bullet* bullet) //含有Tank全局变量的修改,子弹间的碰撞不在本函数,子弹间碰撞已在BulletShoot中检测并处理 { //∵每次打中的坦克都不一样,不可能把所有坦克放在参数表中 int x=bullet->x; //∴这里的Tank使用全局变量 int y=bullet->y; //这里传入的值是子弹坐标,这两个值不需要改变 int i; if(map[y][x]==1 || map[y][x]==2) //子弹碰到砖块 { if(bullet->direction==UP || bullet->direction==DOWN) //如果子弹是纵向的 for(i = -1 ; i<=1 ; i++) if(map[y][x+i]==1 || map[y][x+i]==2) //如果子弹打中砖块两旁为砖块,则删除砖,若不是(一旁为坦克或其他地形)则忽略 { map[y][x+i]=0; //砖块碎 GoToxy(2*x+2*i,y); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED); //背景黑色 printf(" "); } if(bullet->direction==LEFT || bullet->direction==RIGHT) //若子弹是横向的 (与子弹纵向实现同理) for(i = -1 ; i<=1 ; i++) if(map[y+i][x]==1 || map[y+i][x]==2) { map[y+i][x]=0; GoToxy(2*x,y+i); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED); //背景黑色 printf(" "); } bullet->exist=0; //这颗子弹已经不存在了 } else if(map[y][x]==4 || map[y][x]==6 ) //子弹碰到边框或者不可摧毁方块 bullet->exist=0; else if(bullet->my && map[y][x]>=100 && map[y][x]<104 ) //若我的子弹碰到了敌方坦克 { int num = map[y][x]%100; //map[y][x]%100 等同于 tank.num ,可通过map值读取该坦克信息 if(AI_tank[num].model==3 && AI_tank[num].color==2) //若为firm tank,且color==2。该坦克为绿色,表明没有受到伤害 AI_tank[num].color=3; //则变成黄色,color=3为黄色 else if (AI_tank[num].model==3 && AI_tank[num].color==3) AI_tank[num].color=4; //4为红色 else //其他类型的坦克或者firm tank为红色的情况 { AI_tank[num].alive=0; ClearTank(AI_tank[num].x , AI_tank[num].y); //清除该坦克 } bullet->exist=0; score+=100; GoToxy(102,5); //在副屏幕上打印出分数 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE); printf("%d ",score); } else if(map[y][x]==200 && bullet->my==0 ) //若敌方子弹击中我的坦克 { my_tank.alive=0; ClearTank(my_tank.x , my_tank.y); bullet->exist=0; my_tank.revive++; //我的坦克复活次数+1(∵我的坦克复活次数与生命值有关∴放在这里自减) score-=100; //分数减少 GoToxy(102,5); //在副屏幕上打印出分数 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE); printf("%d ",score); GoToxy(102,7); //在副屏幕打印出我的剩余生命值 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN); printf("%d ", MAX_LIFE-my_tank.revive); } // else if(bullet->my==0 && map[y][x]>=100 && map[y][x]<104) //敌方子弹击中敌方坦克,可以设置两种子弹运行方式,这种暂时不用 // bullet->exist=0; else if(map[y][x]==9) //子弹碰到家(无论是谁的子弹) { bullet->exist=0; SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_BLUE|FOREGROUND_RED|FOREGROUND_GREEN); GoToxy(38,37); printf(" "); GoToxy(38,38); printf("◢◣ "); GoToxy(38,39); printf("███"); GameOver(1); //游戏结束,传入1代表老家被毁 } } int BulletCheak (int x,int y) //判断子弹当前位置情况,判断子弹是否碰撞,是否位于水面上。 { //有障碍返回0,无障碍且子弹在地面返回1,子弹在水面上返回2 if(map[y][x]==0) return 1; else if(map[y][x]==5) return 2; else return 0; } void PrintBullet (int x,int y,int T) //当前坐标BulletCheak 的值做参量 T { if(T==1) // T==1 表示子弹当前坐标在陆地上 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_INTENSITY); else if(T==2) // T==2 表示子弹当前坐标在水面上 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_INTENSITY|BACKGROUND_BLUE); GoToxy(2*x,y); printf(""); } void ClearBullet(int x,int y,int T) //当前坐标BulletCheak 的值做参量 T { GoToxy(2*x,y); if(T==2) // T==2 表示子弹当前坐标在水面上 { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|BACKGROUND_BLUE|FOREGROUND_BLUE|FOREGROUND_GREEN); printf("~"); } else if(T==1) // T==1 表示子弹当前坐标在陆地上 { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_BLUE); printf(" "); } } //position为坦克生成位置,-1为左位置,0为中间,1为右,2为我的坦克位置 void BuildAITank(int* position, Tank* AI_tank) //执行一次该函数只建立一个坦克 { //rand函数公式:0<=rand()%(a+1)<=a 0+m<=rand()%(n-m+1)+m<=n //rand函数实现1到n:1<=rand()%(n)+1<=n if(AIPositionCheak(*position)) //若此位置无障碍,可生成。position参数详见AIPositionCheak函数定义 { AI_tank->x= 20 + 18*(*position); //20 + 18 * position 对应三个生成位置的x假坐标 AI_tank->y=2; if(AI_tank->revive==level_info[level-1].firm_tank_order) //坦克出现(复活)次序==关卡信息(level_info)中firm tank的出现次序 { AI_tank->model = 3; //3为firm tank的模型(外观) AI_tank->color = 2; //颜色参数2为绿色,具体详见函数ColorChoose } else if(AI_tank->revive==level_info[level-1].fast_tank_order) //同上if,这里是fast_tank的 { AI_tank->model = 2; AI_tank->color = rand()%6+1; //若不是firm tank则随机颜色,颜色参数为1~6,分别代表不同颜色,详见函数ColorChoose } else //普通坦克 { AI_tank->model = 1; AI_tank->color = rand()%6+1; //若不是firm tank则随机颜色 } AI_tank->alive = 1; //坦克变为存在 AI_tank->direction = 2 ; //方向朝下 AI_tank->revive++; //复活次数+1 PrintTank(*AI_tank); (*position)++; remain_enemy--; GoToxy(102,9); //在副屏幕上打印剩余坦克数 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED); printf("%d ",remain_enemy); if(*position==2) //position只能为0,1,-1,这里position循环重置 *position = -1; return ; //若生成了一辆坦克,则结束该函数 } } int AIPositionCheak( int position ) //position为坦克生成位置2为我的坦克位置,其余为AI位,-1为左位,0为中间位置,1为右位 { int x,y; if(position==2) //2为我的坦克位置,现在暂时用不到 x=15,y=38; else y=2 , x= 20 + 18 * position ; //20 + 18 * position 对应三个生成位置的x假坐标 for(int i=0;i<3;i++) for(int j=0;j<3;j++) if( map[y+j-1][x+i-1]!=0) //如果遍历的九宫格里有障碍物 return 0; //则返回0,表示此生成位置有阻碍 return 1; //否则生成1,表示此生成位置无阻碍 } void MoveAITank(Tank* AI_tank) //AI专用函数,该函数主要为AI加强 { if(AI_tank->alive) //如果坦克活着 { if(AI_tank->stop!=0) //坦克是否停止运动的判断,若stop参数不为0 { AI_tank->stop--; //则此坦克本回合停止运动 return; } if( !(rand()%23) ) //22分之1的概率执行方向重置 { AI_tank->direction = rand()%4+1; if( rand()%3 ) //在方向重置后有2分之1的概率停止走动3步的时间 { AI_tank->stop=2; return; } } ClearTank (AI_tank->x , AI_tank->y); if(TankCheak ( *AI_tank , AI_tank->direction)) //如果前方无障碍 switch ( AI_tank->direction ) { case UP : AI_tank->y--; break; //上前进一格 case DOWN : AI_tank->y++; break; //下前进一格 case LEFT : AI_tank->x--; break; //左前进一格 case RIGHT: AI_tank->x++; break; //右前进一格 } else //前方有障碍 { if(!(rand()%4)) //3分之1的概率乱转 { AI_tank->direction=rand()%4+1; AI_tank->stop=2; //乱转之后停止走动3步的时间 PrintTank(*AI_tank); return; //∵continue会跳过下面的打印函数,∴这里先打印 } else //另外3分之2的几率选择正确的方向 { int j; for(j=1;j<=4;j++) if(TankCheak ( *AI_tank , j )) //循环判断坦克四周有无障碍,此函数返值1为可通过 break; if(j==5) //j==5说明此坦克四周都有障碍物,无法通行 { PrintTank(*AI_tank); return; //则跳过下面的while循环以防程序卡死 } while(TankCheak ( *AI_tank , AI_tank->direction) == 0) //如果前方仍有障碍 AI_tank->direction=(rand()%4+1); //则换个随机方向检测 } } PrintTank(*AI_tank); //打印AI坦克 } } void BuildMyTank (Tank* my_tank) //建立我的坦克 { my_tank->x=15; my_tank->y=38; my_tank->stop=NULL; my_tank->direction=1; my_tank->model=0; my_tank->color=1; my_tank->alive=1; my_tank->my=1; my_tank->CD=7; PrintTank (*my_tank) ; //打印我的坦克 } void MoveMyTank(int turn ) //玩家专用函数,turn为keyboard函数里因输入不同方向键而传入的不同的值 { ClearTank(my_tank.x , my_tank.y); //map 数组中“我的坦克”参数清除工作已在此函数中完成 my_tank.direction=turn; //将键盘输入的方向值传入我的坦克方向值 if(TankCheak ( my_tank , my_tank.direction )) //若此时我的坦克当前方向上无障碍 switch (turn) { case UP : my_tank.y--; break; //上前进一格 case DOWN : my_tank.y++; break; //下前进一格 case LEFT : my_tank.x--; break; //左前进一格 case RIGHT: my_tank.x++; break; //右前进一格 } //若坦克当前方向上有障碍则跳过坐标变化直接打印该转向的坦克 PrintTank (my_tank); } bool TankCheak(Tank tank,int direction) //检测坦克前方障碍函数,参量为假坐标。返值1为可通过,返值0为阻挡(人机共用) { switch(direction) //direction变量 1上,2下,3左,4右 { case UP: if (map[tank.y-2][tank.x]==0 && map[tank.y-2][tank.x-1]==0 && map[tank.y-2][tank.x+1]==0) return 1; else return 0; case DOWN: if (map[tank.y+2][tank.x]==0 && map[tank.y+2][tank.x-1]==0 && map[tank.y+2][tank.x+1]==0) return 1; else return 0; case LEFT: if (map[tank.y][tank.x-2]==0 && map[tank.y-1][tank.x-2]==0 && map[tank.y+1][tank.x-2]==0) return 1; else return 0; case RIGHT: if (map[tank.y][tank.x+2]==0 && map[tank.y-1][tank.x+2]==0 && map[tank.y+1][tank.x+2]==0) return 1; else return 0; default: printf("错误!!"); Sleep(5000); return 0; } } void ClearTank(int x,int y) //清除坦克函数(人机共用) { for(int i=0;i<3;i++) for(int j=0;j<3;j++) { //将坦克占用的地图上的九格去掉 map[y+j-1][x+i-1]=0; SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN); GoToxy(2*x+2*j-2,y+i-1); printf(" "); } } void PrintTank(Tank tank) //打印坦克(人机共用) 由于读取的Tank参数较多,故就不将参数一一传入了 { // tank.color参数对应不同的颜色,范围 1 ~ 6 ColorChoose(tank.color); //颜色选择函数 定义一个数组里装着字符指针(既装字符串)的数组指针(指向一维数组首地址的指针) char *(*tankF)[4] = tank_figure[tank.model]; //将二维数组首址赋初值给数组指针 model==0为我的坦克,4为电脑1坦克,8为电脑2,类推 for(int i = 0; i < 3; i++) { GoToxy((tank.x-1)*2 , tank.y-1+i); //在坦克中心坐标的左边,上中下三行打印 printf("%s", tankF[i][tank.direction-1]); //打印的是地址,地址既字符串 for(int j=0;j<3;j++) if(tank.my) //若为我的坦克 map[tank.y+j-1][tank.x+i-1]=200; //在map上把"坦克"九格填满代表敌我坦克的参数。敌方此值为100~103,我方为200 else map[tank.y+j-1][tank.x+i-1]=100+tank.num; //这样可以通过map值读取坦克编号,读取操作在BulletHit 函数 } } void HideCursor() //隐藏光标 { //CONSOLE_CURSOR_INFO结构体包含控制台光标的信息,DWORD dwSize光标百分比厚度(1~100)和BOOL bVisible光标是否可见 CONSOLE_CURSOR_INFO cursor_info={1,0}; SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info); //SetConsoleCursorInfo用来设置指定的控制台光标的大小和可见性。 } void GoToxy(int x,int y) //光标移动函数,X表示横坐标,Y表示纵坐标。 { COORD coord; //使用头文件自带的坐标结构 coord.X=x; //这里将int类型值传给short,不过程序中涉及的坐标值均不会超过short范围 coord.Y=y; HANDLE a=GetStdHandle(STD_OUTPUT_HANDLE); //获得标准输出句柄 SetConsoleCursorPosition(a,coord); //以标准输出的句柄为参数设置控制台光标坐标 } void ColorChoose(int color) //颜色选择函数 { switch(color) { case 1: //天蓝色(我的坦克颜色) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE); break; case 2: //绿色 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN); break; case 3: //黄色 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN); break; case 4: //红色 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED); break; case 5: //紫色 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_BLUE); break; case 6: //白色 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_BLUE|FOREGROUND_GREEN); break; case 7: //深蓝色(∵颜色深难与黑色背景辨识度不高 ∴坦克颜色不选用此颜色),只用在字体颜色闪烁中 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE); break; } } void Stop() //暂停 { int color=1,timing=0; while(1) { if(timing++%30==0) { ColorChoose(color); //颜色选择 GoToxy(100,13); //副屏幕打印 printf("游戏暂停"); GoToxy(88,17); printf("按回车键回到游戏"); GoToxy(88,18); printf("或按 Esc键退出游戏"); if(++color==8) color=1; } if (GetAsyncKeyState( 0xD )& 0x8000) //回车键 { GoToxy(100,13); //副屏幕打印 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE); printf("正在进行"); //覆盖掉原来的提示 GoToxy(88,17); printf(" "); GoToxy(88,18); printf(" "); break; } else if(GetAsyncKeyState( 0x1B )& 0x8000) //Esc键退出 exit(0); Sleep(20); } } void ClearMainScreen() //主屏幕清屏函数,因使用system("cls");再打印框架有一定几率造成框架上移一行的错误,所以单独编写清屏函数 { for(int i=1;i<40;i++) { GoToxy(2,i); printf(" "); } } void Frame () //打印游戏主体框架 { //SetConsoleTextAttribute为设置文本颜色和文本背景颜色函数 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_INTENSITY); printf(" ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ "); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY|FOREGROUND_BLUE); printf(" ▂▂▂▂▂▂▂▂▂▂▂▂▂ \n"); for(int i=0;i<14;i++) { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN|FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_INTENSITY); printf("▕ ▏"); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY|FOREGROUND_BLUE); printf(" | |\n"); } SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN|FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_INTENSITY); printf("▕ ▏"); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY|FOREGROUND_BLUE); printf(" |═════════════|\n"); for(int i=0;i<24;i++) { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN|FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_INTENSITY); printf("▕ ▏"); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY|FOREGROUND_BLUE); printf(" | |\n"); } SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN|FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_INTENSITY); printf(" ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ "); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY| FOREGROUND_BLUE); printf(" ﹊﹊﹊﹊﹊﹊﹊﹊﹊﹊﹊﹊﹊﹊\n"); SideScreen (); //打印副屏幕 } void PrintMap() // 打印地图(地图既地图障碍物) { for(int j=0;j<41;j++) for(int i=0;i<41;i++) if(map[i][j]==6) { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN |FOREGROUND_RED|FOREGROUND_BLUE|BACKGROUND_GREEN|BACKGROUND_RED|BACKGROUND_BLUE); GoToxy(2*j,i); printf("■"); } else if(map[i][j]==2) { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED|BACKGROUND_GREEN|BACKGROUND_RED); GoToxy(2*j,i); printf("▓"); } else if(map[i][j]==1) { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|BACKGROUND_GREEN|BACKGROUND_RED); GoToxy(2*j,i); printf("▓"); } else if(map[i][j]==5) { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|BACKGROUND_BLUE|FOREGROUND_BLUE|FOREGROUND_GREEN); GoToxy(2*j,i); printf("~"); } SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_BLUE|FOREGROUND_RED|FOREGROUND_GREEN); GoToxy(38,37); printf("◣◢"); GoToxy(38,38); printf("███"); //∵无论地图怎么变,家所在位置不变,且家的字符多种,不方便用上述方式打印 GoToxy(38,39); printf("◢█◣"); //∴直接打印(且家的map值与符号无关) } void GetMap() //地图存放函数 { //map里的值: 个位数的值为地图方块部分,百位数的值为坦克 int i ,j; //map里的值: 0为可通过陆地,1为红砖,2待定,5为水,100为敌方坦克,200为我的坦克, int Map[8][41][41]= { { {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,6,6,6,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,6,6,6,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,6,6,6,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,1,1,1,4}, {4,1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,1,1,1,4}, {4,6,6,6,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,6,6,6,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4} }, { {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,6,6,6,6,6,6,2,2,2,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,6,6,6,6,6,6,2,2,2,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,6,6,6,6,6,6,2,2,2,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,0,0,0,0,0,0,6,6,6,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,0,0,0,0,0,0,6,6,6,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,0,0,0,0,0,0,6,6,6,0,0,0,4}, {4,1,1,1,2,2,2,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,6,6,6,0,0,0,4}, {4,1,1,1,2,2,2,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,6,6,6,0,0,0,4}, {4,1,1,1,2,2,2,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,6,6,6,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,0,0,0,2,2,2,1,1,1,6,6,6,6,6,6,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,0,0,0,2,2,2,1,1,1,6,6,6,6,6,6,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,0,0,0,2,2,2,1,1,1,6,6,6,6,6,6,0,0,0,4}, {4,0,0,0,0,0,0,1,1,1,0,0,0,2,2,2,6,6,6,1,1,1,2,2,2,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,1,1,1,0,0,0,2,2,2,6,6,6,1,1,1,2,2,2,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,1,1,1,0,0,0,2,2,2,6,6,6,1,1,1,2,2,2,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,0,0,0,1,1,1,6,6,6,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,0,0,0,1,1,1,6,6,6,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,0,0,0,1,1,1,6,6,6,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,1,1,1,1,1,1,6,6,6,1,1,1,0,0,0,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,1,1,1,1,1,1,6,6,6,1,1,1,0,0,0,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,1,1,1,1,1,1,6,6,6,1,1,1,0,0,0,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,1,1,1,0,0,0,2,2,2,1,1,1,6,6,6,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,1,1,1,0,0,0,2,2,2,1,1,1,6,6,6,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,1,1,1,0,0,0,2,2,2,1,1,1,6,6,6,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,6,6,6,6,6,6,6,6,6,2,2,2,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,4}, {4,6,6,6,6,6,6,6,6,6,2,2,2,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,4}, {4,6,6,6,6,6,6,6,6,6,2,2,2,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,4}, {4,6,6,6,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,6,6,6,6,6,6,0,0,0,0,0,0,4}, {4,6,6,6,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,6,6,6,6,6,6,0,0,0,0,0,0,4}, {4,6,6,6,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,6,6,6,6,6,6,0,0,0,0,0,0,4}, {4,6,6,6,0,0,0,0,0,0,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,1,1,1,1,1,1,0,0,0,4}, {4,6,6,6,0,0,0,0,0,0,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,1,1,1,1,1,1,0,0,0,4}, {4,6,6,6,0,0,0,0,0,0,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,1,1,1,1,1,1,0,0,0,4}, {4,2,2,2,6,6,6,6,6,6,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,6,6,6,6,6,6,4}, {4,2,2,2,6,6,6,6,6,6,6,6,6,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,6,6,6,6,6,6,4}, {4,2,2,2,6,6,6,6,6,6,6,6,6,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,6,6,6,6,6,6,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,0,0,0,0,0,0,6,6,6,6,6,6,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,0,0,0,0,0,0,6,6,6,6,6,6,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,0,0,0,0,0,0,6,6,6,6,6,6,4}, {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4} }, { {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4}, {4,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,6,6,6,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,6,6,6,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,6,6,6,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,6,6,6,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,1,1,1,6,6,6,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,1,1,1,6,6,6,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,4}, {4,6,6,6,0,0,0,1,1,1,5,5,5,0,0,0,6,6,6,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,1,1,1,5,5,5,0,0,0,6,6,6,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,1,1,1,5,5,5,0,0,0,6,6,6,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,1,1,1,5,5,5,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,1,1,1,5,5,5,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,1,1,1,5,5,5,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,1,1,1,0,0,0,1,1,1,5,5,5,5,5,5,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,1,1,1,4}, {4,1,1,1,0,0,0,1,1,1,5,5,5,5,5,5,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,1,1,1,4}, {4,1,1,1,0,0,0,1,1,1,5,5,5,5,5,5,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,1,1,1,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,6,6,6,6,6,6,4}, {4,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,4}, {4,1,1,1,1,1,1,0,1,1,1,1,1,0,0,0,6,6,6,0,0,0,1,1,1,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,4}, {4,1,1,1,1,1,1,0,1,1,1,1,1,0,0,0,6,6,6,0,0,0,1,1,1,0,0,0,5,5,5,0,0,0,1,1,1,1,1,1,4}, {4,1,1,1,1,1,1,0,1,1,1,1,1,0,0,0,6,6,6,0,0,0,1,1,1,0,0,0,5,5,5,0,0,0,1,1,1,0,0,0,4}, {4,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,5,5,5,0,0,0,1,1,1,0,0,0,4}, {4,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,1,1,1,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,6,6,6,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,4}, {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4} }, { {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,6,6,6,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,4}, {4,6,6,6,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,1,0,0,0,0,4}, {4,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,1,0,0,0,0,4}, {4,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,4}, {4,5,5,5,0,0,0,0,1,1,1,0,0,0,6,0,0,0,0,0,6,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,4}, {4,5,5,5,0,0,0,0,1,1,1,0,0,0,6,0,0,0,0,0,6,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,4}, {4,5,5,5,0,0,0,0,1,1,1,0,0,0,6,0,0,0,0,0,6,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,5,5,5,4}, {4,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,5,5,5,4}, {4,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,5,5,5,4}, {4,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,4}, {4,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,4}, {4,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,4}, {4,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,4}, {4,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,4}, {4,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,4}, {4,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,4}, {4,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,4}, {4,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,4}, {4,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,4}, {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4} }, { {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4}, {4,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,5,5,5,5,5,5,0,0,0,5,5,5,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,5,5,5,5,5,5,5,5,5,4}, {4,5,5,5,5,5,5,0,0,0,5,5,5,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,5,5,5,5,5,5,5,5,5,4}, {4,5,5,5,5,5,5,0,0,0,5,5,5,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,5,5,5,5,5,5,5,5,5,4}, {4,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,5,5,5,0,0,0,5,5,5,0,0,0,5,5,5,4}, {4,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,5,5,5,0,0,0,5,5,5,0,0,0,5,5,5,4}, {4,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,5,5,5,0,0,0,5,5,5,0,0,0,5,5,5,4}, {4,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,6,6,6,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,6,6,6,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,6,6,6,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,5,5,5,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,5,5,5,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,5,5,5,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,4}, {4,5,5,5,5,5,5,0,0,0,5,5,5,0,0,0,5,5,5,5,5,5,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,4}, {4,5,5,5,5,5,5,0,0,0,5,5,5,0,0,0,5,5,5,5,5,5,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,4}, {4,5,5,5,5,5,5,0,0,0,5,5,5,0,0,0,5,5,5,5,5,5,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,5,5,5,4}, {4,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,5,5,5,4}, {4,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,5,5,5,4}, {4,0,0,0,5,5,5,5,5,5,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,1,1,1,0,0,0,5,5,5,4}, {4,0,0,0,5,5,5,5,5,5,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,1,1,1,0,0,0,5,5,5,4}, {4,0,0,0,5,5,5,5,5,5,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,1,1,1,0,0,0,5,5,5,4}, {4,1,1,1,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,5,5,5,4}, {4,1,1,1,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,5,5,5,4}, {4,1,1,1,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,5,5,5,4}, {4,5,5,5,5,5,5,0,0,0,5,5,5,5,5,5,0,0,0,5,5,5,1,1,1,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,4}, {4,5,5,5,5,5,5,0,0,0,5,5,5,5,5,5,0,0,0,5,5,5,1,1,1,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,4}, {4,5,5,5,5,5,5,0,0,0,5,5,5,5,5,5,0,0,0,5,5,5,1,1,1,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,5,5,5,4}, {4,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,5,5,5,4}, {4,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,5,5,5,4}, {4,0,0,0,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,5,5,5,5,5,5,4}, {4,0,0,0,5,5,5,5,5,5,5,5,5,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,5,5,5,0,0,0,5,5,5,5,5,5,4}, {4,0,0,0,5,5,5,5,5,5,5,5,5,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,5,5,5,0,0,0,5,5,5,5,5,5,4}, {4,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4} }, { {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,4}, {4,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,4}, {4,0,0,0,1,1,1,0,0,0,1,1,1,1,0,0,0,0,0,0,2,2,2,2,0,0,0,0,0,0,1,1,1,1,0,0,0,1,1,0,4}, {4,0,0,1,1,1,0,0,0,0,0,0,1,1,1,0,0,0,0,2,2,2,2,2,2,0,0,0,0,1,1,1,0,0,0,0,0,0,1,1,4}, {4,0,1,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,2,2,2,2,2,2,2,2,0,0,0,1,1,0,0,0,0,0,0,0,1,1,4}, {4,0,1,1,0,0,0,0,0,0,0,0,0,1,1,1,0,0,2,2,2,2,2,2,2,2,0,0,1,1,1,0,0,0,0,0,0,0,1,1,4}, {4,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,1,1,0,0,0,0,0,0,0,0,1,1,4}, {4,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,2,2,2,2,2,2,2,2,2,2,2,2,1,1,0,0,0,0,0,0,0,0,1,1,4}, {4,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,2,2,2,2,2,2,2,2,2,2,2,2,1,1,0,0,0,0,0,0,0,0,1,1,4}, {4,1,1,0,0,0,0,0,0,0,0,0,1,1,1,2,2,2,2,6,6,6,6,6,6,2,2,2,2,1,1,1,0,0,0,0,0,1,1,1,4}, {4,1,1,0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,6,6,6,6,6,6,2,2,2,2,1,1,1,1,0,0,0,0,1,1,1,4}, {4,1,1,0,0,0,0,0,0,0,1,1,1,1,1,2,2,2,2,6,6,6,6,6,6,2,2,2,2,1,1,1,1,0,0,0,1,1,1,1,4}, {4,0,1,1,0,0,0,0,0,0,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,0,0,1,1,1,1,4}, {4,0,1,1,1,0,0,0,0,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,1,1,1,1,1,4}, {4,0,0,1,1,1,1,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,1,1,1,1,1,4}, {4,0,0,0,1,1,1,1,1,1,1,1,1,6,6,6,6,6,6,1,1,1,6,6,6,6,6,6,1,1,1,1,1,1,1,1,1,1,1,0,4}, {4,0,0,0,1,1,1,1,1,1,1,1,1,6,6,6,6,6,6,1,1,1,6,6,6,6,6,6,1,1,1,1,1,1,1,1,1,1,1,0,4}, {4,0,0,0,0,1,1,1,1,1,1,1,1,6,6,6,6,6,6,1,1,1,6,6,6,6,6,6,1,1,1,1,1,1,1,1,1,1,0,0,4}, {4,0,0,0,0,0,1,1,1,1,1,1,1,6,6,6,0,0,0,1,1,1,0,0,0,6,6,6,1,1,1,1,1,1,1,1,1,0,0,0,4}, {4,0,0,0,0,0,0,1,1,1,1,1,1,6,6,6,0,0,0,1,1,1,0,0,0,6,6,6,1,1,1,1,1,1,1,1,1,0,0,0,4}, {4,0,0,0,0,0,0,1,1,1,1,1,1,6,6,6,0,0,0,1,1,1,0,0,0,6,6,6,1,1,1,1,1,1,1,1,1,0,0,0,4}, {4,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,4}, {4,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,4}, {4,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,4}, {4,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,6,6,6,6,6,6,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,4}, {4,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,6,6,6,6,6,6,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,4}, {4,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,4}, {4,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,4}, {4,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,4}, {4,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,4}, {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4} }, { {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4}, {4,0,0,0,0,0,0,0,0,0,6,6,6,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,6,6,6,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,6,6,6,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,6,6,6,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,6,6,6,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,6,6,6,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,6,6,6,0,0,0,0,0,0,6,6,6,0,0,0,6,6,6,6,6,6,4}, {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,6,6,6,0,0,0,0,0,0,6,6,6,0,0,0,6,6,6,6,6,6,4}, {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,6,6,6,0,0,0,0,0,0,6,6,6,0,0,0,6,6,6,6,6,6,4}, {4,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,6,6,6,1,1,1,0,0,0,0,0,0,0,0,0,6,6,6,4}, {4,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,6,6,6,1,1,1,0,0,0,0,0,0,0,0,0,6,6,6,4}, {4,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,6,6,6,1,1,1,0,0,0,0,0,0,0,0,0,6,6,6,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,6,6,6,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,6,6,6,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,6,6,6,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,6,6,6,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,4}, {4,0,0,0,0,0,0,6,6,6,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,4}, {4,0,0,0,0,0,0,6,6,6,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,4}, {4,6,6,6,0,0,0,6,6,6,0,0,0,0,0,0,1,1,1,0,0,0,6,6,6,0,0,0,0,0,0,6,6,6,1,1,1,0,0,0,4}, {4,6,6,6,0,0,0,6,6,6,0,0,0,0,0,0,1,1,1,0,0,0,6,6,6,0,0,0,0,0,0,6,6,6,1,1,1,0,0,0,4}, {4,6,6,6,0,0,0,6,6,6,0,0,0,0,0,0,1,1,1,0,0,0,6,6,6,0,0,0,0,0,0,6,6,6,1,1,1,0,0,0,4}, {4,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,6,6,6,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,6,6,6,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,6,6,6,0,0,0,0,0,0,4}, {4,0,0,0,6,6,6,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,4}, {4,0,0,0,6,6,6,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,4}, {4,0,0,0,6,6,6,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,4}, {4,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,4}, {4,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,4}, {4,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,4}, {4,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,1,1,1,6,6,6,0,0,0,6,6,6,0,0,0,0,0,0,1,1,1,4}, {4,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,1,1,1,6,6,6,0,0,0,6,6,6,0,0,0,0,0,0,1,1,1,4}, {4,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,1,1,1,6,6,6,0,0,0,6,6,6,0,0,0,0,0,0,1,1,1,4}, {4,1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,6,6,6,0,0,0,0,0,0,4}, {4,1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,1,1,1,6,6,6,0,0,0,0,0,0,4}, {4,1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,1,1,1,6,6,6,0,0,0,0,0,0,4}, {4,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,4}, {4,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,4}, {4,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,4}, {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4} }, { {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,4}, {4,0,0,0,1,1,1,5,5,5,5,5,5,0,0,0,6,6,6,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,1,1,1,5,5,5,5,5,5,0,0,0,6,6,6,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,1,1,1,5,5,5,5,5,5,0,0,0,6,6,6,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,5,5,5,5,5,5,1,1,1,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,0,0,0,6,6,6,0,0,0,4}, {4,0,0,0,0,0,0,5,5,5,5,5,5,1,1,1,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,0,0,0,6,6,6,0,0,0,4}, {4,0,0,0,0,0,0,5,5,5,5,5,5,1,1,1,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,0,0,0,6,6,6,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,1,1,1,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,1,1,1,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,1,1,1,0,0,0,0,0,0,4}, {4,0,0,0,6,6,6,0,0,0,0,0,0,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,6,6,6,0,0,0,0,0,0,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,6,6,6,0,0,0,0,0,0,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,1,1,1,0,0,0,5,5,5,5,5,5,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,4}, {4,0,0,0,0,0,0,1,1,1,0,0,0,5,5,5,5,5,5,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,4}, {4,0,0,0,0,0,0,1,1,1,0,0,0,5,5,5,5,5,5,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,0,0,0,0,0,0,6,6,6,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,0,0,0,0,0,0,6,6,6,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,0,0,0,0,0,0,6,6,6,4}, {4,0,0,0,1,1,1,5,5,5,5,5,5,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,1,1,1,5,5,5,5,5,5,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,1,1,1,5,5,5,5,5,5,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,6,6,6,0,0,0,5,5,5,5,5,5,0,0,0,0,0,0,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,4}, {4,6,6,6,0,0,0,5,5,5,5,5,5,0,0,0,0,0,0,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,4}, {4,6,6,6,0,0,0,5,5,5,5,5,5,0,0,0,0,0,0,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,0,0,0,0,0,0,5,5,5,5,5,5,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,0,0,0,0,0,0,5,5,5,5,5,5,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,0,0,0,0,0,0,5,5,5,5,5,5,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,0,0,0,4}, {4,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,0,0,0,1,1,1,6,6,6,0,0,0,4}, {4,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,0,0,0,1,1,1,6,6,6,0,0,0,4}, {4,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,0,0,0,1,1,1,6,6,6,0,0,0,4}, {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4} }, }; for(i=0;i<41;i++) for(j=0;j<41;j++) map[i][j]=Map[level-1][i][j]; PrintMap(); //打印地图 } void GameOver(bool home) { int timing=0,color=1; while(1) { if(timing++%30==0) //游戏结束原因为生命值为0 { ColorChoose(color); //颜色选择 if(home) //游戏结束原因为老家被毁,则多打印一行字以提示玩家 { GoToxy(37,19); //主屏幕中心打印 printf("老家被毁!"); } GoToxy(37,20); //主屏幕中心打印 printf("游戏结束!"); GoToxy(100,13); //副屏幕打印 printf("游戏结束"); GoToxy(88,17); printf("请按回车键重新开始!"); GoToxy(88,18); printf("或按 Esc键退出游戏!"); if(++color==8) color=1; } if (GetAsyncKeyState( 0xD )& 0x8000) //回车键 { // system("cls"); //清屏,这里清屏后再次打印框架有一定几率造成框架上移一行的bug,因此选用自建清屏函数 // Frame (); //重新打印游戏框架 score-=500; //分数-500 ClearMainScreen(); //主屏清屏函数,无需再次打印框架 Initialize(); //从本关重新开始 break; } else if(GetAsyncKeyState( 0x1B )& 0x8000) //Esc键退出 exit(0); Sleep(20); } } void NextLevel() { int timing=0,color=1; level++; if(level<=MAX_LEVEL) while(1) { if(timing++%10==0) { ColorChoose(color); //颜色选择 GoToxy(37,20); //主屏幕中心打印 printf("恭喜过关!"); GoToxy(100,13); //副屏幕打印 printf("等待下关"); GoToxy(87,17); printf("请按回车键进入下一关!"); GoToxy(88,18); printf("或按 Esc键退出游戏!"); if(++color==8) color=1; } if (GetAsyncKeyState( 0xD )& 0x8000) //回车键 { GoToxy(88,17); //抹除副屏幕中的提示 printf(" "); GoToxy(88,18); printf(" "); ClearMainScreen(); //主屏清屏函数,无需再次打印框架 Initialize(); //初始化从下一关开始,level已++ break; } else if(GetAsyncKeyState( 0x1B )& 0x8000) //Esc键退出 exit(0); Sleep(20); } else //level>8 通关 while(1) { if(timing++%5==0) { ColorChoose(color); GoToxy(33,20); //主屏幕中心打印 printf("恭喜通过全部关卡!"); GoToxy(100,13); //副屏幕打印 printf("已通全关"); GoToxy(88,17); printf("恭喜通过全部关卡!"); GoToxy(88,19); printf("按 Esc键退出游戏!"); if(++color==8) color=1; } if(GetAsyncKeyState( 0x1B )& 0x8000) //Esc键退出 exit(0); Sleep(10); } } void GameCheak() { //剩余敌人为0且四坦克全部不存活 if(remain_enemy<=0 && !AI_tank[0].alive && !AI_tank[1].alive && !AI_tank[2].alive && !AI_tank[3].alive ) NextLevel(); //进入下一关 if(my_tank.revive>=MAX_LIFE) //我的生命值(复活次数)全部用完 MAX_LIFE GameOver(0); //游戏结束,传入0代表我的复活次数用光(生命值为0)。游戏结束有两种判断,另一种是老家被毁 } void SideScreen () //副屏幕 行(84起,110末,若双字符宽则在108打印最后一个字)列(11上屏末,13下屏初,39下屏末。为美观最好打在38) { // | 第 d 关 | " | |\n" GoToxy(93,2); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED); printf("第 关"); GoToxy(92,5); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_BLUE); printf("分 数:"); GoToxy(92,7); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN); printf("生 命:"); GoToxy(86,9); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED); printf("剩余敌方坦克:"); GoToxy(86,11); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_BLUE); printf("当前游戏速度: %d",21-speed); GoToxy(86,13); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE); printf("当前游戏状态:"); GoToxy(94,19); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED); GoToxy(94,24); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED); printf("帮 助"); GoToxy(86,27); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN); printf("方向键 ←↑→↓ 移动"); GoToxy(93,29); printf("x 键 射击"); GoToxy(89,31); printf("+ - 调整游戏速度"); GoToxy(90,33); printf("游戏速度范围1~20"); GoToxy(90,35); printf("回车键 暂停游戏"); GoToxy(90,37); printf("Esc键 退出游戏"); /* printf("帮 助"); //这是第二种详细说明的样式 GoToxy(86,21); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN); printf("方向键 ←↑→↓ 移动"); GoToxy(93,23); printf("x 键 射击"); GoToxy(89,25); printf("+ - 调整游戏速度"); GoToxy(90,27); printf("游戏速度范围1~20"); GoToxy(90,29); printf("回车键 暂停游戏"); GoToxy(90,31); printf("Esc键 退出游戏"); GoToxy(86,33); printf("敌方坦克全部消灭则过关"); GoToxy(87,34); printf("己方坦克生命值为0 或"); GoToxy(86,35); printf("正下方的老家被毁则失败"); GoToxy(86,36); printf("己坦克与敌坦克子弹碰撞"); GoToxy(87,37); printf("则抵消,敌坦克间子弹碰"); GoToxy(86,38); printf("撞不抵消且可穿过敌坦克");*/ } void Initialize() //初始化 { remain_enemy=16; my_tank.revive=0; //我的坦克复活次数为0 position=0; bul_num=0; GetMap(); BuildMyTank( &my_tank ); for(int i=0;i<12;i++) //子弹初始化 { bullet [i].exist=0; bullet [i].initial=0; } for(int i=0;i<=3;i++) //AI坦克初始化 { AI_tank [i].revive=0; AI_tank [i].alive=0; //初始化坦克全是不存活的,BuildAITank()会建立重新建立不存活的坦克 AI_tank [i].stop=0; AI_tank [i].num=i; AI_tank [i].my=0; AI_tank [i].CD=0; } GoToxy(97,2); //在副屏幕上关卡数 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN); printf("%d",level); GoToxy(102,5); //在副屏幕上打印分数 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_BLUE); printf("%d ",score); GoToxy(102,7); //在副屏幕打印我的剩余生命值 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN); printf("%d", MAX_LIFE-my_tank.revive); GoToxy(102,9); //在副屏幕上打印剩余坦克数 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED); printf("%d ",remain_enemy); GoToxy(100,13); //在副屏幕上打印状态 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE|FOREGROUND_GREEN); printf("正在游戏"); }



新鲜事 原文

双人枪战,可能有些bug //by floatiy #include<iostream> #include<cstdio> #include<windows.h> #include<conio.h> using namespace std; int SIZ = 20; HANDLE hout=GetStdHandle(STD_OUTPUT_HANDLE); COORD coord; HANDLE hCon; enum Color { DARKBLUE = 1, DARKGREEN, DARKTEAL, DARKRED, DARKPINK, DARKYELLOW, GRAY, DARKGRAY, BLUE, GREEN, TEAL, RED, PINK, YELLOW, WHITE }; void SetColor(Color c) { if(hCon == NULL) hCon = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleTextAttribute(hCon, c); } SYSTEMTIME sys; //sys.wYear,sys.wMonth,sys.wDay,sys.wHour,sys.wMinute, sys.wSecond,sys.wMilliseconds,sys.wDayOfWeek struct PLAYER { int x,y; int hp; int gun; int direct; } p1,p2; int map[1005][1005]; int abs(int x) { if(x < 0) return -x; return x; } void locate(int x,int y) { coord.X=y - 1; coord.Y=x - 1; SetConsoleCursorPosition(hout,coord); } void print_map() { locate(1,1); SetColor(GRAY); for(int i = 1; i <= SIZ; i++) cout<<"■"; locate(SIZ,1); for(int i = 1; i <= SIZ; i++) cout<<"■"; for(int i = 2; i < SIZ; i++) { locate(i,1); cout<<"■"; locate(i,SIZ*2-1); cout<<"■"; } locate(SIZ+1,1); SetColor(WHITE); } void create_tree(int x,int y) { map[x][y] = map[x+1][y] = map[x-1][y] = map[x][y+1] = map[x][y-1] = 2; } void use_map(int x) { if(x == 1) { SIZ = 20; SetColor(DARKGREEN); map[16][6]=map[15][6]=map[17][6]=map[16][7]=map[16][5]=map[14][13]=map[13][12]=map[13][13]=2; for(int i = 2; i < SIZ; i++) { for(int j = 2; j < SIZ; j++) { if(map[i][j] == 2) { locate(i,j*2-1); cout<<"■"; } } } SetColor(GRAY); for(int i = 5; i <= 15; i++) { map[i][i] = 1; locate(i,i*2-1); cout<<"■"; } SetColor(WHITE); } else if(x == 2) { SIZ = 30; SetColor(GRAY); for(int i = 4; i <= 26; i++) { if(i == 13 || i == 14 ||i == 15) continue; map[i][4] = map[4][i] = map[26][i] = map[i][26] = 1; } for(int i = 1; i <= SIZ; i++) { for(int j = 1; j <= SIZ; j++) { if(map[i][j] == 1) { locate(i,j*2-1); cout<<"■"; } } } SetColor(DARKGREEN); for(int i = 10; i<=20; i++) { if(i == 13 || i == 17) continue; map[i][10] = map[10][i] = map[20][i] = map[i][20] = 2; } create_tree(5,5); create_tree(18,18); for(int i = 1; i <= SIZ; i++) { for(int j = 1; j <= SIZ; j++) { if(map[i][j] == 2) { locate(i,j*2-1); cout<<"■"; } } } SetColor(WHITE); } } void cleanbody(int x,int y); void putbody(int x,int y,int z); void player_init() { p1.hp = p2.hp = 300; p1.gun = p2.gun = 1; p1.direct = 4; p2.direct = 2; p1.x = 2; p1.y = 2; p2.x = SIZ - 1; p2.y = SIZ - 1; putbody(p1.x,p1.y,1); putbody(p2.x,p2.y,2); } void mapinit() { for(int i = 1; i <= SIZ; i++) { map[i][1] = map[1][i] = map[SIZ][i] = map[i][SIZ] = 1; } } void init() { printf("Use Which Map?\n"); int x; cin>>x; system("cls"); use_map(x); mapinit(); print_map(); player_init(); } void putbody(int x,int y,int z) { if(z == 1) SetColor(BLUE); else if(z == 2) SetColor(RED); locate(x,y*2-1); cout<<"■"; SetColor(WHITE); } void cleanbody(int x,int y) { locate(x,y*2-1); cout<<" "; } /* LIST direct: w 1 a 2 s 3 d 4 gun: usp 1 mimigun 2 awp 3 block: void 0 stone 1 tree 2 player 3 clip 4 */ bool judge(int x,int y) { if(map[x][y] == 1) return false; if(map[x][y] == 2) return false; if(map[x][y] == 3) return false; return true; } bool judge_gun(int x,int y) { if(map[x][y] == 1) return 0; if(map[x][y] == 2) return 0; if(map[x][y] == 3) { if(p1.x == x && p1.y == y) p1.hp -= 50;//此处暂时不管威力 else p2.hp -= 50; return 0; } return 1; } int cnt; struct Clip { int x,y; int derect; int force; int start; bool flag; } clip[1000000]; void create_clip(int y,int x,int a,int b) { int X,Y; if(y == 1) { if(!judge_gun(a-1,b)) return; X = a-1; Y = b; } else if(y == 2) { if(!judge_gun(a,b-1)) return; X = a; Y = b-1; } else if(y == 3) { if(!judge_gun(a+1,b)) return; X = a+1; Y = b; } else if(y == 4) { if(!judge_gun(a,b+1)) return; X = a; Y = b+1; } cnt++; GetLocalTime( &sys ); clip[cnt].start = sys.wMilliseconds + sys.wSecond * 60 + sys.wHour * 3600; clip[cnt].x = X; clip[cnt].y = Y; if(x == 1) { clip[cnt].derect = p1.direct; } else if(x == 2) { clip[cnt].derect = p2.direct; } } void shoot(int x) { if(x == 1) { create_clip(p1.direct,1,p1.x,p1.y); } else if(x == 2) { create_clip(p2.direct,2,p2.x,p2.y); } } void clean_clip(int x,int y) { locate(x,y*2-1); cout<<" "; locate(1,1); } void print_clip(int x,int y,int i) { if(clip[i].flag) { clean_clip(x,y); return; } locate(x,y*2-1); SetColor(YELLOW); cout<<"''"; locate(1,1); // system("pause"); } void clipmove() { GetLocalTime( &sys ); int t = sys.wMilliseconds + sys.wSecond * 60 + sys.wHour * 3600; for(int i = 1; i <= cnt; i++) { if(clip[i].flag) continue; if(abs(clip[i].start - t) > 50) { clip[i].start = t; int x = clip[i].x; int y = clip[i].y; if(clip[i].derect==1) { if(!judge_gun(clip[i].x-1,clip[i].y)) { clip[i].flag = 1; clean_clip(x,y); continue; } clean_clip(clip[i].x,clip[i].y); clip[i].x--; print_clip(clip[i].x,clip[i].y,i); } else if(clip[i].derect==2) { if(!judge_gun(clip[i].x,clip[i].y-1)) { clip[i].flag = 1; clean_clip(x,y); continue; } clean_clip(clip[i].x,clip[i].y); clip[i].y--; print_clip(clip[i].x,clip[i].y,i); } else if(clip[i].derect==3) { if(!judge_gun(clip[i].x+1,clip[i].y)) { clip[i].flag = 1; clean_clip(x,y); continue; } clean_clip(clip[i].x,clip[i].y); clip[i].x++; print_clip(clip[i].x,clip[i].y,i); } else if(clip[i].derect==4) { if(!judge_gun(clip[i].x,clip[i].y+1)) { clip[i].flag = 1; clean_clip(x,y); continue; } clean_clip(clip[i].x,clip[i].y); clip[i].y++; print_clip(clip[i].x,clip[i].y,i); } } } } void judge_hp() { int x = p1.hp; int y = p2.hp; if(x<0 && y<0 && x > y) swap(x,y); if(x <= 0) { locate(1,1); system("cls"); printf("GAME OVER!\nTHE WINNER IS P2!"); Sleep(5000); printf("\n-MADE BY Floatiy-"); exit(0); } else if(y <= 0) { locate(1,1); system("cls"); printf("GAME OVER!\nTHE WINNER IS P1!"); Sleep(5000); printf("\n-MADE BY Floatiy-"); exit(0); } } void prog() { char ch; while(true) { if(kbhit()) { ch=getch(); if(ch == 'w' && judge(p1.x-1,p1.y)) { p1.direct = 1; cleanbody(p1.x,p1.y); map[p1.x][p1.y] = 0; putbody(--p1.x,p1.y,1); map[p1.x][p1.y] = 3; } else if(ch == '8' && judge(p2.x-1,p2.y)) { p2.direct = 1; cleanbody(p2.x,p2.y); map[p2.x][p2.y] = 0; putbody(--p2.x,p2.y,2); map[p2.x][p2.y] = 3; } else if(ch == 'a' && judge(p1.x,p1.y-1)) { p1.direct = 2; cleanbody(p1.x,p1.y); map[p1.x][p1.y] = 0; putbody(p1.x,--p1.y,1); map[p1.x][p1.y] = 3; } else if(ch == '4' && judge(p2.x,p2.y-1)) { p2.direct = 2; cleanbody(p2.x,p2.y); map[p2.x][p2.y] = 0; putbody(p2.x,--p2.y,2); map[p2.x][p2.y] = 3; } else if(ch == 's' && judge(p1.x+1,p1.y)) { p1.direct = 3; cleanbody(p1.x,p1.y); map[p1.x][p1.y] = 0; putbody(++p1.x,p1.y,1); map[p1.x][p1.y] = 3; } else if(ch == '5' && judge(p2.x+1,p2.y)) { p2.direct = 3; cleanbody(p2.x,p2.y); map[p2.x][p2.y] = 0; putbody(++p2.x,p2.y,2); map[p2.x][p2.y] = 3; } else if(ch == 'd' && judge(p1.x,p1.y+1)) { p1.direct = 4; cleanbody(p1.x,p1.y); map[p1.x][p1.y] = 0; putbody(p1.x,++p1.y,1); map[p1.x][p1.y] = 3; } else if(ch == '6' && judge(p2.x,p2.y+1)) { p2.direct = 4; cleanbody(p2.x,p2.y); map[p2.x][p2.y] = 0; putbody(p2.x,++p2.y,2); map[p2.x][p2.y] = 3; } else if(ch == '0') { shoot(2); } else if(ch == ' ') { shoot(1); } Sleep(20); } clipmove(); judge_hp(); } } void welcome() { printf("操作方法:\n玩家1 wasd控制移动,空格攻击\n玩家2 数字小键盘4568控制移动,0攻击\n"); Sleep(2000); } int main() { welcome(); GetLocalTime( &sys ); init(); prog(); return 0; }



新鲜事 原文

五子棋游戏 #include <stdlib.h> #include <stdio.h> #include <conio.h> #include <string.h> #define MAXIMUS 15 //定义棋盘大小 int p[MAXIMUS][MAXIMUS];//存储对局信息 char buff[MAXIMUS*2+1][MAXIMUS*4+3];//输出缓冲器 int Cx,Cy;//当前光标位置 int Now;//当前走子的玩家,1代表黑,2代表白 int wl,wp;//当前写入缓冲器的列数和行数位置 char* showText;//在棋盘中央显示的文字信息 int count;//回合数 char* Copy(char* strDest,const char* strSrc)//修改过的字符串复制函数,会忽略末端的\0 { char* strDestCopy = strDest; while (*strSrc!='\0') { *strDest++=*strSrc++; } return strDestCopy; } void Initialize()//初始化一个对局函数 { int i,j;//循环变量 showText="";//重置显示信息 count=0;//回合数归零 for(i=0;i<MAXIMUS;i++)//重置对局数据 { for(j=0;j<MAXIMUS;j++) { p[i][j]=0; } } Cx=Cy=MAXIMUS/2;//重置光标到中央 Now=1;//重置当前为黑方 } char* getStyle(int i,int j)//获得棋盘中指定坐标交点位置的字符,通过制表符拼成棋盘 { if(p[i][j]==1)//1为黑子 return "●"; else if(p[i][j]==2)//2为白子 return "○"; else if(i==0&&j==0)//以下为边缘棋盘样式 return "┏"; else if(i==MAXIMUS-1&&j==0) return "┓"; else if(i==MAXIMUS-1&&j==MAXIMUS-1) return "┛"; else if(i==0&&j==MAXIMUS-1) return "┗"; else if(i==0) return "┠"; else if(i==MAXIMUS-1) return "┨"; else if(j==0) return "┯"; else if(j==MAXIMUS-1) return "┷"; return "┼";//中间的空位 } char* getCurse(int i,int j){//获得指定坐标交点位置左上格的样式,通过制表符来模拟光标的显示 if(i==Cx){ if(j==Cy) return "┏"; else if (j==Cy+1) return "┗"; } else if(i==Cx+1) { if(j==Cy) return "┓"; else if (j==Cy+1) return "┛"; } return " ";//如果不在光标附近则为空 } void write(char* c)//向缓冲器写入字符串 { Copy(buff[wl]+wp,c); wp+=strlen(c); } void ln()//缓冲器写入位置提行 { wl+=1; wp=0; } void Display()//将缓冲器内容输出到屏幕 { int i,l=strlen(showText);//循环变量,中间文字信息的长度 int Offset=MAXIMUS*2+2-l/2;//算出中间文字信息居中显示所在的横坐标位置 if(Offset%2==1)//如果位置为奇数,则移动到偶数,避免混乱 { Offset--; } Copy(buff[MAXIMUS]+Offset,showText);//讲中间文字信息复制到缓冲器 if(l%2==1)//如果中间文字长度为半角奇数,则补上空格,避免混乱 { *(buff[MAXIMUS]+Offset+l)=0x20; } system("cls");//清理屏幕,准备写入 for(i=0;i<MAXIMUS*2+1;i++){//循环写入每一行 printf("%s",buff[i]); if(i<MAXIMUS*2)//写入完每一行需要换行 printf("\n"); } } void Print()//将整个棋盘算出并储存到缓冲器,然后调用Display函数显示出来 { int i,j;//循环变量 wl=0; wp=0; for(j=0;j<=MAXIMUS;j++)//写入出交点左上角的字符,因为需要打印棋盘右下角,所以很以横纵各多一次循环 { for(i=0;i<=MAXIMUS;i++) { write(getCurse(i,j));//写入左上角字符 if(j==0||j==MAXIMUS)//如果是棋上下盘边缘则没有连接的竖线,用空格填充位置 { if(i!=MAXIMUS) write(" "); } else//如果在棋盘中间则用竖线承接上下 { if(i==0||i==MAXIMUS-1)//左右边缘的竖线更粗 write("┃"); else if(i!=MAXIMUS)//中间的竖线 write("│"); } } if(j==MAXIMUS)//如果是最后一次循环,则只需要处理边侧字符,交点要少一排 { break; } ln();//提行开始打印交点内容 write(" ");//用空位补齐位置 for(i=0;i<MAXIMUS;i++)//按横坐标循环正常的次数 { write(getStyle(i,j));//写入交点字符 if(i!=MAXIMUS-1)//如果不在最右侧则补充一个横线承接左右 { if(j==0||j==MAXIMUS-1) { write("━");//上下边缘的横线更粗 } else { write("—");//中间的横线 } } } ln();//写完一行后提行 } Display();//将缓冲器内容输出到屏幕 } int Put(){//在当前光标位置走子,如果非空,则返回0表示失败 if(p[Cx][Cy]==0) { p[Cx][Cy]=Now;//改变该位置数据 return 1;//返回1表示成功 } else { return 0; } } int Check()//胜负检查,即判断当前走子位置有没有造成五连珠的情况 { int w=1,x=1,y=1,z=1,i;//累计横竖正斜反邪四个方向的连续相同棋子数目 for(i=1;i<5;i++)if(Cy+i<MAXIMUS&&p[Cx][Cy+i]==Now)w++;else break;//向下检查 for(i=1;i<5;i++)if(Cy-i>0&&p[Cx][Cy-i]==Now)w++;else break;//向上检查 if(w>=5)return Now;//若果达到5个则判断当前走子玩家为赢家 for(i=1;i<5;i++)if(Cx+i<MAXIMUS&&p[Cx+i][Cy]==Now)x++;else break;//向右检查 for(i=1;i<5;i++)if(Cx-i>0&&p[Cx-i][Cy]==Now)x++;else break;//向左检查 if(x>=5)return Now;//若果达到5个则判断当前走子玩家为赢家 for(i=1;i<5;i++)if(Cx+i<MAXIMUS&&Cy+i<MAXIMUS&&p[Cx+i][Cy+i]==Now)y++;else break;//向右下检查 for(i=1;i<5;i++)if(Cx-i>0&&Cy-i>0&&p[Cx-i][Cy-i]==Now)y++;else break;//向左上检查 if(y>=5)return Now;//若果达到5个则判断当前走子玩家为赢家 for(i=1;i<5;i++)if(Cx+i<MAXIMUS&&Cy-i>0&&p[Cx+i][Cy-i]==Now)z++;else break;//向右上检查 for(i=1;i<5;i++)if(Cx-i>0&&Cy+i<MAXIMUS&&p[Cx-i][Cy+i]==Now)z++;else break;//向左下检查 if(z>=5)return Now;//若果达到5个则判断当前走子玩家为赢家 return 0;//若没有检查到五连珠,则返回0表示还没有玩家达成胜利 } int RunGame()//进行整个对局,返回赢家信息(虽然有用上) { int input;//输入变量 int victor;//赢家信息 Initialize();//初始化对局 while(1){//开始无限回合的死循环,直到出现胜利跳出 Print();//打印棋盘 input=getch();//等待键盘按下一个字符 if(input==27)//如果是ESC则退出程序 { exit(0); } else if(input==0x20)//如果是空格则开始走子 { if(Put())//如果走子成功则判断胜负 { victor=Check(); Now=3-Now;//轮换当前走子玩家 count++; if(victor==1)//如果黑方达到胜利,显示提示文字并等待一次按键,返回胜利信息 { showText="黑方获得了胜利!"; Print(); if(getch()==0xE0) { getch(); } return Now; } else if(victor==2)//如果白方达到胜利,显示提示文字并等待一次按键,返回胜利信息 { showText="白方获得了胜利!"; Display(); if(getch()==0xE0) { getch(); } return Now; }else if(count==MAXIMUS*MAXIMUS)//如果回合数达到了棋盘总量,即棋盘充满,即为平局 { showText="平局!"; Display(); if(getch()==0xE0) { getch(); } return 0; } } } else if(input==0xE0)//如果按下的是方向键,会填充两次输入,第一次为0xE0表示按下的是控制键 { input=getch();//获得第二次输入信息 switch(input)//判断方向键方向并移动光标位置 { case 0x4B:// Cx--; break; case 0x48: Cy--; break; case 0x4D: Cx++; break; case 0x50: Cy++; break; } if(Cx<0)Cx=MAXIMUS-1;//如果光标位置越界则移动到对侧 if(Cy<0)Cy=MAXIMUS-1; if(Cx>MAXIMUS-1)Cx=0; if(Cy>MAXIMUS-1)Cy=0; } } } int main()//主函数 { system("title 简易五子棋 ——Etsnarl制作");//设置标题 system("mode con cols=63 lines=32");//设置窗口大小 system("color A1");//设置颜色 while(1){//循环执行游戏 RunGame(); } }



新鲜事 原文

这是真的,好期待哦
图片


新鲜事 原文

为什么最近玩天梯的人越来越少了?