问题标题: 谁有除了贪吃蛇以外其他游戏的C++代码?

0
1

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()
{
    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 (0 == --times)
        {
            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);
    cout << "作者:李国良";
}

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);
    cout << "GAME OVER";
    gotoXY(hOut, 8, 9);
    cout << "空格键:重来";
    gotoXY(hOut, 8, 10);
    cout << "ESC键:退出";
    char key;
    while (true)
    {
        key = _getch();
        if (key == 32)
        {
            return;
        }
        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 = 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 = 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;
}

2
蒋智航
蒋智航
高级天翼
高级天翼
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <windows.h>
#include <conio.h>
#define KEY_UP    0xE048
#define KEY_DOWN  0xE050
#define KEY_LEFT  0xE04B
#define KEY_RIGHT 0xE04D
#define KEY_ESC   0x001B
#define KEY_1     '1'
#define KEY_2     '2'
#define KEY_3     '3'
#define GAME_MAX_WIDTH   100
#define GAME_MAX_HEIGHT  100
#define STR_GAMETITLE "ArrowKey:MoveCursor  1:打开  \
2:插旗子  3:OpenNeighbors"
#define STR_GAMEWIN   "Congratulations! You Win! Thank you for playing!\n"
#define STR_GAMEOVER  "Game Over, thank you for playing!\n"
#define STR_GAMEEND   "Presented by yzfy . Press ESC to exit\n"
class CConsoleWnd
{
    public:
        static int TextOut(const char*);
        static int GotoXY(int, int);
        static int CharOut(int, int, const int);
        static int TextOut(int, int, const char*);
        static int GetKey();
    public:
};

    int CConsoleWnd::GetKey()
    {
        int nkey=getch(),nk=0;
        if(nkey>=128||nkey==0)nk=getch();
        return nk>0?nkey*256+nk:nkey;
    }
    int CConsoleWnd::GotoXY(int x, int y)
    {
        COORD cd;
        cd.X = x;cd.Y = y;
        return SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),cd);
    }
    int CConsoleWnd::TextOut(const char* pstr)
    {
        for(;*pstr;++pstr)putchar(*pstr);
        return 0;
    }
    int CConsoleWnd::CharOut(int x, int y, const int pstr)
    {
        GotoXY(x, y);
        return putchar(pstr);
    }
    int CConsoleWnd::TextOut(int x, int y, const char* pstr)
    {
        GotoXY(x, y);
        return TextOut(pstr);
    }
class CSLGame:public CConsoleWnd
{
    private:
    private:
        int curX,curY;
        int poolWidth,poolHeight;
        int bm_gamepool[GAME_MAX_HEIGHT+2][GAME_MAX_WIDTH+2];
    public:
        CSLGame():curX(0),curY(0){poolWidth=poolHeight=0;}
        int InitPool(int, int, int);
        int MoveCursor(){return CConsoleWnd::GotoXY(curX, curY);}
        int DrawPool(int);
        int WaitMessage();
        int GetShowNum(int, int);
        int TryOpen(int, int);
    private:
        int DFSShowNum(int, int);
    private:
        const static int GMARK_BOOM;
        const static int GMARK_EMPTY;
        const static int GMARK_MARK;
};
const int CSLGame::GMARK_BOOM =  0x10;
const int CSLGame::GMARK_EMPTY=  0x100;
const int CSLGame::GMARK_MARK =  0x200;



    int CSLGame::InitPool(int Width, int Height, int nBoom)
    {
        poolWidth = Width; poolHeight = Height;
        if(nBoom<=0 || nBoom>=Width*Height
            || Width <=0 || Width >GAME_MAX_WIDTH
            || Height<=0 || Height>GAME_MAX_HEIGHT
        ){
            return 1;
        }
        for(int y=0; y<=Height+1; ++y)
        {
            for(int x=0; x<=Width+1; ++x)
            {
                bm_gamepool[y][x]=0;
            }
        }
        srand(time(NULL));
        while(nBoom)
        {
            int x = rand()%Width + 1, y = rand()%Height + 1;
            if(bm_gamepool[y][x]==0)
            {
                bm_gamepool[y][x] = GMARK_BOOM;
                --nBoom;
            }
        }
        curX = curY = 1;
        MoveCursor();
        return 0;
    }



    int CSLGame::DrawPool(int bDrawBoom = 0)
    {
        for(int y=1;y<=poolHeight;++y)
        {
            CConsoleWnd::GotoXY(1, y);
            for(int x=1;x<=poolWidth;++x)
            {
                if(bm_gamepool[y][x]==0)
                {
                    putchar('.');
                }
                else if(bm_gamepool[y][x]==GMARK_EMPTY)
                {
                    putchar(' ');
                }
                else if(bm_gamepool[y][x]>0 && bm_gamepool[y][x]<=8)
                {
                    putchar('0'+bm_gamepool[y][x]);
                }
                else if(bDrawBoom==0 && (bm_gamepool[y][x] & GMARK_MARK))
                {
                    putchar('#');
                }
                else if(bm_gamepool[y][x] & GMARK_BOOM)
                {
                    if(bDrawBoom)
                        putchar('*');
                    else
                        putchar('.');
                }
            }
        }
        return 0;
    }
    int CSLGame::GetShowNum(int x, int y)
    {
        int nCount = 0;
        for(int Y=-1;Y<=1;++Y)
            for(int X=-1;X<=1;++X)
        {
            if(bm_gamepool[y+Y][x+X] & GMARK_BOOM)++nCount;
        }
        return nCount;
    }
    int CSLGame::TryOpen(int x, int y)
    {
        int nRT = 0;
        if(bm_gamepool[y][x] & GMARK_BOOM)
        {
            nRT = EOF;
        }
        else
        {
            int nCount = GetShowNum(x,y);
            if(nCount==0)
            {
                DFSShowNum(x, y);
            }
            else bm_gamepool[y][x] = nCount;
        }
        return nRT;
    }
    int CSLGame::DFSShowNum(int x, int y)
    {
        if((0<x && x<=poolWidth) &&
            (0<y && y<=poolHeight) &&
            (bm_gamepool[y][x]==0))
        {
            int nCount = GetShowNum(x, y);
            if(nCount==0)
            {
                bm_gamepool[y][x] = GMARK_EMPTY;
                for(int Y=-1;Y<=1;++Y)
                    for(int X=-1;X<=1;++X)
                {
                    DFSShowNum(x+X,y+Y);
                }
            }
            else bm_gamepool[y][x] = nCount;
        }
        return 0;
    }
    int CSLGame::WaitMessage()
    {
        int nKey = CConsoleWnd::GetKey();
        int nRT = 0, nArrow = 0;
        switch (nKey)
        {
            case KEY_UP:
            {
                if(curY>1)--curY;
                nArrow=1;
            }break;
            case KEY_DOWN:
            {
                if(curY<poolHeight)++curY;
                nArrow=1;
            }break;
            case KEY_LEFT:
            {
                if(curX>1)--curX;
                nArrow=1;
            }break;
            case KEY_RIGHT:
            {
                if(curX<poolWidth)++curX;
                nArrow=1;
            }break;
            case KEY_1:
            {
                nRT = TryOpen(curX, curY);
            }break;
            case KEY_2:
            {
                if((bm_gamepool[curY][curX]
                    & ~(GMARK_MARK|GMARK_BOOM))==0)
                {
                    bm_gamepool[curY][curX] ^= GMARK_MARK;
                }
            }break;
            case KEY_3:
            {
                if(bm_gamepool[curY][curX] & 0xF)
                {
                    int nb = bm_gamepool[curY][curX] & 0xF;
                    for(int y=-1;y<=1;++y)
                        for(int x=-1;x<=1;++x)
                    {
                        if(bm_gamepool[curY+y][curX+x] & GMARK_MARK)
                            --nb;
                    }
                    if(nb==0)
                    {
                        for(int y=-1;y<=1;++y)
                            for(int x=-1;x<=1;++x)
                        {
                            if((bm_gamepool[curY+y][curX+x]
                                & (0xF|GMARK_MARK)) == 0)
                            {
                                nRT |= TryOpen(curX+x, curY+y);
                            }
                        }
                    }
                }
            }break;
            case KEY_ESC:
            {
                nRT = EOF;
            }break;
        }
        if(nKey == KEY_1 || nKey == KEY_3)
        {
            int y=1;
            for(;y<=poolHeight;++y)
            {
                int x=1;
                for(;x<=poolWidth; ++x)
                {
                    if(bm_gamepool[y][x]==0)break;
                }
                if(x<=poolWidth) break;
            }
            if(! (y<=poolHeight))
            {
                nRT = 1;
            }
        }
        if(nArrow==0)
        {
            DrawPool();
        }
        MoveCursor();
        return nRT;
    }
    int main(void)
    {
        int x=50, y=20, b=100,n; 
        CSLGame slGame;
        {
            CConsoleWnd::GotoXY(0,0);
            CConsoleWnd::TextOut(STR_GAMETITLE);
            slGame.InitPool(x,y,b);
            slGame.DrawPool();
            slGame.MoveCursor();
        }
        while((n=slGame.WaitMessage())==0) 
            ;
        {
            slGame.DrawPool(1);
            CConsoleWnd::TextOut("\n");
            if(n==1)
            {
                CConsoleWnd::TextOut(STR_GAMEWIN);
            }
            else
            {
                CConsoleWnd::TextOut(STR_GAMEOVER);
            }
            CConsoleWnd::TextOut(STR_GAMEEND);
        }
        while(CConsoleWnd::GetKey()!=KEY_ESC)
            ;
        return 0;
    }

 

1
1
蒋智航
蒋智航
高级天翼
高级天翼
#include<iostream>

#include<windows.h>

#include<conio.h>

#include<time.h>

#include<string>

using namespace std;

typedef struct Frame

{

    COORD position[2];

    int flag;

}Frame;

void SetPos(COORD a)

{

    HANDLE out=GetStdHandle(STD_OUTPUT_HANDLE);

    SetConsoleCursorPosition(out, a);

}

void SetPos(int i, int j)

{

    COORD pos={i, j};

    SetPos(pos);

}

void HideCursor()

{

    CONSOLE_CURSOR_INFO cursor_info = {1, 0}; 

    SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);

}

 

//把第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;

}

 

//在a, b 纵坐标相同的前提下,把坐标 [a, b] 之间填充为 ch

void drawRow(COORD a, COORD b, char ch)

{

    if(a.Y == b.Y) drawRow(a.Y, a.X, b.X, ch);

    else {

        SetPos(0, 25);

        cout<<"error code 01:无法填充行,因为两个坐标的纵坐标(x)不相等";

        system("pause");

    }

}

 

//把第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++;

    }

}

 

//在a, b 横坐标相同的前提下,把坐标 [a, b] 之间填充为 ch

void drawCol(COORD a, COORD b, char ch)

{

    if(a.X == b.X) drawCol(a.X, a.Y, b.Y, ch);

    else {

        SetPos(0, 25);

        cout<<"error code 02:无法填充列,因为两个坐标的横坐标(y)不相等";

        system("pause");

    }

}

 

//左上角坐标、右下角坐标、用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);

}

 

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 drawFrame(Frame frame, char row, char col)

{

    COORD a = frame.position[0];

    COORD b = frame.position[1];

    drawFrame(a, b, row, col);

}

 

void drawPlaying()

{

    drawFrame(0, 0, 48, 24, '=', '|');//    draw map frame;

    drawFrame(49, 0, 79, 4, '-', '|');//        draw output frame

    drawFrame(49, 4, 79, 9, '-', '|');//        draw score frame

    drawFrame(49, 9, 79, 20, '-', '|');//   draw operate frame

    drawFrame(49, 20, 79, 24, '-', '|');//  draw other message frame

    SetPos(52, 6);

    cout<<"得分:";

    SetPos(52, 7);

    cout<<"称号:";

    SetPos(52,10);

    cout<<"操作方式:";

    SetPos(52,12);

    cout<<"  a,s,d,w 控制战机移动。";

    SetPos(52,14);

    cout<<"  p 暂停游戏。";

    SetPos(52,16);

    cout<<"  e 退出游戏。";

}

 

//在[a, b)之间产生一个随机整数

int random(int a, int b)

{

    int c=(rand() % (a-b))+ a;

    return c;

}

 

//在两个坐标包括的矩形框内随机产生一个坐标

COORD random(COORD a, COORD b)

{

    int x=random(a.X, b.X);

    int y=random(a.Y, b.Y);

    COORD c={x, y};

    return c;

}

 

bool  judgeCoordInFrame(Frame frame, COORD spot)

{

    if(spot.X>=frame.position[0].X)

        if(spot.X<=frame.position[1].X)

            if(spot.Y>=frame.position[0].Y)

                if(spot.Y<=frame.position[0].Y)

                    return true;

    return false;

}

 

void printCoord(COORD a)

{

    cout    <<"( "<<a.X<<" , "<<a.Y<<" )";

}

 

void printFrameCoord(Frame a)

{

    printCoord(a.position[0]);

    cout    <<" - ";

    printCoord(a.position[1]);

}

 

int drawMenu()

{

    SetPos(30, 1);

    cout<<"P l a n e  W a r";

    drawRow(3, 0, 79, '-');

    drawRow(5, 0, 79, '-');

    SetPos(28, 4);

    cout<<"w 和 s 选择, k 确定";

    SetPos(15, 11);

    cout<<"1. 简单的敌人";

    SetPos(15, 13);

    cout<<"2. 冷酷的敌人";

    drawRow(20, 0, 79, '-');

    drawRow(22, 0, 79, '-');

    SetPos(47, 11);

    cout<<"简单的敌人:";

    SetPos(51, 13);

    cout<<"简单敌人有着较慢的移动速度。";

    int j=11;

    cout<<">>";

    while(1) {

        if( _kbhit() ) {    

            char x=_getch();

            switch (x) {

              case 'w' : {  

                if( j == 13) {

                  SetPos(12, j);

                  cout<<" ";

                  j = 11;

                  SetPos(12, j);

                  cout<<">>";

                  SetPos(51, 13);

                  cout<<"            ";

                  SetPos(47, 11);

                  cout<<"简单的敌人:";

                  SetPos(51, 13);

                  cout<<"简单敌人有着较慢的移动速度。";

                }

                break;

              }

              case 's' : {  

                if( j == 11 ) {

                  SetPos(12, j);

                  cout<<" ";        

                  j = 13;

                  SetPos(12, j);

                  cout<<">>";

                  SetPos(51, 13);

                   cout<<"              ";

                   SetPos(47, 11);

                   cout<<"冷酷的敌人:";

                   SetPos(51, 13);

                   cout<<"冷酷的敌人移动速度较快。";

                }

                break;

              }

              case 'k' : {  

                if (j == 8) return 1; else return 2;

              }

            }

        }

    }

}

/*================== the Game Class ==================*/

 

class Game

{

public:

    COORD position[10];

    COORD bullet[10];

    Frame enemy[8];

    int score;

    int rank;

    int rankf;

    string title;

    int flag_rank;

 

    Game ();

 

    //初始化所有

    void initPlane();

    void initBullet();

    void initEnemy();

 

    //初始化其中一个

    //void initThisBullet( COORD );

    //void initThisEnemy( Frame );

 

    void planeMove(char);

    void bulletMove();

    void enemyMove();

 

    //填充所有

    void drawPlane();

    void drawPlaneToNull();

    void drawBullet();

    void drawBulletToNull();

    void drawEnemy();

    void drawEnemyToNull();

 

    //填充其中一个

    void drawThisBulletToNull( COORD );

    void drawThisEnemyToNull( Frame );

 

    void Pause();

    void Playing();

    void judgePlane();

    void judgeEnemy();

 

    void Shoot();

 

    void GameOver();

    void printScore();

};

 

Game::Game()

{

    initPlane();

    initBullet();

    initEnemy();

    score = 0;

    rank = 25;

    rankf = 0;

    flag_rank = 0;

}

 

void Game::initPlane()

{

    COORD centren={39, 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;

}

 

void Game::drawPlane()

{

    for(int i=0; i<9; i++)

    {

        SetPos(position[i]);

        if(i!=5)

            cout<<"O";

        else if(i==5)

            cout<<"|";      

    }

}

 

void Game::drawPlaneToNull()

{

    for(int i=0; i<9; i++)

    {

        SetPos(position[i]);

        cout<<" ";

    }   

}

 

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]);

            cout<<"Φ";  

        }

    }

}

 

void Game::drawBulletToNull()

{

    for(int i=0; i<10; i++)

        if( bullet[i].Y != 30 )

            {

                COORD pos={bullet[i].X, bullet[i].Y+1};

                SetPos(pos);

                cout<<" ";

            }   

}

 

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);

        enemy[i].position[1].X = enemy[i].position[0].X + 3;

        enemy[i].position[1].Y = enemy[i].position[0].Y + 2;

    }

}

 

void Game::drawEnemy()

