• 个人简介

    I never go far,never fall behind!

    发福利咯(转载)

    2048

    #include<iostream>
    #include<vector>
    #include<ctime>
    #include<cstdlib>
    #include<windows.h>
    using namespace std;
    class Game_2048
    {
    public:
        Game_2048();
        ~Game_2048();
        void introduction();
        bool judgeOver();                            //判断游戏是否结束
        void reSize();
        void printBoard();                          //打印函数
        void getRand();                              //随机在棋盘上生成2,4;
        void slide();                                //滑动
    private:
        int m=4, n=4;
        char op;                                   //用户操作
        vector< vector<int> >     board;                                //棋盘
        vector<int>  row;
        bool judgeInsert(int x,int y);
        bool judgeSlide();                               //判断是否能滑动,(未写完)
        void copyBoard(vector< vector<int> > &newBoard,vector< vector<int> > &board);
        void inputOp();
        char getOp();                            //返回操作符
     
        bool judgeLeftSlide(bool mark=true);
        void leftSlide();                            //左滑动
     
        bool judgeRightSlide(bool mark = true);
        void rightSlide();
     
        bool judgeUpSlide(bool mark = true);
        void upSlide();
     
        bool judgeDownSlide(bool mark = true);
        void downSlide();
     
        void reStart();
        void enlarge();                             //将值扩大二倍
    };
     
    int main()
    {
        Game_2048 NB;
        NB.introduction();
        NB.getRand();
        NB.printBoard();
        while (!NB.judgeOver())
        {
            NB.slide();
            NB.getRand();
            NB.printBoard();
        } 
        cout << "游戏结束!!!\n";
        system("pause");
        return 0;
     
    }
     
    void Game_2048::introduction()
    {
        cout << "这是一个2048游戏,规则如下:\n";
        cout << "上划:W;\n下滑:S;\n左划:A;\n右划:D;\n退出:Q;\n重新开始:R;\n需输入每次的操作+回车\n";
        Sleep(10000);
        cout << "开始";
    	Sleep(1000); 
    }
     
    void Game_2048::slide()
    {
        inputOp();
        switch (getOp())
        {
        case 'a':
        case 'A':
            if (judgeLeftSlide())
                do
                    leftSlide();
                while (judgeLeftSlide(false));
            else
            {
                cout << "无法左滑动,请重试!!!\n";
                slide();
            }
            break;
        case 'd':
        case 'D':
            if (judgeRightSlide())
                do
                    rightSlide();
            while (judgeRightSlide(false));        
            else
            {
                cout << "无法右滑动,请重试!!!\n";
                slide();
            }
            break;
        case 'w':
        case 'W':
            if(judgeUpSlide())
                do
                upSlide();
            while (judgeUpSlide(false));
            else
            {
                cout << "无法上滑动,请重试!!!\n";
                slide();
            }
            break;
        case 's':
        case 'S':
            if(judgeDownSlide())
                do    
                    downSlide();
                while (judgeDownSlide(false));
            else
            {
                cout << "无法下滑动,请重试!!!\n";
                slide();
            }
            break;
        case 'p':
        case 'P':
            enlarge();
            break;
        case 'q':
        case 'Q':
            exit(0);
            break;
        case 'r':
        case 'R':
            reStart();
            break;
        default:
            cout << "输入错误,作为惩罚,随机生成一个数!\n";
            break;
        }
    }
     
     
    void Game_2048::reStart()
    {
        for (int i = 0; i < m; i++)
            for (int j = 0; j < n; j++) {
                board[i][j] = 0;
            }
    }
     
    void Game_2048::enlarge()
    {
        for (int i = 0; i < m; i++)
            for (int j = 0; j < n; j++)
            {
                board[i][j] *= 2;
            }
    }
     
     
    char Game_2048::getOp()
    {
        return op;
    }
     
    void Game_2048::upSlide()
    {
        for (int j = 0; j < n; j++)
            for (int i = m - 1; i > 0; i--) {                              //n-1!!
                if (board[i][j] != 0 && board[i - 1][j] == 0)            //移动
                {
                        board[i - 1][j] = board[i][j];
                        board[i][j] = 0;
                }
            }
        for (int j = 0; j < n; j++)
            for (int i = m - 1; i > 0; i--) {
                if (board[i][j] != 0 && board[i-1][j] == board[i][j])  //覆盖
                {
                    board[i-1][j] += board[i][j];
                    board[i][j] = 0;
                }
            }
    }
     
    bool Game_2048::judgeUpSlide(bool mark)
    {
        if (mark)
        {
            for (int i = 0; i < m; i++)
                for (int j = n - 1; j > 0; j--)
                {
                    if (board[i][j] == 0)
                    return true;
                }
        }
        for (int j = 0; j < n; j++)
            for (int i = m - 1; i > 0; i--) {                              //n-1!!
                if (board[i][j] != 0 && board[i - 1][j] == 0)            //移动
                    return true;
                if (board[i][j] != 0 && board[i - 1][j] == board[i][j])  //覆盖
                    return true;
            }
        return false;
    }
     
    bool Game_2048::judgeDownSlide(bool mark)
    {
        if (mark) {
            for (int i = 0; i < m; i++)
                for (int j = n - 1; j > 0; j--)
                    {
                        if (board[i][j] == 0)
                            return true;
                    }
            
        }
        for (int j = 0; j < n; j++)
                    for (int i = 0; i < m - 1; i++) {                              //n-1!!
                        if (board[i][j] != 0 && board[i + 1][j] == 0)            //移动
                            return true;
                        if (board[i][j] != 0 && board[i + 1][j] == board[i][j])  //覆盖
                            return true;
     
                    }
        return false;
    }
     
    void Game_2048::downSlide()
    {
        for (int j = 0; j < n; j++)
            for (int i = 0; i < m - 1; i++) {                         
                if (board[i][j] != 0 && board[i + 1][j] == 0)            //移动
                {
                        board[i + 1][j] = board[i][j];
                        board[i][j] = 0;
                }
            }
        for (int j = 0; j < n; j++)
            for (int i = 0; i < m - 1; i++) {
                if (board[i][j] != 0 && board[i + 1][j] == board[i][j])  //覆盖
                {
                    board[i + 1][j] += board[i][j];
                    board[i][j] = 0;
                }
            }
    }
     
     
    void Game_2048::rightSlide()
    {
        for (int i = 0; i < m; i++)
            for (int j = 0; j < n - 1; j++) {                              //n-1!!
                if (board[i][j] != 0 && board[i][j + 1] == 0)            //移动
                {
                        board[i][j + 1] = board[i][j];
                        board[i][j] = 0;
                }
            }
        for (int i = 0; i < m; i++)
            for (int j = 0; j < n - 1; j++) {
                if (board[i][j] != 0 && board[i][j + 1] == board[i][j])  //覆盖
                {
                    board[i][j + 1] += board[i][j];
                    board[i][j] = 0;
                }
            }
    }
     
    bool Game_2048::judgeRightSlide(bool mark )
    {
        if (mark) {
            for (int i = 0; i < m; i++)
                for (int j = n - 1; j > 0; j--)
                {
                    if (board[i][j] == 0)
                        return true;
                }
        }
        for (int i = 0; i < m; i++)
            for (int j = 0; j < n - 1; j++) {                              //n-1!!
                if (board[i][j] != 0 && board[i][j + 1] == board[i][j])  //覆盖
                    return true;
                if (board[i][j] != 0 && board[i][j + 1] == 0)
                    return true;
            }
        return false;
    }
     
    void Game_2048::leftSlide()
    {
        for (int i = 0; i < m; i++)
            for (int j = 1; j < n; j++) {                              //n-1!!
                if (board[i][j] != 0 && board[i][j - 1] == 0)            //移动
                {
                        board[i][j - 1] = board[i][j];
                        board[i][j] = 0;
                }
            }
        for (int i = 0; i < m; i++)
            for (int j = 1; j < n; j++) {
                if (board[i][j] != 0 && board[i][j - 1] == board[i][j])  //覆盖
                {
                    board[i][j - 1] += board[i][j];
                    board[i][j] = 0;
                }
            }
    }
     
    bool Game_2048::judgeLeftSlide(bool mark)
    {
        if (mark) {
            for (int i = 0; i < m; i++)
                    for (int j = n - 1; j > 0; j--)
                    {
                        if (board[i][j] == 0)
                            return true;
                    }
        }
        for (int i = 0; i < m; i++)
            for (int j = n - 1; j > 0; j--) {                              //n-1!!
                if (board[i][j] != 0 && board[i][j - 1] == 0)            //移动
                    return true;
                if (board[i][j] != 0 && board[i][j - 1] == board[i][j])  //覆盖
                    return true;
            }
        return false;
    }
     
    bool Game_2048::judgeOver()
    {
        if (op == 'q' || op == 'Q')
            return true;
        for (int i = 0; i < m; i++)
            for (int j = 0; j < n; j++) {
                if (board[i][j] == 2048)
                {
                    printBoard();
                    cout << "有数字达到了2048,恭喜!!!\n";
                    return true;
                }    
            }
     
        for (int i = 0; i < m; i++)
            for (int j = 0; j < n; j++) {
                 if (board[i][j] == 0)
                    return false;
            }
        if (judgeSlide())
            return false;
        else
        {
            cout << "无法再滑动\n";
            return true;
        }
            
    }
     
    bool Game_2048::judgeSlide()
    {
        vector< vector<int> >     copyBoard;                                //棋盘
        vector<int>  copyRow;
        for (int i = 0; i < n; i++) {
            copyRow.push_back(0);
        }
        for (int i = 0; i < m; i++) {
            copyBoard.push_back(copyRow);
        }
        copyBoard = board;
        upSlide();
        downSlide();
        leftSlide();
        rightSlide();
        for (int i = 0; i < m; i++)
            for (int j = 0; j < n; j++)
            {
                if (board[i][j] == 0) {
                    board = copyBoard;
                    return true;
                }    
            }
        return false;
    }
     
    void Game_2048::copyBoard(vector< vector<int> >& newBoard, vector< vector<int> >&     board)
    {
        for (int i = 0; i < m; i++)
            for (int j = 0; j < n; j++)
                newBoard[i][j] = board[i][j];
    }
     
    bool Game_2048::judgeInsert(int x,int y)
    {
        if (board[x][y] == 0)
            return true;
        else
            return false;
    }
    void Game_2048::getRand()
    {
        srand(time(0));
        int x, y,val;
        do
        {
            x = rand() % m;
            y = rand() % n;
        } while (!judgeInsert(x,y));
        val = (rand() % 2 + 1)*2;
        board[x][y] = val;
     
    }
     
    void Game_2048::inputOp()
    {
        cin >> op;
    }
    void Game_2048::reSize()
    {
        cout << "请输入棋盘大小m*n\n";
        cin >> m >> n;
        Game_2048();
    }
     
    Game_2048::~Game_2048()
    {
    }
     
    Game_2048::Game_2048()
    {
        for (int i = 0; i < n; i++){
            row.push_back(0);
        }
        for (int i = 0; i < m; i++){
            board.push_back(row);
        }
    }
    void Game_2048::printBoard()
    {
    	system("cls");
        cout << "\n--------------\n";
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                cout << board[i][j];
                if (j < n-1)
                {
                    cout << "—";
                }
                if (j == n-1 && i < m-1)
                {
                    cout << endl;
                    int count = 0;
                    while (count++ < n-1)
                    {
                        cout << "|  ";
                    }
                    cout << "|" << endl;
                }
            }
        }
     
        cout << "\n--------------\n" ;
    }
    

    猜数字

    #include<iostream>
    #include<cstdlib>
    #include<ctime>
    #include<windows.h>
    using namespace std;
    int main(){
    	srand(time(0));
    	int n=11;
    	int c=-1,ans=0;
    	cout<<"你要猜的数字为: ***"<<endl<<"***的范围为1~1000"<<endl<<endl; 
    	while(c!=n){
    		cout<<"第"<<ans+1<<"次"<<endl<<"你猜的数是: ";
    		cin>>c;
    		ans++;
    		if(c>n){
    			Sleep(500); 
    			cout<<"大了!"<<endl<<endl; 
    		} else if(c<n){
    			Sleep(500);
    			cout<<"小了!"<<endl<<endl;
    		}
    	}
    	cout<<endl<<endl<<"恭喜猜中! ! !"<<endl<<"共用了"<<ans<<"次! ! !"<<endl; 
    	system("pause");
    	return 0;
    }
    

    俄罗斯方块

    #include <iostream>
    #include <string>
    #include <ctime>
    #include <cstdlib>
    #include <windows.h>
    #include <conio.h>
     
    using namespace std;
     
    int block00[4][4] = { { 10, 0, 0, 0 }, { 1, 1, 1, 1 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 } };
    int block01[4][4] = { { 11, 0, 1, 0 }, { 0, 0, 1, 0 }, { 0, 0, 1, 0 }, { 0, 0, 1, 0 } };
    int block02[4][4] = { { 12, 0, 0, 0 }, { 0, 0, 0, 0 }, { 1, 1, 1, 0 }, { 0, 1, 0, 0 } };
    int block03[4][4] = { { 13, 0, 0, 0 }, { 0, 1, 0, 0 }, { 1, 1, 0, 0 }, { 0, 1, 0, 0 } };
    int block04[4][4] = { { 14, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 1, 0, 0 }, { 1, 1, 1, 0 } };
    int block05[4][4] = { { 15, 0, 0, 0 }, { 0, 1, 0, 0 }, { 0, 1, 1, 0 }, { 0, 1, 0, 0 } };
    int block06[4][4] = { { 16, 0, 0, 0 }, { 0, 0, 0, 0 }, { 1, 1, 1, 0 }, { 1, 0, 0, 0 } };
    int block07[4][4] = { { 17, 0, 0, 0 }, { 1, 1, 0, 0 }, { 0, 1, 0, 0 }, { 0, 1, 0, 0 } };
    int block08[4][4] = { { 18, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 1, 0 }, { 1, 1, 1, 0 } };
    int block09[4][4] = { { 19, 0, 0, 0 }, { 0, 1, 0, 0 }, { 0, 1, 0, 0 }, { 0, 1, 1, 0 } };
    int block10[4][4] = { { 20, 0, 0, 0 }, { 0, 0, 0, 0 }, { 1, 1, 1, 0 }, { 0, 0, 1, 0 } };
    int block11[4][4] = { { 21, 0, 0, 0 }, { 0, 1, 0, 0 }, { 0, 1, 0, 0 }, { 1, 1, 0, 0 } };
    int block12[4][4] = { { 22, 0, 0, 0 }, { 0, 0, 0, 0 }, { 1, 0, 0, 0 }, { 1, 1, 1, 0 } };
    int block13[4][4] = { { 23, 0, 0, 0 }, { 0, 1, 1, 0 }, { 0, 1, 0, 0 }, { 0, 1, 0, 0 } };
    int block14[4][4] = { { 24, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 1, 1, 0 }, { 1, 1, 0, 0 } };
    int block15[4][4] = { { 25, 0, 0, 0 }, { 1, 0, 0, 0 }, { 1, 1, 0, 0 }, { 0, 1, 0, 0 } };
    int block16[4][4] = { { 26, 0, 0, 0 }, { 0, 0, 0, 0 }, { 1, 1, 0, 0 }, { 0, 1, 1, 0 } };
    int block17[4][4] = { { 27, 0, 0, 0 }, { 0, 0, 1, 0 }, { 0, 1, 1, 0 }, { 0, 1, 0, 0 } };
    int block18[4][4] = { { 28, 0, 0, 0 }, { 0, 0, 0, 0 }, { 1, 1, 0, 0 }, { 1, 1, 0, 0 } };
    void initialWindow (HANDLE hOut);//初始化窗口
    void initialPrint (HANDLE hOut);//初始化界面
    void gotoXY (HANDLE hOut, int x, int y);//移动光标
    void roundBlock (HANDLE hOut, int block[4][4]);//随机生成方块并打印到下一个方块位置
    bool collisionDetection (int block[4][4], int map[21][12], int x, int y);//检测碰撞
    void printBlock (HANDLE hOut, int block[4][4], int x, int y);//打印方块
    void clearBlock (HANDLE hOut, int block[4][4], int x, int y);//消除方块
    void myLeft (HANDLE hOut, int block[4][4], int map[21][12], int x, int &y);//左移
    void myRight (HANDLE hOut, int block[4][4], int map[21][12], int x, int &y);//右移
    void myUp (HANDLE hOut, int block[4][4], int map[21][12], int x, int &y);//顺时针旋转90度
    int myDown (HANDLE hOut, int block[4][4], int map[21][12], int &x, int y);//加速下落
    void myStop (HANDLE hOut, int block[4][4]);//游戏暂停
    void gameOver (HANDLE hOut, int block[4][4], int map[21][12]);//游戏结束
    //判断是否能消行并更新分值
    void eliminateRow (HANDLE hOut, int map[21][12], int &val, int &fraction, int &checkpoint);
    int main () {
    	MessageBox (NULL, "欢迎来到俄罗斯方块游戏!", "温馨提示", MB_OK);
    	system ("mode coon cols=200 lines=100"); 
    	system ("mode con cols=70 lines=35");
    	int map[21][12];
    	int blockA[4][4];//候选区的方块
    	int blockB[4][4];//下落中的方块
    	int positionX, positionY;//方块左上角的坐标
    	bool check;//检查方块还能不能下落
    	char key;//用来存储按键
    	int val;//用来控制下落速度
    	int fraction;//用来存储得分
    	int checkpoint;//用来存储关卡
    	int times;
    	HANDLE hOut = GetStdHandle (STD_OUTPUT_HANDLE);//获取标准输出设备句柄
    	initialWindow (hOut);
    initial:
    	gotoXY (hOut, 0, 0);
    	initialPrint (hOut);
    	check = true;
    	val = 50;
    	fraction = 0;
    	checkpoint = 1;
    	times = val;
    	for (int i = 0; i < 20; i++) {
    		for (int j = 1; j < 11; j++) {
    			map[i][j] = 0;
    		}
    	}
    	for (int i = 0; i < 20; i++) {
    		map[i][0] = map[i][11] = 1;
    	}
    	for (int i = 0; i < 12; i++) {
    		map[20][i] = 1;
    	}
    	srand ((unsigned) time (NULL));
    	roundBlock (hOut, blockA);
    	while (true) {
    		if (check) {
    			eliminateRow (hOut, map, val, fraction, checkpoint);
    			check = false;
    			positionX = -3;
    			positionY = 4;
    			if (collisionDetection (blockA, map, positionX, positionY)) {
    				for (int i = 0; i < 4; i++) {
    					for (int j = 0; j < 4; j++) {
    						blockB[i][j] = blockA[i][j];
    					}
    				}
    				roundBlock (hOut, blockA);
    			} else {
    				gameOver (hOut, blockA, map);
    				goto initial;
    			}
    		}
    		printBlock (hOut, blockB, positionX, positionY);
    		if (_kbhit ()) {
    			key = _getch ();
    			switch (key) {
    				case 72:
    					myUp (hOut, blockB, map, positionX, positionY);
    					break;
    				case 75:
    					myLeft (hOut, blockB, map, positionX, positionY);
    					break;
    				case 77:
    					myRight (hOut, blockB, map, positionX, positionY);
    					break;
    				case 80:
    					switch (myDown (hOut, blockB, map, positionX, positionY)) {
    						case 0:
    							check = false;
    							break;
    						case 1:
    							check = true;
    							break;
    						case 2:
    							gameOver (hOut, blockB, map);
    							goto initial;
    						default:
    							break;
    					}
    					break;
    				case 32:
    					myStop (hOut, blockA);
    					break;
    				case 27:
    					exit (0);
    				default:
    					break;
    			}
    		}
    		Sleep (20);
    		if (--times == 0) {
    			switch (myDown (hOut, blockB, map, positionX, positionY)) {
    				case 0:
    					check = false;
    					break;
    				case 1:
    					check = true;
    					break;
    				case 2:
    					gameOver (hOut, blockB, map);
    					goto initial;
    				default:
    					break;
    			}
    			times = val;
    		}
    	}
    	cin.get ();
    	return 0;
    }
     
    void initialWindow (HANDLE hOut) {
    	SetConsoleTitle ("俄罗斯方块");
    	COORD size = { 80, 25 };
    	SetConsoleScreenBufferSize (hOut, size);
    	SMALL_RECT rc = { 0, 0, 79, 24 };
    	SetConsoleWindowInfo (hOut, true, &rc);
    	CONSOLE_CURSOR_INFO cursor_info = { 1, 0 };
    	SetConsoleCursorInfo (hOut, &cursor_info);
    }
     
    void initialPrint(HANDLE hOut) {
    	SetConsoleTextAttribute (hOut, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
    	for (int i = 0; i < 20; i++) {
    		cout << "■                    ■☆                      ☆" << endl;
    	}
    	gotoXY (hOut, 26, 0);
    	cout << "☆☆☆☆☆☆☆☆☆☆☆";
    	gotoXY (hOut, 0, 20);
    	cout << "■■■■■■■■■■■■☆☆☆☆☆☆☆☆☆☆☆☆☆";
    	gotoXY (hOut, 26, 1);
    	cout << "分    数:      ";
    	gotoXY (hOut, 26, 2);
    	cout << "关    卡:      ";
    	gotoXY (hOut, 26, 4);
    	cout << "下一方块:";
    	gotoXY (hOut, 26, 9);
    	cout << "操作方法:";
    	gotoXY (hOut, 30, 11);
    	cout << "↑:旋转 ↓:速降";
    	gotoXY (hOut, 30, 12);
    	cout << "→:右移 ←:左移";
    	gotoXY (hOut, 30, 13);
    	cout << "空格键:开始/暂停";
    	gotoXY (hOut, 30, 14);
    	cout << "Esc 键:退出";
    	gotoXY (hOut, 26, 16);
    	cout << "关    于:";
    	gotoXY (hOut, 30, 18);
    	cout << "俄罗斯方块V1.0";
    	gotoXY (hOut, 35, 19);
    }
    void gotoXY (HANDLE hOut, int x, int y) {
    	COORD pos;
    	pos.X = x;
    	pos.Y = y;
    	SetConsoleCursorPosition (hOut, pos);
    }
    void roundBlock(HANDLE hOut, int block[4][4]) {
    	clearBlock (hOut, block, 5, 15);
    	switch (rand() % 19) {
    		case 0:
    			for (int i = 0; i < 4; i++) {
    				for (int j = 0; j < 4; j++) {
    					block[i][j] = block00[i][j];
    				}
    			}
    			break;
    		case 1:
    			for (int i = 0; i < 4; i++) {
    				for (int j = 0; j < 4; j++) {
    					block[i][j] = block01[i][j];
    				}
    			}
    			break;
    		case 2:
    			for (int i = 0; i < 4; i++) {
    				for (int j = 0; j < 4; j++) {
    					block[i][j] = block02[i][j];
    				}
    			}
    			break;
    		case 3:
    			for (int i = 0; i < 4; i++) {
    				for (int j = 0; j < 4; j++) {
    					block[i][j] = block03[i][j];
    				}
    			}
    			break;
    		case 4:
    			for (int i = 0; i < 4; i++) {
    				for (int j = 0; j < 4; j++) {
    					block[i][j] = block04[i][j];
    				}
    			}
    			break;
    		case 5:
    			for (int i = 0; i < 4; i++) {
    				for (int j = 0; j < 4; j++) {
    					block[i][j] = block05[i][j];
    				}
    			}
    			break;
    		case 6:
    			for (int i = 0; i < 4; i++) {
    				for (int j = 0; j < 4; j++) {
    					block[i][j] = block06[i][j];
    				}
    			}
    			break;
    		case 7:
    			for (int i = 0; i < 4; i++) {
    				for (int j = 0; j < 4; j++) {
    				block[i][j] = block07[i][j];
    			}
    		}
    		break;
    		case 8:
    			for (int i = 0; i < 4; i++) {
    				for (int j = 0; j < 4; j++) {
    					block[i][j] = block08[i][j];
    				}
    			}
    			break;
    		case 9:
    			for (int i = 0; i < 4; i++) {
    				for (int j = 0; j < 4; j++)
    				{
    					block[i][j] = block09[i][j];
    				}
    			}
    			break;
    		case 10:
    			for (int i = 0; i < 4; i++) {
    				for (int j = 0; j < 4; j++) {
    					block[i][j] = block10[i][j];
    				}
    			}
    			break;
    		case 11:
    			for (int i = 0; i < 4; i++) {
    				for (int j = 0; j < 4; j++) {
    					block[i][j] = block11[i][j];
    				}
    			}
    			break;
    		case 12:
    			for (int i = 0; i < 4; i++) {
    				for (int j = 0; j < 4; j++) {
    					block[i][j] = block12[i][j];
    				}
    			}
    			break;
    		case 13:
    			for (int i = 0; i < 4; i++) {
    				for (int j = 0; j < 4; j++) {
    					block[i][j] = block13[i][j];
    				}
    			}
    			break;
    		case 14:
    			for (int i = 0; i < 4; i++) {
    				for (int j = 0; j < 4; j++) {
    					block[i][j] = block14[i][j];
    				}
    			}
    			break;
    		case 15:
    			for (int i = 0; i < 4; i++) {
    				for (int j = 0; j < 4; j++) {
    					block[i][j] = block15[i][j];
    				}
    			}
    			break;
    		case 16:
    			for (int i = 0; i < 4; i++) {
    				for (int j = 0; j < 4; j++) {
    					block[i][j] = block16[i][j];
    				}
    			}
    			break;
    		case 17:
    			for (int i = 0; i < 4; i++) {
    				for (int j = 0; j < 4; j++) {
    					block[i][j] = block17[i][j];
    				}
    			}
    			break;
    		case 18:
    			for (int i = 0; i < 4; i++) {
    				for (int j = 0; j < 4; j++) {
    					block[i][j] = block18[i][j];
    				}
    			}
    			break;
    		default:
    			break;
    	}
    	printBlock(hOut, block, 5, 15);
    }
    bool collisionDetection (int block[4][4], int map[21][12], int x, int y) {
    	for (int i = 0; i < 4; i++) {
    		for (int j = 0; j < 4; j++) {
    			if (x + i >= 0 && y + j >= 0 && map[x + i][y + j] == 1 && block[i][j] == 1) {
    				return false;
    			}
    		}
    	}
    	return true;
    }
    void printBlock (HANDLE hOut, int block[4][4], int x, int y) {
    	switch (block[0][0]) {
    		case 10:
    		case 11:
    			SetConsoleTextAttribute (hOut, FOREGROUND_GREEN);
    			break;
    		case 12:
    		case 13:
    		case 14:
    		case 15:
    			SetConsoleTextAttribute (hOut, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY);
    			break;
    		case 16:
    		case 17:
    		case 18:
    		case 19:
    			SetConsoleTextAttribute (hOut, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY);
    			break;
    		case 20:
    		case 21:
    		case 22:
    		case 23:
    			SetConsoleTextAttribute (hOut, FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_INTENSITY);
    			break;
    		case 24:
    		case 25:
    			SetConsoleTextAttribute (hOut, FOREGROUND_GREEN | FOREGROUND_INTENSITY);
    			break;
    		case 26:
    		case 27:
    			SetConsoleTextAttribute (hOut, FOREGROUND_BLUE | FOREGROUND_INTENSITY);
    			break;
    		case 28:
    			SetConsoleTextAttribute (hOut, FOREGROUND_RED | FOREGROUND_INTENSITY);
    			break;
    		default:
    			break;
    	}
    	for (int i = 0; i < 4; i++) {
    		if (i + x >= 0) {
    			for (int j = 0; j < 4; j++) {
    				if (block[i][j] == 1) {
    					gotoXY (hOut, 2 * (y + j), x + i);
    					cout << "■";
    				}
    			}
    		}
    	}
    }
    void clearBlock (HANDLE hOut, int block[4][4], int x, int y) {
    	for (int i = 0; i < 4; i++) {
    		if (i + x >= 0) {
    			for (int j = 0; j < 4; j++) {
    				if (block[i][j] == 1) {
    					gotoXY (hOut, 2 * (y + j), x + i);
    					cout << "  ";
    				}
    			}
    		}
    	}
    }
    void gameOver (HANDLE hOut, int block[4][4], int map[21][12]) {
    	SetConsoleTextAttribute (hOut, FOREGROUND_RED | FOREGROUND_INTENSITY);
    	gotoXY (hOut, 9, 8);
    	string s = "GAME OVER";
    	for (int i = 0; i < s.size (); i++) {
    		Sleep (80);
    		cout << s[i];
    	}
    	gotoXY (hOut, 8, 9);
    	s = "空格键:重来";
    	for (int i = 0; i < s.size (); i++) {
    		Sleep (80);
    		cout << s[i];
    	}
    	cout << endl;
    	gotoXY (hOut, 8, 10);
    	s = "ESC键:退出";
    	MessageBox (NULL, "很遗憾,您输了!", "温馨提示", MB_OK);
    	for (int i = 0; i < s.size (); i++) {
    		Sleep (80);
    		cout << s[i];
    	}
    	char key;
    	while (true) {
    		key = _getch ();
    		if (key == 32) {
    			return;
    		} else if (key == 27) {
    			exit(0);
    		}
    	}
    }
    int myDown (HANDLE hOut, int block[4][4], int map[21][12], int &x, int y) {
    	if (collisionDetection(block, map, x + 1, y)) {
    		clearBlock (hOut, block, x, y);
    		++x;
    		return 0;
    	}
    	if (x < 0) {
    		return 2;
    	}
    	for (int i = 0; i < 4; i++) {
    		for (int j = 0; j < 4; j++) {
    			if (block[i][j] == 1) {
    				map[x + i][y + j] = 1;
    				SetConsoleTextAttribute (hOut, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY);
    				gotoXY (hOut, 2 * (y + j), x + i);
    				cout << "■";
    			}
    		}
    	}
    	return 1;
    }
    void myLeft (HANDLE hOut, int block[4][4], int map[21][12], int x, int &y) {
    	if (collisionDetection (block, map, x, y - 1)) {
    		clearBlock (hOut, block, x, y);
    		--y;
    	}
    }
    void myRight (HANDLE hOut, int block[4][4], int map[21][12], int x, int &y) {
    	if (collisionDetection (block, map, x, y + 1)) {
    		clearBlock (hOut, block, x, y);
    		++y;
    	}
    }
    void myUp (HANDLE hOut, int block[4][4], int map[21][12], int x, int &y) {
    	switch (block[0][0]) {
    		case 10:
    			if (collisionDetection (block01, map, x, y)) {
    				clearBlock (hOut, block, x, y);
    				for (int i = 0; i < 4; i++) {
    					for (int j = 0; j < 4; j++) {
    						block[i][j] = block01[i][j];
    					}
    				}
    			}
    			break;
    		case 11:
    			if (collisionDetection (block00, map, x, y)) {
    				clearBlock (hOut, block, x, y);
    				for (int i = 0; i < 4; i++) {
    					for (int j = 0; j < 4; j++) {
    						block[i][j] = block00[i][j];
    					}
    				}
    			} else if (collisionDetection (block00, map, x, y - 1)) {
    				clearBlock (hOut, block, x, y);
    				for (int i = 0; i < 4; i++) {
    					for (int j = 0; j < 4; j++) {
    						block[i][j] = block00[i][j];
    					}
    				}
    				--y;
    			} else if (collisionDetection (block00, map, x, y + 1)) {
    				clearBlock (hOut, block, x, y);
    				for (int i = 0; i < 4; i++) {
    					for (int j = 0; j < 4; j++) {
    						block[i][j] = block00[i][j];
    					}
    				}
    				++y;
    			} else if (collisionDetection (block00, map, x, y - 2)) {
    				clearBlock (hOut, block, x, y);
    				for (int i = 0; i < 4; i++) {
    					for (int j = 0; j < 4; j++) {
    						block[i][j] = block00[i][j];
    					}
    				}
    				y -= 2;
    			} else if (collisionDetection (block00, map, x, y + 2)) {
    				clearBlock (hOut, block, x, y);
    				for (int i = 0; i < 4; i++) {
    					for (int j = 0; j < 4; j++) {
    						block[i][j] = block00[i][j];
    					}
    				}
    				y += 2;
    			}
    			break;
    		case 12:
    			if (collisionDetection (block03, map, x, y)) {
    				clearBlock (hOut, block, x, y);
    				for (int i = 0; i < 4; i++) {
    					for (int j = 0; j < 4; j++) {
    						block[i][j] = block03[i][j];
    					}
    				}
    			} else if (collisionDetection (block03, map, x, y - 1)) {
    				clearBlock (hOut, block, x, y);
    				for (int i = 0; i < 4; i++) {
    					for (int j = 0; j < 4; j++) {
    						block[i][j] = block03[i][j];
    					}
    				}
    				--y;
    			} else if (collisionDetection (block03, map, x, y + 1)) {
    				clearBlock (hOut, block, x, y);
    				for (int i = 0; i < 4; i++) {
    					for (int j = 0; j < 4; j++) {
    						block[i][j] = block03[i][j];
    					}
    				}
    				++y;
    			}
    			break;
    		case 13:
    			if (collisionDetection (block04, map, x, y)) {
    				clearBlock (hOut, block, x, y);
    				for (int i = 0; i < 4; i++) {
    					for (int j = 0; j < 4; j++) {
    						block[i][j] = block04[i][j];
    					}
    				}
    			} else if (collisionDetection (block04, map, x, y - 1)) {
    				clearBlock (hOut, block, x, y);
    				for (int i = 0; i < 4; i++) {
    					for (int j = 0; j < 4; j++) {
    						block[i][j] = block04[i][j];
    					}
    				}
    				--y;
    			} else if (collisionDetection (block04, map, x, y + 1)) {
    				clearBlock (hOut, block, x, y);
    				for (int i = 0; i < 4; i++) {
    					for (int j = 0; j < 4; j++) {
    						block[i][j] = block04[i][j];
    					}
    				}
    				++y;
    			}
    			break;
    		case 14:
    			if (collisionDetection (block05, map, x, y)) {
    				clearBlock (hOut, block, x, y);
    				for (int i = 0; i < 4; i++) {
    					for (int j = 0; j < 4; j++) {
    						block[i][j] = block05[i][j];
    					}
    				}
    			} else if (collisionDetection (block05, map, x, y - 1)) {
    				clearBlock (hOut, block, x, y);
    				for (int i = 0; i < 4; i++) {
    					for (int j = 0; j < 4; j++) {
    						block[i][j] = block05[i][j];
    					}
    				}
    				--y;
    			} else if (collisionDetection (block05, map, x, y + 1)) {
    				clearBlock (hOut, block, x, y);
    				for (int i = 0; i < 4; i++) {
    					for (int j = 0; j < 4; j++) {
    						block[i][j] = block05[i][j];
    					}
    				}
    				++y;
    			}
    			break;
    		case 15:
    			if (collisionDetection (block02, map, x, y)) {
    				clearBlock (hOut, block, x, y);
    				for (int i = 0; i < 4; i++) {
    					for (int j = 0; j < 4; j++) {
    						block[i][j] = block02[i][j];
    					}
    				}
    			} else if (collisionDetection (block02, map, x, y - 1)) {
    				clearBlock (hOut, block, x, y);
    				for (int i = 0; i < 4; i++) {
    					for (int j = 0; j < 4; j++) {
    						block[i][j] = block02[i][j];
    					}
    				}
    				--y;
    			} else if (collisionDetection (block02, map, x, y + 1)) {
    				clearBlock (hOut, block, x, y);
    				for (int i = 0; i < 4; i++) {
    					for (int j = 0; j < 4; j++) {
    						block[i][j] = block02[i][j];
    					}
    				}
    				++y;
    			}
    			break;
    		case 16:
    			if (collisionDetection (block07, map, x, y)) {
    				clearBlock (hOut, block, x, y);
    				for (int i = 0; i < 4; i++) {
    					for (int j = 0; j < 4; j++) {
    						block[i][j] = block07[i][j];
    					}
    				}
    			} else if (collisionDetection (block07, map, x, y - 1)) {
    				clearBlock (hOut, block, x, y);
    				for (int i = 0; i < 4; i++) {
    					for (int j = 0; j < 4; j++) {
    						block[i][j] = block07[i][j];
    					}
    				}
    				--y;
    			} else if (collisionDetection (block07, map, x, y + 1)) {
    				clearBlock (hOut, block, x, y);
    				for (int i = 0; i < 4; i++) {
    					for (int j = 0; j < 4; j++) {
    						block[i][j] = block07[i][j];
    					}
    				}
    				++y;
    			}
    			break;
    		case 17:
    			if (collisionDetection (block08, map, x, y)) {
    				clearBlock (hOut, block, x, y);
    				for (int i = 0; i < 4; i++) {
    					for (int j = 0; j < 4; j++) {
    						block[i][j] = block08[i][j];
    					}
    				}
    			} else if (collisionDetection (block08, map, x, y - 1)) {
    				clearBlock (hOut, block, x, y);
    				for (int i = 0; i < 4; i++) {
    					for (int j = 0; j < 4; j++) {
    						block[i][j] = block08[i][j];
    					}
    				}
    				--y;
    			} else if (collisionDetection (block08, map, x, y + 1)) {
    				clearBlock (hOut, block, x, y);
    				for (int i = 0; i < 4; i++) {
    					for (int j = 0; j < 4; j++) {
    						block[i][j] = block08[i][j];
    					}
    				}
    				++y;
    			}
    			break;
    		case 18:
    			if (collisionDetection (block09, map, x, y)) {
    				clearBlock (hOut, block, x, y);
    				for (int i = 0; i < 4; i++) {
    					for (int j = 0; j < 4; j++) {
    						block[i][j] = block09[i][j];
    					}
    				}
    			} else if (collisionDetection (block09, map, x, y - 1)) {
    				clearBlock (hOut, block, x, y);
    				for (int i = 0; i < 4; i++) {
    					for (int j = 0; j < 4; j++) {
    						block[i][j] = block09[i][j];
    					}
    				}
    				--y;
    			} else if (collisionDetection (block09, map, x, y + 1)) {
    				clearBlock (hOut, block, x, y);
    				for (int i = 0; i < 4; i++) {
    					for (int j = 0; j < 4; j++) {
    						block[i][j] = block09[i][j];
    					}
    				}
    				++y;
    			}
    			break;
    		case 19:
    			if (collisionDetection (block06, map, x, y)) {
    				clearBlock (hOut, block, x, y);
    				for (int i = 0; i < 4; i++) {
    					for (int j = 0; j < 4; j++) {
    						block[i][j] = block06[i][j];
    					}
    				}
    			} else if (collisionDetection (block06, map, x, y - 1)) {
    				clearBlock (hOut, block, x, y);
    				for (int i = 0; i < 4; i++) {
    					for (int j = 0; j < 4; j++) {
    						block[i][j] = block06[i][j];
    					}
    				}
    				--y;
    			} else if (collisionDetection(block06, map, x, y + 1)) {
    				clearBlock (hOut, block, x, y);
    				for (int i = 0; i < 4; i++) {
    					for (int j = 0; j < 4; j++) {
    						block[i][j] = block06[i][j];
    					}
    				}
    				++y;
    			}
    			break;
    		case 20:
    			if (collisionDetection (block11, map, x, y)) {
    				clearBlock (hOut, block, x, y);
    				for (int i = 0; i < 4; i++) {
    					for (int j = 0; j < 4; j++) {
    						block[i][j] = block11[i][j];
    					}
    				}
    			} else if (collisionDetection (block11, map, x, y - 1)) {
    				clearBlock (hOut, block, x, y);
    				for (int i = 0; i < 4; i++)	{
    					for (int j = 0; j < 4; j++)	{
    						block[i][j] = block11[i][j];
    					}
    				}
    				--y;
    			} else if (collisionDetection (block11, map, x, y + 1))	{
    				clearBlock (hOut, block, x, y);
    				for (int i = 0; i < 4; i++)	{
    					for (int j = 0; j < 4; j++)	{
    						block[i][j] = block11[i][j];
    					}
    				}
    				++y;
    			}
    			break;
    		case 21:
    			if (collisionDetection (block12, map, x, y)) {
    				clearBlock (hOut, block, x, y);
    				for (int i = 0; i < 4; i++) {
    					for (int j = 0; j < 4; j++)	{
    						block[i][j] = block12[i][j];
    					}
    				}
    			} else if (collisionDetection(block12, map, x, y - 1)) {
    				clearBlock (hOut, block, x, y);
    				for (int i = 0; i < 4; i++) {
    					for (int j = 0; j < 4; j++) {
    						block[i][j] = block12[i][j];
    					}
    				}
    				--y;
    			} else if (collisionDetection (block12, map, x, y + 1)) {
    				clearBlock (hOut, block, x, y);
    				for (int i = 0; i < 4; i++) {
    					for (int j = 0; j < 4; j++) {
    						block[i][j] = block12[i][j];
    					}
    				}
    				++y;
    			}
    			break;
    		case 22:
    			if (collisionDetection (block13, map, x, y)) {
    				clearBlock (hOut, block, x, y);
    				for (int i = 0; i < 4; i++) {
    					for (int j = 0; j < 4; j++) {
    						block[i][j] = block13[i][j];
    					}
    				}
    			} else if (collisionDetection (block13, map, x, y - 1)) {
    				clearBlock (hOut, block, x, y);
    				for (int i = 0; i < 4; i++) {
    					for (int j = 0; j < 4; j++) {
    						block[i][j] = block13[i][j];
    					}
    				}
    				--y;
    			} else if (collisionDetection (block13, map, x, y + 1)) {
    				clearBlock (hOut, block, x, y);
    				for (int i = 0; i < 4; i++) {
    					for (int j = 0; j < 4; j++) {
    						block[i][j] = block13[i][j];
    					}
    				}
    				++y;
    			}
    			break;
    		case 23:
    			if (collisionDetection (block10, map, x, y)) {
    				clearBlock (hOut, block, x, y);
    				for (int i = 0; i < 4; i++) {
    					for (int j = 0; j < 4; j++) {
    						block[i][j] = block10[i][j];
    					}
    				}
    			} else if (collisionDetection (block10, map, x, y - 1)) {
    				clearBlock (hOut, block, x, y);
    				for (int i = 0; i < 4; i++) {
    					for (int j = 0; j < 4; j++) {
    						block[i][j] = block10[i][j];
    					}
    				}
    				--y;
    			} else if (collisionDetection (block10, map, x, y + 1)) {
    				clearBlock (hOut, block, x, y);
    				for (int i = 0; i < 4; i++) {
    					for (int j = 0; j < 4; j++) {
    						block[i][j] = block10[i][j];
    					}
    				}
    				++y;
    			}
    			break;
    		case 24:
    			if (collisionDetection (block15, map, x, y)) {
    				clearBlock (hOut, block, x, y);
    				for (int i = 0; i < 4; i++) {
    					for (int j = 0; j < 4; j++) {
    						block[i][j] = block15[i][j];
    					}
    				}
    			} else if (collisionDetection (block15, map, x, y - 1)) {
    				clearBlock (hOut, block, x, y);
    				for (int i = 0; i < 4; i++) {
    					for (int j = 0; j < 4; j++) {
    						block[i][j] = block15[i][j];
    					}
    				}
    				--y;
    			} else if (collisionDetection (block15, map, x, y + 1)) {
    				clearBlock (hOut, block, x, y);
    				for (int i = 0; i < 4; i++) {
    					for (int j = 0; j < 4; j++) {
    						block[i][j] = block15[i][j];
    					}
    				}
    				++y;
    			}
    			break;
    		case 25:
    			if (collisionDetection (block14, map, x, y)) {
    				clearBlock (hOut, block, x, y);
    				for (int i = 0; i < 4; i++) {
    					for (int j = 0; j < 4; j++) {
    						block[i][j] = block14[i][j];
    					}
    				}
    			} else if (collisionDetection (block14, map, x, y - 1)) {
    				clearBlock (hOut, block, x, y);
    				for (int i = 0; i < 4; i++) {
    					for (int j = 0; j < 4; j++) {
    						block[i][j] = block14[i][j];
    					}
    				}
    				--y;
    			} else if (collisionDetection (block14, map, x, y + 1)) {
    				clearBlock (hOut, block, x, y);
    				for (int i = 0; i < 4; i++) {
    					for (int j = 0; j < 4; j++) {
    						block[i][j] = block14[i][j];
    					}
    				}
    				++y;
    			}
    			break;
    		case 26:
    			if (collisionDetection (block17, map, x, y)) {
    				clearBlock (hOut, block, x, y);
    				for (int i = 0; i < 4; i++) {
    					for (int j = 0; j < 4; j++) {
    						block[i][j] = block17[i][j];
    					}
    				}
    			} else if (collisionDetection (block17, map, x, y - 1)) {
    				clearBlock (hOut, block, x, y);
    				for (int i = 0; i < 4; i++) {
    					for (int j = 0; j < 4; j++) {
    						block[i][j] = block17[i][j];
    					}
    				}
    				--y;
    			} else if (collisionDetection (block17, map, x, y + 1)) {
    				clearBlock (hOut, block, x, y);
    				for (int i = 0; i < 4; i++) {
    					for (int j = 0; j < 4; j++) {
    						block[i][j] = block17[i][j];
    					}
    				}
    				++y;
    			}
    			break;
    		case 27:
    			if (collisionDetection (block16, map, x, y)) {
    				clearBlock (hOut, block, x, y);
    				for (int i = 0; i < 4; i++) {
    					for (int j = 0; j < 4; j++) {
    						block[i][j] = block16[i][j];
    					}
    				}
    			} else if (collisionDetection (block16, map, x, y - 1)) {
    				clearBlock (hOut, block, x, y);
    				for (int i = 0; i < 4; i++) {
    					for (int j = 0; j < 4; j++) {
    						block[i][j] = block16[i][j];
    					}
    				}
    				--y;
    			} else if (collisionDetection (block16, map, x, y + 1)) {
    				clearBlock (hOut, block, x, y);
    				for (int i = 0; i < 4; i++) {
    					for (int j = 0; j < 4; j++) {
    						block[i][j] = block16[i][j];
    					}
    				}
    				++y;
    			}
    			break;
    		default:
    			break;
    	}
    }
    void myStop (HANDLE hOut, int block[4][4]) {
    	clearBlock (hOut, block, 5, 15);
    	SetConsoleTextAttribute (hOut, FOREGROUND_RED | FOREGROUND_INTENSITY);
    	gotoXY (hOut, 30, 7);
    	cout << "游戏暂停";
    	char key;
    	while (true) {
    		key = _getch ();
    		if (key == 32) {
    			gotoXY (hOut, 30, 7);
    			cout << "        ";
    			printBlock (hOut, block, 5, 15);
    			return;
    		}
    		if (key == 27) {
    			exit (0);
    		}
    	}
    }
    void eliminateRow (HANDLE hOut, int map[21][12], int &val, int &fraction, int &checkpoint) {
    	SetConsoleTextAttribute(hOut, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY);
    	for (int i = 19; i >= 0; i--) {
    		int x = 0;
    		for (int j = 1; j < 11; j++) {
    			x += map[i][j];
    		}
    		if (x == 10) {
    			fraction += 100;
    			if (val > 1 && fraction / 1000 + 1 != checkpoint) {
    				checkpoint = fraction / 1000 + 1;
    				val -= 5;
    			}
    			for (int m = i; m > 0; m--) {
    				for (int n = 1; n < 11; n++) {
    					map[m][n] = map[m - 1][n];
    					gotoXY (hOut, 2 * n, m);
    					if (map[m][n] == 1) {
    						cout << "■";
    					} else {
    						cout << "  ";
    					}
    				}
    			}
    			i++;
    		}
    	}
    	gotoXY (hOut, 36, 1);
    	cout << fraction;
    	gotoXY (hOut, 36, 2);
    	cout << checkpoint;
    }
    

    飞机大战

    #pragma once
    #include<iostream>
    #include<Windows.h>//定义控制台应用程序的入口点
     
    using namespace std;
     
    //界面颜色 
    void setcolor(char str[])
      {
      	
     	 	
     	if(str=="lightblue")
     		SetConsoleTextAttribute( GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|1);
     	if(str=="lightred")
     		SetConsoleTextAttribute( GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
     	if(str=="lightyellow")
     		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_BLUE);
     	if(str=="lightpink"	)
    		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_BLUE);
     
    		
    	if(str=="blue")
     		SetConsoleTextAttribute( GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_BLUE);
     	if(str=="red")
     		SetConsoleTextAttribute( GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED);
     	if(str=="yellow")
     		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),  FOREGROUND_RED | FOREGROUND_BLUE);
     	if(str=="pink")
    		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),  FOREGROUND_GREEN | FOREGROUND_BLUE);
    	if(str=="lightgray")
    	  	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),  FOREGROUND_GREEN |8);	
    	if(str=="gray")
    	  	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),  8);				  				  	
    		
     	else return;
     		 
     	 
      }
     
    //定义敌人结构 其中最后面Frame代表结构体类型 若不加typedef代表定义的结构体变量
    typedef struct Frame
    {
           COORD position[2];
           //   COORD 是Windows API中定义的一种结构,表示一个字符在控制台屏幕上的坐标。
           // 其定义为:
           // typedef struct _COORD {
           //             SHORT X;  
           //             SHORT Y;
           //          } COORD;
           int flag;
    }Frame;
     
    class Game
    {
    public:
           COORD position[10];
           COORD bullet[50];//子弹坐标
           Frame enemy[8];//敌人数量
     
           int score;
           int rank;//级别,难度
           int rankf;//等级标志
           string title;
     
           int flag_rank;//等级标志
           //构造函数
           Game();
           //初始化所有   //设定位置
           void initPlane();
           void initBullet();
           void initEnemy();
           //填充所有   --画出形状和消失的形状
           void drawPlane();
           void drawPlaneToNull();
           void drawBullet();
           void drawBulletToNull();
           void drawEnemy();
           void drawEnemyToNull();
           //执行某一个操作
           void Playing();//游戏主循环
           void planeMove(char x);//飞机移动
           void judgePlane();//判断飞机是否与障碍物重叠
           void GameOver();//游戏失败
           void Pause();// 该成员函数用来使得游戏暂停
           void Shoot();//发射子弹
           void bulletMove();//子弹移动
           void drawThisBulletToNull(COORD c);//画出失效子弹
           void judgeEnemy();//判断子弹是否击中障碍物
           void drawThisEnemyToNull(Frame f);       //击败的障碍物清空
           void enemyMove();//障碍物移动
           void printScore();//输出分数
    };
    //主菜单
    int drawMenu();
    //隐藏光标
    void HideCursor();
     
     
    void SetPos(int i, int j);//设置光标
    COORD random(COORD a, COORD b);//产生随机障碍物位置
    void drawFrame(COORD a, COORD   b, char row, char col);//画出障碍物
    //把第y行,[x1, x2) 之间的坐标填充为 ch
    void drawRow(int y, int x1, int x2, char ch);
    //把第x列,[y1, y2] 之间的坐标填充为 ch
    void drawCol(int x, int y1, int y2, char ch);
    // 绘制游戏界面
    void drawPlaying();
    void drawFrame(Frame frame, char row, char col);//画坠毁后的战机
    // 该函数用来判断战机的某一部分是否与障碍物有接触
    bool   judgeCoordInFrame(Frame frame, COORD spot);
     
    void drawRow(COORD a, COORD b, char ch);
    #include<Windows.h>
    #include<conio.h>
    #include<iostream>
    #include<ctime>
    #include<string>
    using namespace std;
    Game::Game()
    {
        // 调用类成员函数来进行初始化
        initPlane();
     
        initBullet();
     
        initEnemy();
     
        // 初始化四个int型数据成员,采用赋值的方式进行初始化
        // string类型的数据成员title没有进行初始化,因为:
        // string本身就是一个标准库类类型,它的类定义中设置了默认构造函数,
        // 这些默认构造函数会将对象初始化为合理的默认状态,
        //  string的默认构造函数会产生空字符串,相当于"" 。
        this->score = 0;
        rank = 25;
        rankf = 25;
        flag_rank = 0;
    }
    void Game::initPlane()
    {
        COORD centren;
        centren.X = 39;
        centren.Y = 22;
     
        position[0].X = position[5].X = position[7].X = position[9].X = centren.X;
        position[1].X = centren.X - 2;
        position[2].X = position[6].X = centren.X - 1;
        position[3].X = position[8].X = centren.X + 1;
        position[4].X = centren.X + 2;
        for (int i = 0; i <= 4; i++)
        {
            position[i].Y = centren.Y;
        }
        for (int i = 6; i <= 8; i++)
        {
            position[i].Y = centren.Y + 1;
        }
        position[5].Y = centren.Y - 1;
        position[9].Y = centren.Y - 2;
            
        // 这个函数体类的代码其实就是为了初始化战机的十个部分的位置,战机的组成如下所示:   
        //                   |       5 
        //                     |       9    
        //                   *****   12034
        //                    ***     678
        //   第一排5个0的坐标依次对应了position[1]position[2]position[0]position[3]position[4]
        //   第二排三个0的坐标依次对应了position[6]position[7]position[8]
        //   两排0上面的两|的坐标从上往下依次对应了position[5]position[9]
    }
    void Game::drawPlane()
    {
        for (int i = 0; i < 9; i++)
        {
            SetPos(position[i].X,position[i].Y);
            if (i != 5)
            {
            	setcolor("yellow");
                cout << "@";
            }
            else if (i == 5)
            {
            	setcolor("yellow");
                cout << "$";
            }
        }
    }
    // 这个成员函数通过将战机的每个坐标处输出" "来代替"0"和"|",
    // 来达到将战机消除的目的。
    void Game::drawPlaneToNull()
    {
        for (int i = 0; i < 9; i++)
        {
            SetPos(position[i].X, position[i].Y);
            cout << " ";
        }
    }
    // 该成员函数用来初始化子弹,
    // 即将每个子弹的Y坐标初始化为30(bullet[i].Y = 30)来表示子弹处于失效状态
    void Game::initBullet()
    {
        for (int i = 0; i < 10; i++)
        {
            bullet[i].Y = 30;
        }    
    }
    // 该成员函数用来画出子弹
    // 首先检查每颗子弹的有效性,如果子弹有效,则定位到该子弹的坐标处,输出 "^",表示该子弹,
    // 如果子弹是无效的,则不绘制
    void Game::drawBullet()
    {
        for (int i = 0; i < 10; i++)
        {
            if (bullet[i].Y != 30)
            {
                SetPos(bullet[i].X,bullet[i].Y);
                setcolor("blue");
                cout << "*";
            }
        }
    }
    //子弹失效
    void Game::drawBulletToNull()
    {
        for (int i = 0; i < 10; i++)
            if (bullet[i].Y != 30)
            {
                SetPos(bullet[i].X, bullet[i].Y + 1);
                cout << " ";
            }
    }
    // 这个函数用来初始障碍物的位置,
    // 屏幕当中只能同时存在八架障碍物,
    // 且每架障碍物用如下结构体Frame来表示,如下所示:
    //     typedef struct Frame
    //        {
    //          COORD position[2];
    //          int flag;
    //        }Frame;
    COORD random(COORD a, COORD b)
    {
        int x = rand() % (a.X - b.X) + a.X;
        int y = rand() % (a.Y - b.Y) + a.Y;
        COORD c = { x,y };
        return c;
    }
    void Game::initEnemy()
    {
        COORD a = { 1, 1 };
        COORD b = { 45, 15 };
        for (int i = 0; i < 8; i++)
        {
            enemy[i].position[0] = random(a, b);
            //  random(a, b)是调用了一个重载的函数,它表示在坐标a、b之间的矩形框
            //  内随机生成一个坐标值,并将该坐标值作为障碍物的左上角的坐标。
            // enemy[i].position[0]中是一个Frame结构体类型的变量,存放了障碍物i的左上角的坐标。
            enemy[i].position[1].X = enemy[i].position[0].X + 3;
            enemy[i].position[1].Y = enemy[i].position[0].Y + 2;
            // enemy[i].position[1]也中是一个Frame结构体类型的变量,存放了障碍物i的右下角的坐标。
        }
    }
    // 接下来要根据障碍物的左上角坐标和右下角坐标画出障碍物,
    // 显然,障碍物的外形如下所示:
    //   --
    //  |  |
    //   --
    void Game::drawEnemy()
    {
        for (int i = 0; i < 8; i++)
        {
        	setcolor("gray");
            drawFrame(enemy[i].position[0], enemy[i].position[1], '-', '|');
        }    
    }
    // 将障碍物消除,通过输出空白的方式
    void Game::drawEnemyToNull()
    {
        for (int i = 0; i < 8; i++)
        {
            drawFrame(enemy[i].position[0], enemy[i].position[1], ' ', ' ');
        }
    }
     
    //隐藏光标
    void HideCursor()
    {
        CONSOLE_CURSOR_INFO cursor_info = { 1,0 };//第二个值0表示隐藏光标
        SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
    }
    void SetPos(int i, int j)//设置坐标点位(光标)
    {
        HANDLE hout;
        COORD coord;
        coord.X = i;
        coord.Y = j;
        hout = GetStdHandle(STD_OUTPUT_HANDLE);
        SetConsoleCursorPosition(hout, coord);
    }
     
    //左上角坐标、右下角坐标、用row填充行、用col填充列
    void drawFrame(COORD a, COORD  b, char row, char col)
    {
        drawRow(a.Y, a.X + 1, b.X - 1, row);
        drawRow(b.Y, a.X + 1, b.X - 1, row);
        drawCol(a.X, a.Y + 1, b.Y - 1, col);
        drawCol(b.X, a.Y + 1, b.Y - 1, col);
    }
     
    //把第y行,[x1, x2) 之间的坐标填充为 ch
    void drawRow(int y, int x1, int x2, char ch)
    {
        SetPos(x1, y);
        for (int i = 0; i <= (x2 - x1); i++)
        {
            cout << ch;
        }
    }
    //把第x列,[y1, y2] 之间的坐标填充为 ch
    void drawCol(int x, int y1, int y2, char ch)
    {
        int y = y1;
        while (y != y2 + 1)
        {
            SetPos(x, y);
            cout << ch;
            y++;
        }
    }
     
    //主菜单绘制
    int drawMenu()
    {
        setcolor("lightgreen");
        system("Title        飞 机 大 战");
        SetPos(30,1);
        cout << "飞 机 大 战";
        drawRow(3, 0, 79, '-');
        drawRow(5, 0, 79, '-');
        SetPos(28, 4);
        setcolor("red");
        cout << "↑和↓选择,回车确定";
        int j = 11;
        SetPos(12, j);
        cout << ">>";
        SetPos(15, 11);
        cout << "1. 简单的任务";
        SetPos(15, 13);
        cout << "2. 困难的任务";
        drawRow(20, 0, 79, '-');
        SetPos(47, 11);
        setcolor("yellow");
        cout << "简单的任务:";
        SetPos(51, 13);
        cout << "简单任务的自动飞行速度较慢,任务难度较小。                  ";
        SetPos(30, 21);
        setcolor("lightblue");
        cout << " ";
        setcolor("red");
        drawRow(22, 0, 79, '-');
     
        while (true)
        {
            if (_kbhit())
            {
                char x = _getch();
                switch (x)
                {
                case 72:
                {
                    if (j == 13)
                    {
                        SetPos(12, j);
                        cout << "  ";
                        j = 11;
                        SetPos(12, j);
                        setcolor("red");
                        cout << ">>";
                        SetPos(51, 13);
                        cout << "            ";
                        SetPos(47, 11);
                        setcolor("yellow");
                        cout << "简单的任务:";
                        SetPos(51, 13);
                        cout << "简单任务的自动飞行速度较慢,任务难度较小。                  ";
                    }
                    break;
                }
                case 80:
                {
                    if (j == 11)
     
                    {
                        SetPos(12, j);
                        cout << " ";
                        j = 13;
                        SetPos(12, j);
                        setcolor("red");
                        cout << ">>";
                        SetPos(51, 13);
                        cout << "                               ";
                        SetPos(47, 11);
                        setcolor("yellow");
                        cout << "困难的任务:";
                        SetPos(51, 13);
                        cout << "困难任务自动飞行速度较快,难操作哟!                         ";
                    }
     
                    break;
                }
                case 13://回车键:13 
                {
                    
                    if (j == 11)//源代码为8?
                        return 1;
                    else
                        return 2;
                }
                }
            }
        }
     
        return 0;
    }
    void drawFrame(int x1, int y1, int x2, int y2, char row, char col)
    {
        COORD a = { x1, y1 };
        COORD b = { x2, y2 };
        drawFrame(a, b, row, col);
    }
    // 绘制游戏界面
    void drawPlaying()
    {
    	setcolor("red");
        drawFrame(0,  0, 48, 24, '=', '|');//    draw map frame主界面
        drawFrame(49, 0, 82, 4, '-', '|');//    draw output frame 状态界面
        drawFrame(49, 4, 82, 9, '-', '|');//    draw score frame 分数界面
        drawFrame(49, 9, 82, 20, '-', '|');//    draw operate frame 操作界面
        drawFrame(49,20, 82, 24, '-', '|');//    draw other message frame 提示界面
        setcolor("yellow") ;
        SetPos(61,2);
    	cout << "飞机大战" ; 
        SetPos(52, 6);
        cout << "得分:";
        SetPos(52, 7);
        cout << "称号:";
        SetPos(52, 11);
        setcolor("yellow") ;
        cout << "操作方式:";
        SetPos(52, 13);
        cout << "↑,↓,←,→可以控制战机移动。";
        SetPos(52, 15);
        cout << "P和E分别可以暂停游戏或退出游戏。";
        SetPos(52, 17);
        cout << "空格可以发射燃烧弹";
        SetPos(52, 19);
        cout << "你的任务是躲避障碍物并击毁它们!";
        SetPos(52, 22);
        setcolor("lightblue") ;
        cout << " 游戏虽好玩,不要贪多哦 ";
    }
    // 该成员函数用过响应战机的一个动作
    //  ↑,↓,←,→,来控制战机的移动
    //上:38,下:40,左:37,右:39; 
    void Game::planeMove(char x)
    {
        if (x == 75)
        {
            if (position[1].X != 1)
            {
                for (int i = 0; i <= 9; i++)
                {
                    position[i].X -= 2;
                }
            }
        }
        // 如果玩家按下 ← 键,说明玩家想让战机往左移动一个距离(2个单位),
        // 首先检测,战机的最左侧的位置坐标(即position[1].X)有没有达到左边界,
        // 如果到达了边界,那就不做出移动;如果没有达到边界,则将战机10个部分的X值减小2。
        if (x == 80)
        {
            if (position[7].Y != 23)
            {
                for (int i = 0; i <= 9; i++)
                {
                    position[i].Y += 1;
                }
            }
        }        
        // 如果玩家按下↓ 键,说明玩家想让战机往下移动一个距离(1个单位),
        // 首先检测,战机的最底部的位置坐标(即position[6].Y或者position[7].Y或者position[8].Y)有没有达到下边界,
        //  如果到达了边界,那就不做出移动;如果没有达到边界,则将战机10个部分的Y值增加1。
        if (x == 77 && (position[4].X != 47))
        {
            for (int i = 0; i <= 9; i++)
            {
                position[i].X += 2;
            }    
        }        
        // 如果玩家按下 → 键,说明玩家想让战机往右移动一个距离(2个单位),
        // 首先检测,战机的最右侧的位置坐标(即position[4].X)有没有达到右边界,
        //  如果到达了边界,那就不做出移动;如果没有达到边界,则将战机10个部分的X值增加2。
        if (x == 72&&(position[5].Y != 3))
        {
            for (int i = 0; i <= 9; i++)
            {
                position[i].Y -= 1;
            }
        }
        // 如果玩家按下↑键,说明玩家想让战机往上移动一个距离(1个单位),
        // 首先检测,战机的最顶部的位置坐标(即position[5].Y)有没有达到上边界,
        //  如果到达了边界,那就不做出移动;如果没有达到边界,则将战机10个部分的Y值减少1。
    }
    // 该函数用来判断战机的某一部分是否与障碍物有接触
    // 如果与障碍物有接触在判断为坠毁
    bool  judgeCoordInFrame(Frame frame, COORD spot)
    {
        if ((spot.X >= frame.position[0].X) && (spot.X <= frame.position[1].X) && (spot.Y >= frame.position[0].Y) && (spot.Y <= frame.position[1].Y))
        {
            return true;
        }
        return false;
    }
    void drawFrame(Frame frame, char row, char col)
    {
        COORD a = frame.position[0];
        COORD b = frame.position[1];
        drawFrame(a, b, row, col);
    }
    //游戏结束
    void Game::GameOver()
    {
    	setcolor("lightgreen");
        system("cls");
        COORD p1 = { 28,9 };
        COORD p2 = { 53,15 };
        drawFrame(p1, p2, '=', '|');
        SetPos(36, 12);
        string str = "Game Over!";
        for (int i = 0; i < str.size(); i++)
        {
            Sleep(80);
            cout << str[i];
        }
        Sleep(1000);
        system("cls");
        drawFrame(p1, p2, '=', '|');
        SetPos(31, 11);
        setcolor("blue");
        cout << "击毁障碍物:" << score / 5 << "个";
        SetPos(31, 12);
        cout << "得  分:" << score;
        SetPos(31, 13);
        cout << "获得称号:" << title;
        SetPos(30, 18);
        Sleep(1000);
        setcolor("green");
        cout << "继续? 是(Y)| 否(N)";
    as://goto 语句标签 直接跳转至此
        char x = _getch();
        if (x == 'n' || x == 'N')
        {
            exit(0);
        }
        else if (x == 'y' || x =='Y')
        {
            system("cls");
            Game game;
            int a = drawMenu();       // 绘制游戏开始界面主菜单
            if (a == 2)
                game.rank = 20;
            system("cls");
            drawPlaying();           // 绘制游戏界面框架
            game.Playing();
        }
        else 
            goto as;
    }
    // 该成员函数用来判断战机是否坠毁,
    // 依次判断每架障碍物与战机的每个部分是否有接触,
    // 如果有接触,则表示战机坠毁
    void Game::judgePlane()
    {
        for (int i = 0; i < 8; i++)
        {
            for (int j = 0; j < 9; j++)
                // 此处的实参position[j]是指战机的10个部分的COORD坐标,
                // 类中的成员函数可以访问数据成员变量。
                // 此处也可以写成this-> position[j],因为
                // 成员函数具有一个附加的隐含形参,即指向该类对象的一个指针,
                // 这个隐含形参命名为this,与调用成员函数的对象绑定在一起。
                // 成员函数不能定义this形参,而是由编译器隐含地定义。
                // 成员函数的函数体可以显式使用this指针,但不是必须这么做。
                if (judgeCoordInFrame(enemy[i], position[j]))
                {
                    SetPos(61, 2);
                    cout << "  坠毁      ";
                    setcolor("yellow");
                    drawFrame(enemy[i], '+', '+');
                    // 将与战机相撞的障碍物的形状绘制为:
                    //    ++
                    //   +  +
                    //    ++
                    Sleep(1000);
                    GameOver();
                    break;
                }
        }
    }
    // 该成员函数用来使得游戏暂停
    void Game::Pause()
    {
        SetPos(61, 2);
        cout << "         ";
        SetPos(61, 2);
        cout << "暂停中...   ";
        // 当出现"暂停中..."的提示以后,程序不停的接收按下的按键,
        // 当按下'p'键以后,说明要退出暂停状态,此时需要清除"暂停中..."的提示
        // 通过输出空白 "         "来将其覆盖,达到效果
        char c = _getch();
        while (c != 'p')
        {
            c = _getch();
        }
        SetPos(61, 2);
        cout << "         "; 
        setcolor("green");
        SetPos(61, 2);
    	cout << "飞机大战"; 
        
    }
    // 这个成员函数用来响应一次射击操作,
    // 也就是,当游戏中的时候,玩家按下"k"键,就执行该函数。
    // 由于子弹是由COORD bullet[10]定义的,因此同一时刻,界面内只能有10颗子弹同时出现。
    // 如果界面内不够10颗子弹,按下"k"键后战机应该发射出一颗子弹,
    // 于是,依次遍历10颗子弹,当遇到第一颗失效的子弹后,
    // 立即将该子弹赋予新的坐标(战机的炮口,也就是(position[5].X,position[5].Y - 1)),
    // 让其激活。然后退出for循环,函数执行完毕。
    void Game::Shoot()
    {
        for (int i = 0; i < 10; i++)
        { 
            if (bullet[i].Y == 30)
            {
                bullet[i].X = position[5].X;
                bullet[i].Y = position[5].Y - 1;
                break;
            }
        }
    }
    void Game::drawThisBulletToNull(COORD c)
    {
        SetPos(c.X,c.Y);
        cout << " ";
    }
    // 此成员函数用来响应一次子弹的运动
    // 每次子弹运动,屏幕子弹的坐标都会出现变化,即
    // 先判断子弹是否有效(即判断语句if (bullet[i].Y != 30)),
    // 若子弹有效,将该子弹的Y坐标减少1,X坐标不变,
    // 检测子弹坐标更改之后是否达到上边界,如果达到上边界,则将该子弹从屏幕上擦除,
    // 同时,将该子弹置为失效状态,即 bullet[i].Y = 30。
    void Game::bulletMove()
    {
        for (int i = 0; i < 10; i++)
        {
            if (bullet[i].Y != 30)
            {
                bullet[i].Y -= 1;
                if (bullet[i].Y == 1)
                {
                    COORD pos = { bullet[i].X, bullet[i].Y + 1 };
                    drawThisBulletToNull(pos);
                    bullet[i].Y = 30;
                }
            }
        }
    }
    //击败的障碍物清空
    void Game::drawThisEnemyToNull(Frame f)
    {
        drawFrame(f, ' ', ' ');
    }
     
    // 该成员函数依次遍历每一架障碍物障碍物,
    // 将每一架障碍物依次与每一颗子弹进行检测,
    // 判断障碍物是否与子弹有接触,如果有接触,则表示击中障碍物,
    // 此时将障碍物和子弹擦除,然后在界面顶部的位置处随机生成一架障碍物
    void Game::judgeEnemy()
    {
        for (int i = 0; i < 8; i++)
        {
            for (int j = 0; j < 10; j++)
            {
                if (judgeCoordInFrame(enemy[i], bullet[j]))
                {
                    score += 5;
                    drawThisEnemyToNull(enemy[i]);
                    COORD a = { 1, 1 };
                    COORD b = { 45, 3 };
                    enemy[i].position[0] = random(a, b);
                    enemy[i].position[1].X = enemy[i].position[0].X + 3;
                    enemy[i].position[1].Y = enemy[i].position[0].Y + 2;
                    drawThisBulletToNull(bullet[j]);
                    bullet[j].Y = 30;
                }
            }
        }
    }
     
    // 该成员函数用来响应一次障碍物的移动
    // 界面上必须同时出现八架障碍物,因此,
    // 如果有某架障碍物运动到下边界处,则重置该障碍物的坐标
    void Game::enemyMove()
    {
        for (int i = 0; i < 8; i++)
        {
            for (int j = 0; j < 2; j++)
                enemy[i].position[j].Y++;
            // 我们将每架障碍物的左上角和右下角坐标的Y值增加1,
            // 表示该障碍物向下走了一个距离
            
            // 检测向下走一个距离后的障碍物的右下角坐标的Y值是否达到24,
            // 如果达到,代表障碍物已经运动到下边界了,
            // 此时需要随机重置该障碍物的坐标
            if (enemy[i].position[1].Y==24)
            {
                COORD a = { 1, 1 };
                COORD b = { 45, 3 };
                enemy[i].position[0] = random(a, b);
                enemy[i].position[1].X = enemy[i].position[0].X + 3;
                enemy[i].position[1].Y = enemy[i].position[0].Y + 2;
            }
        }
    }
    void Game::printScore()
    {
        if (score <= 100)
        {
            flag_rank = 1;
        }
        else if (score > 100 && score <= 320)
        {
            flag_rank = 2;
        }
        else if (score > 320 && score <= 440)
        {
            flag_rank = 3;
        }
        else if (score > 440)
        {
            flag_rank = 4;
        }
        SetPos(60, 6);
        cout << score;
        SetPos(60, 7);
        if (flag_rank == 1)
        {
            title = "初级飞行员";
        }
        else if (flag_rank == 2)
        {
            title = "中级飞行员";
        }
        else if (flag_rank == 3)
        {
            title = "高级飞行员";
        }
        else if (flag_rank == 4)
        {
            title = "王牌飞行员";
        }
        cout << title;
    }
    // 这个成员函数是游戏的主循环函数,
    // 定义了整个游戏过程。
    void Game::Playing()
    {
        drawEnemy();
        drawPlane();
     
        int flag_bullet = 0;
        int flag_enemy = 0;
     
        while (true)
        {
            Sleep(20);
            // 函数名:kbhit()(VC++6.0下为_kbhit())
            // 功能及返回值: 检查当前是否有键盘输入,若有则返回一个非0值,否则返回0
            // 用法:int kbhit(void);
            // 包含头文件: include <conio.h>
            // kbhit()在执行时,检测是否有按键按下,有按下返回非0值,没有按下则返回0,是非阻塞函数;
            // 不同于getch()的在执行时, 检测按下什么键, 如果不按键该函数不返回,也就不进行下一步操作,是阻塞函数。
            if (_kbhit())
            {
                char x = _getch();
                // getch()是编程中所用的函数,这个函数是一个不回显函数,
                // 当用户按下某个字符时,函数自动读取,无需按回车
                // getch()并非标准C中的函数,不存在C语言中。
                // 所在头文件是conio.h,而不是stdio.h。
                // 用ch = getch(); 会等待你按下任意键之后,把该键字符所对应的ASCII码赋给ch, 再执行下面的语句。
                if (75 == x || 80 == x || 77 == x || 72 == x)
                {
                    drawPlaneToNull();     // 将战机先擦除
                    planeMove(x);          // 根据所输入的操作符,对战机的坐标进行更改
                    drawPlane();           // 访问类中的数据成员——战机的坐标,在新的坐标处重新绘制战机
     
                    judgePlane();          // 判断战机是否有坠毁
                }
                //  在某一循环当中,如果检测到有'p'键按下,
                // 首先在右侧游戏界面输出"暂停中...",然后陷入while()循环一直等待'p'键再次按下,
                // 如果'p'键没有按下,就一直处在while()循环内,因此不能执行后面的程序,起到暂停的效果。
                else if ('p' == x)
                {
                    Pause();
                }
                // 如果是检测到空格键按下,则运行Shoot()函数,
                else if (32 == x)
                {
                    Shoot();
                }
                // 如果是检测到'k'键按下,则运行GameOver()函数,
                // GameOver()函数执行完毕后,执行break;语句跳出while循环(注意不是if (_kbhit()))。
                // break语句用于结束最近的while、do while、for或switch语句,并将程序的执行权传递给紧接在
                // 被终止语句之后的语句。
                else if ('e' == x)
                {
                    //CloseHandle(MFUN)
                    GameOver();
                    break;
                }
            }
            // 接下来处理子弹
            // 判断子弹状态的程序一直在运行
            if (flag_bullet == 0)
            {
                bulletMove();           // 更新界面上有效子弹的坐标
                drawBulletToNull();     // 将处于旧坐标的子弹擦除
                drawBullet();           // 绘制出新坐标上的子弹
                judgeEnemy();          // 判断障碍物是否被子弹击中
            }
            flag_bullet++;
            if (flag_bullet==1)
            {
                flag_bullet = 0;
            }
            //  接下来处理障碍物
            if (flag_enemy==0)
            {
                drawEnemyToNull();     // 将所有的障碍物都擦除
                enemyMove();           //  更新障碍物的坐标
                drawEnemy();           // 绘制出处于新坐标上的障碍物
                judgePlane();          // 判断障碍物是否与战机接触
            }
            flag_enemy++;
            if (flag_enemy >= rank)
            {
                flag_enemy = 0;
            }
            /* 输出得分 */
     
            printScore();
        }
    }
     
    int main()
    {
        cout<<"\t\t****飞机大战游戏正在准备****\n";
    	cout<<"\n已加载 0%";//7
    	for(int i=0;i<9;i++){
    		SetPos((i+1)*2-1,1); cout<<"■ ";
    		SetPos(7-1,3-1);cout<<i+1;
    		Sleep(200);
    	}
    	Sleep(200);
    	SetPos(19,1);cout<<"■ \n已加载100%";
    	Sleep(200);
    	system("cls");
        srand((unsigned int)time(NULL));//随机时间种子
        HideCursor();//隐藏光标
        Game game;
        HideCursor();
        int a=drawMenu();
        if (a == 2)
        {
            game.rank = 20;
        }
        system("cls");
        HideCursor();
        drawPlaying();
        HideCursor();
        game.Playing();
     
    }
    

    计时器

    #include <bits/stdc++.h>
    #include <windows.h>
    #include <conio.h>
    using namespace std;
    int main()
    {
    	int jc = 0;
    	system("color F0");
    	double time = 0;
    	int min = 0, h = 0;
    	double hi[100], mini[100], timei[100]; 
    	while (1)
    	{
    		system("cls");
    		cout << "            秒表\n已计时"<< h << "小时" << min << "分" << time << "秒\n" << "按下空格键暂停,按下↑清零所有,按下↓计次, 按下←清零计次。\n\n\n计次(上限15次)\n";
    		time += 0.1;
    		for (int i = 1; i <= jc; i++)
    		{
    			cout  << hi[i] << "小时" << mini[i] << "分" << timei[i] << "秒\n" << endl; 
    		}
    		if (time >= 60)
    		{
    			min++;
    			time = 0;
    		}
    		if (min >= 60)
    		{
    			h++;
    			min = 0; 
    		}
    		if (_kbhit())
    		{
    			char x = _getch();
    			if (' ' == x)
                {
                    char c = _getch();
      	  			while (c != ' ')
        			{
            			c = _getch();
        			}
                }
                else if(72 == x)
    			{
    				time = 0, min = 0, h = 0, jc = 0;
    				memset(hi, 0, sizeof(hi));
    				memset(mini, 0, sizeof(mini));
    				memset(timei, 0, sizeof(timei));
    			} 
    			else if(80 == x)
    			{
    				if (jc <= 15)
    				{
    					hi[++jc] = h,mini[jc] = min,timei[jc] = time;	
    				}
    			}
    			else if (x == 75)
    			{
    				jc = 0;
    				memset(hi, 0, sizeof(hi));
    				memset(mini, 0, sizeof(mini));
    				memset(timei, 0, sizeof(timei));
    			} 
    		} 
    		Sleep (45);
    	}
    	return 0;
    }
    

    密室逃脱

    #include<bits/stdc++.h>
    #include<windows.h>
    #include<conio.h>
    using namespace std;
    int m,n,step,shortest,wave;
    int px,py,sx,sy,ex,ey,foggy;
    char go,again='Y',rule;
    bool ans;
    int mat[1000][1000],path[1000][1000],dir[5][5]={{-1,0},{1,0},{0,-1},{0,1}};
    struct coor{
    	int x,y;
    };
    queue<coor> arrive;
    void colorful(int word,string content){
    	int back=0;
    	WORD change=((back&0x0F)<<4)+(word&0x0F);
    	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),change);
    	cout<<content;
    	change=((back&0x0F)<<4)+(15&0x0F);
    	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),change);
    } 
    void all_print(){
    	for(int i=1;i<=m;i++){
    		for(int j=1;j<=n;j++){
    			if(i==px&&j==py){
    				colorful(12,"@");
    			}
    			else if(i==ex&&j==ey){
    				colorful(14,"$");
    			}
    			else if(mat[i][j]==0){
    				colorful(3,"#");
    			}
    			else if(mat[i][j]==1||mat[i][j]==2){
    				cout<<" ";
    			}
    		}
    		cout<<endl;
    	}
    }
    void foggy_print(){
    	for(int i=1;i<=m;i++){
    		for(int j=1;j<=n;j++){
    			if(i>=px-foggy&&i<=px+foggy&&j>=py-foggy&&j<=py+foggy){
    				if(i==px&&j==py){
    					colorful(12,"@");
    				}
    				else if(i==ex&&j==ey){
    					colorful(14,"$");
    				}
    				else if(mat[i][j]==0){
    					colorful(3,"#");
    				}
    				else if(mat[i][j]==1||mat[i][j]==2){
    					cout<<" ";
    				}
    			}
    			else{
    				cout<<" ";
    			}
    		}
    		cout<<endl;
    	}
    }
    void all_answer_print(){
    	for(int i=1;i<=m;i++){
    		for(int j=1;j<=n;j++){
    			if(i==px&&j==py){
    				colorful(12,"@");
    			}
    			else if(i==ex&&j==ey){
    				colorful(14,"$");
    			}
    			else if(mat[i][j]==0){
    				colorful(3,"#");
    			}
    			else if(mat[i][j]==1){
    				cout<<" ";
    			}
    			else if(mat[i][j]==2){
    				colorful(14,"+");
    			}
    		}
    		cout<<endl;
    	}
    }
    void foggy_answer_print(){
    	for(int i=1;i<=m;i++){
    		for(int j=1;j<=n;j++){
    			if(i>=px-foggy&&i<=px+foggy&&j>=py-foggy&&j<=py+foggy){
    				if(i==px&&j==py){
    					colorful(12,"@");
    				}
    				else if(i==ex&&j==ey){
    					colorful(14,"$");
    				}
    				else if(mat[i][j]==0){
    					colorful(3,"#");
    				}
    				else if(mat[i][j]==1){
    					cout<<" ";
    				}
    				else if(mat[i][j]==2){
    					colorful(14,"+");
    				}
    			}
    			else{
    				cout<<" ";
    			}
    		}
    		cout<<endl;
    	}
    }
    int escape(){
    	arrive.push((coor){px,py});
    	path[px][py]=0;
    	while(!arrive.empty()){
    		coor now=arrive.front();
    		arrive.pop();
    		for(int i=0;i<4;i++){
    			int tx=now.x+dir[i][0],ty=now.y+dir[i][1];
    			if(tx==1||tx==m||ty==1||ty==m){
    				continue;
    			}
    			if(mat[tx][ty]==0){
    				continue;
    			}
    			if(path[tx][ty]!=-1){
    				continue;
    			}
    			arrive.push((coor){tx,ty});
    			path[tx][ty]=path[now.x][now.y]+1;
    		}
    	}
    	return path[ex][ey];
    }
    void home(){
    	SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),(COORD){0,0});
    }
    void make(int x,int y){
    	if(x==1||x==m||y==1||y==n){
    		return ;
    	}
    	if(mat[x][y]==1){
    		return ;
    	}
    	if(mat[x-1][y]+mat[x+1][y]+mat[x][y-1]+mat[x][y+1]>1){
    		return ;
    	}
    	mat[x][y]=1;
    	home();
    	all_print();
    	printf("loading...");
    	random_shuffle(dir,dir+4);
    	for(int i=0;i<4;i++){
    		make(x+dir[i][0],y+dir[i][1]);
    	}
    }
    bool blocked(int x,int y){
    	if(mat[x-1][y]+mat[x+1][y]+mat[x][y-1]+mat[x][y+1]==0){
    		return true;
    	}
    	else{
    		return false;
    	}
    }
    int main(){
    	srand(time(0));
    	while(again=='Y'){
    		system("cls");
    		wave++;
    		px=0;
    		py=0;
    		ex=0;
    		ey=0;
    		colorful(15,"~");
    		printf("~~~~~~~~~~~~~~~~~~~~~~~欢迎来到密室逃脱~~~~~~~~~~~~~~~~~~~~~~~~\n");
    		printf("请问密室的范围是多少(m*n): ");
    		scanf("%d*%d",&m,&n);
    		Sleep(500);
    		printf("在密室中存在迷雾,请问迷雾范围直径为多少(无迷雾为'0'): ");
    		scanf("%d",&foggy);
    		foggy/=2; 
    		Sleep(500);
    		if(wave==1){
    			printf("\n在开始逃脱之前,有一些规则:");
    			Sleep(500);
    			printf("\n    1.你是'");
    			colorful(12,"@");
    			printf("',出口是'");
    			colorful(14,"$");
    			printf("',墙是'");
    			colorful(3,"#");
    			printf("',路是' '。");
    			Sleep(500);
    			printf("\n    2.只能走路,不能穿墙,到达出口就算胜利。");
    			Sleep(500);
    			printf("\n    3.在密室中,通过'↑','↓','←','→'键移动。");
    			Sleep(500);
    			printf("\n    4.在密室中,'R'键重新开始,'A'键显示最短逃脱路径。");
    			Sleep(6000);
    		}
    		else{
    			printf("\n是否查看规则('Y'/'N'): ");
    			cin>>rule;
    			if(rule=='Y'){
    				printf("\n密室逃脱规则:");
    				Sleep(500);
    				printf("\n    1.你是'");
    				colorful(12,"@");
    				printf("',出口是'");
    				colorful(14,"$");
    				printf("',墙是'");
    				colorful(3,"#");
    				printf("',路是' '。");
    				Sleep(500);
    				printf("\n    2.只能走路,不能穿墙,到达出口就算胜利。");
    				Sleep(500);
    				printf("\n    3.在密室中,通过'↑','↓','←','→'键移动。");
    				Sleep(500);
    				printf("\n    4.在密室中,'R'键重新开始,'A'键显示最短逃脱路径。");
    				Sleep(6000);
    			}
    			else{
    				Sleep(1000);
    			} 
    		}
    		system("cls");
    		printf("现在,开始逃脱!");
    		Sleep(500);
    		system("cls");
    		memset(mat,0,sizeof mat);
    		all_print();
    		make(m/2,n/2);
    		while((px==ex&&py==ey)||blocked(px,py)||blocked(ex,ey)||abs(px-ex)+abs(py-ey)<m/2+n/2){
    			px=rand()%(m-2)+2;
    			py=rand()%(n-2)+2;
    			ex=rand()%(m-2)+2;
    			ey=rand()%(n-2)+2;
    		}
    		mat[px][py]=1;
    		mat[ex][ey]=1;
    		sx=px,sy=py;
    		memset(path,-1,sizeof path);
    		dir[0][0]=-1;
    		dir[0][1]=0;
    		dir[1][0]=1;
    		dir[1][1]=0;
    		dir[2][0]=0;
    		dir[2][1]=-1;
    		dir[3][0]=0;
    		dir[3][1]=1;
    		shortest=escape();
    		system("cls");
    		all_print();
    		step=0;
    		while(1){
    			go=getch();
    			if(go==72&&mat[px-1][py]==1){
    				px--;
    				step++;
    			}
    			else if(go==80&&mat[px+1][py]==1){
    				px++;
    				step++;
    			}
    			else if(go==75&&mat[px][py-1]==1){
    				py--;
    				step++;
    			}
    			else if(go==77&&mat[px][py+1]==1){
    				py++;
    				step++;
    			}
    			else if(go=='R'){
    				cout<<"重新开始!";
    				Sleep(1000);
    				system("cls");
    				px=sx,py=sy;
    				step=0;
    			} 
    			else if(go=='A'){
    				answer();
    				
    			}
    			if(px==ex&&py==ey){
    				px=0;
    				py=0;
    				home();
    				all_print();
    				Sleep(1000);
    				printf("\n恭喜你,逃出了密室!\n");
    				printf("最少用%d步,你用了%d步!",shortest,step);
    				Sleep(1000);
    				break;
    			}
    			home();
    			if(foggy==0){
    				all_print();
    			}
    			else{
    				foggy_print();
    			}
    		}
    		printf("\n\n是否继续逃脱('Y'/'N'): ");
    		cin>>again;
    	}
    	system("cls");
    	printf("你总共逃脱了%d次!",wave);
    	Sleep(5000);
    	return 0;
    }
    

    三体星战

    #include<bits/stdc++.h>
    #include<windows.h>
    #include<conio.h>
    using namespace std;
    int toint(double a){return ((int)(a*10+5))/10;}
    int rand(int a){return rand()%a;}
    void SlowDisplay(int x,char *p){while(1){if(*p!=0) printf("%c",*p++);else break;Sleep(x);}}
    void Setpos(double x,double y){COORD pos;pos.X=toint(y*2),pos.Y=toint(x);SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);}
    void Color(int a){
        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_RED|FOREGROUND_GREEN);
        if(a==-3) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
    
        if(a==0) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);
        if(a==1) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_RED);
        if(a==2) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY|BACKGROUND_RED);
        if(a==3) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY|BACKGROUND_RED|BACKGROUND_GREEN);
        if(a==4) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY|BACKGROUND_RED|BACKGROUND_GREEN|BACKGROUND_BLUE);
    
        if(a==5) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_RED|BACKGROUND_BLUE);
        if(a==6) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_BLUE);
    }   
    struct node{int what;double x,y,vx,vy,r,m;bool life;int gun,master=-1;}Sun[1000001];
    int b,T,m[41][41],n[41][41],m2[41][41],n2[41][41],dif[11],Speed=10,Ba,Hotguntime,Hotguntimemax=10,Blood,Score;
    double Speedmax,Speedless,Speedmore=1,Balljump=-0.7,Fire=0.08;
    void Push(int a,int b){
        if(Sun[a].master==b||Sun[b].master==a) return;
        if(Sun[a].life==0||Sun[b].life==0) return;
        if(Sun[a].what==3||Sun[b].what==3) return;
        if(Sun[a].what==4||Sun[b].what==4) return;
        double Ax=Sun[a].x-Sun[b].x,Ay=Sun[a].y-Sun[b].y,Dis=sqrt(Ax*Ax+Ay*Ay)*1.0,fDis=sqrt((Sun[a].vx-Sun[b].vx)*(Sun[a].vx-Sun[b].vx)+(Sun[a].vy-Sun[b].vy)*(Sun[a].vy-Sun[b].vy));
        if(Dis==0) return;if(abs(Ay)<=0.0001) Ay=0.0001;
        if(Sun[a].what==2||Sun[b].what==2) int c;
        else if(Dis<=Sun[a].r+Sun[b].r+fDis){
            double Vx=(Sun[a].vx+Sun[b].vx)/2.0,Vy=(Sun[a].vy+Sun[b].vy)/2.0,aX=(Sun[a].x+Sun[b].x+Sun[a].vx+Sun[b].vx)/2.0,aY=(Sun[a].y+Sun[b].y+Sun[a].vy+Sun[b].vy)/2.0;
            Sun[a].vx=Sun[b].vx=Vx,Sun[a].vy=Sun[b].vy=Vy;Sun[a].x=aX-(Ax/Dis)/2.0,Sun[b].x=aX+(Ax/Dis)/2.0;Sun[a].y=aY-(Ay/Dis)/2.0,Sun[b].y=aY+(Ay/Dis)/2.0;
            return;
        }
        double ac=Sun[a].m*Sun[b].m/(Dis*Dis)*1.0,afx=0,afy=0,d=abs(Ax/Ay*1.0);
        afy=sqrt(ac/(1+d*d))*1.0,afx=sqrt(ac/(1+d*d))*d*1.0;
        if(Ax>0) afx*=-1;if(Ay>0) afy*=-1;
    #define A Sun[a].vx+=afx/Sun[a].m*Speedless,Sun[a].vx=max(-Speedmax,min(Speedmax,Sun[a].vx)),Sun[a].vy+=afy/Sun[a].m*Speedless,Sun[a].vy=max(-Speedmax,min(Speedmax,Sun[a].vy))
    #define B Sun[b].vx-=afx/Sun[b].m*Speedless,Sun[b].vx=max(-Speedmax,min(Speedmax,Sun[b].vx)),Sun[b].vy-=afy/Sun[b].m*Speedless,Sun[b].vy=max(-Speedmax,min(Speedmax,Sun[b].vy))
        Speedmax=0.1,Speedless=0.01; 
        if(Sun[a].what==2&&Sun[b].what==2) Speedmax=3.0;
        if(Sun[a].what==0) {Speedless=0.008;Speedmax=1.0; A;}
        else if(Sun[a].what==1) {A; if(Sun[b].what==1) B;}
        else if(Sun[a].what==2) {Speedless=0.8;B;if(Sun[b].what==2) A;}
        else {A;B;}
    }
    int Painting[41][41]={{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,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,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,1,0,0,0,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,0,0,0,0,0,0,0,0,1,0,0,0,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,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,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,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,0,1,1,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,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,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,1,0,1,0,1,0,1,0,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,1,0,0,1,1,0,0,1,0,0,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,1,0,0,1,1,1,0,0,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,1,0,0,0,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,0,0,1,0,0,0,1,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,1,1,0,0,0,0,0,0,0,0,1,0,0,0,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,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,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,5,9,9,9,9,9,9,9,9,9,9,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,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,0,0,0,0,0,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,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,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,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,0,0,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,0,0,0,0,1,0,0,0,0,0,1,1,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,0,1,0,0,0,0,0},{0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,1,0,1,0,0,0,0,0,0},{0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0},{0,0,0,0,0,1,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,0,1,0,0,0,0,0},{0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,2,9,9,9,9,9,9,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,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,3,9,9,9,9,9,9,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,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,9,9,9,9,9,9,9,9,9,9,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,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},};
    void Paint(int a);
    void Move(int a){
        Blood=10000000;
        memset(m,0,sizeof(m));
        memset(m2,0,sizeof(m2));
        #define ix toint(Sun[i].x/1.0)
        #define iy toint(Sun[i].y/1.0)
        #define jx toint(Sun[j].x/1.0)
        #define jy toint(Sun[j].y/1.0)
        if(Sun[0].life==1){
        Sun[0].x+=Sun[0].vx/Speedmore;Sun[0].y+=Sun[0].vy/Speedmore;
        if(Sun[0].x>40) Sun[0].x=40,Sun[0].vx=0;if(Sun[0].x<0) Sun[0].x=0,Sun[0].vx=0;if(Sun[0].y>40) Sun[0].y=40,Sun[0].vy=0;if(Sun[0].y<0) Sun[0].y=0,Sun[0].vy=0;}
    
        for(int i=0;i<=b;i++) for(int j=i+1;j<=b;j++) Push(i,j);
        for(int i=0;i<=b;i++) for(int j=0;j<=b;j++)
        {
            if(i==j||Sun[i].life==0||Sun[j].life==0) continue;
        if(Sun[i].what==4&&(Sun[j].what>=100&&Sun[j].what<200)) {if(abs(ix-jx)<1&&abs(iy-jy)<1) Ba--,Sun[i].life=Sun[j].life=0,Score+=10;}
    
            if(Sun[i].what==203&&Sun[i].master!=j&&Sun[j].what<200) if(abs(ix-jx)<2&&abs(iy-jy)<2) Sun[j].vx-=Sun[i].vx/10.0,Sun[j].vy-=Sun[i].vy/10.0,Sun[i].life=0;
            if(Sun[i].what==204&&Sun[i].master!=j&&Sun[j].what<200) if(abs(ix-jx)<2&&abs(iy-jy)<2) Sun[j].vx+=Sun[i].vx/10.0,Sun[j].vy+=Sun[i].vy/10.0,Sun[i].life=0;
    
        }
        int i=0;
        if(m[ix][iy]>0&&m[ix][iy]<100)
        {
            if(m[ix][iy]<=1) Blood-=1;
            else if(m[ix][iy]<=4) Blood-=2;
            else if(m[ix][iy]<=10) Blood-=3;
            else if(m[ix][iy]>10&&m[ix][iy]<100) Blood-=4;
        }
        for(int i=1;i<=b;i++){
            if(Sun[i].life==0) continue;
            Sun[i].x+=Sun[i].vx/Speedmore;Sun[i].y+=Sun[i].vy/Speedmore;
            Balljump=-0.7;
            if(Sun[i].what==3) Balljump=-1;
            if(Sun[i].what==4) Balljump=-1;
            if(Sun[i].x>40) Sun[i].x=40,Sun[i].vx*=Balljump;
            if(Sun[i].x<0) Sun[i].x=0,Sun[i].vx*=Balljump;if(Sun[i].y>40) Sun[i].y=40,Sun[i].vy*=Balljump;if(Sun[i].y<0) Sun[i].y=0,Sun[i].vy*=Balljump;
            if(Sun[i].what==1) {m[ix][iy]+=2;int R;R=rand(3);if(R==0&&ix<40) m[ix+1][iy]++;R=rand(3);if(R==0&&ix>0) m[ix-1][iy]++;R=rand(3);if(R==0&&iy<40) m[ix][iy+1]++;R=rand(3);if(R==0&&iy>0) m[ix][iy-1]++;}
            if(Sun[i].what==2) {m[ix][iy]+=2;if(ix<40) m[ix+1][iy]+=10;if(ix>0) m[ix-1][iy]+=10;if(iy<40) m[ix][iy+1]+=10;if(iy>0) m[ix][iy-1]+=10;if(ix<40&&iy<40) m[ix+1][iy+1]+=4;if(ix<40&&iy>0) m[ix+1][iy-1]+=4;if(ix>0&&iy<40) m[ix-1][iy+1]+=4;if(ix>0&&iy>0) m[ix-1][iy-1]+=4;m[ix][iy]=10086;} 
            if(Sun[i].what==3) {if(abs(ix-Sun[0].x)<1&&abs(iy-Sun[0].y)<1) Ba--,Sun[i].life=0;else m2[ix][iy]=2;}
            if(Sun[i].what==4) {m2[ix][iy]=2;}
            if(Sun[i].what>=100&&Sun[i].what<300)
            {
                if(Sun[i].x==0||Sun[i].y==0||Sun[i].x==40||Sun[i].y==40||(abs(Sun[i].vx)<=0.5&&abs(Sun[i].vy)<=0.5)) Sun[i].life=0;
                if(Sun[i].what==203||Sun[i].what==204) {m[ix][iy]=Sun[i].what;if(ix<40) m[ix+1][iy]=Sun[i].what;if(ix>0) m[ix-1][iy]=Sun[i].what;if(iy<40) m[ix][iy+1]=Sun[i].what;if(iy>0) m[ix][iy-1]=Sun[i].what;}
                else m2[ix][iy]=Sun[i].what;
            } 
        }
        if(Sun[0].life==1) m2[toint(Sun[0].x/1.0)][toint(Sun[0].y/1.0)]=1;
        Paint(a);
    }
    void Paint(int a){
    for(int i=0;i<=40;i++) for(int j=0;j<=40;j++){
        if(a==0&&Painting[i][j]!=0) continue;
    
        if(m2[i][j]!=n2[i][j]){n2[i][j]=m2[i][j];n[i][j]=0;Setpos(i,j);
        if(m2[i][j]==0) Color(0),cout<<"  ";
        else if(m2[i][j]==1) Color(-1),cout<<"●";
        else if(m2[i][j]==2) Color(-3),cout<<"◎";
        else if(m2[i][j]==101) Color(-1),cout<<"☉";
        else if(m2[i][j]==102) Color(3),cout<<"  ";
        continue;}
        if(m[i][j]!=n[i][j]){n[i][j]=m[i][j];n2[i][j]=0;Setpos(i,j);
        if(m[i][j]>=10086) Color(4),cout<<"●";
        else if(m[i][j]==203) Color(5),cout<<"  ";
        else if(m[i][j]==204) Color(6),cout<<"  ";
        else if(m[i][j]==0) Color(0),cout<<"  ";else if(m[i][j]<=1) Color(1),cout<<"  ";else if(m[i][j]<=4) Color(2),cout<<"  ";else if(m[i][j]<=10) Color(3),cout<<"  ";else if(m[i][j]>10&&m[i][j]<100) Color(4),cout<<"  ";
        else Color(0),cout<<"?!";}Color(0);
        }
    }
    void RandStart(int a) {for(int i=1;i<=a;i++) {b++;Sun[b].x=rand(41),Sun[b].y=rand(41);Sun[b].vx=(rand(41)-20)/10.0,Sun[b].vy=(rand(41)-20)/10.0,Sun[b].m=1,Sun[b].r=1,Sun[b].life=1,Sun[b].what=1;}}
    void CornerStart(int a) {for(int i=1;i<=a;i++) {b++;int k=rand(4);if(k==0||k==2) Sun[b].x=rand(41);else Sun[b].y=rand(41);if(k==0) Sun[b].y=0;if(k==1) Sun[b].x=0;if(k==2) Sun[b].y=40;if(k==3) Sun[b].x=40;Sun[b].vx=(rand(41)-20)/10.0,Sun[b].vy=(rand(41)-20)/10.0,Sun[b].m=1,Sun[b].r=1,Sun[b].life=1,Sun[b].what=1;}}
    void SunStart(int x,int y,int r,int vx,int vy) {
    b++;Sun[b].x=x,Sun[b].y=y;Sun[b].vx=vx,Sun[b].vy=vy,Sun[b].m=1000,Sun[b].r=1,Sun[b].life=1,Sun[b].what=2;
    for(int i=x-r;i<=x+r;i++) for(int j=y-r;j<=y+r;j++){b++;Sun[b].x=i,Sun[b].y=j;Sun[b].vx=(rand(41)-20)/100.0+vx,Sun[b].vy=(rand(41)-20)/100.0+vy,Sun[b].m=1,Sun[b].r=1,Sun[b].life=1,Sun[b].what=1;}
    for(float i=(int)(x-r/2)-0.5;i<=(int)(x+r/2)+0.5;i++) for(float j=(int)(y-r/2)-0.5;j<=(int)(y+r/2)+0.5;j++){b++;Sun[b].x=i,Sun[b].y=j;Sun[b].vx=(rand(41)-20)/100.0+vx,Sun[b].vy=(rand(41)-20)/100.0+vy,Sun[b].m=1,Sun[b].r=1,Sun[b].life=1,Sun[b].what=1;}
    }
    void Shoot(int a,bool q)
    {
        double Sunavx=Sun[a].vx,Sunavy=Sun[a].vy;
        if(Sun[a].vx==0&&Sun[a].vy==0) Sunavx=-1;if(Sun[a].vy==0) Sunavy=0.001;
        if(Sun[a].gun>=1&&Sun[a].gun<=4)
        {
            b++;Sun[b].x=Sun[a].x,Sun[b].y=Sun[a].y;double ac;
            if(Sun[a].gun==1) ac=3.0; 
            if(Sun[a].gun>=2&&Sun[a].gun<=4) ac=7.0;
            double d=abs(Sunavx/Sunavy*1.0);Sun[b].vy=sqrt(ac/(1+d*d))*1.0,Sun[b].vx=sqrt(ac/(1+d*d))*d*1.0;
            if(Sunavx>0) Sun[b].vx*=-1;if(Sunavy>0) Sun[b].vy*=-1;if(q==1) Sun[b].vx*=-1,Sun[b].vy*=-1;Sun[b].life=1;
            Sun[b].master=a;
            int bb=b;
            if(Sun[a].gun==1||Sun[a].gun==2) Sun[b].what=100+Sun[a].gun,Sun[b].m=1;
            if(Sun[a].gun==3||Sun[a].gun==4) Sun[b].what=200+Sun[a].gun,Sun[b].m=1;
            if(Sun[a].gun>=2&&Sun[a].gun<=4){
        double kx=Sun[bb].x,ky=Sun[bb].y;
        for(int j=1;j<=7;j++)
        {
        kx-=Sun[bb].vx/3.5,ky-=Sun[bb].vy/3.5;
        if(kx<0||ky<0||kx>40||ky>40) continue;
        b++,Sun[b].x=kx,Sun[b].y=ky,Sun[b].vx=Sun[bb].vx,Sun[b].vy=Sun[bb].vy,Sun[b].what=Sun[bb].what,Sun[b].master=a,Sun[b].life=1;
        }
            }
        }
    }
    void Start(){
        for(int i=0;i<=40;i++) for(int j=0;j<=40;j++){if(Painting[i][j]==1) Setpos(i,j),Color(-2),cout<<"■";if(Painting[i][j]==2) Setpos(i,j),Color(-2),cout<<" ";if(Painting[i][j]==3) Setpos(i,j),Color(-2),cout<<"按 y 开始游戏!";if(Painting[i][j]==4) Setpos(i,j),Color(-2),cout<<" ";if(Painting[i][j]==5) Setpos(i,j),Color(-2),cout<<" ";}
        for(int i=1;i<=3;i++) SunStart(rand(31)+5,rand(31)+5,5,(rand(101)-50)/10.0,(rand(101)-50)/10.0);
        T=0;
        while(1){
            T++;
            if(T%50==0) CornerStart(1);
            if(kbhit()){char g=_getch();if(g=='y') break; }
            Move(0);
            Sleep(Speed);
        }
        Color(0);system("cls");
        Setpos(10,10);SlowDisplay(30,"你想要教程吗?(y/n)");
        char g=_getch();if(g!='y') return;Setpos(10,10);SlowDisplay(30,"那我们开始。。。   ");Sleep(500);
        system("cls");
        Setpos(30,10);system("cls");
    
        memset(Sun,0,sizeof(Sun));memset(m,0,sizeof(m));memset(m2,0,sizeof(m2));
        Sun[0].x=Sun[0].y=20;Sun[0].life=1;Sun[0].m=10;
        T=0;
        int step=0;
        while(1){
            T++;
            if(T==2)
            {
            Setpos(10,10),SlowDisplay(30,"这是你的飞船,你可以用↑↓←→键来操纵它。");Sleep(500);
            Setpos(12,10),SlowDisplay(30,"在宇宙航行没有阻力,也就是说你的惯性会主导一切。");Sleep(500);
            Setpos(14,10),SlowDisplay(30,"当你撞到边界时,你的速度会减为零。");Sleep(1000); 
            Setpos(16,10),SlowDisplay(30,"试试看。");
            }
            if(T==200)
            {
            Setpos(10,10),SlowDisplay(30,"在宇宙航行时有两个小技巧:                ");
            Setpos(12,10),SlowDisplay(30,"1、不要太快。                                   ");
            Setpos(14,10),SlowDisplay(30,"2、有时转向比调头更有用。         ");Sleep(1000);
            Setpos(16,10),SlowDisplay(30,"接下来我们稍稍提高点难度!请到达所有靶位点!");Sleep(500);
            b++;Sun[b].x=rand(40),Sun[b].y=rand(40);Sun[b].vx=(rand(101)-50)/30.0,Sun[b].vy=(rand(101)-50)/30.0,Sun[b].life=1,Sun[b].what=3;Ba++;
            Move(1);Sleep(1000); 
            }
            if(Ba>0) Setpos(1,1),cout<<"剩余靶位点:"<<Ba<<' ';
            if(step>=1) Setpos(5,1),cout<<"Cooling time: "<<Hotguntime<<"    ";
            if(T>200&&Ba==0&&step==0) T=201,step=1,Setpos(1,1),cout<<"           ";
            if(T>300&&Ba==0&&step==1) T=201,step=2,Setpos(1,1),cout<<"           ";
            if(T==202&&step==1)
            {
            Setpos(10,10),SlowDisplay(30,"做的好!看来是时候给你装备初始武器了。");
            Setpos(12,10),SlowDisplay(50,"。。。 星际电磁轨道炮 已装备。");
            Setpos(14,10),SlowDisplay(30,"按下w/s发射子弹!                         ");
            Sun[0].gun=1;Hotguntime=0;
            }
            if(T==300&&step==1)
            {
            Setpos(16,10),SlowDisplay(30,"来吧!请击毁所有靶位点!");Sleep(500);
            b++;Sun[b].x=rand(40),Sun[b].y=rand(40);Sun[b].vx=(rand(101)-50)/30.0,Sun[b].vy=(rand(101)-50)/30.0,Sun[b].life=1,Sun[b].what=4;Ba++;
            Move(1);Sleep(1000); Ba=1;
            }
            if(T==202&&step==2)
            {
            Setpos(10,10),SlowDisplay(30,"太阳什么的你也看到过了。               ");
            Setpos(12,10),SlowDisplay(30,"其旁缠绕着的火会扣你的血。      ");
            Setpos(14,10),SlowDisplay(30,"打靶位点可以积10分,发射子弹-1分,分数达到20通关,简单吧!");Sleep(1000); 
            Setpos(16,10),SlowDisplay(60,"让 我 们  开 始  吧!!!");Sleep(1000); 
            system("cls");return; 
            }
            double v=sqrt(Sun[0].vx*Sun[0].vx+Sun[0].vy*Sun[0].vy);
            if(GetAsyncKeyState(VK_UP)&0x8000) {if(Sun[0].vx>=0) Sun[0].vx-=2*Fire;else if(v<4) Sun[0].vx-=Fire;}
            else if(GetAsyncKeyState(VK_DOWN)&0x8000) {if(Sun[0].vx<=0) Sun[0].vx+=2*Fire;else if(v<4) Sun[0].vx+=Fire;}
            if(GetAsyncKeyState(VK_LEFT)&0x8000) {if(Sun[0].vy>=0) Sun[0].vy-=2*Fire;else if(v<4) Sun[0].vy-=Fire;}
            else if(GetAsyncKeyState(VK_RIGHT)&0x8000) {if(Sun[0].vy<=0) Sun[0].vy+=2*Fire;else if(v<4) Sun[0].vy+=Fire;}
    
            if(Hotguntime>0) Hotguntime--;
            if(kbhit()){
            char g=_getch();
            if(Hotguntime==0&&g=='s')
            {
                if(abs(Sun[0].vx)>=0.01) Sun[0].vx*=0.7;
                if(abs(Sun[0].vy)>=0.01) Sun[0].vy*=0.7;
                Shoot(0,0);
                Hotguntime=Hotguntimemax;
            }
            if(Hotguntime==0&&g=='w')
            {
                if(abs(Sun[0].vx)<=2) Sun[0].vx*=1.2;
                if(abs(Sun[0].vy)<=2) Sun[0].vy*=1.2;
                Shoot(0,1);
                Hotguntime=Hotguntimemax;
            }
            }
            Move(1);
            Sleep(Speed);
        }
    }
    int main()
    {
        system("mode con cols=82 lines=43");
        CONSOLE_CURSOR_INFO cursor_info={1,0};
        SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);
        srand((unsigned)time(NULL));
        Y:
        Start();
        memset(Sun,0,sizeof(Sun));memset(m,0,sizeof(m));memset(m2,0,sizeof(m2));
        YY:system("cls");
        Setpos(10,10),SlowDisplay(30,"选难度吧,几个太阳?(0~10,回车确定)");
        int i=10;while(dif[i]!=1&&i>=0){i--;}
        Setpos(12,10);
        if(i==-1) printf("推荐难度:0个太阳。");
        else if(i<10) printf("加油,推荐难度:%d个太阳。",i+1);
        else if(i==10) printf("你通关了!随便选吧!",i);
    
        Setpos(15,10);
        int p;cin>>p;
        if(p<0||p>10) {SlowDisplay(150,"输入错误!"),Sleep(1000);goto YY;}
        for(int i=1;i<=p;i++) SunStart(rand(31)+5,rand(31)+5,5,(rand(101)-50)/10.0,(rand(101)-50)/10.0);
        Sun[0].x=Sun[0].y=5;Sun[0].vx=0.1;Sun[0].life=1;Sun[0].m=10;
        T=0;
        Sun[0].gun=1;
        Blood=100;
        Score=0;Ba=0;
        for(int i=1;i<=10;i++) {b++;Sun[b].x=rand(40),Sun[b].y=rand(40);Sun[b].vx=(rand(101)-50)/30.0,Sun[b].vy=(rand(101)-50)/30.0,Sun[b].life=1,Sun[b].what=4;Ba++;}
        while(Blood>0&&Score<100){
            Setpos(1,1),cout<<"Blood: "<<Blood<<"    ";
            Setpos(3,1),cout<<"Score: "<<Score<<"    ";
            Setpos(5,1),cout<<"Cooling time: "<<Hotguntime<<"    ";
            T++;
            if(T==1) Sleep(1000);
            if(T%50==0) CornerStart(1);
            if(T%30==0&&Ba<5) {b++;Sun[b].x=rand(40),Sun[b].y=rand(40);Sun[b].vx=(rand(101)-50)/30.0,Sun[b].vy=(rand(101)-50)/30.0,Sun[b].life=1,Sun[b].what=4;Ba++;}
            if(T%40==0&&Blood<100) Blood++;
    
            double v=sqrt(Sun[0].vx*Sun[0].vx+Sun[0].vy*Sun[0].vy);
            if(GetAsyncKeyState(VK_UP)&0x8000) {if(Sun[0].vx>=0) Sun[0].vx-=2*Fire;else if(v<4) Sun[0].vx-=Fire;}
            else if(GetAsyncKeyState(VK_DOWN)&0x8000) {if(Sun[0].vx<=0) Sun[0].vx+=2*Fire;else if(v<4) Sun[0].vx+=Fire;}
            if(GetAsyncKeyState(VK_LEFT)&0x8000) {if(Sun[0].vy>=0) Sun[0].vy-=2*Fire;else if(v<4) Sun[0].vy-=Fire;}
            else if(GetAsyncKeyState(VK_RIGHT)&0x8000) {if(Sun[0].vy<=0) Sun[0].vy+=2*Fire;else if(v<4) Sun[0].vy+=Fire;}
    
            if(Hotguntime>0) Hotguntime--;
            if(kbhit()){
            char g=_getch();
            if(Hotguntime==0&&g=='s')
            {
                if(abs(Sun[0].vx)>=0.01) Sun[0].vx*=0.7;
                if(abs(Sun[0].vy)>=0.01) Sun[0].vy*=0.7;
                Shoot(0,0);
                Score=max(Score-1,0);
                Hotguntime=Hotguntimemax;
            }
            if(Hotguntime==0&&g=='w')
            {
                if(abs(Sun[0].vx)<=2) Sun[0].vx*=1.2;
                if(abs(Sun[0].vy)<=2) Sun[0].vy*=1.2;
                Shoot(0,1);
                Score=max(Score-1,0);
                Hotguntime=Hotguntimemax;
            }
            }Move(1);
            Sleep(Speed);
        }
        system("cls");
        if(Score<20) Setpos(10,10),SlowDisplay(150,"Sorry,你死了。"); 
        else Setpos(10,10),SlowDisplay(10,"赢了!快去挑战下一个难度吧!"),dif[p]=1; 
        Sleep(1000); 
        goto Y;
        return 0;
    }
    

    贪吃蛇

    #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    #include <ctime>
    #include <conio.h>
    #include <cmath>
    #include <windows.h>
    using namespace std;
     
    /*** 光标定位 ***/
    HANDLE hout=GetStdHandle(STD_OUTPUT_HANDLE);
    COORD coord;
     
    void locate(int x,int y)
    {
        coord.X=y;
        coord.Y=x;
        SetConsoleCursorPosition(hout,coord);
    };
     
    /*** 隐藏光标 ***/
    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;
     
    struct node
    {
        int x,y;
    }snake[1000];
     
    int snake_length,dir;
    node food;
    int direct[4][2]={{-1,0},{1,0},{0,-1},{0,1}};
     
    /*** 输出墙 ***/
    void print_wall()
    {
        cout << " ";
        for (int i=1;i<=n;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;i++)
            cout << "-";
    }
     
    /*** 首次输出蛇,其中snake[0]代表头 ***/
    void print_snake()
    {
        locate(snake[0].x,snake[0].y);
        cout << "@";
        for (int i=1;i<=snake_length-1;i++)
        {
            locate(snake[i].x,snake[i].y);
            cout << "*";
        }
    }
     
    /*** 判断是否撞墙或者自撞 ***/
    bool is_correct()
    {
        if (snake[0].x==0 || snake[0].y==0 || snake[0].x==m+1 || snake[0].y==n+1) return false;
        for (int i=1;i<=snake_length-1;i++)
        {
            if (snake[0].x==snake[i].x && snake[0].y==snake[i].y) return false;
        }
        return true;
    }
     
    /*** 随机生成并输出食物位置 ***/
    bool print_food()
    {
        srand((unsigned)time(0));
        bool e;
        while (1)
        {
            e=true;
            int i=(int) random(0,m)+1,j=(int) random(0,n)+1;
            food.x=i;food.y=j;
            for (int k=0;k<=snake_length-1;k++)
            {
                if (snake[k].x==food.x && snake[k].y==food.y)
                {
                    e=false;break;
                }
            }
            if (e) break;
        }
        locate(food.x,food.y);
        cout << "$";
        return true;
    }
     
    /*** 蛇的前进 ***/
    bool go_ahead()
    {
        node temp;
        bool e=false;
        temp=snake[snake_length-1];
        for (int i=snake_length-1;i>=1;i--)
            snake[i]=snake[i-1];
        snake[0].x+=direct[dir][0];
        snake[0].y+=direct[dir][1];
        locate(snake[1].x,snake[1].y);
        cout << "*";
        /*** 吃到了食物 ***/
        if (snake[0].x==food.x && snake[0].y==food.y)
        {
            snake_length++;
            e=true;
            snake[snake_length-1]=temp;
        }
        /*** 输出此时蛇状态 ***/
        if (!e)
        {
            locate(temp.x,temp.y);
            cout << " ";
        }
        else
            print_food();
        locate(snake[0].x,snake[0].y);
        cout << "@";
        /*** 如果自撞 ***/
        if (!is_correct())
        {
            system("cls");
            cout << "You lose!" << endl << "Length: " << snake_length << endl;
            return false;
        }
        return true;
    }
     
    /*** 主函数 ***/
    int main()
    {
        cout << "--------------------贪吃蛇---------------------" << endl;
        cout << "请注意窗口大小,以免发生错位.建议将窗口调为最大." << endl;
        cout << "先选择难度.请在1-10中输入1个数,1最简单,10则最难" << endl;
        cout << "然后进入游戏画面,以方向键控制方向.祝你游戏愉快!" << endl;
        cout << "-----------------------------------------------" << endl;
        m=25;
        n=40; 
        if (m<10 || n<10 || m>25 || n>40)
        {
            cout << "ERROR" << endl;
            system("pause");
            return 0;
        }
        int hard;
        cin >> hard;
        if (hard<=0 || hard>100)
        {
            cout << "ERROR" << endl;
            system("pause");
            return 0;
        }
        /*** 数据全部初始化,包括蛇长,位置,方向 ***/
        snake_length=5;
        clock_t a,b;
        char ch;
        double hard_len;
        for (int i=0;i<=4;i++)
        {
            snake[i].x=1;
            snake[i].y=5-i;
        }
        dir=3;
        /*** 输出初始地图,蛇与食物 ***/
        system("cls");
        hide();
        print_wall();
        print_food();
        print_snake();
        locate(m+2,0);
        cout << "Now length: ";
        /*** 开始游戏 ***/
        while (1)
        {
            /*** 难度随长度增加而提高 ***/
            hard_len=(double)snake_length/(double) (m*n);
            /*** 调节时间,单位是ms ***/
            a=clock();
            while (1)
            {
                b=clock();
                if (b-a>=(int)(400-30*hard)*(1-sqrt(hard_len))) break;
            }
            /*** 接受键盘输入的上下左右,并以此改变方向 ***/
            if (kbhit())
            {
                ch=getch();
                if (ch==-32)
                {
                    ch=getch();
                    switch(ch)
                    {
                    case 72:
                        if (dir==2 || dir==3)
                            dir=0;
                        break;
                    case 80:
                        if (dir==2 || dir==3)
                            dir=1;
                        break;
                    case 75:
                        if (dir==0 || dir==1)
                            dir=2;
                        break;
                    case 77:
                        if (dir==0 || dir==1)
                            dir=3;
                        break;
                    }
                }
            }
            /*** 前进 ***/
            if (!go_ahead()) break;
            /*** 在最后输出此时长度 ***/
            locate(m+2,12);
            cout << snake_length;
        }
        system("pause");
        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("正在游戏");
     
    }
    

    卡牌对决(半成品)

    #include<bits/stdc++.h>
    #include<windows.h>
    #include<conio.h>
    using namespace std;
    char ready='n';
    struct card{
    	string name,buff;
    	int attack,defense,agility;
    }cards[15];
    void generate(){
    	srand(time(0));
    	cout<<"\n以下是全部卡牌:\n";
    	string names[15]={"诺兹多姆","耐萨里奥","玛里苟斯","阿莱克斯塔萨","伊瑟拉",
    					  "克苏恩","尤格萨隆","亚煞极","恩佐斯","萨拉塔斯"};
    	for(int i=0;i<10;i++){
    		cards[i].name=names[i];
    		cards[i].buff="无";
    		cards[i].attack=(rand()%6+1)*1000;
    		cards[i].defense=(rand()%6+1)*1000;
    		cards[i].agility=(rand()%6+1)*1000;
    		cout<<"名称:"<<cards[i].name<<"  攻击力:"<<cards[i].attack<<"  防御力:"<<cards[i].defense<<"  敏捷度:"<<cards[i].agility<<"  buff:"<<cards[i].buff<<"\n";
    		Sleep(100);
    	}
    }
    int main(){
    	cout<<"~~~~~~~~~~~~~~~~~~~~欢迎来到卡牌对决~~~~~~~~~~~~~~~~~~~~";
    	Sleep(100);
    	cout<<"\n游戏规则如下:";
    	Sleep(100);
    	cout<<"\n    1.双方初始血量为50000,初始卡牌数量为3";
    	Sleep(100);
    	cout<<"\n    2.每回合双方各出一张卡牌,进行对决";
    	Sleep(100);
    	cout<<"\n    3.敏捷度高的卡牌率先发起攻击,\n      造成伤害为该卡牌攻击力减对方卡牌防御力,小于0则无伤害,\n      随后敌方卡牌发起攻击,造成伤害同理";
    	Sleep(100);
    	cout<<"\n    4.每回合后若一方血量等于零,游戏结束,否则双方随机抽取1张卡牌";
    	Sleep(100);
    	cout<<"\n    5.每回合后可能会触发魔法泉,对卡牌造成随机buff ";
    	Sleep(100);
    	cout<<"\n    6.buff分为两种,\n      光之祝愿可以使该卡牌下一回合前任意属性增加500,上限10000,\n      混沌诅咒可以使该卡牌下一回合前任意属性减少500,下限0";
    	Sleep(1000);
    	cout<<"\n空格键继续\n";
    	while(ready!=' '){
    		ready=getch();
    	}
    	generate();
    	return 0;
    }
    
  • 通过的题目

  • 最近活动

题目标签

初窥门径
86
略有小成
49
循环结构
35
分支结构
30
顺序结构
26
循环嵌套
24
驾轻就熟
22
字符串
21
模拟
17
一维数组
14
搜索
12
枚举
12
蓝桥杯
11
电子学会三级
10
月赛算法
6
电子学会一级
5
电子学会考级
5
月赛语法
5
while循环
4
二维数组
4