{

    for(int i=0; i<8; i++)

        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 Game::Pause()

{

    SetPos(61,2);

    cout<<"               ";

    SetPos(61,2);

    cout<<"暂停中...";

    char c=_getch();

    while(c!='p')

        c=_getch();

    SetPos(61,2);

    cout<<"         ";

}

 

void Game::planeMove(char x)

{

    if(x == 'a')

        if(position[1].X != 1)

            for(int i=0; i<=9; i++)

                position[i].X -= 2;

 

    if(x == 's')

        if(position[7].Y != 23)

            for(int i=0; i<=9; i++)

                position[i].Y += 1;

 

    if(x == 'd')

        if(position[4].X != 47)

            for(int i=0; i<=9; i++)

                position[i].X += 2;

 

    if(x == 'w')

        if(position[5].Y != 3)

            for(int i=0; i<=9; i++)

                position[i].Y -= 1;

}

 

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::enemyMove()

{

    for(int i=0; i<8; i++)

    {

        for(int j=0; j<2; j++)

            enemy[i].position[j].Y++;

 

        if(24 == enemy[i].position[1].Y)

        {

            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::judgePlane()

{

    for(int i = 0; i < 8; i++)

        for(int j=0; j<9; j++)

            if(judgeCoordInFrame(enemy[i], position[j]))

            {

                SetPos(62, 1);

                cout<<"坠毁";

                drawFrame(enemy[i], '+', '+');

                Sleep(1000);

                GameOver();

                break;

            }

}

 

void Game::drawThisBulletToNull( COORD c)

{

    SetPos(c);

    cout<<" ";

}

 

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::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::printScore()

{

    if(score == 120 && flag_rank == 0)

    {

        rank -= 3;

        flag_rank = 1;

    }

 

    else if( score == 360 && flag_rank == 1)

    {

        rank -= 5;

        flag_rank = 2;

    }

    else if( score == 480 && flag_rank == 2)

    {

        rank -= 5;

        flag_rank = 3;

    }

    int x=rank/5;

    SetPos(60, 6);

    cout<<score;

 

    if( rank!=rankf )

    {

        SetPos(60, 7);

        if( x == 5)

            title="新手守护";

        else if( x == 4)

            title="资深守护";

        else if( x == 3)

            title="缔造者守护";

        else if( x == 2 )

            title="战狼守护";
            else if(x==1)
            title="绝地武士守护";
            else if(x=0)
            title="缔造者之神守护"; 

        cout<<title;

    }

    rankf = rank;

}

 

void Game::Playing()

{


 

    drawEnemy();

    drawPlane();

 

    int flag_bullet = 0;

    int flag_enemy = 0;

 

    while(1)

    {

        Sleep(8);

        if(_kbhit())

        {

            char x = _getch();

            if ('a' == x || 's' == x || 'd' == x || 'w' == x)

            {

                drawPlaneToNull();

                planeMove(x);

                drawPlane();

                judgePlane();

            }           

            else if ('p' == x)

                Pause();

            else if( 'k' == x)

                Shoot();

            else if( 'e' == x)

            {

                //CloseHandle(MFUN);

                GameOver();

                break;

            }

 

        }

        /* 处理子弹 */

        if( 0 == flag_bullet )

        {

            bulletMove();

            drawBulletToNull();

            drawBullet();

            judgeEnemy();

        }           

        flag_bullet++;

        if( 5 == flag_bullet )

            flag_bullet = 0;

 

        /* 处理敌人 */

        if( 0 == flag_enemy )

        {

            drawEnemyToNull();

            enemyMove();            

            drawEnemy();

            judgePlane();

        }

        flag_enemy++;

        if( flag_enemy >= rank )

            flag_enemy = 0;

 

        /* 输出得分 */

        printScore();

    }

}

 

void Game::GameOver()

{

    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);

    cout<<"击落敌机:"<<score/5<<" 架";

    SetPos(31, 12);

    cout<<"得  分:"<<score<<" 分";

    SetPos(31, 13);

    cout<<"获得称号:"<<title;

    SetPos(30, 16);

    Sleep(1000);

    cout<<"继续? 是(y)| 否(n)";

as:

    char x=_getch();

    if (x == 'n')

        exit(0);

    else if (x == 'y')

    {

        system("cls");

        Game game;

        int a = drawMenu();

        if(a == 2)

            game.rank = 20;

        system("cls");

        drawPlaying();

        game.Playing();

    }

    else goto as;

}

 

/*================== the main function ==================*/

int main()

{

    //游戏准备

    srand((int)time(0));    //随机种子

    HideCursor();   //隐藏光标

 

    Game game;

    int a = drawMenu();

    if(a == 2)

        game.rank = 20;

    system("cls");

    drawPlaying();

    game.Playing();

}

 

蒋智航在2018-02-05 09:41:11追加了内容

                                                                                     飞机大战。

                                                                                     极其好玩

                                                                                免税金,免费玩

                                                               因为我知道:“给”永远比“拿”愉快

1
1
0
0
张马润泽
张马润泽
初级光能
初级光能
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <windows.h>
#include <conio.h>


// defines
#define KEY_UP    0xE048
#define KEY_DOWN  0xE050
#define KEY_LEFT  0xE04B
#define KEY_RIGHT 0xE04D
#define KEY_ESC   0x001B
#define KEY_1     '1'
#define KEY_2     '2'
#define KEY_3     '3'
#define GAME_MAX_WIDTH   100
#define GAME_MAX_HEIGHT  100


// Strings Resource
#define STR_GAMETITLE "ArrowKey:MoveCursor  Key1:Open  \
Key2:Mark  Key3:OpenNeighbors"
#define STR_GAMEWIN   "Congratulations! You Win! Thank you for playing!\n"
#define STR_GAMEOVER  "Game Over, thank you for playing!\n"
#define STR_GAMEEND   "Presented by yzfy . Press ESC to exit\n"


//-------------------------------------------------------------
// Base class
class CConsoleWnd
{
    public:
        static int TextOut(const char*);
        static int GotoXY(int, int);
        static int CharOut(int, int, const int);
        static int TextOut(int, int, const char*);
        static int GetKey();
    public:
};


//{{// class CConsoleWnd
    //
    //  int CConsoleWnd::GetKey()
    //  Wait for standard input and return the KeyCode
    //
    int CConsoleWnd::GetKey()
    {
        int nkey=getch(),nk=0;
        if(nkey>=128||nkey==0)nk=getch();
        return nk>0?nkey*256+nk:nkey;
    }


    //
    //  int CConsoleWnd::GotoXY(int x, int y)
    //  Move cursor to (x,y)
    //  Only Console Application
    //
    int CConsoleWnd::GotoXY(int x, int y)
    {
        COORD cd;
        cd.X = x;cd.Y = y;
        return SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),cd);
    }


    //
    //  int CConsoleWnd::TextOut(const char* pstr)
    //  Output a string at current position
    //
    int CConsoleWnd::TextOut(const char* pstr)
    {
        for(;*pstr;++pstr)putchar(*pstr);
        return 0;
    }


    //
    //  int CConsoleWnd::CharOut(int x, int y, const int pstr)
    //  Output a char at (x,y)
    //
    int CConsoleWnd::CharOut(int x, int y, const int pstr)
    {
        GotoXY(x, y);
        return putchar(pstr);
    }


    //
    //  int CConsoleWnd::TextOut(const char* pstr)
    //  Output a string at (x,y)
    //
    int CConsoleWnd::TextOut(int x, int y, const char* pstr)
    {
        GotoXY(x, y);
        return TextOut(pstr);
    }
//}}




//-------------------------------------------------------------
//Application class
class CSLGame:public CConsoleWnd
{
    private:
    private:
        int curX,curY;
        int poolWidth,poolHeight;
        int bm_gamepool[GAME_MAX_HEIGHT+2][GAME_MAX_WIDTH+2];
    public:
        CSLGame():curX(0),curY(0){poolWidth=poolHeight=0;}
        int InitPool(int, int, int);
        int MoveCursor(){return CConsoleWnd::GotoXY(curX, curY);}
        int DrawPool(int);
        int WaitMessage();
        int GetShowNum(int, int);
        int TryOpen(int, int);
    private:
        int DFSShowNum(int, int);
    private:
        const static int GMARK_BOOM;
        const static int GMARK_EMPTY;
        const static int GMARK_MARK;
};
const int CSLGame::GMARK_BOOM =  0x10;
const int CSLGame::GMARK_EMPTY=  0x100;
const int CSLGame::GMARK_MARK =  0x200;


//{{// class CSLGame:public CConsoleWnd
    //
    //  int CSLGame::InitPool(int Width, int Height, int nBoom)
    //  Initialize the game pool.
    //  If Width*Height <= nBoom, or nBoom<=0,
    //  or Width and Height exceed limit , then return 1
    //  otherwise return 0
    //
    int CSLGame::InitPool(int Width, int Height, int nBoom)
    {
        poolWidth = Width; poolHeight = Height;
        if(nBoom<=0 || nBoom>=Width*Height
            || Width <=0 || Width >GAME_MAX_WIDTH
            || Height<=0 || Height>GAME_MAX_HEIGHT
        ){
            return 1;
        }
        // zero memory
        for(int y=0; y<=Height+1; ++y)
        {
            for(int x=0; x<=Width+1; ++x)
            {
                bm_gamepool[y][x]=0;
            }
        }
        // init seed
        srand(time(NULL));
        // init Booms
        while(nBoom)
        {
            int x = rand()%Width + 1, y = rand()%Height + 1;
            if(bm_gamepool[y][x]==0)
            {
                bm_gamepool[y][x] = GMARK_BOOM;
                --nBoom;
            }
        }
        // init cursor position
        curX = curY = 1;
        MoveCursor();
        return 0;
    }


    //
    //  int CSLGame::DrawPool(int bDrawBoom = 0)
    //  Draw game pool to Console window
    //
    int CSLGame::DrawPool(int bDrawBoom = 0)
    {
        for(int y=1;y<=poolHeight;++y)
        {
            CConsoleWnd::GotoXY(1, y);
            for(int x=1;x<=poolWidth;++x)
            {
                if(bm_gamepool[y][x]==0)
                {
                    putchar('.');
                }
                else if(bm_gamepool[y][x]==GMARK_EMPTY)
                {
                    putchar(' ');
                }
                else if(bm_gamepool[y][x]>0 && bm_gamepool[y][x]<=8)
                {
                    putchar('0'+bm_gamepool[y][x]);
                }
                else if(bDrawBoom==0 && (bm_gamepool[y][x] & GMARK_MARK))
                {
                    putchar('#');
                }
                else if(bm_gamepool[y][x] & GMARK_BOOM)
                {
                    if(bDrawBoom)
                        putchar('*');
                    else
                        putchar('.');
                }
            }
        }
        return 0;
    }


    //
    //  int CSLGame::GetShowNum(int x, int y)
    //  return ShowNum at (x, y)
    //
    int CSLGame::GetShowNum(int x, int y)
    {
        int nCount = 0;
        for(int Y=-1;Y<=1;++Y)
            for(int X=-1;X<=1;++X)
        {
            if(bm_gamepool[y+Y][x+X] & GMARK_BOOM)++nCount;
        }
        return nCount;
    }


    //
    //  int CSLGame::TryOpen(int x, int y)
    //  Try open (x, y) and show the number
    //  If there is a boom, then return EOF
    //
    int CSLGame::TryOpen(int x, int y)
    {
        int nRT = 0;
        if(bm_gamepool[y][x] & GMARK_BOOM)
        {
            nRT = EOF;
        }
        else
        {
            int nCount = GetShowNum(x,y);
            if(nCount==0)
            {
                DFSShowNum(x, y);
            }
            else bm_gamepool[y][x] = nCount;
        }
        return nRT;
    }


    //
    //  int CSLGame::DFSShowNum(int x, int y)
    //  Private function, no comment
    //
    int CSLGame::DFSShowNum(int x, int y)
    {
        if((0<x && x<=poolWidth) &&
            (0<y && y<=poolHeight) &&
            (bm_gamepool[y][x]==0))
        {
            int nCount = GetShowNum(x, y);
            if(nCount==0)
            {
                bm_gamepool[y][x] = GMARK_EMPTY;
                for(int Y=-1;Y<=1;++Y)
                    for(int X=-1;X<=1;++X)
                {
                    DFSShowNum(x+X,y+Y);
                }
            }
            else bm_gamepool[y][x] = nCount;
        }
        return 0;
    }


    //
    //  int CSLGame::WaitMessage()
    //  Game loop, wait and process an input message
    //  return:  0: not end;  1: Win; otherwise: Lose
    //
    int CSLGame::WaitMessage()
    {
        int nKey = CConsoleWnd::GetKey();
        int nRT = 0, nArrow = 0;
        switch (nKey)
        {
            case KEY_UP:
            {
                if(curY>1)--curY;
                nArrow=1;
            }break;
            case KEY_DOWN:
            {
                if(curY<poolHeight)++curY;
                nArrow=1;
            }break;
            case KEY_LEFT:
            {
                if(curX>1)--curX;
                nArrow=1;
            }break;
            case KEY_RIGHT:
            {
                if(curX<poolWidth)++curX;
                nArrow=1;
            }break;
            case KEY_1:
            {
                nRT = TryOpen(curX, curY);
            }break;
            case KEY_2:
            {
                if((bm_gamepool[curY][curX]
                    & ~(GMARK_MARK|GMARK_BOOM))==0)
                {
                    bm_gamepool[curY][curX] ^= GMARK_MARK;
                }
            }break;
            case KEY_3:
            {
                if(bm_gamepool[curY][curX] & 0xF)
                {
                    int nb = bm_gamepool[curY][curX] & 0xF;
                    for(int y=-1;y<=1;++y)
                        for(int x=-1;x<=1;++x)
                    {
                        if(bm_gamepool[curY+y][curX+x] & GMARK_MARK)
                            --nb;
                    }
                    if(nb==0)
                    {
                        for(int y=-1;y<=1;++y)
                            for(int x=-1;x<=1;++x)
                        {
                            if((bm_gamepool[curY+y][curX+x]
                                & (0xF|GMARK_MARK)) == 0)
                            {
                                nRT |= TryOpen(curX+x, curY+y);
                            }
                        }
                    }
                }
            }break;
            case KEY_ESC:
            {
                nRT = EOF;
            }break;
        }
        if(nKey == KEY_1 || nKey == KEY_3)
        {
            int y=1;
            for(;y<=poolHeight;++y)
            {
                int x=1;
                for(;x<=poolWidth; ++x)
                {
                    if(bm_gamepool[y][x]==0)break;
                }
                if(x<=poolWidth) break;
            }
            if(! (y<=poolHeight))
            {
                nRT = 1;
            }
        }
        if(nArrow==0)
        {
            DrawPool();
        }
        MoveCursor();
        return nRT;
    }
//}}




//-------------------------------------------------------------
//{{
    //
    //  main function
    //
    int main(void)
    {
        int x=50, y=20, b=100,n; // define width & height & n_booms
        CSLGame slGame;
        // Init Game
        {
            CConsoleWnd::GotoXY(0,0);
            CConsoleWnd::TextOut(STR_GAMETITLE);
            slGame.InitPool(x,y,b);
            slGame.DrawPool();
            slGame.MoveCursor();
        }
        while((n=slGame.WaitMessage())==0) // Game Message Loop
            ;
        // End of the Game
        {
            slGame.DrawPool(1);
            CConsoleWnd::TextOut("\n");
            if(n==1)
            {
                CConsoleWnd::TextOut(STR_GAMEWIN);
            }
            else
            {
                CConsoleWnd::TextOut(STR_GAMEOVER);
            }
            CConsoleWnd::TextOut(STR_GAMEEND);
        }
        while(CConsoleWnd::GetKey()!=KEY_ESC)
            ;
        return 0;
    }
//}}

扫雷,扫雷,扫雷,扫雷

0
0
刘凯南
刘凯南
高级守护
高级守护

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<windows.h>
struct player
    {
        char allname[20];
        int money,dangqian;
        int fangchan[5][19];
        char name;
        int hours;
        int days;
        int turns;
    }p1,p2;

int main(void)
{
    FILE *fp;
    int shijian(int a);
    int qipan(char weizhi[28]);
    int qianjin(int qianjinbs,int dangqian,char weizhi[28],char name);
    int houtui(int houtuibs,int dangqian,char weizhi[28],char name);
    int renpin(int money);
    int duchang(int money);
    int meiqian(int money);

    int houtuibs;
    int choice;
    int qianjinbs;
    int m,n,p,q;
    int a,b,c;
    char weizhi[28]="                          ";
    int fang(int turns);
    srand( (unsigned)time( NULL ) );
    p1.turns=1;
    p1.hours=0;
    p1.days=0;
    p1.dangqian=0;
    p2.dangqian=0;
    b=0;
    p1.money=5000;
    p2.money=5000;
    printf("欢迎来到大富翁的世界!!大富翁的世界有你更精彩!!!\n");
    printf("1.新的旅程\n2.旧的回忆\n");
    scanf("%d",&a);
    if (a==2)
    {
        printf("请输入存档时1p的名字:\n");
        getchar();
        gets(p1.allname);
        printf("%s", p1.allname);
        fp=fopen(p1.allname,"rb");
        fread(&p1,sizeof(struct player),1,fp);
        fread(&p2,sizeof(struct player),1,fp);
        fclose(fp);
        goto turn;
    }
    printf("输入1p的名字(注意首字母最好为英文):\n");
    scanf("%d",&a);
    gets(p1.allname);
    p1.name=1;
    printf("输入2P的名字(注意首字母最好为英文): \n");
    scanf("%d",&a);
    gets(p2.allname);
    p2.name=2;
    turn:
    if (p1.turns)
    {
        system("cls");
     weizhi[p1.dangqian]=1;
     weizhi[p2.dangqian]=2;
    qipan(weizhi);
    printf("第%d天\n",p1.days);

        if (p1.money<500)
    {
        printf("身份:贫民:   ");
    }
        else if (p1.money<10000)
    {
        printf("身份:平民:   ");
    }
    else if (p1.money<20000)
    {
        printf("身份:小资:   ");
    }
    else if (p1.money<50000)
    {
        printf("身份:富人:   ");
    }
    else if (p1.money<500000)
    {
        printf("身份:土豪:   ");
    }
    else
    {
        printf("身份:首富:   ");
    }
    puts(p1.allname);
    printf("金钱:%d\n",p1.money);
    weizhi[p1.dangqian]=' ';
    printf("请选择操作:0.存档         1.查看个人房产       2.前进\n");
    scanf("%d",&choice);
    if (choice==0)
    {
        fp=fopen(p1.allname,"wb");
        fwrite(&p1,sizeof(struct player),1,fp);
        fwrite(&p2,sizeof(struct player),1,fp);
        fclose(fp);
        goto turn;
    }
    else if (choice==1)
    {
        for (a=0;a<=19;a++)
        {
            if (p1.fangchan[0][a]==1)
            {
                switch (a)
                {
                case 0:printf("火星大道1号\n");b=1;break;
                case 1:printf("火星大道2号\n");b=1;break;
                case 2:printf("解放路1号\n");b=1;break;
                case 3:printf("解放路2号\n");b=1;break;
                case 4:printf("解放路3号\n");b=1;break;
                case 5:printf("解放路4号\n");b=1;break;
                case 6:printf("解放路5号\n");b=1;break;
                case 7:printf("花炮大道1号\n");b=1;break;
                case 8:printf("花炮大道2号\n");b=1;break;
                case 9:printf("花炮大道3号\n");b=1;break;
                case 10:printf("花炮大道4号\n");b=1;break;
                case 11:printf("花炮大道5号\n");b=1;break;
                case 12:printf("花炮大道6号\n");b=1;break;
                case 13:printf("花炮大道7号\n");b=1;break;
                case 14:printf("花炮大道8号\n");b=1;break;
                case 15:printf("花炮大道9号\n");b=1;break;
                case 16:printf("桂花路1号\n");b=1;break;
                case 17:printf("桂花路2号\n");b=1;break;
                case 18:printf("桂花路3号\n");b=1;break;
                default:break;
                }
                if (b==1)
                {
                    if (p1.fangchan[1][a]==1)
                    {
                        printf("建设旅馆一座:\n");
                        printf("旅馆等级:%d星级\n",p1.fangchan[2][a]);
                        printf("每次停留收取费用:%d\n",p1.fangchan[3][a]);
                        printf("\n");
                    }
                    else if(p1.fangchan[1][a]==2)
                    {
                        printf("建设商店一座:\n");
                        switch (p1.fangchan[2][a])
                        {
                        case 1:printf("等级:小卖部\n");break;
                        case 2:printf("等级:商店\n");break;
                        case 3:printf("等级:超市\n");break;
                        case 4:printf("等级:全国连锁超市\n");break;
                        case 5:printf("等级:世界连锁贸易市场\n");break;
                        default:break;
                        }
                        printf("每回合收入为:%d",p1.fangchan[4][a]);
                        printf("\n");
                    }
                    else
                    {
                        printf("仅有地皮一份。\n");
                    }
                }

            }
        }
        system("pause");
        goto turn;
    }
    else if (choice==9)
    {
        qianjinbs=1;
        goto miji;
    }
    else
    {
        shijian(12);
        if (p1.days>=100)
    {
        goto end;
    }
        qianjinbs=rand()%6;
        qianjinbs=qianjinbs+1;
miji:printf("你投出了%d点!",qianjinbs);
        p1.dangqian=qianjin(qianjinbs,p1.dangqian,weizhi,p1.name);
jintui:switch (p1.dangqian)
        {
        case 0:printf("停在起点奖励1000!\n");p1.money+=1000;system("pause");break;
        case 3:printf("前进三格!\n");c=3;p1.dangqian=qianjin(c,p1.dangqian,weizhi,p1.name);goto jintui;
        case 9:printf("进入人品驿站~~考验人品的时候到了!\n");Sleep(1000);p1.money=renpin(p1.money);;break;
        case 16:printf("后退两格!\n");c=2;p1.dangqian=houtui(c,p1.dangqian,weizhi,p1.name);goto jintui;
        case 20:{printf("进入赌场!!\n");
            Sleep(500);
            p1.money=duchang(p1.money);
            if (p1.days>=100)
    {
        goto end;
    }
            break;}
        case 21:printf("前进两格!\n");c=2;p1.dangqian=qianjin(c,p1.dangqian,weizhi,p1.name);goto jintui;
        case 22:printf("进入人品驿站~~考验人品的时候到了!\n");Sleep(1000);p1.money=renpin(p1.money);;break;
        default:fang(p1.turns);break;
        }
         system("cls");
         weizhi[p1.dangqian]=1;
         qipan(weizhi);
        weizhi[p1.dangqian]=' ';
        for (b=1,a=0;a<=18;a++)
        {
        if (p1.fangchan[1][a]==2)
        {
            printf("%d号商店收益:%d  ",a,p1.fangchan[4][a]);
            p1.money=p1.money+p1.fangchan[4][a];
            b++;
            if (b==4)
            {
                printf("\n");
                b=1;
            }
        }

        }
        system("pause");
        p1.turns=0;
        goto turn;
    }
    }
    else
    {
        system("cls");
     weizhi[p1.dangqian]=1;
     weizhi[p2.dangqian]=2;
    qipan(weizhi);
    printf("第%d天\n",p1.days);

        if (p2.money<500)
    {
        printf("身份:贫民:   ");
    }
        else if (p2.money<10000)
    {
        printf("身份:平民:   ");
    }
    else if (p2.money<20000)
    {
        printf("身份:小资:   ");
    }
    else if (p2.money<50000)
    {
        printf("身份:富人:   ");
    }
    else if (p2.money<500000)
    {
        printf("身份:土豪:   ");
    }
    else
    {
        printf("身份:首富:   ");
    }
    puts(p2.allname);
    printf("金钱:%d\n",p2.money);
    weizhi[p2.dangqian]=' ';
    printf("请选择操作:0.存档         1.查看个人房产       2.前进\n");
    scanf("%d",&choice);
    if (choice==0)
    {
        fp=fopen(p1.allname,"wb");
        fwrite(&p1,sizeof(struct player),1,fp);
        fwrite(&p2,sizeof(struct player),1,fp);
        fclose(fp);
        goto turn;
    }
    else if (choice==1)
    {
/* 输出个人信息,真特么麻烦 */


        for (a=0;a<=19;a++)
        {
            if (p2.fangchan[0][a]==1)
            {
                switch (a)
                {
                case 0:printf("火星大道1号\n");b=1;break;
                case 1:printf("火星大道2号\n");b=1;break;
                case 2:printf("解放路1号\n");b=1;break;
                case 3:printf("解放路2号\n");b=1;break;
                case 4:printf("解放路3号\n");b=1;break;
                case 5:printf("解放路4号\n");b=1;break;
                case 6:printf("解放路5号\n");b=1;break;
                case 7:printf("花炮大道1号\n");b=1;break;
                case 8:printf("花炮大道2号\n");b=1;break;
                case 9:printf("花炮大道3号\n");b=1;break;
                case 10:printf("花炮大道4号\n");b=1;break;
                case 11:printf("花炮大道5号\n");b=1;break;
                case 12:printf("花炮大道6号\n");b=1;break;
                case 13:printf("花炮大道7号\n");b=1;break;
                case 14:printf("花炮大道8号\n");b=1;break;
                case 15:printf("花炮大道9号\n");b=1;break;
                case 16:printf("桂花路1号\n");b=1;break;
                case 17:printf("桂花路2号\n");b=1;break;
                case 18:printf("桂花路3号\n");b=1;break;
                default:break;
                }
                if (b==1)
                {
                    if (p2.fangchan[1][a]==1)
                    {
                        printf("建设旅馆一座:\n");
                        printf("旅馆等级:%d星级\n",p2.fangchan[2][a]);
                        printf("每次停留收取费用:%d\n",p2.fangchan[3][a]);
                        printf("\n");
                    }
                    else if(p2.fangchan[1][a]==2)
                    {
                        printf("建设商店一座:\n");
                        switch (p2.fangchan[2][a])
                        {
                        case 1:printf("等级:小卖部\n");break;
                        case 2:printf("等级:商店\n");break;
                        case 3:printf("等级:超市\n");break;
                        case 4:printf("等级:全国连锁超市\n");break;
                        case 5:printf("等级:世界连锁贸易市场\n");break;
                        default:break;
                        }
                        printf("每回合收入为:%d",p2.fangchan[4][a]);
                        printf("\n");
                    }
                    else
                    {
                        printf("仅有地皮一份。\n");
                    }
                }

            }
        }
        system("pause");
        goto turn;
    }
    else if (choice==9)
    {
        qianjinbs=1;
        goto miji2;
    }
    else
    {
        shijian(12);
        if (p1.days>=100)
    {
        goto end;
    }
        a=rand()%6;
        qianjinbs=a+1;
miji2:printf("你投出了%d点!",qianjinbs);
        p2.dangqian=qianjin(qianjinbs,p2.dangqian,weizhi,p2.name);
jintui2:switch (p2.dangqian)
        {
        case 0:printf("停在起点奖励1000!\n");p2.money+=1000;system("pause");break;
        case 3:printf("前进三格!\n");c=3;p2.dangqian=qianjin(c,p2.dangqian,weizhi,p2.name);goto jintui2;
        case 9:printf("进入人品驿站~~考验人品的时候到了!\n");Sleep(1000);p2.money=renpin(p2.money);;break;
        case 16:printf("后退两格!\n");c=2;p2.dangqian=houtui(c,p2.dangqian,weizhi,p2.name);goto jintui2;
        case 20:{printf("进入赌场!!\n");
            Sleep(500);
            p2.money=duchang(p2.money);
            if (p1.days>=100)
    {
        goto end;
    }
            break;}
        case 21:printf("前进两格!\n");c=2;p2.dangqian=qianjin(c,p2.dangqian,weizhi,p2.name);goto jintui2;
        case 22:printf("进入人品驿站~~考验人品的时候到了!\n");Sleep(1000);p2.money=renpin(p2.money);;break;
        default:fang(p1.turns);break;
        }
         system("cls");
         weizhi[p2.dangqian]=2;
         qipan(weizhi);
        weizhi[p2.dangqian]=' ';
        for (b=1,a=0;a<=18;a++)
        {
        if (p2.fangchan[1][a]==2)
        {
            printf("%d号商店收益:%d  ",a,p2.fangchan[4][a]);
            p2.money=p2.money+p2.fangchan[4][a];
            b++;
            if (b==4)
            {
                printf("\n");
                b=1;
            }
        }

        }
        system("pause");
        p1.turns=1;
        goto turn;
    }
    }
end:printf("名字:");
        puts(p1.allname);
        if (p1.money<3000)
    {
        printf("身份:贫民\n");
        printf("弱爆了你,才这点钱~!\n");
        m=10;
    }
        else if (p1.money<5000)
    {
        printf("身份:平民\n");
        printf("勉勉强强够糊口吧~~~\n");
        m=20;
    }
    else if (p1.money<10000)
    {
        printf("身份:小资\n");
        printf("还好还好不算丢脸~~~\n");
        m=30;
    }
    else if (p1.money<20000)
    {
        printf("身份:富人\n");
        printf("十分不错,RP棒棒哒~~!!\n");
        m=40;
    }
    else if (p1.money<50000)
    {
        printf("身份:土豪\n");
        printf("土豪我们做朋友吧~");
        m=50;
    }
    else
    {
        printf("身份:首富\n");
        printf("膜拜。。。");
        m=60;
    }
        printf("\n金钱:%d\n",p1.money);
        for (a=0,c=0;a<=19;a++)
        {
            if (p1.fangchan[0][a]==1)
            {
                switch (a)
                {
                case 0:printf("火星大道1号\n");b=1;break;
                case 1:printf("火星大道2号\n");b=1;break;
                case 2:printf("解放路1号\n");b=1;break;
                case 3:printf("解放路2号\n");b=1;break;
                case 4:printf("解放路3号\n");b=1;break;
                case 5:printf("解放路4号\n");b=1;break;
                case 6:printf("解放路5号\n");b=1;break;
                case 7:printf("花炮大道1号\n");b=1;break;
                case 8:printf("花炮大道2号\n");b=1;break;
                case 9:printf("花炮大道3号\n");b=1;break;
                case 10:printf("花炮大道4号\n");b=1;break;
                case 11:printf("花炮大道5号\n");b=1;break;
                case 12:printf("花炮大道6号\n");b=1;break;
                case 13:printf("花炮大道7号\n");b=1;break;
                case 14:printf("花炮大道8号\n");b=1;break;
                case 15:printf("花炮大道9号\n");b=1;break;
                case 16:printf("桂花路1号\n");b=1;break;
                case 17:printf("桂花路2号\n");b=1;break;
                case 18:printf("桂花路3号\n");b=1;break;
                default:break;
                }
                if (b==1)
                {
                    if (p1.fangchan[1][a]==1)
                    {
                        printf("建设旅馆一座:\n");
                        printf("旅馆等级:%d星级\n",p1.fangchan[2][a]);
                        printf("每次停留收取费用:%d\n",p1.fangchan[3][a]);
                        printf("\n");
                    }
                    else if(p1.fangchan[1][a]==2)
                    {
                        printf("建设商店一座:\n");
                        switch (p1.fangchan[2][a])
                        {
                        case 1:printf("等级:小卖部\n");break;
                        case 2:printf("等级:商店\n");break;
                        case 3:printf("等级:超市\n");break;
                        case 4:printf("等级:全国连锁超市\n");break;
                        case 5:printf("等级:世界连锁贸易市场\n");break;
                        default:break;
                        }
                        printf("每回合收入为:%d",p1.fangchan[4][a]);
                        printf("\n");
                    }
                    else
                    {
                        printf("仅有地皮一份。\n");
                    }
                    c++;
                }

            }
        }
    if (c==0)
    {
        printf("没地?别说我认识你啊。。。\n");
        n=10;
    }
    else if (c<5)
    {
        printf("啧啧。。怎么混的你竟然才这么点地?\n");
        n=20;
    }
    else if (c<10)
    {
        printf("算是勉强勉强够混口饭吃了吧。。。\n");
        n=30;
    }
    else if (c<18)
    {
        printf("没错你就是传说中无恶不作的房地产大商!!!\n");
        n=40;
    }
    else
    {
        printf("买下所有地皮,达成最高成就:城主!!\n");
        n=60;
    }
    p=m+n;
    printf("最终积分为:%d",p);

    system("pause");

    system("cls");
    printf("名字:");
        puts(p2.allname);
        if (p2.money<3000)
    {
        printf("身份:贫民\n");
        printf("弱爆了你,才这点钱~!\n");
        m=10;
    }
        else if (p2.money<5000)
    {
        printf("身份:平民\n");
        printf("勉勉强强够糊口吧~~~\n");
        m=20;
    }
    else if (p2.money<10000)
    {
        printf("身份:小资\n");
        printf("还好还好不算丢脸~~~\n");
        m=30;
    }
    else if (p2.money<20000)
    {
        printf("身份:富人\n");
        printf("十分不错,RP棒棒哒~~!!\n");
        m=40;
    }
    else if (p2.money<50000)
    {
        printf("身份:土豪\n");
        printf("土豪我们做朋友吧~");
        m=50;
    }
    else
    {
        printf("身份:首富\n");
        printf("膜拜。。。");
        m=60;
    }
        printf("\n金钱:%d\n",p2.money);
        for (a=0,c=0;a<=19;a++)
        {
            if (p2.fangchan[0][a]==1)
            {
                switch (a)
                {
                case 0:printf("火星大道1号\n");b=1;break;
                case 1:printf("火星大道2号\n");b=1;break;
                case 2:printf("解放路1号\n");b=1;break;
                case 3:printf("解放路2号\n");b=1;break;
                case 4:printf("解放路3号\n");b=1;break;
                case 5:printf("解放路4号\n");b=1;break;
                case 6:printf("解放路5号\n");b=1;break;
                case 7:printf("花炮大道1号\n");b=1;break;
                case 8:printf("花炮大道2号\n");b=1;break;
                case 9:printf("花炮大道3号\n");b=1;break;
                case 10:printf("花炮大道4号\n");b=1;break;
                case 11:printf("花炮大道5号\n");b=1;break;
                case 12:printf("花炮大道6号\n");b=1;break;
                case 13:printf("花炮大道7号\n");b=1;break;
                case 14:printf("花炮大道8号\n");b=1;break;
                case 15:printf("花炮大道9号\n");b=1;break;
                case 16:printf("桂花路1号\n");b=1;break;
                case 17:printf("桂花路2号\n");b=1;break;
                case 18:printf("桂花路3号\n");b=1;break;
                default:break;
                }
                if (b==1)
                {
                    if (p2.fangchan[1][a]==1)
                    {
                        printf("建设旅馆一座:\n");
                        printf("旅馆等级:%d星级\n",p1.fangchan[2][a]);
                        printf("每次停留收取费用:%d\n",p1.fangchan[3][a]);
                        printf("\n");
                    }
                    else if(p2.fangchan[1][a]==2)
                    {
                        printf("建设商店一座:\n");
                        switch (p2.fangchan[2][a])
                        {
                        case 1:printf("等级:小卖部\n");break;
                        case 2:printf("等级:商店\n");break;
                        case 3:printf("等级:超市\n");break;
                        case 4:printf("等级:全国连锁超市\n");break;
                        case 5:printf("等级:世界连锁贸易市场\n");break;
                        default:break;
                        }
                        printf("每回合收入为:%d",p2.fangchan[4][a]);
                        printf("\n");
                    }
                    else
                    {
                        printf("仅有地皮一份。\n");
                    }
                    c++;
                }

            }
        }
    if (c==0)
    {
        printf("没地?别说我认识你啊。。。\n");
        n=10;
    }
    else if (c<5)
    {
        printf("啧啧。。怎么混的你竟然才这么点地?\n");
        n=20;
    }
    else if (c<10)
    {
        printf("算是勉强勉强够混口饭吃了吧。。。\n");
        n=30;
    }
    else if (c<18)
    {
        printf("没错你就是传说中无恶不作的房地产大商!!!\n");
        n=40;
    }
    else
    {
        printf("买下所有地皮,达成最高成就:城主!!\n");
        n=60;
    }
    q=m+n;
    printf("您的最终积分为:%d",q);
    if (p>q)
    {
        printf("1P更胜一筹哦!\n");
    }
    else if (q>p)
    {
        printf("2P更强一些诶!\n");
    }
    else
    {
        printf("十分和谐有爱的平手!\n");
    }

    system("pause");
    printf("想看彩蛋吗?输入1则继续!输入其他数字退出~\n");
    scanf("%d",&a);
    if (a)
    {
caidan:system("cls");
    for (a=1;a<=100;a++)
    {
        printf("壮哉我大622~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
    }
    printf("没错这就是彩蛋!\n");
    printf("好啦游戏结束~~");
    }
    else
    {
        printf("不看也得看!!\n");
        system("pause");
        goto caidan;
    }
    system("pause");

    return 0;
}


/*时间*/
int shijian(int a)
{
    p1.hours+=a;
    if (p1.hours>=12)
    {
        p1.hours-=12;
        p1.days++;
    }

    return 0;
}

/*定义界面函数*/
int qipan(char weizhi[28])
    {
        system("cls");
        printf("_____________________________________________________________\n");
        printf("|%c   1|%c   2|%c   3|%c   4|%c   5|%c   6|%c   7|%c   8|%c   9|%c  10|\n",weizhi[0],weizhi[1],weizhi[2],weizhi[3],weizhi[4],weizhi[5],weizhi[6],weizhi[7],weizhi[8],weizhi[9]);
        printf("|开始 |火 星|大 道|前进 |     | 解  |  放 |  路 |     |人品 |\n");
        printf("|     |1 号 |2 号 |3 格 |1 号 |2 号 |3 号 |4 号 |5 号 |驿站 |\n");
        printf("-------------------------------------------------------------\n");
        printf("|%c  26|                                               |%c  11|\n",weizhi[25],weizhi[10]);
        printf("|桂   |                                               |     |\n");
        printf("|3 号 |                                               |1 号 |\n");
        printf("|-----|                                               |-----|\n");
        printf("|%c  25|                                               |%c  12|\n",weizhi[24],weizhi[11]);
        printf("|花   |           大      富      翁                  |花   |\n");
        printf("|2 号 |                                               |2 号 |\n");
        printf("|-----|                                               |-----|\n");
        printf("|%c  24|                                               |%c  13|\n",weizhi[23],weizhi[12]);
        printf("|路   |                                               |炮   |\n");
        printf("|1 号 |                                               |3 号 |\n");
        printf("-------------------------------------------------------------\n");
        printf("|%c  23|%c  22|%c  21|%c  20|%c  19|%c  18|%c  17|%c  16|%c  15|%c  14|\n",weizhi[22],weizhi[21],weizhi[20],weizhi[19],weizhi[18],weizhi[17],weizhi[16],weizhi[15],weizhi[14],weizhi[13]);
        printf("|人品 |前进 |赌场 |     |     |     |后退 |     |道   |大   |\n");
        printf("|驿站 |2 格 |     |9 号 |8 号 |7 号 |2 格 |6 号 |5 号 |4 号 |\n");
        printf("-------------------------------------------------------------\n");
        return 0;
    }

/*定义前进函数*/
    int qianjin(int qianjinbs,int dangqian,char weizhi[28],char name)
    {
        int a,b;
        for(b=0;b<qianjinbs;b++)
        {
            dangqian++;
            if (dangqian>=26)
            {
                dangqian=0;
            }
            weizhi[dangqian]=name;
            Sleep(1000);
            qipan(weizhi);
            weizhi[dangqian]=' ';
        }

        return dangqian;
    }
/*定义后退函数*/
    int houtui(int houtuibs,int dangqian,char weizhi[28],char name)
    {
        int a,b;
        for(b=0,a=0;b<houtuibs;b++)
        {
            if (dangqian<=0)
            {
                dangqian=0;
            }
            else
            {
                dangqian=dangqian-1;
            }
            weizhi[dangqian]=name;
            Sleep(1000);
            qipan(weizhi);
            weizhi[dangqian]=' ';
        }

        return dangqian;
    }


    /*一大作死项目:房地产!*/

   int fang(int turns)
   {
    int fanghao;
    int a,b,c;
    if (p1.turns)
    {
    switch (p1.dangqian)
    {
        case 1:fanghao=0;break;
        case 2:fanghao=1;break;
        case 4:fanghao=2;break;
        case 5:fanghao=3;break;
        case 6:fanghao=4;break;
        case 7:fanghao=5;break;
        case 8:fanghao=6;break;
        case 10:fanghao=7;break;
        case 11:fanghao=8;break;
        case 12:fanghao=9;break;
        case 13:fanghao=10;break;
        case 14:fanghao=11;break;
        case 15:fanghao=12;break;
        case 17:fanghao=13;break;
        case 18:fanghao=14;break;
        case 19:fanghao=15;break;
        case 23:fanghao=16;break;
        case 24:fanghao=17;break;
        case 25:fanghao=18;break;
        default:break;
    }
    if (p2.fangchan[0][fanghao]==0)
    {
    if (p1.fangchan[0][fanghao]==0)
    {
        printf("1.购下该地皮,花费500,   其他任意数返回\n");
        scanf("%d",&a);
        if (a==1)
        {
            p1.fangchan[0][fanghao]=1;
            p1.money-=500;
        }
    }
    else if (p1.fangchan[1][fanghao]==0)
    {
        printf("1.升级成旅馆,花费200\n2.升级成商店,花费200\n输入其他任意数字返回\n");
        scanf("%d",&a);
        switch (a)
        {
        case 1:p1.fangchan[1][fanghao]=1;p1.money=p1.money-200;p1.fangchan[2][fanghao]=1;p1.fangchan[3][fanghao]=500;break;
        case 2:p1.fangchan[1][fanghao]=2;p1.money=p1.money-200;p1.fangchan[2][fanghao]=1;p1.fangchan[4][fanghao]=50;break;
        default:break;
        }
    }
    else if (p1.fangchan[1][fanghao]==1)
    {
        p1.fangchan[4][fanghao]=0;
        printf("当前为%d星级旅馆\n1.花费%d升级旅馆\n输入其他任意数字返回\n",p1.fangchan[2][fanghao],500*(p1.fangchan[2][fanghao]+1));
        scanf("%d",&a);
        if (a==1)
        {
            if (p1.fangchan[2][fanghao]==5)
            {
                printf("已是最高级别!\n");
                system("pause");
                goto zuigao;
            }
            p1.fangchan[2][fanghao]++;
            p1.money=p1.money-500*p1.fangchan[2][fanghao];
            p1.fangchan[3][fanghao]=p1.fangchan[3][fanghao]+200*p1.fangchan[2][fanghao];
            printf("升级完毕,当前为%d星级旅馆\n",p1.fangchan[2][fanghao]);
            printf("输入任意数字返回\n");
            scanf("%d",&c);
        }
    }
    else
    {
        printf("当前为%d级商店\n1.花费%d升级商店\n输入其他数字返回\n",p1.fangchan[1][fanghao],500*p1.fangchan[2][fanghao]);
        scanf("%d",&a);
        if (a==1)
        {
            if (p1.fangchan[2][fanghao]==5)
            {
                printf("已是最高级别!\n");
                printf("输入任意数字返回\n");
                scanf("%d",&c);
                goto zuigao;
            }
            p1.fangchan[2][fanghao]++;
            p1.money=p1.money-500*p1.fangchan[2][fanghao];
            p1.fangchan[4][fanghao]=p1.fangchan[4][fanghao]+10*p1.fangchan[2][fanghao];
            printf("升级完毕,当前为%d星级商店\n",p1.fangchan[2][fanghao]);
            system("pause");
        }

    }
    }
    else if (p2.fangchan[1][fanghao]==1)
    {
        printf("被收取过路费住宿费%d\n",p2.fangchan[3][fanghao]);
        p1.money=p1.money-p2.fangchan[3][fanghao];
        p2.money=p2.money+p2.fangchan[3][fanghao];
        system("pause");
    }
    }
    else
    {
        switch (p2.dangqian)
    {
        case 1:fanghao=0;break;
        case 2:fanghao=1;break;
        case 4:fanghao=2;break;
        case 5:fanghao=3;break;
        case 6:fanghao=4;break;
        case 7:fanghao=5;break;
        case 8:fanghao=6;break;
        case 10:fanghao=7;break;
        case 11:fanghao=8;break;
        case 12:fanghao=9;break;
        case 13:fanghao=10;break;
        case 14:fanghao=11;break;
        case 15:fanghao=12;break;
        case 17:fanghao=13;break;
        case 18:fanghao=14;break;
        case 19:fanghao=15;break;
        case 23:fanghao=16;break;
        case 24:fanghao=17;break;
        case 25:fanghao=18;break;
        default:break;
    }
    if (p1.fangchan[0][fanghao]==0)
    {
    if (p2.fangchan[0][fanghao]==0)
    {
        printf("1.购下该地皮,花费500,   其他任意数返回\n");
        scanf("%d",&a);
        if (a==1)
        {
            p2.fangchan[0][fanghao]=1;
            p2.money-=500;
        }
    }
    else if (p2.fangchan[1][fanghao]==0)
    {
        printf("1.升级成旅馆,花费200\n2.升级成商店,花费200\n输入其他任意数字返回\n");
        scanf("%d",&a);
        switch (a)
        {
        case 1:p2.fangchan[1][fanghao]=1;p2.money=p1.money-200;p2.fangchan[2][fanghao]=1;p2.fangchan[3][fanghao]=500;break;
        case 2:p2.fangchan[1][fanghao]=2;p2.money=p1.money-200;p2.fangchan[2][fanghao]=1;p2.fangchan[4][fanghao]=50;break;
        default:break;
        }
    }
    else if (p2.fangchan[1][fanghao]==1)
    {
        p2.fangchan[4][fanghao]=0;
        printf("当前为%d星级旅馆\n1.花费%d升级旅馆\n输入其他任意数字返回\n",p2.fangchan[2][fanghao],500*(p2.fangchan[2][fanghao]+1));
        scanf("%d",&a);
        if (a==1)
        {
            if (p2.fangchan[2][fanghao]==5)
            {
                printf("已是最高级别!\n");
                system("pause");
                goto zuigao;
            }
            p2.fangchan[2][fanghao]++;
            p2.money=p2.money-500*p2.fangchan[2][fanghao];
            p2.fangchan[3][fanghao]=p2.fangchan[3][fanghao]+200*p2.fangchan[2][fanghao];
            printf("升级完毕,当前为%d星级旅馆\n",p2.fangchan[2][fanghao]);
            printf("输入任意数字返回\n");
            scanf("%d",&c);
        }
    }
    else
    {
        printf("当前为%d级商店\n1.花费%d升级商店\n输入其他数字返回\n",p2.fangchan[1][fanghao],500*p2.fangchan[2][fanghao]);
        scanf("%d",&a);
        if (a==1)
        {
            if (p2.fangchan[2][fanghao]==5)
            {
                printf("已是最高级别!\n");
                printf("输入任意数字返回\n");
                scanf("%d",&c);
                goto zuigao;
            }
            p2.fangchan[2][fanghao]++;
            p2.money=p1.money-500*p2.fangchan[2][fanghao];
            p2.fangchan[4][fanghao]=p2.fangchan[4][fanghao]+10*p2.fangchan[2][fanghao];
            printf("升级完毕,当前为%d星级商店\n",p2.fangchan[2][fanghao]);
            system("pause");
        }

    }
    }
    else if (p1.fangchan[1][fanghao]==1)
    {
        printf("被收取过路费住宿费%d\n",p1.fangchan[3][fanghao]);
        p2.money=p2.money-p1.fangchan[3][fanghao];
        p1.money=p1.money+p1.fangchan[3][fanghao];
        system("pause");
    }
    }
zuigao:return 0;
}

    /*人品驿站!!*/

int renpin(int money)
{
    int a,b;
    a=rand()%10;
    b=rand()%2000;
    switch (a)
    {
    case 0:printf("路边捡到一个钱包,获得%d!!\n",b);money=money+b;break;
    case 1:printf("路遇恶狗被咬,住院花费200!!\n");money=money-200;break;
    case 2:printf("见到小偷行窃,见义勇为被奖励500!!\n");money=money+500;break;
    case 3:printf("见到小偷行窃,见义勇为,军体拳耍了16套被砍了32刀,住院花费1000!!");money=money-1000;break;
    case 4:printf("捡到彩票,花费50元打的前往彩票中心兑奖后发现是过期彩票,又打的返回~~\n");money=money-100;break;
    case 5:printf("捡到彩票,花费50元打的前往彩票中心兑奖后发现是中奖彩票,获得1000元!\n");money=money+1000;break;
    case 6:printf("人民币涨值,资金上涨20%!!\n");money=money+money/5;break;
    case 7:printf("路遇乞丐,被强行勒索100元.\n");money=money-100;break;
    case 8:printf("长得太丑被好心人施舍200\n");money=money+200;break;
    case 9:printf("路边破解残局摊,获利100\n");money=money+100;break;
    }
    system("pause");
    return money;
}

/*作死的加入赌场函数*/

    /*此函数用于判断骰子猜测结果*/
int touzi(int touzi1,int touzi2,int a)
{
    int b,daxiao;
    int he;
    he=touzi1+touzi2;
    if (he>6)
    {
        daxiao=13;
        printf("大!\n");
    }
    else
    {
        daxiao=14;
        printf("小!\n");
    }

    if (a<=12)
    {
        if (a==he)
        {
            b=5;
        }
        else
        {
            b=0;
        }
    }
    else if (a<=14)
    {
        if (a==daxiao)
        {
            b=2;
        }
        else
        {
            b=0;
        }
    }
    else
    {
        if (touzi1==touzi2)
        {
            b=3;
        }
        else
        {
            b=0;
        }
    }

    return b;
}
int duchang(int money)
{
        int z[2][5];
        int x[2][6]={0};
        double beilv;
        int a,b,c,n,d,e,m,choice;
        int touzi1,touzi2,touzi0;
        int num,times,guess,p,q;
        int result;
        int touru;
        char name[20];
        int touzi(int touzi1,int touzi2,int a);
        touzi0=0;
    printf("**************************拉斯维加斯****************************\n输入您的赌场外号:\n");
    gets(name);

    /*此处用于清屏并输出当前个人档案*/

xinxi:
    touzi0++;
    if (touzi0>3)
    {
        goto ended;
    }
    shijian(3);
    if (p1.days>=100)
    {
        goto ended;
    }
    system("cls");
    printf("********************拉斯维加斯********************\n");
    puts(name);
    printf("当前资产:%d",money);
    if (money<500)
    {
        printf("\n身份:贫民\n");
    }
        else if (money<1000)
    {
        printf("\n身份:平民\n");
    }
    else if (money<2000)
    {
        printf("\n身份:小资\n");
    }
    else if (money<5000)
    {
        printf("\n身份:富人\n");
    }
    else if (money<50000)
    {
        printf("\n身份:土豪\n");
    }
    else
    {
        printf("\n身份:首富\n");
    }
    if (money<0)
    {
        printf("没钱还想进赌城~?\n");
        goto ended;
    }

    /*此处开始选择赌博*/

    printf("选择一种活动吧:\n1.掷骰子\n2.猜数\n3.炸金花\n4.21点\n5.退出赌城\n");
    scanf("%d",&choice);

    /*开始掷骰子*/

    if (choice==1)
    {
        system("cls");
        printf("OOOOOOOOOOoooooooooo 掷骰子 ooooooooooOOOOOOOOOO\n");
    touzi1=rand()%6+1;
    touzi2=rand()%6+1;
    printf("开始掷骰子,买定离手咯!\n");
    printf("您要买的是:\n1-12.买点数\n13.买大\n14.买小\n15.买豹子\n");
    scanf("%d",&a);
error3:printf("您买入多少钱呢:\n");
    scanf("%d",&touru);
    if (touru>money)
        {
            printf("没钱还敢乱喊价? \n");
            goto error3;
        }
    if (touru<0)
    {
        printf("你他妈是在逗我~?\n");
        goto error3;
    }
    printf("开!骰子情况是%d,%d!",touzi1,touzi2);
    b=touzi(touzi1,touzi2,a);
    money=money-touru+touru*b;
    system("pause");
    }

    /*开始猜数*/

    else if (choice==2)
    {
        system("cls");
        printf("//////////////////// 猜数 \\\\\\\\\\\\\\\\\\\\\n");
error1:printf("请输入您的押金,将按您猜数次数呈倍数返还:\n");
        scanf("%d",&touru);
        if (touru>money)
        {
            printf("没钱还敢乱喊价? \n");
            goto error1;
        }
        if (touru<0)
        {
        printf("你他妈是在逗我~?\n");
        goto error1;
        }
              num=rand()%100;
              for(times=0;times<=10;times++)
              {
                       printf("第%d次猜数:",times+1);
                       scanf("%d",&guess);
                       if (guess>num)
                       {
                              printf("\n猜的大了\n");
                       }
                       else if(guess<num)
                       {
                             printf("\n猜的小了\n");
                       }
                       else
                       {
                              printf("恭喜猜对啦!");
                              break;
                        }
              }
              if (times>=10)
              {
                  printf("10次都猜不出,弱爆了!!\n");
              }

              money=money-touru;
              times=22-2*times;
              beilv=times/10.0;
              money=money+touru*beilv;
              system("pause");
    }
    /*开始炸金花*/
    else if (choice==3)
    {
        system("cls");
        printf("xxxxxxxxxxXXXXXXXXXX 炸金花 XXXXXXXXXXxxxxxxxxxx\n");
        printf("由于本行业为暴利行业,故收取手续费为总金额百分之五,两百元以内则扣十元\n");
        if (money<=200)
        {
            money=money-10;
        }
        else
        {
            money=money*0.95;
        }
        for (m=0;m<=2;m++)
    {
        z[0][m]=rand()%13+1;
        z[1][m]=rand()%13+1;
    }
    /*在此进行排序*/
   for (d=0;d<=1;d++)
    {
        if (z[d][1]>z[d][0])
        {
            e=z[d][0];
            z[d][0]=z[d][1];
            z[d][1]=e;
        }
        if (z[d][2]>z[d][1])
        {
            e=z[d][1];
            z[d][1]=z[d][2];
            z[d][2]=e;
        }
        if (z[d][1]>z[d][0])
        {
            e=z[d][0];
            z[d][0]=z[d][1];
            z[d][1]=e;
        }
    }
    printf("您的手牌是:%d,%d,%d\n",z[0][0],z[0][1],z[0][2]);
error2:printf("您选择跟多少:\n");
    scanf("%d",&touru);
    if (touru>money)
        {
            printf("没钱还敢乱喊价? \n");
            goto error2;
        }
    if (touru<0)
    {
        printf("你他妈是在逗我~?\n");
        goto error2;
    }
    money=money-touru;

    /*此处开始比大小出结果*/

    for (d=0;d<=1;d++)
    {
        if (z[d][0]==z[d][1] && z[d][1]==z[d][2])
        {
            z[d][3]=4;
            z[d][4]=z[d][0];
        }
        else if (z[d][0]==z[d][1] || z[d][1]==z[d][2] || z[d][0]==z[d][2])
        {
            z[d][3]=2;
            if (z[d][0]==z[d][1])
            {
                z[d][4]=z[d][0];
            }
            else if (z[d][1]==z[d][2])
            {
                z[d][4]=z[d][1];
            }
            else
            {
                z[d][4]=z[d][2];
            }

        }
        else
        {
            if (z[d][0]-z[d][1]==1 && z[d][1]-z[d][2]==1)
            {
                z[d][3]=3;
                z[d][4]=z[d][0];
            }
            else
            {
                z[d][3]=1;
                z[d][4]=z[d][0];
            }
        }
    }
        if (z[0][3]==z[1][3])
        {
            if (z[0][4]>=z[1][4])
            {
                n=2;
            }
            else
            {
                n=0;
            }
        }
        else if (z[0][3]>z[1][3])
        {
            n=2;
        }
        else
        {
            n=0;
        }
    touru=touru*n;
    printf("摊牌:%d,%d,%d \n",z[1][0],z[1][1],z[1][2]);
    printf("您获得%d \n",touru);
    money=money+touru;

    system("pause");
    }
    else if (choice==4)
        /*开始21点*/
    {
        system("cls");
        printf("################### 21点 ###################\n");
error4:printf("请投入押金:\n");
        scanf("%d",&touru);
        if (touru>money)
        {
            printf("没钱还敢乱喊价? \n");
            goto error4;
        }
        if (touru<0)
    {
        printf("你他妈是在逗我~?\n");
        goto error4;
    }
        money=money-touru;
/*双方发底牌*/
        for(m=0;m<=1;m++)
        {
            for(n=0;n<=1;n++)
            {
                x[m][n]=rand()%13;
                if (x[m][n]==0 || x[m][n]==11 || x[m][n]==12)
                {
                    x[m][n]=10;
                }
            }
        }
        printf("您当前的手牌为:%d,%d",x[0][0],x[0][1]);
        if(x[0][0]==1 && x[0][1]==1)
        {
            printf("玩家双龙!!!\n");
            beilv=5;
            goto under;
        }
        if((x[0][0]==1 && x[0][1]==10) || (x[0][0]==10 && x[0][1]==1))
        {
            printf("玩家21点!!\n");
            beilv=3;
            goto under;
        }
        if((x[1][0]==1 && x[1][1]==10) || (x[1][0]==10 && x[1][1]==1) || (x[1][0]==1 && x[1][1]==1))
        {
            printf("电脑21点!!\n");
            beilv=0;
            goto under;
        }
        printf("\n输入1则摊牌,输入其他数字继续加牌 \n");
        scanf("%d",&a);
        if (a==1)
        {
            goto tanpai;
        }
        x[0][2]=rand()%13;
        if (x[0][2]==0 || x[0][2]==11 || x[0][2]==12)
        {
            x[0][2]=10;
        }
        printf("您的手牌为:%d,%d,%d \n",x[0][0],x[0][1],x[0][2]);
        x[0][5]=x[0][0]+x[0][1]+x[0][2];
        if (x[0][5]>21)
        {
            beilv=0;
            printf("胀死了!");
            goto under;
        }
        printf("\n输入1则摊牌,输入其他数字继续加牌 \n");
        scanf("%d",&a);
        if (a==1)
        {
            goto tanpai;
        }
        x[0][3]=rand()%13;
        if (x[0][3]==0 || x[0][3]==11 || x[0][3]==12)
        {
            x[0][3]=10;
        }
        printf("您的手牌为:%d,%d,%d,%d \n",x[0][0],x[0][1],x[0][2],x[0][3]);
        x[0][5]=x[0][5]+x[0][3];
        if (x[0][5]>21)
        {
            beilv=0;
            printf("胀死了!! \n");
            goto under;
        }
        printf("\n输入1则摊牌,输入其他数字继续加牌 \n");
        scanf("%d",&a);
        if (a==1)
        {
            goto tanpai;
        }
        x[0][4]=rand()%13;
        if (x[0][4]==0 || x[0][4]==11 || x[0][3]==12)
        {
            x[0][4]=10;
        }
        printf("您的手牌为:%d,%d,%d,%d,%d \n",x[0][0],x[0][1],x[0][2],x[0][3],x[0][4]);
        x[0][5]=x[0][5]+x[0][4];
        if (x[0][5]>21)
        {
            beilv=0;
            printf("胀死了!! \n");
            goto under;
        }
        printf("五小!!\n");
        beilv=3;
        goto under;


tanpai:x[1][5]=x[1][0]+x[1][1];
        for(b=2;(x[1][5]<=17 && b<=4);b++)
        {
            x[1][b]=rand()%13;
            if (x[1][b]==0 || x[1][b]==11 || x[1][b]==12)
            {
                x[1][b]=10;
            }
            printf("电脑加牌:%d\n",x[1][b]);
            x[1][5]=x[1][5]+x[1][b];
            scanf("%d",&a);
        }
        printf("电脑手牌:%d,%d,%d,%d,%d\n",x[1][0],x[1][1],x[1][2],x[1][3],x[1][4]);

        if (x[1][5]>21)
        {
            printf("电脑胀死!\n");
            beilv=2;
            goto under;
        }

        if (x[1][5]>x[0][5])
        {
            printf("电脑大!\n");
            beilv=0;
        }
        else
        {
            printf("玩家大!!\n");
            beilv=2;
        }
under:money=money+touru*beilv;
      system("pause");
    }
    else
    {
        goto ended;
    }
    if (money<=0)
    {
        printf("\n资产用尽,您已被赶出拉斯维加斯\n");
    }
    else
    {
        goto xinxi;
    }

ended:  system("pause");
    return money;
}

0
0
储金洋
储金洋
新手光能
新手光能

俄罗斯方块(比其他的都好玩)

0
蒋智航
蒋智航
高级天翼
高级天翼
#include <stdio.h>  
//交换字符数组元素  
void swapPosition(char ch[][11],int oldX,int oldY,int newX,int newY)  
{  
    char temp;  
    temp = *(*(ch + oldX) + oldY);  
    *(*(ch + oldX) + oldY) = *(*(ch + newX) + newY);  
    *(*(ch + newX) + newY) = temp;  

}  
//打印数组  
void printArray(char (*ch)[11])  
{  
    for(int i = 0;i < 10;i++)  
    {  
        for(int j = 0;j < 10;j++)  
        {  
            printf("%c\t",*(*(ch + i) + j));  
        }  
        printf("\n");  
    }  
}  
int main(int argc, char* argv[])  
{  
    //定义数组  
    char ch[10][11] = {  
        {'#','#','#','#','#','#','#','#','#','#','\0'},  
        {'#','#','#',' ',' ','#','#','#','#','#','\0'},  
        {'#','0','X',' ',' ','#','#','#','#','#','\0'},  
        {'#','#','#','#',' ','#','#','#','#','#','\0'},  
        {'#','#','#',' ',' ',' ',' ','#','#','#','\0'},  
        {'#','#','#',' ',' ',' ',' ',' ','#','#','\0'},  
        {'#','#','#','#','#',' ',' ',' ','#','#','\0'},  
        {'#','#','#','#','#',' ',' ',' ',' ',' ','\0'},  
        {'#','#','#','#','#','#','#','#',' ',' ','\0'},  
        {'#','#','#','#','#','#','#','#','#','#','\0'}  
    };  
    //打印数组  
    printArray(ch);  
    //记录小人及箱子位置  
    //定义路的标志变量street  
    int personX = 2,personY = 1,boxX = 2, boxY = 2;  
    char street = ' ';  
    //提示用户输入移动方向  
    printf("请输入小人移动方向:(w-上,s-下,a-左,d-右)\n");  
    //定义记录用户输入的方向  
    char direction;  
    //根据方向定义循环语句  
    while(1)  
    {  
        scanf("%c",&direction);  
        getchar();//接收键盘回车符  
        switch(direction)  
        {  
            case 'w':  
            case 'W':  
                if(*(*(ch+personX-1)+personY) == street)  
                {  
                    swapPosition(ch,personX,personY,personX - 1,personY );  
                    personX--;  

                }  
                else if(*(*(ch+personX-1)+personY) == *(*(ch+boxX)+boxY))  
                {  
                    if(*(*(ch+boxX-1)+boxY) == street)  
                    {  
                        swapPosition(ch,boxX,boxY,boxX - 1,boxY);  
                        boxX--;  
                        swapPosition(ch,personX,personY,personX - 1,personY);  
                        personX--;  
                    }  
                }  

                break;  
            case 's':  
            case 'S':  
                if(*(*(ch+personX + 1) + personY) == street)  
                {  
                    swapPosition(ch,personX,personY,personX + 1,personY );  
                    personX++;  

                }  
                else if(*(*(ch+personX+1)+personY) == *(*(ch+boxX)+boxY))  
                {  
                    if(*(*(ch+boxX+1)+boxY) == street)  
                    {  
                        swapPosition(ch,boxX,boxY,boxX + 1,boxY);  
                        boxX++;  
                        swapPosition(ch,personX,personY,personX + 1,personY);  
                        personX++;  
                    }  
                }  
                break;  
            case 'a':  
            case 'A':  
                if(*(*(ch+personX)+personY - 1) == street)  
                {  
                    swapPosition(ch,personX,personY,personX ,personY - 1 );  
                    personY--;  

                }  
                else if(*(*(ch+personX)+personY - 1) == *(*(ch+boxX)+boxY))  
                {  
                    if(*(*(ch+boxX)+boxY - 1) == street)  
                    {  
                        swapPosition(ch,boxX,boxY,boxX,boxY - 1);  
                        boxY--;  
                        swapPosition(ch,personX,personY,personX,personY - 1);  
                        personY--;  
                    }  
                }  
                break;  
            case 'd':  
            case 'D':  

                if(*(*(ch+personX)+personY + 1) == street)  
                {  
                    swapPosition(ch,personX,personY,personX ,personY + 1 );  
                    personY++;  

                }  
                else if(*(*(ch+personX)+personY + 1) == *(*(ch+boxX)+boxY))  
                {  
                    if(*(*(ch+boxX)+boxY + 1) == street)  
                    {  
                        swapPosition(ch,boxX,boxY,boxX,boxY + 1);  
                        boxY++;  
                        swapPosition(ch,personX,personY,personX,personY + 1);  
                        personY++;  
                    }  
                }  
                break;  
                case 'q':  
                case 'Q':  
                return 0;  

        }  
        printArray(ch);  
        //定义结束标志  
        if (boxY == 9) {  
            printf("恭喜你,游戏过关!\n");  
            return 0;  
        }  
    }  

    return 0;  
}  

 

0
0
蒋智航
蒋智航
高级天翼
高级天翼
#include <stdio.h>  
//交换字符数组元素  
void swapPosition(char ch[][11],int oldX,int oldY,int newX,int newY)  
{  
    char temp;  
    temp = *(*(ch + oldX) + oldY);  
    *(*(ch + oldX) + oldY) = *(*(ch + newX) + newY);  
    *(*(ch + newX) + newY) = temp;  
      
}  
//打印数组  
void printArray(char (*ch)[11])  
{  
    for(int i = 0;i < 10;i++)  
    {  
        for(int j = 0;j < 10;j++)  
        {  
            printf("%c\t",*(*(ch + i) + j));  
        }  
        printf("\n");  
    }  
}  
int main(int argc, char* argv[])  
{  
    //定义数组  
    char ch[10][11] = {  
        {'#','#','#','#','#','#','#','#','#','#','\0'},  
        {'#','#','#',' ',' ','#','#','#','#','#','\0'},  
        {'#','0','X',' ',' ','#','#','#','#','#','\0'},  
        {'#','#','#','#',' ','#','#','#','#','#','\0'},  
        {'#','#','#',' ',' ',' ',' ','#','#','#','\0'},  
        {'#','#','#',' ',' ',' ',' ',' ','#','#','\0'},  
        {'#','#','#','#','#',' ',' ',' ','#','#','\0'},  
        {'#','#','#','#','#',' ',' ',' ',' ',' ','\0'},  
        {'#','#','#','#','#','#','#','#',' ',' ','\0'},  
        {'#','#','#','#','#','#','#','#','#','#','\0'}  
    };  
    //打印数组  
    printArray(ch);  
    //记录小人及箱子位置  
    //定义路的标志变量street  
    int personX = 2,personY = 1,boxX = 2, boxY = 2;  
    char street = ' ';  
    //提示用户输入移动方向  
    printf("请输入小人移动方向:(w-上,s-下,a-左,d-右)\n");  
    //定义记录用户输入的方向  
    char direction;  
    //根据方向定义循环语句  
    while(1)  
    {  
        scanf("%c",&direction);  
        getchar();//接收键盘回车符  
        switch(direction)  
        {  
            case 'w':  
            case 'W':  
                if(*(*(ch+personX-1)+personY) == street)  
                {  
                    swapPosition(ch,personX,personY,personX - 1,personY );  
                    personX--;  
                      
                }  
                else if(*(*(ch+personX-1)+personY) == *(*(ch+boxX)+boxY))  
                {  
                    if(*(*(ch+boxX-1)+boxY) == street)  
                    {  
                        swapPosition(ch,boxX,boxY,boxX - 1,boxY);  
                        boxX--;  
                        swapPosition(ch,personX,personY,personX - 1,personY);  
                        personX--;  
                    }  
                }  
         
                break;  
            case 's':  
            case 'S':  
                if(*(*(ch+personX + 1) + personY) == street)  
                {  
                    swapPosition(ch,personX,personY,personX + 1,personY );  
                    personX++;  
                      
                }  
                else if(*(*(ch+personX+1)+personY) == *(*(ch+boxX)+boxY))  
                {  
                    if(*(*(ch+boxX+1)+boxY) == street)  
                    {  
                        swapPosition(ch,boxX,boxY,boxX + 1,boxY);  
                        boxX++;  
                        swapPosition(ch,personX,personY,personX + 1,personY);  
                        personX++;  
                    }  
                }  
                break;  
            case 'a':  
            case 'A':  
                if(*(*(ch+personX)+personY - 1) == street)  
                {  
                    swapPosition(ch,personX,personY,personX ,personY - 1 );  
                    personY--;  
                      
                }  
                else if(*(*(ch+personX)+personY - 1) == *(*(ch+boxX)+boxY))  
                {  
                    if(*(*(ch+boxX)+boxY - 1) == street)  
                    {  
                        swapPosition(ch,boxX,boxY,boxX,boxY - 1);  
                        boxY--;  
                        swapPosition(ch,personX,personY,personX,personY - 1);  
                        personY--;  
                    }  
                }  
                break;  
            case 'd':  
            case 'D':  
                
                if(*(*(ch+personX)+personY + 1) == street)  
                {  
                    swapPosition(ch,personX,personY,personX ,personY + 1 );  
                    personY++;  
                      
                }  
                else if(*(*(ch+personX)+personY + 1) == *(*(ch+boxX)+boxY))  
                {  
                    if(*(*(ch+boxX)+boxY + 1) == street)  
                    {  
                        swapPosition(ch,boxX,boxY,boxX,boxY + 1);  
                        boxY++;  
                        swapPosition(ch,personX,personY,personX,personY + 1);  
                        personY++;  
                    }  
                }  
                break;  
                case 'q':  
                case 'Q':  
                return 0;  
              
        }  
        printArray(ch);  
        //定义结束标志  
        if (boxY == 9) {  
            printf("恭喜你,游戏过关!\n");  
            return 0;  
        }  
    }  
  
    return 0;  
}  

 

蒋智航在2018-02-05 09:46:46追加了内容

推箱子

0
0
0
黄俊博
黄俊博
资深光能
资深光能

坦克大战

#include<stdio.h>
#include <windows.h>
#include<conio.h>
#include<time.h>

void gotoxy(int x,int y);//控制光标。X表示横坐标,Y表示纵坐标
void my_print();//设置界面
void print_thing();//打印物品
void print_home();//打印老家
void refresh_map();//刷新地图
void stop();//暂停

void print_my_tank();//打印我的坦克
void print_tank_1();//打印坦克1号
void print_tank_2();//打印坦克2号
void print_tank_3();//打印坦克3号

void clear_my_tank();//清除我的坦克,用于坦克移动后
void clear_tank_1();//清除坦克1号
void clear_tank_2();//清除坦克2号
void clear_tank_3();//清除坦克3号

void turn_up(int a[][3]);//我的坦克上转
void turn_down(int a[][3]);//我的坦克下转
void turn_left(int a[][3]);//我的坦克左转
void turn_right(int a[][3]);//我的坦克右转

void turn_up_1(int a[][3]);//坦克1号上转
void turn_down_1(int a[][3]);//坦克1号下转
void turn_left_1(int a[][3]);//坦克1号左转
void turn_right_1(int a[][3]);//坦克1号右转

void turn_up_2(int a[][3]);//坦克2号上转
void turn_down_2(int a[][3]);//坦克2号下转
void turn_left_2(int a[][3]);//坦克2号左转
void turn_right_2(int a[][3]);//坦克2号右转

void turn_up_3(int a[][3]);//坦克3号上转
void turn_down_3(int a[][3]);//坦克3号下转
void turn_left_3(int a[][3]);//坦克3号左转
void turn_right_3(int a[][3]);//坦克3号右转

void my_move();//我的坦克移动
void move_1();//坦克1号移动
void move_2();//坦克2号移动
void move_3();//坦克3号移动

void print_bullet(int x,int y);//打印敌方坦克的子弹
void print_my_bullet(int x,int y);//打印我的子弹
void clear_bullet(int x,int y);//清楚子弹
int  check_bullet(int x,int y);//检查子弹是否碰撞,没碰返回1,碰到返回0
void shoot();//计算我的坦克子弹的坐标
void shoot_1();//计算坦克1号子弹的坐标
void shoot_2();//计算坦克2号子弹的坐标
void shoot_3();//计算坦克3号子弹的坐标

void change_thing();//记录物品的变化
void change_home();//记录老家的变化
void change_bullet();//纪录子弹的变化
void change_star();//记录星星的变化
void change_tank();//记录我的坦克的变化
void change_tank_1();//记录坦克1号的变化
void change_tank_2();//记录坦克2号的变化
void change_tank_3();//记录坦克3号的变化

void switch_weapons();//切换武器
void switch_skin();//切换皮肤
void help();//帮助
void check_game();//检查游戏胜负
void check_lv();//检查等级
void next_level();//下一关
void get_map();//获得每一关的地图
void initial();//将所有量初始化
void gameover();//游戏结束

void console();//控制窗口
void screen_1();//屏幕1
void screen_2(char *p,int color);//屏幕2
void screen_3();//屏幕3
void produce_star();//产生一个星星
void print_star();//打印星星
void check_star();//检查星星的数量
void clear_star();//清除星星

int my_abs(int x);//绝对值函数,用系统的会有问题
int judge(int x,int y,int state);//判断我的坦克能否前进
int judge2(int x,int y,int state);// 辅助电脑判断能否前进

int check1(int x,int y);//辅助电脑判断的函数
int check2(int x,int y);//辅助电脑判断的函数
int check3(int x,int y);//辅助电脑判断的函数


int life=3;//生命
int enemy=13;//敌人数量
int level=1;//关卡
int weapons=1;//武器
int skin=1;//皮肤
int star=1;//星星
int s=0,t=0;//星星坐标
int score=0;//分数
int lv=1;//等级
int speed=10;//速度
char *info[5]={" "," "," "," "," "};//通知

int map[30][30]={0};//记录整个屏幕上的物体
int thing[28][28]={0};//障碍物,不包括边界
int home[3][4]={{2,2,2,2},{2,1,1,2},{2,1,1,2}};//老家,3行4列

int my_tank[3][3]={0};//我的坦克
int tank_1[3][3]={0};//敌人的坦克1号
int tank_2[3][3]={0};//敌人的坦克2号
int tank_3[3][3]={0};//敌人的坦克3号

int x  , y ;//我的坦克中心坐标
int x1 , y1;//坦克1号中心坐标
int x2 , y2;//坦克2号中心坐标
int x3 , y3;//坦克3号中心坐标

int m=0  , n=0 ;//我的坦克子弹的坐标
int m1=0 , n1=0;//坦克1号子弹的坐标
int m2=0 , n2=0;//坦克2号子弹的坐标
int m3=0 , n3=0;//坦克3号子弹的坐标

int state=0; //我的坦克方向(1上,2下,3左,4右)
int state_1=0;//坦克1号方向
int state_2=0;//坦克2号方向
int state_3=0;//坦克3号方向

int direction=0;//我的坦克子弹射向
int direction_1=0;//坦克1号子弹射向
int direction_2=0;//坦克2号子弹射向
int direction_3=0;//坦克3号子弹射向

int cp1=2;//辅助电脑判断的变量
int cp2=2;//辅助电脑判断的变量
int cp3=2;//辅助电脑判断的变量

int main()//主函数
{
    srand(time(NULL));//设置随机数种子
    console();//设置窗口
    my_print();//打印边框
    initial();//所有量初始化
    while(1)
    {
        int i1,i2,i3,i4,i5,i6,i7;
        my_move();//控制我的坦克移动
        if(i1++%30==0) //控制敌人坦克速度
            move_1();
        if(i2++%30==0) 
            move_2();
        if(i3++%30==0) 
            move_3();
        if(i4++%speed==0)   //控制子弹速度
            shoot();
        if(i5++%speed==0)
            shoot_1();
        if(i6++%speed==0)
            shoot_2();
        if(i7++%speed==0)
            shoot_3();
        screen_1();//刷新屏幕
        Sleep(30);
    }
    return 0;
}

//设置光标输出的位置函数
void gotoxy(int x,int y)//X表示横坐标,Y表示纵坐标。
{
    HANDLE app;
    COORD  pos;
    pos.X=x;
    pos.Y=y;
    app=GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleCursorPosition(app,pos);
}

//控制窗口
void console()
{
    HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);  
    CONSOLE_SCREEN_BUFFER_INFO bInfo; 
    GetConsoleScreenBufferInfo(hOut, &bInfo );  
    SetConsoleTitle("坦克大战"); // 设置窗口的标题
    COORD size = {90, 32};//设置窗口大小
    SetConsoleScreenBufferSize(hOut,size);  
    SMALL_RECT rc = {0,0, 63, 31};
    SetConsoleWindowInfo(hOut,true ,&rc);
}

//打印边界
void my_print()
{
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_BLUE |FOREGROUND_INTENSITY);//蓝色
    printf("■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ |﹊﹊﹊﹊﹊﹊﹊﹊﹊﹊﹊﹊﹊|\n");
    for(int i=0;i<13;i++)
    printf("■                                                        ■ |                          |\n");
    printf("■                                                        ■ |--------------------------|\n");
    for(int j=14;j<28;j++)
    printf("■                                                        ■ |                          |\n");
    printf("■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ |﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍|\n");
}


//打印与清除坦克
void print_my_tank()
{
    for(int i=0;i<3;i++)
        for(int j=0;j<3;j++)
            if(my_tank[i][j]==1)
            {
                switch(skin)
                {
                case 1 :
                    {
                        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);//淡蓝色
                        gotoxy(2*x+2*j-2,y+i-1);
                        printf("■");
                    }break;
                case 2 :
                    {
                        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);//绿色
                        gotoxy(2*x+2*j-2,y+i-1);
                        printf("■");
                    }break;
                case 3 :
                    {
                        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED);//黄色
                        gotoxy(2*x+2*j-2,y+i-1);
                        printf("■");
                    }break;
                case 4 :
                    {
                        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_RED);//白色
                        gotoxy(2*x+2*j-2,y+i-1);
                        printf("■");
                    }break;
                case 5 :
                    {
                        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_BLUE);//紫色
                        gotoxy(2*x+2*j-2,y+i-1);
                        printf("■");
                    }break;
                case 6 :
                    {
                        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);//红色
                        gotoxy(2*x+2*j-2,y+i-1);
                        printf("■");
                    }break;
                case 7 :
                    {
                        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE);//蓝色
                        gotoxy(2*x+2*j-2,y+i-1);
                        printf("■");
                    }break;

                }

            }
}
void clear_my_tank()
{
    for(int i=0;i<3;i++)
        for(int j=0;j<3;j++)
            {
                gotoxy(2*x+2*j-2,y+i-1);
                printf("  ");
            }
}
void print_tank_1()
{
    for(int i=0;i<3;i++)
        for(int j=0;j<3;j++)
            if(tank_1[i][j]==1)
            {
                SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_BLUE);// 紫色
                gotoxy(2*x1+2*j-2,y1+i-1);
                printf("■");
            }
}
void clear_tank_1()
{
    for(int i=0;i<3;i++)
        for(int j=0;j<3;j++)
            {
                gotoxy(2*x1+2*j-2,y1+i-1);
                printf("  ");
            }
}
void print_tank_2()
{
    for(int i=0;i<3;i++)
        for(int j=0;j<3;j++)
            if(tank_2[i][j]==1)
            {
                SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_BLUE);// 紫色
                gotoxy(2*x2+2*j-2,y2+i-1);
                printf("■");
            }
}
void clear_tank_2()
{
    for(int i=0;i<3;i++)
        for(int j=0;j<3;j++)
            {
                gotoxy(2*x2+2*j-2,y2+i-1);
                printf("  ");
            }
}
void print_tank_3()
{
    for(int i=0;i<3;i++)
        for(int j=0;j<3;j++)
            if(tank_3[i][j]==1)
            {
                SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_BLUE);// 紫色
                gotoxy(2*x3+2*j-2,y3+i-1);
                printf("■");
            }
}
void clear_tank_3()
{
    for(int i=0;i<3;i++)
        for(int j=0;j<3;j++)
            {
                gotoxy(2*x3+2*j-2,y3+i-1);
                printf("  ");
            }
}

void print_thing()                // 打印物品
{
    for(int j=0;j<28;j++)         // 从坐标(1,1)点开始打印
        for(int i=0;i<28;i++)
            if(thing[i][j]==1)
            {
                SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);
                gotoxy(2+2*j,1+i);
                printf("■");
            }
            else if(thing[i][j]==2)
            {
                SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED);
                gotoxy(2+2*j,1+i);
                printf("■");
            }
            else if(thing[i][j]==3)
            {
                SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_BLUE);
                gotoxy(2+2*j,1+i);
                printf("■");
            }
            else if(thing[i][j]==4)
            {
                SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE);
                gotoxy(2+2*j,1+i);
                printf("■");
            }
}

void print_home()                 //打印老家
{


    for(int i=0;i<3;i++)          //打印老家外墙       
        for(int j=0;j<4;j++)
            if(home[i][j]==1)
                {
                    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);
                    gotoxy(26+2*j,26+i);
                    printf("■");
                }
            else if(home[i][j]==2)
                {
                    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED);
                    gotoxy(26+2*j,26+i);
                    printf("■");
                }
            else if(home[i][j]==3)
                {
                    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_BLUE);
                    gotoxy(26+2*j,26+i);
                    printf("■");
                }


    {
    for(int i=1;i<3;i++)          //打印老家内部
        for(int j=1;j<3;j++)
                {
                    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);
                    gotoxy(26+2*j,26+i);
                    printf("■");
                }
    }

}


void print_bullet(int x,int y)    //打印敌方坦克的子弹子弹
{
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_BLUE);
    gotoxy(2*x,y);
    printf("⊕");
}

void print_my_bullet(int x,int y)    //打印我的子弹
{
    switch(weapons)
    {
    case 1 :
        {
            SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);
            gotoxy(2*x,y);
            printf("⊕");
        }break;
    case 2 :
        {
            SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
            gotoxy(2*x,y);
            printf("∷");
        }break;
    case 3 :
        {
            SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);
            gotoxy(2*x,y);
            printf("◎");
        }break;
    case 4 :
        {
            SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_BLUE);
            gotoxy(2*x,y);
            printf("※");
        }break;
    case 5 :
        {
            SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
            gotoxy(2*x,y);
            printf("●");
        }break;
    }

}

void clear_bullet(int x,int y)
{
    gotoxy(2*x,y);
    printf("  ");
}


void screen_1()
{
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED);
    gotoxy(62,2);
    printf("          第 %d 关         ",level);
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);
    gotoxy(62,4);
    printf("分数: %d",score);
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE|FOREGROUND_RED);
    gotoxy(80,4);
    printf("LV: %d ",lv);
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_BLUE);
    gotoxy(62,6);
    printf("生命:     坦克×%d         ",life-1);
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
    gotoxy(62,8);
    printf("敌方:     坦克×%d        ",enemy);
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_BLUE);
    gotoxy(62,11);
    printf("当前武器:                 ");
    switch(weapons)
    {
    case 1 :
        {
            SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);
            gotoxy(62,13);
            printf("         普通子弹 ⊕      ");
        }break;
    case 2 :
        {
            SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
            gotoxy(62,13);
            printf("           散弹   ∷      ");
        }break;
    case 3 :
        {
            SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);
            gotoxy(62,13);
            printf("          气泡弹  ◎      ");
        }break;
    case 4 :
        {
            SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_BLUE);
            gotoxy(62,13);
            printf("          雪花弹  ※      ");
        }break;
    case 5 :
        {
            SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
            gotoxy(62,13);
            printf("         超级炮弹 ●      ");
        }break;
    }


}

void screen_2(char *p,int color)
{

    for(int i=15;i<27;i++)//先清屏
    {
        gotoxy(62,i);
        printf("                          ");
    }

    info[0]=info[1];//内容上移
    info[1]=info[2];
    info[2]=info[3];
    info[3]=info[4];
    info[4]=p;

    for(int j=15;j<22;j=j+2)
    {
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_RED);
        gotoxy(62,j);
        printf("%s",info[(j+1)/2-8]);
    }
    switch(color)
    {
    case 1 :
        {
             SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);//绿
             gotoxy(62,23);
             printf("%s",info[4]);
        }break;
    case 2 :
        {
             SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);//淡蓝
             gotoxy(62,23);
             printf("%s",info[4]);
        }break;
    case 3 :
        {
             SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED);//黄
             gotoxy(62,23);
             printf("%s",info[4]);
        }break;
    case 4 :
        {
             SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);//红
             gotoxy(62,23);
             printf("%s",info[4]);
        }break;
    }
}

void screen_3()
{
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN);
    gotoxy(62,27);
    printf("          h键帮助  Esc退出");
    gotoxy(62,28);
    printf("                          ");
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
    if(star<=13)
    for(int i=1;i<=star;i++)
    {
        gotoxy(60+2*i,28);
        printf("★");
    }
}


void produce_star()
{
    int a=0;
    for(int i=4;i<26;i++)
    {
        for(int j=1;j<29;j++)
            if(map[i][j]==0 && rand()%300==0)
            {
                s=j,t=i;
                print_star();
                a=1;
                break;
            }
        if(a)
            break;
    }

}

void print_star()
{
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
        gotoxy(2*s,t);
        printf("★");
}

void change_star()
{
    if(s==x&&t==(y-1) || s==x&&t==(y+1) || s==(x-1)&&t==y || s==(x+1)&&t==y)
    {
        clear_star();
        s=0,t=0;
        star++;
        screen_2("恭喜你获得一颗星星",2);
        printf("\7");
        check_star();
        print_my_tank();
    }
    if(s==x1&&t==(y1-1) || s==x1&&t==(y1+1) || s==(x1-1)&&t==y1 || s==(x1+1)&&t==y1)
    {
        clear_star();
        s=0,t=0;
        screen_2("很遗憾星星被抢走了",4);
        printf("\7");
        print_tank_1();
    }
    if(s==x2&&t==(y2-1) || s==x2&&t==(y2+1) || s==(x2-1)&&t==y2 || s==(x2+1)&&t==y2)
    {
        clear_star();
        s=0,t=0;
        screen_2("很遗憾星星被抢走了",4);
        printf("\7");
        print_tank_2();
    }

    if(s==x3&&t==(y3-1) || s==x3&&t==(y3+1) || s==(x3-1)&&t==y3 || s==(x3+1)&&t==y3)
    {
        clear_star();
        s=0,t=0;
        screen_2("很遗憾星星被抢走了",4);
        printf("\7");
        print_tank_3();
    }

}

void clear_star()
{
    gotoxy(2*s,t);
    printf("  ");
}

void check_star()
{
    switch(star)
    {
    case 2 :screen_2("解锁新武器:  散弹",4),screen_3();break;
    case 3 :screen_2("成功解锁  绿色皮肤",2),screen_3();break;
    case 4 :screen_2("解锁新武器:  气泡弹",2),screen_3();break;
    case 5 :screen_2("成功解锁  黄色皮肤",3),screen_3();break;
    case 6 :screen_2("解锁新武器:  雪花弹",1),screen_3();break;
    case 7 :screen_2("成功解锁  白色皮肤",1),screen_3();break;
    case 8 :screen_2("解锁新武器:  超级炮弹",4),screen_3();break;
    case 9 :screen_2("成功解锁  紫色皮肤",1),screen_3();break;
    case 10 :screen_2("您已拥有10颗星啦",3),screen_3();break;
    case 11 :screen_2("成功解锁  红色皮肤",4),screen_3();break;
    case 12 :screen_2("您已拥有12颗星啦",3),screen_3();break;
    case 13 :screen_2("成功解锁 蓝色皮肤",1),screen_3();break;
    }

}

void switch_weapons()
{
    weapons++;
    if(weapons>star/2+1)
        weapons=1;
    if(star==1)
        screen_2("当前星星数不足,赶快收集吧",1);
    else
    {
        switch(weapons)
        {
        case 1 :screen_2("切换到普通子弹",1);break;
        case 2 :screen_2("切换到散弹",1);break;
        case 3 :screen_2("切换到气泡弹",1);break;
        case 4 :screen_2("切换到雪花弹",1);break;
        case 5 :screen_2("切换到超级炮弹弹",1);break;
        }
    }

}

void switch_skin()
{
    skin++;
    if(skin>(star-1)/2+1)
        skin=1;
    if(star==1 || star==2)
        screen_2("当前星星数不足,赶快收集吧",1);
    else
    {
        switch(skin)
        {
        case 1 :screen_2("切换到淡蓝色皮肤",1);break;
        case 2 :screen_2("切换到绿色皮肤",1);break;
        case 3 :screen_2("切换到黄色皮肤",1);break;
        case 4 :screen_2("切换到白色皮肤",1);break;
        case 5 :screen_2("切换到紫色皮肤",1);break;
        case 6 :screen_2("切换到红色皮肤",1);break;
        case 7 :screen_2("切换到蓝色皮肤",1);break;
        }
    }


}

void shoot()
{

    if(m!=0 || n!=0)
        if(map[n][m]==0)//如果子弹还留在地图上,就清除掉       
            clear_bullet(m,n);
    if(m==0 && n==0)//代表现在场上没有我的坦克的子弹,则重新发射子弹
    {
        switch(state)
        {
            case 1 :
                {
                    m=x;
                    n=y-2;
                    direction=1;
                }break;
            case 2 :
                {
                    m=x;
                    n=y+2;
                    direction=2;
                }break;
            case 3 :
                {
                    m=x-2;
                    n=y;
                    direction=3;
                }break;
            case 4 :
                {
                    m=x+2;
                    n=y;
                    direction=4;
                }break;
        }
    }
    else
    {
        switch(direction)
        {
            case 1 :n--;break;
            case 2 :n++;break;
            case 3 :m--;break;
            case 4 :m++;break;
        }
    }
    change_thing();//检查是否击中障碍物
    change_home();//检查是否击中老家
    change_bullet();//检查是否击中子弹
    change_tank_1();//检查是否击中坦克1号
    change_tank_2();//检查是否击中坦克2号
    change_tank_3();//检查是否击中坦克3号
    if(check_bullet(m,n))   
        print_my_bullet(m,n);
    else
        m=0,n=0;
}

void shoot_1()
{

    if(m1!=0 || n1!=0)
        if(map[n1][m1]==0)//如果子弹还留在地图上,就清除掉     
            clear_bullet(m1,n1);
    if(m1==0 && n1==0)//代表现在场上没有坦克1号的子弹,则重新发射子弹
    {
        switch(state_1)
        {
            case 1 :
                {
                    m1=x1;
                    n1=y1-2;
                    direction_1=1;
                }break;
            case 2 :
                {
                    m1=x1;
                    n1=y1+2;
                    direction_1=2;
                }break;
            case 3 :
                {
                    m1=x1-2;
                    n1=y1;
                    direction_1=3;
                }break;
            case 4 :
                {
                    m1=x1+2;
                    n1=y1;
                    direction_1=4;
                }break;
        }
    }
    else
    {
        switch(direction_1)
        {
            case 1 :n1--;break;
            case 2 :n1++;break;
            case 3 :m1--;break;
            case 4 :m1++;break;
        }
    }
    change_thing();//检查是否击中障碍物
    change_home();//检查是否击中老家
    change_bullet();//检查是否击中子弹
    change_tank();//检查是否击中我的坦克
    if(check_bullet(m1,n1)) 
        print_bullet(m1,n1);
    else
        m1=0,n1=0;
}

void shoot_2()
{

    if(m2!=0 || n2!=0)
        if(map[n2][m2]==0)//如果子弹还留在地图上,就清除掉     
            clear_bullet(m2,n2);
    if(m2==0 && n2==0)//代表现在场上没有坦克2号的子弹,则重新发射子弹
    {
        switch(state_2)
        {
            case 1 :
                {
                    m2=x2;
                    n2=y2-2;
                    direction_2=1;
                }break;
            case 2 :
                {
                    m2=x2;
                    n2=y2+2;
                    direction_2=2;
                }break;
            case 3 :
                {
                    m2=x2-2;
                    n2=y2;
                    direction_2=3;
                }break;
            case 4 :
                {
                    m2=x2+2;
                    n2=y2;
                    direction_2=4;
                }break;
        }
    }
    else
    {
        switch(direction_2)
        {
            case 1 :n2--;break;
            case 2 :n2++;break;
            case 3 :m2--;break;
            case 4 :m2++;break;
        }
    }
    change_thing();//检查是否击中障碍物
    change_home();//检查是否击中老家
    change_bullet();//检查是否击中子弹
    change_tank();//检查是否击中我的坦克
    if(check_bullet(m2,n2)) 
        print_bullet(m2,n2);
    else
        m2=0,n2=0;
}


void shoot_3()
{

    if(m3!=0 || n3!=0)
        if(map[n3][m3]==0)//如果子弹还留在地图上,就清除掉     
            clear_bullet(m3,n3);
    if(m3==0 && n3==0)//代表现在场上没有坦克3号的子弹,则重新发射子弹
    {
        switch(state_3)
        {
            case 1 :
                {
                    m3=x3;
                    n3=y3-2;
                    direction_3=1;
                }break;
            case 2 :
                {
                    m3=x3;
                    n3=y3+2;
                    direction_3=2;
                }break;
            case 3 :
                {
                    m3=x3-2;
                    n3=y3;
                    direction_3=3;
                }break;
            case 4 :
                {
                    m3=x3+2;
                    n3=y3;
                    direction_3=4;
                }break;
        }
    }
    else
    {
        switch(direction_3)
        {
            case 1 :n3--;break;
            case 2 :n3++;break;
            case 3 :m3--;break;
            case 4 :m3++;break;
        }
    }
    change_thing();//检查是否击中障碍物
    change_home();//检查是否击中老家
    change_bullet();//检查是否击中子弹
    change_tank();//检查是否击中我的坦克
    if(check_bullet(m3,n3))
        print_bullet(m3,n3);
    else
        m3=0,n3=0;
}

void turn_up(int a[][3])
{
    int tank_up[3][3]={{0,1,0},{1,1,1},{1,0,1}};
    if(state==1)
    {
        if(judge(x,y,state))
        {
            clear_my_tank();
            y--;
            print_my_tank();
            refresh_map();
        }
    }
    else
    {
        for(int i=0;i<3;i++)
            for(int j=0;j<3;j++)
                a[i][j]=tank_up[i][j];
        clear_my_tank();
        print_my_tank();
        state=1;
        refresh_map();

    }
    change_star();
}


void turn_down(int a[][3])
{
    int tank_down[3][3]={{1,0,1},{1,1,1},{0,1,0}};
    if(state==2)
    {
        if(judge(x,y,state))
        {
            clear_my_tank();
            y++;
            print_my_tank();
            refresh_map();
        }
    }
    else
    {
        for(int i=0;i<3;i++)
            for(int j=0;j<3;j++)
                a[i][j]=tank_down[i][j];
        clear_my_tank();
        print_my_tank();
        state=2;
        refresh_map();
    }
    change_star();

}

void turn_left(int a[][3])
{
    int tank_left[3][3]={{0,1,1},{1,1,0},{0,1,1}};
    if(state==3)
    {
        if(judge(x,y,state))
        {
            clear_my_tank();
            x--;
            print_my_tank();
            refresh_map();
        }
    }
    else
    {
        for(int i=0;i<3;i++)
            for(int j=0;j<3;j++)
                a[i][j]=tank_left[i][j];
        clear_my_tank();
        print_my_tank();
        state=3;
        refresh_map();
    }
    change_star();

}

void turn_right(int a[][3])
{
    int tank_right[3][3]={{1,1,0},{0,1,1},{1,1,0}};
    if(state==4)
    {
        if(judge(x,y,state))
        {
            clear_my_tank();
            x++;
            print_my_tank();
            refresh_map();
        }
    }
    else
    {
        for(int i=0;i<3;i++)
            for(int j=0;j<3;j++)
                a[i][j]=tank_right[i][j];
        clear_my_tank();
        print_my_tank();
        state=4;
        refresh_map();
    }
    change_star();

}

void turn_up_1(int a[][3])
{
    int tank_up[3][3]={{0,1,0},{1,1,1},{1,0,1}};
    if(state_1==1)
    {
        clear_tank_1();
        y1--;
        print_tank_1();
        refresh_map();
    }
    else
    {
        for(int i=0;i<3;i++)
            for(int j=0;j<3;j++)
                a[i][j]=tank_up[i][j];
        clear_tank_1();
        print_tank_1();
        state_1=1;
        refresh_map();
    }
}

void turn_down_1(int a[][3])
{
    int tank_down[3][3]={{1,0,1},{1,1,1},{0,1,0}};
    if(state_1==2)
    {
        clear_tank_1();
        y1++;
        print_tank_1();
        refresh_map();
    }
    else
    {
        for(int i=0;i<3;i++)
            for(int j=0;j<3;j++)
                a[i][j]=tank_down[i][j];
        clear_tank_1();
        print_tank_1();
        state_1=2;
        refresh_map();
    }
}

void turn_left_1(int a[][3])
{
    int tank_left[3][3]={{0,1,1},{1,1,0},{0,1,1}};
    if(state_1==3)
    {
        clear_tank_1();
        x1--;
        print_tank_1();
        refresh_map();
    }
    else
    {
        for(int i=0;i<3;i++)
            for(int j=0;j<3;j++)
                a[i][j]=tank_left[i][j];
        clear_tank_1();
        print_tank_1();
        state_1=3;
        refresh_map();
    }
}

void turn_right_1(int a[][3])
{
    int tank_right[3][3]={{1,1,0},{0,1,1},{1,1,0}};
    if(state_1==4)
    {
        clear_tank_1();
        x1++;
        print_tank_1();
        refresh_map();
    }
    else
    {
        for(int i=0;i<3;i++)
            for(int j=0;j<3;j++)
                a[i][j]=tank_right[i][j];
        clear_tank_1();
        print_tank_1();
        state_1=4;
        refresh_map();
    }
}

void turn_up_2(int a[][3])
{
    int tank_up[3][3]={{0,1,0},{1,1,1},{1,0,1}};
    if(state_2==1)
    {
        clear_tank_2();
        y2--;
        print_tank_2();
        refresh_map();
    }
    else
    {
        for(int i=0;i<3;i++)
            for(int j=0;j<3;j++)
                a[i][j]=tank_up[i][j];
        clear_tank_2();
        print_tank_2();
        state_2=1;
        refresh_map();
    }
}

void turn_down_2(int a[][3])
{
    int tank_down[3][3]={{1,0,1},{1,1,1},{0,1,0}};
    if(state_2==2)
    {
        clear_tank_2();
        y2++;
        print_tank_2();
        refresh_map();
    }
    else
    {
        for(int i=0;i<3;i++)
            for(int j=0;j<3;j++)
                a[i][j]=tank_down[i][j];
        clear_tank_2();
        print_tank_2();
        state_2=2;
        refresh_map();
    }
}

void turn_left_2(int a[][3])
{
    int tank_left[3][3]={{0,1,1},{1,1,0},{0,1,1}};
    if(state_2==3)
    {
        clear_tank_2();
        x2--;
        print_tank_2();
        refresh_map();
    }
    else
    {
        for(int i=0;i<3;i++)
            for(int j=0;j<3;j++)
                a[i][j]=tank_left[i][j];
        clear_tank_2();
        print_tank_2();
        state_2=3;
        refresh_map();
    }
}

void turn_right_2(int a[][3])
{
    int tank_right[3][3]={{1,1,0},{0,1,1},{1,1,0}};
    if(state_2==4)
    {
        clear_tank_2();
        x2++;
        print_tank_2();
        refresh_map();
    }
    else
    {
        for(int i=0;i<3;i++)
            for(int j=0;j<3;j++)
                a[i][j]=tank_right[i][j];
        clear_tank_2();
        print_tank_2();
        state_2=4;
        refresh_map();
    }
}

void turn_up_3(int a[][3])
{
    int tank_up[3][3]={{0,1,0},{1,1,1},{1,0,1}};
    if(state_3==1)
    {
        clear_tank_3();
        y3--;
        print_tank_3();
        refresh_map();
    }
    else
    {
        for(int i=0;i<3;i++)
            for(int j=0;j<3;j++)
                a[i][j]=tank_up[i][j];
        clear_tank_3();
        print_tank_3();
        state_3=1;
        refresh_map();
    }
}

void turn_down_3(int a[][3])
{
    int tank_down[3][3]={{1,0,1},{1,1,1},{0,1,0}};
    if(state_3==2)
    {
        clear_tank_3();
        y3++;
        print_tank_3();
        refresh_map();
    }
    else
    {
        for(int i=0;i<3;i++)
            for(int j=0;j<3;j++)
                a[i][j]=tank_down[i][j];
        clear_tank_3();
        print_tank_3();
        state_3=2;
        refresh_map();
    }
}

void turn_left_3(int a[][3])
{
    int tank_left[3][3]={{0,1,1},{1,1,0},{0,1,1}};
    if(state_3==3)
    {
        clear_tank_3();
        x3--;
        print_tank_3();
        refresh_map();
    }
    else
    {
        for(int i=0;i<3;i++)
            for(int j=0;j<3;j++)
                a[i][j]=tank_left[i][j];
        clear_tank_3();
        print_tank_3();
        state_3=3;
        refresh_map();
    }
}

void turn_right_3(int a[][3])
{
    int tank_right[3][3]={{1,1,0},{0,1,1},{1,1,0}};
    if(state_3==4)
    {
        clear_tank_3();
        x3++;
        print_tank_3();
        refresh_map();
    }
    else
    {
        for(int i=0;i<3;i++)
            for(int j=0;j<3;j++)
                a[i][j]=tank_right[i][j];
        clear_tank_3();
        print_tank_3();
        state_3=4;
        refresh_map();
    }
}

int judge(int x,int y,int state)//x,y坦克当前坐标,state坦克当前方向
{
    switch(state)
    {
    case 1 :if(map[y-2][x]==0 && map[y-1][x-1]==0 && map[y-1][x+1]==0 && map[y-2][x-1]==0 && map[y-2][x+1]==0)
                return 1;
            else
                return 0;
    case 2 :if(map[y+2][x]==0 && map[y+1][x-1]==0 && map[y+1][x+1]==0 && map[y+2][x-1]==0 && map[y+2][x+1]==0)
                return 1;
            else
                return 0;
    case 3 :if(map[y][x-2]==0 && map[y-1][x-1]==0 && map[y+1][x-1]==0 && map[y-1][x-2]==0 && map[y+1][x-2]==0)
                return 1;
            else
                return 0;
    case 4 :if(map[y][x+2]==0 && map[y-1][x+1]==0 && map[y+1][x+1]==0 && map[y-1][x+2]==0 && map[y+1][x+2]==0)
                return 1;
            else
                return 0;
    }
}

int judge2(int x,int y,int state)//x,y坦克当前坐标,state坦克当前方向
{
    switch(state)
    {
    case 1 :if(map[y-2][x]==0 && map[y-2][x-1]==0 && map[y-2][x+1]==0)
                return 1;
            else
                return 0;
    case 2 :if(map[y+2][x]==0 && map[y+2][x-1]==0 && map[y+2][x+1]==0)
                return 1;
            else
                return 0;
    case 3 :if(map[y][x-2]==0 && map[y-1][x-2]==0 && map[y+1][x-2]==0)
                return 1;
            else
                return 0;
    case 4 :if(map[y][x+2]==0 && map[y-1][x+2]==0 && map[y+1][x+2]==0)
                return 1;
            else
                return 0;
    }
}

void refresh_map()               //i代表行,即纵坐标;j代表列,即横坐标
{
    {
        for(int i=0;i<30;i++)          //首先地图清零
            for(int j=0;j<30;j++)
                map[i][j]=0;
    }

    {
        for(int i=0;i<30;i++)    //地图第一部分:围墙(完全不动)
        {
            map[i][0]=1;
            map[i][29]=1;
        }
        for(int j=0;j<30;j++) 
        {
            map[0][j]=1;
            map[29][j]=1;
        }
    }

    {
        for(int i=0;i<3;i++)   //地图第二部分:老家(几乎不动)
            for(int j=0;j<4;j++)
                map[i+26][j+13]=home[i][j];
    }

    {
        for(int i=0;i<28;i++)  //地图第三部分:障碍物(有时改变)
            for(int j=0;j<28;j++)
                map[i+1][j+1]=thing[i][j];
    }

    {
        switch(state)          //地图第四部分:坦克(总是改变)
        {
        case 1 :
            {
                map[y-1][x-1]=0;  map[y-1][x]=1;      map[y-1][x+1]=0;
                map[y][x-1]=1;    map[y][x]=1;        map[y][x+1]=1;
                map[y+1][x-1]=1;  map[y+1][x]=0;      map[y+1][x+1]=1;

            }break;
        case 2 :
            {
                map[y-1][x-1]=1;  map[y-1][x]=0;      map[y-1][x+1]=1;
                map[y][x-1]=1;    map[y][x]=1;        map[y][x+1]=1;
                map[y+1][x-1]=0;  map[y+1][x]=1;      map[y+1][x+1]=0;
            }break;
        case 3 :
            {
                map[y-1][x-1]=0;  map[y-1][x]=1;      map[y-1][x+1]=1;
                map[y][x-1]=1;    map[y][x]=1;        map[y][x+1]=0;
                map[y+1][x-1]=0;  map[y+1][x]=1;      map[y+1][x+1]=1;
            }break;
        case 4 :
            {
                map[y-1][x-1]=1;  map[y-1][x]=1;      map[y-1][x+1]=0;
                map[y][x-1]=0;    map[y][x]=1;        map[y][x+1]=1;
                map[y+1][x-1]=1;  map[y+1][x]=1;      map[y+1][x+1]=0;
            }break;
        }

        switch(state_1)
        {
        case 1 :
            {
                map[y1-1][x1-1]=0;  map[y1-1][x1]=1;      map[y1-1][x1+1]=0;
                map[y1][x1-1]=1;    map[y1][x1]=1;        map[y1][x1+1]=1;
                map[y1+1][x1-1]=1;  map[y1+1][x1]=0;      map[y1+1][x1+1]=1;

            }break;
        case 2 :
            {
                map[y1-1][x1-1]=1;  map[y1-1][x1]=0;      map[y1-1][x1+1]=1;
                map[y1][x1-1]=1;    map[y1][x1]=1;        map[y1][x1+1]=1;
                map[y1+1][x1-1]=0;  map[y1+1][x1]=1;      map[y1+1][x1+1]=0;
            }break;
        case 3 :
            {
                map[y1-1][x1-1]=0;  map[y1-1][x1]=1;      map[y1-1][x1+1]=1;
                map[y1][x1-1]=1;    map[y1][x1]=1;        map[y1][x1+1]=0;
                map[y1+1][x1-1]=0;  map[y1+1][x1]=1;      map[y1+1][x1+1]=1;
            }break;
        case 4 :
            {
                map[y1-1][x1-1]=1;  map[y1-1][x1]=1;      map[y1-1][x1+1]=0;
                map[y1][x1-1]=0;    map[y1][x1]=1;        map[y1][x1+1]=1;
                map[y1+1][x1-1]=1;  map[y1+1][x1]=1;      map[y1+1][x1+1]=0;
            }break;
        }

        switch(state_2)
        {
        case 1 :
            {
                map[y2-1][x2-1]=0;  map[y2-1][x2]=1;      map[y2-1][x2+1]=0;
                map[y2][x2-1]=1;    map[y2][x2]=1;        map[y2][x2+1]=1;
                map[y2+1][x2-1]=1;  map[y2+1][x2]=0;      map[y2+1][x2+1]=1;

            }break;
        case 2 :
            {
                map[y2-1][x2-1]=1;  map[y2-1][x2]=0;      map[y2-1][x2+1]=1;
                map[y2][x2-1]=1;    map[y2][x2]=1;        map[y2][x2+1]=1;
                map[y2+1][x2-1]=0;  map[y2+1][x2]=1;      map[y2+1][x2+1]=0;
            }break;
        case 3 :
            {
                map[y2-1][x2-1]=0;  map[y2-1][x2]=1;      map[y2-1][x2+1]=1;
                map[y2][x2-1]=1;    map[y2][x2]=1;        map[y2][x2+1]=0;
                map[y2+1][x2-1]=0;  map[y2+1][x2]=1;      map[y2+1][x2+1]=1;
            }break;
        case 4 :
            {
                map[y2-1][x2-1]=1;  map[y2-1][x2]=1;      map[y2-1][x2+1]=0;
                map[y2][x2-1]=0;    map[y2][x2]=1;        map[y2][x2+1]=1;
                map[y2+1][x2-1]=1;  map[y2+1][x2]=1;      map[y2+1][x2+1]=0;
            }break;
        }

        switch(state_3)
        {
        case 1 :
            {
                map[y3-1][x3-1]=0;  map[y3-1][x3]=1;      map[y3-1][x3+1]=0;
                map[y3][x3-1]=1;    map[y3][x3]=1;        map[y3][x3+1]=1;
                map[y3+1][x3-1]=1;  map[y3+1][x3]=0;      map[y3+1][x3+1]=1;

            }break;
        case 2 :
            {
                map[y3-1][x3-1]=1;  map[y3-1][x3]=0;      map[y3-1][x3+1]=1;
                map[y3][x3-1]=1;    map[y3][x3]=1;        map[y3][x3+1]=1;
                map[y3+1][x3-1]=0;  map[y3+1][x3]=1;      map[y3+1][x3+1]=0;
            }break;
        case 3 :
            {
                map[y3-1][x3-1]=0;  map[y3-1][x3]=1;      map[y3-1][x3+1]=1;
                map[y3][x3-1]=1;    map[y3][x3]=1;        map[y3][x3+1]=0;
                map[y3+1][x3-1]=0;  map[y3+1][x3]=1;      map[y3+1][x3+1]=1;
            }break;
        case 4 :
            {
                map[y3-1][x3-1]=1;  map[y3-1][x3]=1;      map[y3-1][x3+1]=0;
                map[y3][x3-1]=0;    map[y3][x3]=1;        map[y3][x3+1]=1;
                map[y3+1][x3-1]=1;  map[y3+1][x3]=1;      map[y3+1][x3+1]=0;
            }break;
        }
    }
}


void my_move()
{
    char key;
    if (kbhit()) //检测,如果有按键就执行if里面的
    {
        key = getch();//捕获按键
        switch( key ) 
        {
        case 72:turn_up(my_tank);//上
            break;
        case 75:turn_left(my_tank);//左
            break;
        case 77:turn_right(my_tank);//右
            break;
        case 80:turn_down(my_tank);//下
            break;
        case 32:stop();//空格 暂停或开始
            break;
        case 104:help();//小h切换到帮助菜单
            break;
        case 115:switch_skin(),print_my_tank();//小s键切换皮肤
            break;
        case 119:switch_weapons();//小w键切换武器
            break;

        case 27:exit(0);//Esc 退出
        default: ;
        }
    }
}

int check1(int x,int y)//在正上面,用它检测
{
    for(int j=y;j<27;j++)
        if(map[j][x]==4)
            return 0;
    return 1;
}

int check2(int x,int y)//在正左面,用它检测
{
    for(int i=x;i<14;i++)
        if(map[y][i]==4)
            return 0;
    return 1;
}

int check3(int x,int y)//在正右面,用它检测
{
    for(int i=x;i>15;i--)
        if(map[y][i]==4)
            return 0;
    return 1;
}

void move_1()
{
    if((x1==14 || x1==15) && check1(x1,y1))//在正上面
    {
            if(state_1!=2)
                turn_down_1(tank_1);
    }
    else if(x1<14 && y1==27 && check2(x1,y1))//在正左面
    {
            if(state_1!=4)
                turn_right_1(tank_1);
    }
    else if(x1>15 && y1==27 && check3(x1,y1))//在正右面
    {
            if(state_1!=3)
                turn_left_1(tank_1);
    }
    else
    {
        if(judge2(x1,y1,cp1))
            switch(cp1)
            {
            case 1 :turn_up_1(tank_1);break;
            case 2 :turn_down_1(tank_1);break;
            case 3 :turn_left_1(tank_1);break;
            case 4 :turn_right_1(tank_1);break;
            }
        while(judge2(x1,y1,cp1) == 0)
        {
            cp1=(rand()%4+1);
        }

    }


}

void move_2()
{
    if((x2==14 || x2==15) && check1(x2,y2))//在正上面
    {
            if(state_2!=2)
                turn_down_2(tank_2);
    }
    else if(x2<14 && y2==27 && check2(x2,y2))//在正左面
    {
            if(state_2!=4)
                turn_right_2(tank_2);
    }
    else if(x2>15 && y2==27 && check3(x2,y2))//在正右面
    {
            if(state_2!=3)
                turn_left_2(tank_2);
    }
    else
    {
        if(judge2(x2,y2,cp2))
            switch(cp2)
            {
            case 1 :turn_up_2(tank_2);break;
            case 2 :turn_down_2(tank_2);break;
            case 3 :turn_left_2(tank_2);break;
            case 4 :turn_right_2(tank_2);break;
            }
        while(judge2(x2,y2,cp2) == 0)
        {
            cp2=(rand()%4+1);
        }

    }
}

void move_3()
{
    if((x3==14 || x3==15) && check1(x3,y3))//在正上面
    {
            if(state_3!=2)
                turn_down_3(tank_3);
    }
    else if(x3<14 && y3==27 && check2(x3,y3))//在正左面
    {
            if(state_3!=4)
                turn_right_3(tank_3);
    }
    else if(x3>15 && y3==27 && check3(x3,y3))//在正右面
    {

            if(state_3!=3)
                turn_left_3(tank_3);
    }
    else
    {
        if(judge2(x3,y3,cp3))
            switch(cp3)
            {
            case 1 :turn_up_3(tank_3);break;
            case 2 :turn_down_3(tank_3);break;
            case 3 :turn_left_3(tank_3);break;
            case 4 :turn_right_3(tank_3);break;
            }
        while(judge2(x3,y3,cp3) == 0)
        {
            cp3=(rand()%4+1);
        }

    }
}

int check_bullet(int x,int y)
{
    if(map[y][x])
        return 0;
    return 1;
}

void change_thing()//物品被子弹击中会改变
{
    if(m>0&&m<29 && n>0&&n<29)//被我的子弹击中
        if(thing[n-1][m-1]==1)//打中第一种方块
        {
            if(weapons==2)
            {
                if(thing[n][m-1]==1)
                    thing[n][m-1]=0;
                    gotoxy(2*m,n+1);
                    printf("  ");//擦去方块
                if(thing[n-2][m-1]==1)
                    thing[n-2][m-1]=0;
                    gotoxy(2*m,n-1);
                    printf("  ");//擦去方块
                if(thing[n-1][m]==1)
                    thing[n-1][m]=0;
                    gotoxy(2*(m+1),n);
                    printf("  ");//擦去方块
                if(thing[n-1][m-2]==1)
                    thing[n-1][m-2]=0;
                    gotoxy(2*(m-1),n);
                    printf("  ");//擦去方块
                thing[n-1][m-1]=0;
                gotoxy(2*m,n);
                printf("  ");//擦去方块
                m=0,n=0;//子弹消失
                print_thing();
                refresh_map();
            }
            else if(weapons==3)
            {
                thing[n-1][m-1]=0;
                gotoxy(2*m,n);
                printf("  ");//擦去方块
                print_my_bullet(m,n);
                print_thing();
                refresh_map();
            }
            else
            {
                thing[n-1][m-1]=0;
                gotoxy(2*m,n);
                printf("  ");//擦去方块
                m=0,n=0;//子弹消失
                print_thing();
                refresh_map();
            }

        }

        else if(thing[n-1][m-1]==2)//打到第二种方块
        {
            if(weapons==5)
            {
                thing[n-1][m-1]=0;
                gotoxy(2*m,n);
                printf("  ");
                m=0,n=0;//子弹消失
                print_thing();
                refresh_map();
            }
            else if(weapons==2)
            {
                m=0,n=0;
            }
            else
            {
                thing[n-1][m-1]=1;
                m=0,n=0;//子弹消失
                print_thing();
                refresh_map();
            }
        }

        else if(thing[n-1][m-1]==3)
        {
            if(weapons==4 || weapons==2)
                m=0,n=0;
            else if(weapons==5)
            {
                thing[n-1][m-1]=0;
                gotoxy(2*m,n);
                printf("  ");
                m=0,n=0;//子弹消失
                print_thing();
                refresh_map();
            }
            else
            {
                thing[n-1][m-1]=2;
                m=0,n=0;//子弹消失
                print_thing();
                refresh_map();
            }
        }

        else if(thing[n-1][m-1]==4)//此方块不受子弹影响
        {
            m=0,n=0;//子弹消失
        }

    if(m1>0&&m1<29 && n1>0&&n1<29)//被坦克1号子弹击中
        if(thing[n1-1][m1-1]==1)
        {
            thing[n1-1][m1-1]=0;
            gotoxy(2*m1,n1);
            printf("  ");
            m1=0,n1=0;
            print_thing();
            refresh_map();
        }
        else if(thing[n1-1][m1-1]==2)
        {
            thing[n1-1][m1-1]=1;
            m1=0,n1=0;//子弹消失
            print_thing();
            refresh_map();
        }
        else if(thing[n1-1][m1-1]==3)
        {
            thing[n1-1][m1-1]=2;
            m1=0,n1=0;//子弹消失
            print_thing();
            refresh_map();
        }
        else if(thing[n-1][m-1]==4)//此方块不受子弹影响
        {
            m1=0,n1=0;//子弹消失
        }

    if(m2>0&&m2<29 && n2>0&&n2<29)
        if(thing[n2-1][m2-1]==1)
        {
            thing[n2-1][m2-1]=0;
            gotoxy(2*m2,n2);
            printf("  ");
            m2=0,n2=0;
            print_thing();
            refresh_map();
        }
        else if(thing[n2-1][m2-1]==2)
        {
            thing[n2-1][m2-1]=1;
            m2=0,n2=0;//子弹消失
            print_thing();
            refresh_map();
        }
        else if(thing[n2-1][m2-1]==3)
        {
            thing[n2-1][m2-1]=2;
            m2=0,n2=0;//子弹消失
            print_thing();
            refresh_map();
        }
        else if(thing[n2-1][m2-1]==4)//此方块不受子弹影响
        {
            m2=0,n2=0;//子弹消失
        }

    if(m3>0&&m3<29 && n3>0&&n3<29)
        if(thing[n3-1][m3-1]==1)
        {
            thing[n3-1][m3-1]=0;
            gotoxy(2*m3,n3);
            printf("  ");
            m3=0,n3=0;
            print_thing();
            refresh_map();
        }
        else if(thing[n3-1][m3-1]==2)
        {
            thing[n3-1][m3-1]=1;
            m3=0,n3=0;//子弹消失
            print_thing();
            refresh_map();
        }
        else if(thing[n3-1][m3-1]==3)
        {
            thing[n3-1][m3-1]=2;
            m3=0,n3=0;//子弹消失
            print_thing();
            refresh_map();
        }
        else if(thing[n3-1][m3-1]==4)//此方块不受子弹影响
        {
            m3=0,n3=0;//子弹消失
        }

}

void change_home()
{
    if(m==14&&n==27 || m==15&&n==27 || m==14&&n==28 || m==15&&n==28)//如果子弹打到老家里,游戏结束
         gameover();
    else if(m>12 && n>25 && m<17 && n<29)
        if(weapons==4)//只有4号子弹对老家的墙有效
        {
            home[n-26][m-13]=3;
            screen_2("你修复了老家哦!",1);
            m=0,n=0;   //子弹消失
            print_home();
            refresh_map();
        }
        else
            m=0,n=0;


    if(m1==14&&n1==27 || m1==15&&n1==27 || m1==14&&n1==28 || m1==15&&n1==28)
         gameover();
    else if(m1>12 && n1>25 && m1<17 && n1<29)

            if(home[n1-26][m1-13]==1)         
            {
                home[n1-26][m1-13]=0;
                screen_2("警报! 警报!",4);
                gotoxy(2*m1,n1);
                printf("  ");
                m1=0,n1=0;
                print_home();
                refresh_map();
            }
            else if(home[n1-26][m1-13]==2)        
            {
                home[n1-26][m1-13]=1;
                screen_2("敌人威胁到了你的老家",4);
                m1=0,n1=0;   //子弹消失
                print_home();
                refresh_map();
            }
            else if(home[n1-26][m1-13]==3)         
            {
                home[n1-26][m1-13]=2;
                screen_2("敌人对你的防御开始了打击",4);
                m1=0,n1=0;   //子弹消失
                print_home();
                refresh_map();
            }

    if(m2==14&&n2==27 || m2==15&&n2==27 || m2==14&&n2==28 || m2==15&&n2==28)
         gameover();
    else if(m2>12 && n2>25 && m2<17 && n2<29)
        if(home[n2-26][m2-13]==1)         
        {
            home[n2-26][m2-13]=0;
            screen_2("警报! 警报!",4);
            gotoxy(2*m2,n2);
            printf("  ");
            m2=0,n2=0;
            print_home();
            refresh_map();
        }
        else if(home[n2-26][m2-13]==2)        
        {
            home[n2-26][m2-13]=1;
            screen_2("敌人威胁到了你的老家",4);
            m2=0,n2=0;   //子弹消失
            print_home();
            refresh_map();
        }
        else if(home[n2-26][m2-13]==3)         
        {
            home[n2-26][m2-13]=2;
            screen_2("敌人对你的防御开始了打击",4);
            m2=0,n2=0;   //子弹消失
            print_home();
            refresh_map();
        }

    if(m3==14&&n3==27 || m3==15&&n3==27 || m3==14&&n3==28 || m3==15&&n3==28)
         gameover();
    else if(m3>12 && n3>25 && m3<17 && n3<29)
        if(home[n3-26][m3-13]==1)        
        {
            home[n3-26][m3-13]=0;
            screen_2("警报! 警报!",4);
            gotoxy(2*m3,n3);
            printf("  ");
            m3=0,n3=0;
            print_home();
            refresh_map();
        }
        else if(home[n3-26][m3-13]==2)        
        {
            home[n3-26][m3-13]=1;
            screen_2("敌人威胁到了你的老家",4);
            m3=0,n3=0;   //子弹消失
            print_home();
            refresh_map();
        }
        else if(home[n3-26][m3-13]==3)         
        {
            home[n3-26][m3-13]=2;
            screen_2("敌人对你的防御开始了打击",4);
            m3=0,n3=0;   //子弹消失
            print_home();
            refresh_map();
        }


}

void change_bullet()//当我的坦克子弹和敌人坦克子弹碰撞
{
    if(m!=0 && m==m1 && n==n1)
    {
        clear_bullet(m,n);
        m=0,n=0,
        clear_bullet(m1,n1);
        m1=0,n1=0;
    }
    if(m!=0 && m==m2 && n==n2)
    {
        clear_bullet(m,n);
        m=0,n=0,
        clear_bullet(m2,n2);
        m2=0,n2=0;
    }
    if(m!=0 && m==m3 && n==n3)
    {
        clear_bullet(m,n);
        m=0,n=0,
        clear_bullet(m3,n3);
        m3=0,n3=0;
    }
}

void change_tank()
{
    switch(state)
    {
    case 1 :                           //当我的坦克方向向上时
        {
            if(x==m1&&(y-1)==n1 || (x-1)==m1&&y==n1 || x==m1&&y==n1 || (x+1)==m1&&y==n1 || (x-1)==m1&&(y+1)==n1 || (x+1)==m1&&(y+1)==n1)//如果坦克1号子弹打到我的坦克
                clear_my_tank(),screen_2("坦克1号击中了你  生命值减1",4),x=10,y=27,m1=0,n1=0,life--,check_game(),turn_up(my_tank);//我的坦克回到初始位置,坦克1号子弹消失,生命值减1,检查游戏是否结束,若没结束初始化方向
            if(x==m2&&(y-1)==n2 || (x-1)==m2&&y==n2 || x==m2&&y==n2 || (x+1)==m2&&y==n2 || (x-1)==m2&&(y+1)==n2 || (x+1)==m2&&(y+1)==n2)//如果坦克2号子弹打到我的坦克
                clear_my_tank(),screen_2("坦克2号击中了你  生命值减1",4),x=10,y=27,m2=0,n2=0,life--,check_game(),turn_up(my_tank);//我的坦克回到初始位置,坦克2号子弹消失,生命值减1,检查游戏是否结束,若没结束初始化方向
            if(x==m3&&(y-1)==n3 || (x-1)==m3&&y==n3 || x==m3&&y==n3 || (x+1)==m3&&y==n3 || (x-1)==m3&&(y+1)==n3 || (x+1)==m3&&(y+1)==n3)//如果坦克3号子弹打到我的坦克
                clear_my_tank(),screen_2("坦克3号击中了你  生命值减1",4),x=10,y=27,m3=0,n3=0,life--,check_game(),turn_up(my_tank);//我的坦克回到初始位置,坦克3号子弹消失,生命值减1,检查游戏是否结束,若没结束初始化方向
        }break;
    case 2 :
        {
            if(x==m1&&(y+1)==n1 || (x-1)==m1&&y==n1 || x==m1&&y==n1 || (x+1)==m1&&y==n1 || (x-1)==m1&&(y-1)==n1 || (x+1)==m1&&(y-1)==n1)
                clear_my_tank(),screen_2("坦克1号击中了你  生命值减1",4),x=10,y=27,m1=0,n1=0,life--,check_game(),turn_up(my_tank);
            if(x==m2&&(y+1)==n2 || (x-1)==m2&&y==n2 || x==m2&&y==n2 || (x+1)==m2&&y==n2 || (x-1)==m2&&(y-1)==n2 || (x+1)==m2&&(y-1)==n2)
                clear_my_tank(),screen_2("坦克2号击中了你  生命值减1",4),x=10,y=27,m2=0,n2=0,life--,check_game(),turn_up(my_tank);
            if(x==m3&&(y+1)==n3 || (x-1)==m3&&y==n3 || x==m3&&y==n3 || (x+1)==m3&&y==n3 || (x-1)==m3&&(y-1)==n3 || (x+1)==m3&&(y-1)==n3)
                clear_my_tank(),screen_2("坦克3号击中了你  生命值减1",4),x=10,y=27,m3=0,n3=0,life--,check_game(),turn_up(my_tank);

        }
    case 3 :
        {
            if(x==m1&&(y-1)==n1 || (x-1)==m1&&y==n1 || x==m1&&y==n1 || (x+1)==m1&&(y-1)==n1 || x==m1&&(y+1)==n1 || (x+1)==m1&&(y+1)==n1)
                clear_my_tank(),screen_2("坦克1号击中了你  生命值减1",4),x=10,y=27,m1=0,n1=0,life--,check_game(),turn_up(my_tank);
            if(x==m2&&(y-1)==n2 || (x-1)==m2&&y==n2 || x==m2&&y==n2 || (x+1)==m2&&(y-1)==n2 || x==m2&&(y+1)==n2 || (x+1)==m2&&(y+1)==n2)
                clear_my_tank(),screen_2("坦克2号击中了你  生命值减1",4),x=10,y=27,m2=0,n2=0,life--,check_game(),turn_up(my_tank);
            if(x==m3&&(y-1)==n3 || (x-1)==m3&&y==n3 || x==m3&&y==n3 || (x+1)==m3&&(y-1)==n3 || x==m3&&(y+1)==n3 || (x+1)==m3&&(y+1)==n3)
                clear_my_tank(),screen_2("坦克3号击中了你  生命值减1",4),x=10,y=27,m3=0,n3=0,life--,check_game(),turn_up(my_tank);
        }
    case 4 :
        {
            if(x==m1&&(y-1)==n1 || (x-1)==m1&&(y-1)==n1 || x==m1&&y==n1 || (x-1)==m1&&(y+1)==n1 || x==m1&&(y+1)==n1 || (x+1)==m1&&y==n1)
                clear_my_tank(),screen_2("坦克1号击中了你  生命值减1",4),x=10,y=27,m1=0,n1=0,life--,check_game(),turn_up(my_tank);
            if(x==m2&&(y-1)==n2 || (x-1)==m2&&(y-1)==n2 || x==m2&&y==n2 || (x-1)==m2&&(y+1)==n2 || x==m2&&(y+1)==n2 || (x+1)==m2&&y==n2)
                clear_my_tank(),screen_2("坦克2号击中了你  生命值减1",4),x=10,y=27,m2=0,n2=0,life--,check_game(),turn_up(my_tank);
            if(x==m3&&(y-1)==n3 || (x-1)==m3&&(y-1)==n3 || x==m3&&y==n3 || (x-1)==m3&&(y+1)==n3 || x==m3&&(y+1)==n3 || (x+1)==m3&&y==n3)
                clear_my_tank(),screen_2("坦克3号击中了你  生命值减1",4),x=10,y=27,m3=0,n3=0,life--,check_game(),turn_up(my_tank);
        }
    }
}

void change_tank_1()
{
    switch(state_1)
    {
    case 1 :
        {
            if(x1==m&&(y1-1)==n || (x1-1)==m&&y1==n || x1==m&&y1==n || (x1+1)==m&&y1==n || (x1-1)==m&&(y1+1)==n || (x1+1)==m&&(y1+1)==n)//如果我的坦克子弹打到坦克1号
                clear_tank_1(),screen_2("你击中了坦克1号   +100分",3),x1=2,y1=2,m=0,n=0,enemy--,score=score+100,check_lv(),produce_star(),check_game();//坦克1号回到初始位置,我的坦克号子弹消失,敌人数量值减1,分数加100,检查胜负

        }break;
    case 2 :
        {
            if(x1==m&&(y1+1)==n || (x1-1)==m&&y1==n || x1==m&&y1==n || (x1+1)==m&&y1==n || (x1-1)==m&&(y1-1)==n || (x1+1)==m&&(y1-1)==n)
                clear_tank_1(),screen_2("你击中了坦克1号   +100分",3),x1=2,y1=2,m=0,n=0,enemy--,score=score+100,check_lv(),produce_star(),check_game();

        }
    case 3 :
        {
            if(x1==m&&(y1-1)==n || (x1-1)==m&&y1==n || x1==m&&y1==n || (x1+1)==m&&(y1-1)==n || x1==m&&(y1+1)==n || (x1+1)==m&&(y1+1)==n)
                clear_tank_1(),screen_2("你击中了坦克1号   +100分",3),x1=2,y1=2,m=0,n=0,enemy--,score=score+100,check_lv(),produce_star(),check_game();

        }
    case 4 :
        {
            if(x1==m&&(y1-1)==n || (x1-1)==m&&(y1-1)==n || x1==m&&y1==n || (x1-1)==m&&(y1+1)==n || x1==m&&(y1+1)==n || (x1+1)==m&&y1==n)
                clear_tank_1(),screen_2("你击中了坦克1号   +100分",3),x1=2,y1=2,m=0,n=0,enemy--,score=score+100,check_lv(),produce_star(),check_game();

        }
    }
}

void change_tank_2()
{
    switch(state_2)
    {
    case 1 :
        {
            if(x2==m&&(y2-1)==n || (x2-1)==m&&y2==n || x2==m&&y2==n || (x2+1)==m&&y2==n || (x2-1)==m&&(y2+1)==n || (x2+1)==m&&(y2+1)==n)//如果我的坦克子弹打到坦克2号
                clear_tank_2(),screen_2("你击中了坦克2号   +100分",3),x2=14,y2=2,m=0,n=0,enemy--,score=score+100,check_lv(),produce_star(),check_game();//坦克2号回到初始位置,我的坦克号子弹消失,敌人数量值减1,分数加100,检查胜负

        }break;
    case 2 :
        {
            if(x2==m&&(y2+1)==n || (x2-1)==m&&y2==n || x2==m&&y2==n || (x2+1)==m&&y2==n || (x2-1)==m&&(y2-1)==n || (x2+1)==m&&(y2-1)==n)
                clear_tank_2(),screen_2("你击中了坦克2号   +100分",3),x2=14,y2=2,m=0,n=0,enemy--,score=score+100,check_lv(),produce_star(),check_game();

        }
    case 3 :
        {
            if(x2==m&&(y2-1)==n || (x2-1)==m&&y2==n || x2==m&&y2==n || (x2+1)==m&&(y2-1)==n || x2==m&&(y2+1)==n || (x2+1)==m&&(y2+1)==n)
                clear_tank_2(),screen_2("你击中了坦克2号   +100分",3),x2=14,y2=2,m=0,n=0,enemy--,score=score+100,check_lv(),produce_star(),check_game();

        }
    case 4 :
        {
            if(x2==m&&(y2-1)==n || (x2-1)==m&&(y2-1)==n || x2==m&&y2==n || (x2-1)==m&&(y2+1)==n || x2==m&&(y2+1)==n || (x2+1)==m&&y2==n)
                clear_tank_2(),screen_2("你击中了坦克2号   +100分",3),x2=14,y2=2,m=0,n=0,enemy--,score=score+100,check_lv(),produce_star(),check_game();

        }
    }
}

void change_tank_3()
{
    switch(state_3)
    {
    case 1 :
        {
            if(x3==m&&(y3-1)==n || (x3-1)==m&&y3==n || x3==m&&y3==n || (x3+1)==m&&y3==n || (x3-1)==m&&(y3+1)==n || (x3+1)==m&&(y3+1)==n)//如果我的坦克子弹打到坦克3号
                clear_tank_3(),screen_2("你击中了坦克3号   +100分",3),x3=27,y3=2,m=0,n=0,enemy--,score=score+100,check_lv(),produce_star(),check_game();//坦克3号回到初始位置,我的坦克号子弹消失,敌人数量值减1,分数加100,检查胜负

        }break;
    case 2 :
        {
            if(x3==m&&(y3+1)==n || (x3-1)==m&&y3==n || x3==m&&y3==n || (x3+1)==m&&y3==n || (x3-1)==m&&(y3-1)==n || (x3+1)==m&&(y3-1)==n)
                clear_tank_3(),screen_2("你击中了坦克3号   +100分",3),x3=27,y3=2,m=0,n=0,enemy--,score=score+100,check_lv(),produce_star(),check_game();

        }
    case 3 :
        {
            if(x3==m&&(y3-1)==n || (x3-1)==m&&y3==n || x3==m&&y3==n || (x3+1)==m&&(y3-1)==n || x3==m&&(y3+1)==n || (x3+1)==m&&(y3+1)==n)
                clear_tank_3(),screen_2("你击中了坦克3号   +100分",3),x3=27,y3=2,m=0,n=0,enemy--,score=score+100,check_lv(),produce_star(),check_game();

        }
    case 4 :
        {
            if(x3==m&&(y3-1)==n || (x3-1)==m&&(y3-1)==n || x3==m&&y3==n || (x3-1)==m&&(y3+1)==n || x3==m&&(y3+1)==n || (x3+1)==m&&y3==n)
                clear_tank_3(),screen_2("你击中了坦克3号   +100分",3),x3=27,y3=2,m=0,n=0,enemy--,score=score+100,check_lv(),produce_star(),check_game();

        }
    }
}

void check_lv()
{

    switch(score/1000)
    {
    case 0 :lv=1,speed=10;break;
    case 1 :if(lv==1) screen_2("恭喜升到2级!",2);lv=2,speed=9;break;
    case 2 :if(lv==2) screen_2("恭喜升到3级!",2);lv=3,speed=8;break;
    case 3 :if(lv==3) screen_2("恭喜升到4级!",2);lv=4,speed=7;break;
    case 4 :if(lv==4) screen_2("恭喜升到5级!",2);lv=5,speed=6;break;
    case 5 :if(lv==5) screen_2("恭喜升到6级!",2);lv=6,speed=5;break;
    case 6 :if(lv==6) screen_2("恭喜升到7级!",2);lv=7,speed=4;break;
    case 7 :if(lv==7) screen_2("恭喜升到8级!",2);lv=8,speed=3;break;
    case 8 :if(lv==8) screen_2("恭喜升到9级!",2);lv=9,speed=2;break;
    case 9 :if(lv==9) screen_2("恭喜升到10级!,满级啦",2);lv=10,speed=1;break;
    }

}

void get_map()
{
    int map1[28][28]={{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,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,2,2,2,1,1,1,1,1,1,3,3,3,3,1,1,1,1,1,1,1,1,0,0,0},{1,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0},{1,1,1,1,2,2,2,1,1,1,1,1,1,3,3,3,3,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},{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,1,1,1,1,1,1,1,1,4,4,4,4,4,4,4,4,1,1,1,1,1,1,1,1,1},{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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,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},{2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0},{0,0,0,0,0,0,0,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,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},{0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},{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,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,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0},{3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}};
    int map2[28][28]={{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,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,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1},{1,1,1,1,1,1,0,0,1,3,3,3,3,3,3,3,3,3,3,3,1,0,0,1,1,1,1,1},{1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,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,0,0,0,0,0,0,0,0,1,1},{1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1},{1,1,1,1,1,1,0,0,1,4,4,4,4,4,4,4,4,4,4,4,1,0,0,1,1,1,1,1},{1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1},{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,4,4,4},{3,3,3,3,3,3,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,3,3,3,3,3,3},{1,1,1,1,3,3,0,0,3,3,1,1,1,1,1,1,1,1,3,3,0,0,3,3,1,1,1,1},{3,3,3,3,0,0,0,0,0,0,3,3,3,3,3,3,3,3,0,0,0,0,0,0,3,3,3,3},{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,1,1},{1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1},{2,2,2,2,2,2,0,0,2,2,2,2,2,2,2,2,2,2,2,2,0,0,2,2,2,2,2,2},{3,3,3,3,3,3,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,3,3,3,3,3,3},{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,1,1},{3,3,3,3,3,3,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,3,3,3,3,3,3},{2,2,2,2,2,2,0,0,2,2,2,2,2,2,2,2,2,2,2,2,0,0,2,2,2,2,2,2},{1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,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,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}};
    int map3[28][28]={{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,0,0,0,0,0,0,0,0,0,0,0},{0,2,2,2,2,2,0,4,4,4,4,0,1,1,1,1,0,4,4,4,4,0,2,2,2,2,2,0},{0,0,2,2,2,0,4,4,4,4,4,4,0,1,1,0,4,4,4,4,4,4,0,2,2,2,0,0},{0,0,0,2,0,4,4,4,4,4,4,4,4,0,0,4,4,4,4,4,4,4,4,0,2,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,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,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,0,0,0,0,0,0},{1,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,0,0,0,0,1},{1,1,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,0,0,0,0,0,0,1,1},{1,1,1,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,0,0,0,0,0,0,1,1,1},{1,1,1,4,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,1,1,1,1},{1,1,1,3,4,0,0,0,0,0,0,4,4,4,4,4,4,0,0,0,0,0,0,4,1,1,1,1},{1,1,1,1,3,4,0,0,0,0,0,0,4,4,4,4,0,0,0,0,0,0,4,3,1,1,1,1},{1,1,1,1,1,3,4,0,0,0,0,0,0,4,4,0,0,0,0,0,0,4,3,1,1,1,1,1},{1,1,1,1,1,1,3,4,0,0,0,0,0,0,0,0,0,0,1,0,4,3,1,1,1,1,1,1},{1,1,1,1,1,1,1,3,4,0,0,0,0,0,1,0,0,0,0,4,3,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,3,4,0,0,0,0,0,0,0,0,4,3,1,1,1,1,1,1,1,1},{3,3,3,3,3,3,3,3,4,0,0,0,0,0,0,0,0,0,0,4,3,3,3,3,3,3,3,3},{4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}};
    int map4[28][28]={{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,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,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,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0},{0,0,0,0,0,0,0,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,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,3,0,0,0,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,0,0,0,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,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,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,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,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,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,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},{1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1},{1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,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,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}};
    int map5[28][28]={{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,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,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},{3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3},{2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},{3,3,4,4,3,3,3,3,3,3,3,3,3,3,4,4,3,3,3,3,4,4,3,3,3,3,3,3},{1,1,4,4,1,1,1,1,1,1,1,3,3,1,1,4,4,1,1,4,4,1,1,1,1,1,1,1},{1,1,4,4,1,1,1,1,1,1,1,3,3,1,1,1,4,4,4,4,1,1,1,1,1,1,1,1},{1,1,4,4,1,1,1,1,1,1,1,3,3,1,1,1,1,4,4,1,1,1,1,1,1,1,1,1},{1,1,4,4,1,1,1,1,1,1,1,3,3,1,1,1,1,4,4,1,1,1,1,1,1,1,1,1},{1,1,4,4,1,1,1,1,1,1,1,3,3,1,1,1,1,4,4,1,1,1,1,1,1,1,1,1},{1,1,4,4,1,1,1,1,1,1,1,3,3,1,1,1,1,4,4,1,1,1,1,1,1,1,1,1},{1,1,4,4,1,1,1,1,1,1,1,3,3,1,1,1,1,4,4,1,1,1,1,1,1,1,1,1},{1,1,4,4,1,1,1,1,1,1,1,3,3,1,1,1,1,4,4,1,1,1,1,1,1,1,1,1},{1,1,4,4,4,4,4,4,4,1,1,3,3,1,1,1,1,4,4,1,1,1,1,1,1,1,1,1},{1,1,4,4,4,4,4,4,4,1,1,3,3,1,1,1,1,4,4,1,1,1,1,1,1,1,1,1},{3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3},{1,1,1,1,1,1,1,1,1,1,2,3,3,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,2,3,3,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,2,3,3,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,2,3,3,2,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,3,3,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,3,3,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}};
    int map6[28][28]={{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,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,4,0,0,0,4,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0},{1,1,1,1,4,0,0,0,4,1,1,0,0,0,1,1,1,1,1,4,4,4,4,4,4,0,0,0},{1,1,0,1,4,0,0,0,4,1,1,0,0,0,1,1,1,1,1,4,0,0,0,0,0,0,0,0},{1,1,0,1,4,0,0,0,4,1,1,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0},{1,1,0,1,4,0,0,4,1,1,1,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0},{1,1,0,1,4,0,0,0,4,1,1,0,0,0,0,0,0,0,0,4,0,0,0,3,4,0,0,0},{1,1,0,1,4,0,0,0,4,4,4,4,4,4,4,4,0,0,0,4,0,0,0,3,4,0,0,0},{1,1,0,1,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,3,4,0,0,0},{1,1,0,1,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,3,4,0,0,0},{1,1,0,1,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,3,4,0,0,0},{4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,0,4,4,4,4,0,0,0,3,4,0,0,0},{1,1,0,1,1,1,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,4,0,0,0},{1,1,0,1,1,1,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,4,0,0,0},{1,1,0,1,1,1,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,4,0,0,0},{1,1,0,1,1,1,4,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,3,4,0,0,0},{1,1,0,1,1,1,4,0,0,0,1,2,1,3,3,3,3,3,3,3,3,3,3,3,4,0,0,0},{1,1,0,4,4,4,4,0,0,0,1,2,1,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,1,2,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,1,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,1,2,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,2,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1},{0,0,0,1,1,1,1,1,1,1,1,1,0,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}};


    switch(level)//判断是第几关,然后载入相应地图
    {
    case 1 :
        {
            for(int i=0;i<28;i++)
                for(int j=0;j<28;j++)
                    thing[i][j]=map1[i][j];
        }break;
    case 2 :
        {
            for(int i=0;i<28;i++)
                for(int j=0;j<28;j++)
                    thing[i][j]=map2[i][j];
        }break;
    case 3 :
        {
            for(int i=0;i<28;i++)
                for(int j=0;j<28;j++)
                    thing[i][j]=map3[i][j];
        }break;
    case 4 :
        {
            for(int i=0;i<28;i++)
                for(int j=0;j<28;j++)
                    thing[i][j]=map4[i][j];
        }break;
    case 5 :
        {
            for(int i=0;i<28;i++)
                for(int j=0;j<28;j++)
                    thing[i][j]=map5[i][j];
        }break;
    case 6 :
        {
            for(int i=0;i<28;i++)
                for(int j=0;j<28;j++)
                    thing[i][j]=map6[i][j];
        }break;
    default :
        {
            for(int i=4;i<24;i++)
                for(int j=0;j<28;j++)
                    thing[i][j]=rand()%5;
        }
    }
}

void stop()
{
    int a=0;
    char *poem[50]={"      壮哉神将陆伯言","      丈八二桃把营连","      一兵队友张文远","      二兵袁术只等闲","      己方残血放万箭","      敌人弱势开桃园","      转眼队友全托管","      挂上闪电继续连","      铁索全场遭天谴","      一道闪电划过天","      苦心经营几十年","      一夜回到解放前","      队友绝望人心散","      濒死求桃无人怜","      凡人闻之结叹惋","      只见神将笑不言","      我有牌堆很简单","      神技自救不要钱","      连完桃来再连酒","      救完自己救队友","      年轻任性谁能管","      笑看三核被炸残","      只是敌人太狡诈","      各种刷牌各种卡","      凡人皆畏二术禅","      国太香香没得玩","      手牌装备全都有","      体力瞬间就回满","      队友全问怎么办","      怀疑陆神要崩盘","      神将表示莫惊慌","      掏出神器从裤裆","      要问神器是什么","      连弩44杀清全场","      凡人表示瞎狗眼","      不识神将在眼前","      从此美名天下传","      众神闻之皆跪舔","      遍寻三国名将传","      谁人不识陆伯言"," "," "," "," ","     你居然看完。。。     ","  ","  ","  ","  ","  "};
    char key;
    screen_2("游戏暂停",4);
    while(1)
    {
        for(int i=0;i<50;i++)
        {
            Sleep(2000);
            if (kbhit()) //检测
            {
                key = getch();//捕获按键
                if(key==32)
                {
                    screen_2("准备开始",2);
                    a=1;
                    break;
                }
            }
            screen_2(poem[i],2);
            if(a)
                break;
        }
        if(a)
            break;

    }

}


void help()
{
    char key1,key2;
    int a=1;
    for(int i=15;i<29;i++)//先清屏
    {
        gotoxy(62,i);
        printf("                          ");
    }

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);
    gotoxy(62,15);
    printf("           帮助           ");

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);
    gotoxy(62,17);
    printf("↑ ↓ ← →   控制方向");

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);
    gotoxy(62,19);
    printf(" 小写 w       切换武器");

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);
    gotoxy(62,21);
    printf(" 小写 s       切换皮肤");

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);
    gotoxy(62,23);
    printf(" 小写 h       帮助/退出");

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);
    gotoxy(62,25);
    printf("  空格        暂停/开始");

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_BLUE|FOREGROUND_GREEN);
    gotoxy(62,27);
    printf("按0查看更多");

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE);
    gotoxy(62,28);
    printf("                 版本:1.0");

    while(1)
    {
        if (kbhit()) //检测,如果有按键就执行if里面的
        {
            key1 = getch();//捕获按键
            if( 104 == key1 )
            {
                screen_2("看完帮助 继续游戏吧",2);
                screen_3();
                break;
            }

            else if( 48 == key1 )
            {
                while(1)
                {
                for(int i=17;i<29;i++)//先清屏
                {
                    gotoxy(62,i);
                    printf("                          ");
                }

                switch(a)
                {
                case 1 :
                    {
                        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);
                        gotoxy(62,17);
                        printf("■  绿色方块可承受一次打击");
                        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED);
                        gotoxy(62,19);
                        printf("■  黄色油块可承受两次打击");
                        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_BLUE);
                        gotoxy(62,21);
                        printf("■  白色冰块可承受三次打击");
                        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE);
                        gotoxy(62,23);
                        printf("■  蓝色石块无法被破环");
                        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_BLUE|FOREGROUND_GREEN);
                        gotoxy(62,27);
                        printf("按空格键继续");

                    }break;

                case 2 :
                    {
                        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);
                        gotoxy(62,17);
                        printf("⊕  普通子弹攻击力为1     ");
                        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
                        gotoxy(62,19);
                        printf("∷  散弹可对绿色方块造成大");
                        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
                        gotoxy(62,21);
                        printf("范围破坏,但是无法对其它类");
                        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
                        gotoxy(62,23);
                        printf("型的方块造成破坏          ");
                        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);
                        gotoxy(62,25);
                        printf("◎  气泡弹可以对一排的绿色");
                        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);
                        gotoxy(62,27);
                        printf("方块造成破坏");

                    }break;

                case 3 :
                    {
                        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_RED);
                        gotoxy(62,17);
                        printf("※  雪花弹对白色冰块无效,");
                        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_RED);
                        gotoxy(62,19);
                        printf("但是可以将老家的围墙修成白");
                        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_RED);
                        gotoxy(62,21);
                        printf("色冰块,从而保护老家");
                        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
                        gotoxy(62,23);
                        printf("●  超级炮弹可以对除蓝色石");
                        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
                        gotoxy(62,25);
                        printf("块外所有方块造成一次性的巨");
                        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
                        gotoxy(62,27);
                        printf("大破坏");

                    }break;

                case 4 :
                    {
                        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_RED);
                        gotoxy(62,17);
                        printf("每打掉一辆坦克加100 分,同");
                        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_RED);
                        gotoxy(62,19);
                        printf("时有一定几率掉落星星,收集");
                        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_RED);
                        gotoxy(62,21);
                        printf("星星可解锁武器和皮肤。每当");
                        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_RED);
                        gotoxy(62,23);
                        printf("分数达到整千时,你将升级,");
                        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_RED);
                        gotoxy(62,25);
                        printf("升级后,子弹速度将会变快,");
                        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_RED);
                        gotoxy(62,27);
                        printf("同时敌人也将变强");

                    }break;

                case 5 :
                    {
                        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_RED);
                        gotoxy(62,17);
                        printf("游戏内置六张地图,第六关往");
                        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_RED);
                        gotoxy(62,19);
                        printf("后将会出现系统的随机地图");
                        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_RED);
                        gotoxy(62,21);
                        printf("友情提示:你自己的子弹都");
                        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_RED);
                        gotoxy(62,23);
                        printf("无法对老家的围墙造成破坏");
                        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_RED);
                        gotoxy(62,25);
                        printf(",但是可以对内部造成破坏");
                        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_RED);
                        gotoxy(62,27);
                        printf(",因此别总把枪口对着老家");

                    }break;

                case 6 :
                    {
                        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_BLUE|FOREGROUND_GREEN);
                        gotoxy(62,27);
                        printf("按空格键退出");

                    }break;

                }


                while(1)
                {
                    if (32==getch()) a++;break;
                }
                if(a==7)break;
            }

        }
        }
        if(a==7)
            {
                screen_2("看完帮助 继续游戏吧",2);
                screen_3();
                break;
            }           
    }

}

void check_game()
{
    if(life==0)
        gameover();
    if(enemy==0)
        next_level();
}

void next_level()
{
    screen_1();
    level++;
    for(int i=15;i<29;i++)//先清屏
    {
        gotoxy(62,i);
        printf("                          ");
    }

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);
    gotoxy(62,17);
    printf("          恭喜过关        ");

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);
    gotoxy(62,23);
    printf("    按 空格键 继续游戏    ");

    while(1)
    {
        if(32 == getch())
        {

            int home0[3][4]={{2,2,2,2},{2,1,1,2},{2,1,1,2}};//定义一个老家的初始化值

            {
                for(int i=0;i<5;i++)
                    info[i]=" ";//通知清零
            }
            {
                for(int i=0;i<3;i++)//老家初始化
                    for(int j=0;j<4;j++)
                        home[i][j]=home0[i][j];
            }   

            m=0  , n=0 ;//我的坦克子弹的坐标清零
            m1=0 , n1=0;//坦克1号子弹的坐标清零
            m2=0 , n2=0;//坦克2号子弹的坐标清零
            m3=0 , n3=0;//坦克3号子弹的坐标清零

            {
            for(int i=1;i<29;i++)
                for(int j=1;j<29;j++)
                {
                    gotoxy(2*i,j);
                    printf("  ");
                }
            }


            life=3;//生命初始化
            enemy=13;//敌人数量初始化
            s=0,t=0;//星星坐标
            get_map();//获得地图
            refresh_map();//刷新地图
            print_home();//打印老家
            print_thing();//打印物品

            direction=0;//我的坦克子弹射向初始化
            direction_1=0;//坦克1号子弹射向初始化
            direction_2=0;//坦克2号子弹射向初始化
            direction_3=0;//坦克3号子弹射向初始化

            x=10;y=27;//我的坦克位置初始化
            state=0;
            turn_up(my_tank);//我的坦克方向初始化


            x1=2;y1=2;//坦克1号位置初始化
            state_1=0;
            turn_down_1(tank_1);//坦克1号方向初始化

            x2=14;y2=2;//坦克2号位置初始化
            state_2=0;
            turn_down_2(tank_2);//坦克2号方向初始化

            x3=27;y3=2;//坦克3号位置初始化
            state_3=0;
            turn_down_3(tank_3);//坦克3号方向初始化

            screen_1();
            screen_2("游戏开始",4);
            break;
        }
    }

}


void gameover()
{

    for(int i=15;i<29;i++)//先清屏
    {
        gotoxy(62,i);
        printf("                          ");
    }

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
    gotoxy(62,17);
    printf("          游戏结束        ");

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);
    gotoxy(62,23);
    printf("    按 空格键 重新开始    ");

    while(1)
    {
        if(32 == getch())
        {
            initial();
            break;
        }
    }
}

void initial()
{
            int home0[3][4]={{2,2,2,2},{2,1,1,2},{2,1,1,2}};//定义一个老家的初始化值
            life=3;//生命初始化
            enemy=13;//敌人数量初始化
            level=1;//关卡初始化
            weapons=1;//武器初始化
            skin=1;//皮肤初始化
            star=1;//星星初始化
            s=0,t=0;//星星坐标
            score=0;//分数初始化
            lv=1;//等级初始化
            speed=10;//速度初始化
            {
                for(int i=0;i<5;i++)
                    info[i]=" ";//通知清零
            }
            {
                for(int i=0;i<3;i++)//老家初始化
                    for(int j=0;j<4;j++)
                        home[i][j]=home0[i][j];
            }   

            m=0  , n=0 ;//我的坦克子弹的坐标清零
            m1=0 , n1=0;//坦克1号子弹的坐标清零
            m2=0 , n2=0;//坦克2号子弹的坐标清零
            m3=0 , n3=0;//坦克3号子弹的坐标清零

            {
            for(int i=1;i<29;i++)
                for(int j=1;j<29;j++)
                {
                    gotoxy(2*i,j);
                    printf("  ");
                }
            }

            get_map();//获得地图
            refresh_map();//刷新地图
            print_home();//打印老家
            print_thing();//打印物品

            direction=0;//我的坦克子弹射向初始化
            direction_1=0;//坦克1号子弹射向初始化
            direction_2=0;//坦克2号子弹射向初始化
            direction_3=0;//坦克3号子弹射向初始化

            x=10;y=27;//我的坦克位置初始化
            state=0;
            turn_up(my_tank);//我的坦克方向初始化

            x1=2;y1=2;//坦克1号位置初始化
            state_1=0;
            turn_down_1(tank_1);//坦克1号方向初始化

            x2=14;y2=2;//坦克2号位置初始化
            state_2=0;
            turn_down_2(tank_2);//坦克2号方向初始化

            x3=27;y3=2;//坦克3号位置初始化
            state_3=0;
            turn_down_3(tank_3);//坦克3号方向初始化

            screen_1();
            screen_2("游戏开始",4);
            screen_3();
}

0
0
0
0
我要回答