真·c++小游戏
1.俄罗斯方块(一般)
#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 << "6666666666666"; } 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<windows.h> #include<conio.h> #include<time.h> #include<string> using namespace std; /*=============== all the structures ===============*/ typedef struct Frame { COORD position[2]; int flag; }Frame; /*=============== all the functions ===============*/ void SetPos(COORD a)// set cursor { HANDLE out=GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleCursorPosition(out, a); } void SetPos(int i, int j)// set cursor { 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 控制战机移动。k攻击。"; 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<<"简单敌人有着较慢的移动速度。"; SetPos(24, 21); cout<<"制作:一┳═┻︻▄Leo.Blue(If you are a dog...┌╬═ ▄︻┻┳═一┎─╦╧═╤── ┌╦╤═──) "; int j=11; SetPos(12, j); cout<<">>"; //drawFrame(45, 9, 79, 17, '=', '|'); 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; } } } } } /* DWORD WINAPI MusicFun(LPVOID lpParamte) { //DWORD OBJ; sndPlaySound(TEXT("bgm.wav"), SND_FILENAME|SND_ASYNC); return 0; } */ /*================== 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="王牌飞行员"; cout<<title; } rankf = rank; } void Game::Playing() { //HANDLE MFUN; //MFUN= CreateThread(NULL, 0, MusicFun, NULL, 0, NULL); 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)制作:最牛的一┳═┻︻▄Leo.Blue(If you are a dog...┌╬═ ▄︻┻┳═一┎─╦╧═╤── ┌╦╤═──)"; 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(); }
3.球球大作战(一般)
#include<bits/stdc++.h> #include<windows.h> #include<conio.h> using namespace std; void pass() { CONSOLE_CURSOR_INFO cursor_info = {1, 0}; SetConsoleCursorInfo( GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info); } int jjda; void ys() { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),(++jjda)%15+1); } void gotoxy(int x,int y) { COORD c= {y-1,x-1}; SetConsoleCursorPosition( GetStdHandle(STD_OUTPUT_HANDLE),c); } void ys(int yyin) { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),yyin); } int oop,ool; int ooj,oof; int a[1000][1000]= { {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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 i=4,j=4,k,l,o,p; int kl=20,ow=20,fs; int main(void) { system("mode con cols=111"); pass(); SetConsoleTitle("球球大作战"); for(k=0;k<100;k++) { for(l=0;l<100;l++) { if(a[k][l]==0) { ys(); printf("."); } } } for(;;) { gotoxy(1,1); ys(10); printf("1P的大小:%dkg\n\n",o); gotoxy(2,1); ys(11); printf("2P的大小:%dkg\n\n",fs); gotoxy(i,j); ys(10); printf("●"); gotoxy(kl,ow); ys(11); printf("●"); if(i==kl&&j==ow) { if(o>fs) { system("cls"); printf("1P Win!"); Sleep(1000); break; } else if(o<fs) { system("cls"); printf("2P Win!"); Sleep(1000); break; } else if(o==fs) { system("cls"); printf("平局!"); Sleep(1000); break; } } p=getch(); Sleep((o+fs)/20); if(p==119) { i--; gotoxy(i+1,j); printf(" "); if(a[i][j]==0) { o++; a[i+1][j]=1; } else if(a[i][j]!=0) { o+0; } } if(p==115) { i++; gotoxy(i-1,j); printf(" "); if(a[i][j]==0) { o++; a[i-1][j]=1; } else if(a[i][j]!=0) { o+0; } } if(p==97) { j--; if(a[i][j]==0) { o++; a[i][j+1]=1; } else if(a[i][j]!=0) { o+0; } } if(p==100) { j++; if(a[i][j]==0) { o++; a[i][j-1]=1; } else if(a[i][j]!=0) { o+0; } } if(p==72) { kl--; gotoxy(kl+1,ow); printf(" "); if(a[kl][ow]==0) { fs++; a[kl+1][ow]=1; } else if(a[kl][ow]!=0) { fs+0; } } if(p==80) { kl++; gotoxy(kl-1,ow); printf(" "); if(a[kl][ow]==0) { fs++; a[kl-1][ow]=1; } else if(a[kl][ow]!=0) { fs+0; } } if(p==75) { ow--; if(a[kl][ow]==0) { fs++; a[kl][ow+1]=1; } else if(a[kl][ow]!=0) { fs+0; } } if(p==77) { ow++; if(a[kl][ow]==0) { fs++; a[kl][ow-1]=1; } else if(a[kl][ow]!=0) { fs+0; } } if(p==27) { break; } srand(time(NULL)); oop=rand()%20+1; srand(time(NULL)); ool=rand()%20+1; gotoxy(oop,ool); } }
4.双人对打(好像有bug)
#include<iomanip> #include<iostream> #include<conio.h> #include<windows.h> #include<cstdio> #include<vector> #include<cstring> #include<string> #define bottom 40 #define jumph 6 #define skills 6 #define skilled 2 #define Setcolor(NAME) if(NAME)SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED | FOREGROUND_INTENSITY | BACKGROUND_INTENSITY | BACKGROUND_GREEN | BACKGROUND_BLUE);else SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_BLUE | FOREGROUND_INTENSITY | BACKGROUND_INTENSITY | BACKGROUND_GREEN | BACKGROUND_BLUE) #define Backcolor(NAME) if(NAME)SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_BLUE | FOREGROUND_INTENSITY | BACKGROUND_INTENSITY | BACKGROUND_GREEN | BACKGROUND_BLUE) #define Choosecolor(NAME) if(NAME==2)SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED| FOREGROUND_GREEN|FOREGROUND_BLUE | FOREGROUND_INTENSITY|BACKGROUND_BLUE );else if(!NAME)SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_BLUE | FOREGROUND_RED| BACKGROUND_INTENSITY| BACKGROUND_GREEN|BACKGROUND_RED|BACKGROUND_BLUE );else if(NAME==1)SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_BLUE | FOREGROUND_INTENSITY | BACKGROUND_INTENSITY| BACKGROUND_GREEN|BACKGROUND_RED) using namespace std; void HideCursor(); void go(int x, int y); void movewindow(); void GetContain(); void start1(); void start2(); void _skillprint(int, int); void skillprint(int,int); void mapprint(); void Getmove(); void winprint(bool); void BoomGet(); class bullet; class player; bool dj1, dj2, s11, s12, s21, s22; int da1, da2,skill1[2] = { 4,3 }, skill2[2] = {2,4}, boom1, boom2, cost[10] = {0,3,3,5,15},place[11][2][2],explace[11][2];//[???üêy×?][ê?óú][x,y×?±ê] float cool[2][2]; char hit[2]; string name1, name2,contain[11],excontain[11]; vector<bullet>bu; class player { public: int x, y, j, jh, life,loving,flying,gaying; char a, b[2]; bool dir, fly, myself,fdir; //dir£o0?a×ó£?1?aóò void clear() { go(x, y); printf(" "); go(x, y + 1); printf(" "); } void print() { Setcolor(myself); if (gaying)SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_BLUE|FOREGROUND_RED | BACKGROUND_INTENSITY | BACKGROUND_GREEN | BACKGROUND_BLUE); go(x, y); if (loving) { Setcolor(!myself); cout << (char)3; Setcolor(myself); } else if (gaying)cout << "?á"; else cout << a; go(x, y + 1); cout << b[dir]; Backcolor(myself); } void lifedown(int l) { if (!myself) { go(life - l+1, 2); for (int i = 1; i <= l; ++i) cout << " "; } else { go(188 - life, 2); for (int i = 1; i <= l; ++i) cout << " "; } life -= l; } void jump() { ++j; if (j <= jh) { clear(); --y; print(); } else fly = 1; } void flown() { ++flying; clear(); if (flying <= jumph-1)--y; else if (flying <= 2 * jumph-2)++y; else flying = 0; if (!fdir)x-=2; else x+=2; if (x < 1)x = 1; else if (x > 188)x = 188; print(); } void skill(int,bool); void attack(); void move(int); } p1, p2; class bullet { public: int x, y, boom,length,soap; bool own, dir, love; inline void clear() { go(x, y); cout << " "; } void print() { Setcolor(own); go(x, y); if (boom)cout << (char)15; else if (love)cout << (char)3; else if (soap) cout << "¨|"; else cout << hit[own]; Backcolor(own); } void start(int p, int q, bool d, bool o) { y = q; dir = d; own = o; if (!d)x = p - 1; else x = p + 1; boom = 0; love = 0; length = 0; soap = 0; } void boomstart(int p, int q, bool d, bool o,int l) { y = q + 1; dir = d; own = o; if (!d)x = p - 1; else x = p + 1; boom = 1; length = l; love = 0; } bool fly() { if (boom >= 800) { if (boom == 805) { for (int i = -4; i <= 4; i += 2) for (int j = -2; j <= 2; ++j) { if (x + i < 1 || x + i>188 || y + j > bottom + 1)continue; go(x + i, y + j); cout << " "; } p1.print(); p2.print(); return 1; }++boom; return 0; } if(soap!=-1)clear(); if (!dir)--x; else ++x; if (boom) { if (!dir)x-=length; else x+=length; } if (boom) { ++boom; char _sign = 4; if (x < 1 || x>188) { Setcolor(own); for (int i = -4; i <= 4; i += 2) for (int j = -2; j <= 2; ++j) { if (x + i < 1 || x + i>188 || y + j > bottom + 1)continue; go(x + i, y + j); cout <<_sign ; } Backcolor(own); if (!own) { if (x >= p2.x - 4 && x <= p2.x + 4 && y+2 >= p2.y&&y-2 <= p2.y + 1) { p2.lifedown(10); if (x > p2.x)p2.fdir = 0; else p2.fdir = 1; p2.flown(); } } else { if (x >= p1.x - 4 && x <= p1.x + 4 && y + 2 >= p1.y&&y - 2 <= p1.y + 1) { p1.lifedown(10); if (x >= p1.x)p1.fdir = 0; else p1.fdir = 1; p1.flown(); } } boom = 800; return 0; } if (boom <= 2 * jumph+length)--y; else if (boom > 2 * jumph + 2+length) { if (y <= bottom)++y; else { Setcolor(own); for (int i = -4; i <= 4; i += 2) for (int j = -2; j <= 2; ++j) { if (x + i < 1 || x + i>188 || y + j > bottom + 1)continue; go(x + i, y + j); cout << _sign; } Backcolor(own); if (!own) { if (x >= p2.x - 4 && x <= p2.x + 4 && y +2>= p2.y&&y-2 <= p2.y + 1) { p2.lifedown(10); if (x > p2.x)p2.fdir = 0; else p2.fdir = 1; p2.flown(); } } else { if (x >= p1.x - 4 && x <= p1.x + 4 && y + 2 >= p1.y&&y - 2 <= p1.y + 1) { p1.lifedown(10); if (x >= p1.x)p1.fdir = 0; else p1.fdir = 1; p1.flown(); } } boom = 800; return 0; } } print(); if (!own) { if (x == p2.x&&y >= p2.y&&y <= p2.y + 1) { for (int i = -4; i <= 4; i += 2) for (int j = -2; j <= 2; ++j) { if (x + i < 1 || x + i>188 || y + j > bottom + 1)continue; go(x + i, y + j); cout << _sign; } p2.lifedown(10); p2.fdir = 1; p2.flown(); boom = 800; } } else { if (x == p1.x&&y >= p1.y&&y <= p1.y + 1) { Setcolor(own); for (int i = -4; i <= 4; i += 2) for (int j = -2; j <= 2; ++j) { if (x + i < 1 || x + i>188 || y + j > bottom + 1)continue; go(x + i, y + j); cout << _sign; } Backcolor(own); p1.lifedown(10); p1.fdir = 0; p1.flown(); boom = 800; } } return 0; } if (soap) { if (soap!=-1&&soap <= 2) { ++soap; --y; } else if (soap != -1 && y <= bottom+1) { ++y; if (y == bottom + 1) soap = -1; } else { if (!dir)++x; else --x; } if (x < 1)x = 1; if (x > 188)x = 188; if (soap != -1) { int s = bu.size(); for (register int i = 0; i < s; ++i) { if (bu[i].soap&&bu[i].length!=length) { if (x+1>=bu[i].x&&x<=bu[i].x+1&&y ==bu[i].y-1 ) { soap = -1; break; } } } } if (!own) { if (x+1 >= p2.x&&x<=p2.x&&y >= p2.y&&y <= p2.y + 1) { p2.lifedown(8); p2.gaying += 100; p2.print(); return 1; } } else { if (x +1>= p1.x&&x<=p1.x&&y >= p1.y&&y <= p1.y + 1) { p1.lifedown(8); p1.gaying += 100; p1.print(); return 1; } } print(); return 0; } if (x < 1 || x>188) { if (!love) { if (!own) { if ((skill1[0] == -2 || skill1[1] == -2) && !length) { if (!dir) ++x; else --x; dir = !dir; ++length; return 0; } } else { if ((skill2[0] == -2 || skill2[1] == -2) && !length) { if (!dir)++x; else --x; dir = !dir; ++length; return 0; } } } return 1; } if (!own) { if (x == p1.x&&y >= p1.y&&y <= p1.y + 1)p1.print(); if (x == p2.x&&y >= p2.y&&y <= p2.y + 1) { if (love) { p2.lifedown(3); p2.loving = 75; p2.print(); } else p2.lifedown(1); return 1; } } else { if (x == p2.x&&y >= p2.y&&y <= p2.y + 1)p2.print(); if (x == p1.x&&y >= p1.y&&y <= p1.y + 1) { if (love) { p1.lifedown(3); p1.loving = 75; p1.print(); } else p1.lifedown(2); return 1; } } print(); return 0; } }temp; void player::attack() { temp.start(x, y, dir, myself); bu.push_back(temp); } void player::move(int k) { clear(); if (gaying)k = 3 - k; if (k == 1) { --x; dir = 0; } else if (k == 2) { ++x; dir = 1; } int strb = bu.size(); for (register int i = 0; i < strb; ++i) { if (bu[i].boom == 0 && bu[i].own != myself && bu[i].x == x && bu[i].y >= y && bu[i].y <= y + 1) { bu.erase(bu.begin() + i); if (bu[i].soap) { gaying += 100; lifedown(5); } else if (bu[i].love) { lifedown(2); loving =75; } else lifedown(1); --i; --strb; } } print(); } void player::skill(int l,bool which) { if (l <= 0)return; if (cool[myself][which] > 0)return; cool[myself][which] += cost[l]; skillprint(myself, which); /*£?éá??£?*/ if (l == 1) { int sign = 0; bool sign2 = 0; if (!dir) { for (register int i = 1; x > 1 && i <= 12; ++i) { x -= 2; if (x < 1) { x = 1; sign2 = 1; } print(); ++sign; } for (register int i = 2 - sign2; i <= 2 - sign2 + 2 * sign; i += 2) { go(x + i, y); cout << " "; go(x + i, y + 1); cout << " "; Sleep(1); } } else { for (register int i = 1; x < 188 && i <= 12; ++i) { x += 2; if (x > 188) { x = 188; sign2 = 1; } print(); ++sign; } for (register int i = 2 - sign2; i <= 2 - sign2 + 2 * sign; i += 2) { go(x - i, y); cout << " "; go(x - i, y + 1); cout << " "; Sleep(1); } } } else if (l == 2) { if(!myself)temp.boomstart(x, y, dir, myself,boom1/6); else temp.boomstart(x, y, dir, myself, boom2 /6); bu.push_back(temp); } else if (l == 3) { temp.start(x, y, dir, myself); temp.love = 1; bu.push_back(temp); } else if (l == 4) { temp.start(x, y, dir, myself); temp.soap = 1; temp.length = rand(); bu.push_back(temp); } } void go(int x, int y) { COORD p; p.X = x - 1; p.Y = y - 1; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), p); } void movewindow() { RECT rect; HWND hwnd = GetForegroundWindow(); GetWindowRect(hwnd, &rect); MoveWindow(hwnd, 0, 0, 0, 0, TRUE); } void HideCursor() { CONSOLE_CURSOR_INFO cursor_info = { 1, 0 }; SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info); } void start1() { go(20, 20); printf("玩家一的名字:"); getline(cin, name1); go(20, 23); printf("玩家二的名字"); getline(cin, name2); Sleep(500); system("cls"); } inline void GetContain() { contain[1] = "| 闪现 |"; contain[2] = "| 手雷 |"; contain[3] = "| 魅惑 |"; contain[4] = "| 捡肥皂 |"; contain[5] = "| 三段跳 |"; contain[6] = "| 弹射 |"; excontain[1] = "向前瞬移一段距离 冷却 3 s"; excontain[2] = "长摁后扔出一枚手雷,造成伤害并炸飞对手。蓄力时间越长,飞行距离越远 冷却 3 s"; excontain[3] = "发出一颗爱心,造成伤害并使对手无法控制地走向自己 冷却 5 s"; excontain[4] = "扔出一个肥皂,对手捡到时造成伤害并干扰对手的移动 冷却 15 s"; excontain[5] = "(被动)可以连续跳跃三次"; excontain[6] = "(被动)普通攻击第一次碰到墙壁时会反弹回来"; place[1][0][0] = 25; place[1][0][1] = 10; place[1][1][0] = place[1][0][0]+85; place[1][1][1] = 10; for (int k = 0; k <= 1; ++k) { for (int i = 2; i <= skills; ++i) { place[i][k][0] = place[i - 1][k][0]; place[i][k][1] = place[i - 1][k][1] + 3; } } for (int k = 0; k <= 1; ++k) for (int i = 1; i <= skills; ++i) explace[i][k] = place[1][k][0]+18 - excontain[i].size()/2; } void start2() { GetContain(); const int exy = place[skills][0][1]+5; int wh[2] = {1,1}; int ch[2][11] = { {0,1,0,0,0,0,0,0,0,0,0},{0,1,0,0,0,0,0,0,0,0,0,}}; int count[2] = { 0,0 }; char sign = 16; go(82, 2); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), BACKGROUND_BLUE|BACKGROUND_GREEN|BACKGROUND_INTENSITY); cout << "选择你的技能"; go(54, 45); cout << "游戏规则:玩家一 A、D键移动,W键跳跃,J键攻击,K、L键释放技能"; go(64, 46); cout << "玩家二 方向键跳跃和移动,1 键攻击,2、3 键释放技能"; Setcolor(0); go(44 - name1.size()/2, 5); cout<<name1; go(44, 7); printf("%c", p1.a); go(44, 8); printf("%c", p1.b[0]); Setcolor(1); go(130-name2.size()/2,5); cout<< name2; go(130, 7); printf("%c", p2.a); go(130, 8); printf("%c", p2.b[0]); for(int i=0;i<=1;++i) for (int j = 1; j <= skills; ++j) { go(place[j][i][0], place[j][i][1]); Setcolor(i); cout << " "; Choosecolor(ch[i][j]); cout << contain[j]; } Choosecolor(1); for (int i = 0; i <= 1; ++i) { go(place[1][i][0], place[1][i][1]); Setcolor(i); cout<<sign; go(explace[1][i], exy); cout << excontain[1]; } bool able[2][3] = { {0,0,0},{0,0,0} };//[0×ó 1óò][0é? 1?? 2??] go(30, 40); Setcolor(0); cout << "玩家一:W、S键移动,J键选择"; go(112, 40); Setcolor(1); cout << "玩家二:I、K键移动,L键选择"; while (count[0]<2||count[1]<2) { bool f = 0; if (GetKeyState('W') >= 0)able[0][0]=1; if (GetKeyState('S') >= 0)able[0][1] = 1; if (GetKeyState('J') >= 0)able[0][2] = 1; if (GetKeyState('I') >= 0)able[1][0] = 1; if (GetKeyState('K') >= 0)able[1][1] = 1; if (GetKeyState('L') >= 0)able[1][2] = 1; Sleep(5); if (GetKeyState('W') < 0&&able[f][0]) { if(ch[f][wh[f]]!=2)--ch[f][wh[f]]; able[f][0] = 0; go(place[wh[f]][f][0], place[wh[f]][f][1]); Setcolor(f); cout << " "; Choosecolor(ch[f][wh[f]]); cout << contain[wh[f]]; Setcolor(f); go(explace[wh[f]][f], exy); for (unsigned int i = 0; i < excontain[wh[f]].size()/2+1; ++i) cout << " "; --wh[f]; if (wh[f] < 1)wh[f] = skills; go(explace[wh[f]][f], exy); cout << excontain[wh[f]]; if(ch[f][wh[f]]!=2)++ch[f][wh[f]]; go(place[wh[f]][f][0], place[wh[f]][f][1]); cout << sign; Choosecolor(ch[f][wh[f]]); cout << contain[wh[f]]; } if(GetKeyState('S')<0&&able[f][1]) { if(ch[f][wh[f]]!=2)--ch[f][wh[f]]; able[f][1] = 0; go(place[wh[f]][f][0], place[wh[f]][f][1]); Setcolor(f); cout << " "; Choosecolor(ch[f][wh[f]]); cout<< contain[wh[f]]; Setcolor(f); go(explace[wh[f]][f], exy); for (unsigned int i = 0; i < excontain[wh[f]].size()/2+1; ++i) cout << " "; ++wh[f]; if (wh[f] > skills)wh[f] = 1; go(explace[wh[f]][f], exy); cout << excontain[wh[f]]; if (ch[f][wh[f]] != 2)++ch[f][wh[f]]; go(place[wh[f]][f][0], place[wh[f]][f][1]); cout << sign; Choosecolor(ch[f][wh[f]]); cout << contain[wh[f]]; } if (GetKeyState('J') < 0 && able[f][2]) { able[f][2] = 0; if (ch[f][wh[f]] != 2 && count[f] < 2){ ++ch[f][wh[f]]; ++count[f]; } else if(ch[f][wh[f]]==2){ --ch[f][wh[f]]; --count[f]; } go(place[wh[f]][f][0], place[wh[f]][f][1]); Setcolor(f); cout << sign; Choosecolor(ch[f][wh[f]]); cout << contain[wh[f]]; } f = 1; if (GetKeyState('I') < 0 && able[f][0]) { if (ch[f][wh[f]] != 2)--ch[f][wh[f]]; able[f][0] = 0; go(place[wh[f]][f][0], place[wh[f]][f][1]); Setcolor(f); cout << " "; Choosecolor(ch[f][wh[f]]); cout << contain[wh[f]]; Setcolor(f); go(explace[wh[f]][f], exy); for (unsigned int i = 0; i < excontain[wh[f]].size()/2+1; ++i) cout << " "; --wh[f]; if (wh[f] < 1)wh[f] = skills; go(explace[wh[f]][f], exy); cout << excontain[wh[f]]; if (ch[f][wh[f]] != 2)++ch[f][wh[f]]; go(place[wh[f]][f][0], place[wh[f]][f][1]); cout << sign; Choosecolor(ch[f][wh[f]]); cout << contain[wh[f]]; } if (GetKeyState('K') < 0 && able[f][1]) { if (ch[f][wh[f]] != 2)--ch[f][wh[f]]; able[f][1] = 0; go(place[wh[f]][f][0], place[wh[f]][f][1]); Setcolor(f); cout << " "; Choosecolor(ch[f][wh[f]]); cout << contain[wh[f]]; Setcolor(f); go(explace[wh[f]][f], exy); for (unsigned int i = 0; i < excontain[wh[f]].size()/2+1; ++i) cout << " "; ++wh[f]; if (wh[f] > skills)wh[f] = 1; go(explace[wh[f]][f], exy); cout << excontain[wh[f]]; if (ch[f][wh[f]] != 2)++ch[f][wh[f]]; go(place[wh[f]][f][0], place[wh[f]][f][1]); cout << sign; Choosecolor(ch[f][wh[f]]); cout << contain[wh[f]]; } if (GetKeyState('L')<0 && able[f][2]) { able[f][2] = 0; if (ch[f][wh[f]] != 2 && count[f] < 2) { ++ch[f][wh[f]]; ++count[f]; } else if (ch[f][wh[f]] == 2) { --ch[f][wh[f]]; --count[f]; } go(place[wh[f]][f][0], place[wh[f]][f][1]); Setcolor(f); cout << sign; Choosecolor(ch[f][wh[f]]); cout << contain[wh[f]]; } } Backcolor(1); int _s=0; for (int i = 1; i <= skills; ++i) { if (ch[0][i] == 2) { if (i > skills - skilled)skill1[_s] = skills - i - 2; else skill1[_s] = i; ++_s; } } _s = 0; for (int i = 1; i <= skills; ++i) { if (ch[1][i] == 2) { if (i > skills - skilled)skill2[_s] = skills - i - 2; else skill2[_s] = i; ++_s; } } Sleep(1000); } void Getmove() { BoomGet(); if (GetKeyState('W') >= 0)dj1 = 0; if (GetKeyState(VK_UP) >= 0)dj2 = 0; if (GetKeyState('K') >= 0)s11 = 0; if (GetKeyState('L') >= 0)s12 = 0; if (GetKeyState('2') >= 0)s21 = 0; if (GetKeyState('3') >= 0)s22 = 0; if (skill1[0] == 2)s11 = 1; if (skill1[1] == 2)s12 = 1; if (skill2[0] == 2)s21 = 1; if (skill2[1] == 2)s22 = 1; if ((!p1.flying)&&(!p1.loving)) { if (dj1 == 0 && GetKeyState('W') < 0 && (p1.jh <= jumph || ((skill1[0] == -1 || skill1[1] == -1) && p1.jh <= 2 * jumph))) { dj1 = 1; if ((skill1[0] == -1 || skill1[1] == -1) && p1.jh >= 2 * jumph && !p1.fly)p1.jh = 3 * jumph; else if (p1.jh >= jumph && !p1.fly)p1.jh = 2 * jumph; else p1.jh = p1.j + jumph; p1.fly = 0; p1.jump(); } if (GetKeyState('A') < 0 && p1.x > 1) { p1.move(1); } if (GetKeyState('D') < 0 && p1.x < 188) { p1.move(2); } if (!p1.gaying) { if (GetKeyState('J') < 0 && da1 == 0) { da1 = 6; p1.attack(); } if (GetKeyState('K') < 0 && s11 == 0) { s11 = 1; p1.skill(skill1[0], 0); } if (GetKeyState('L') < 0 && s12 == 0) { s12 = 1; p1.skill(skill1[1], 1); } } } if ((!p2.flying)&&(!p2.loving)) { if (!p2.gaying) { if (GetKeyState('1') < 0 && da2 == 0) { da2 = 6; p2.attack(); } if (GetKeyState('2') < 0 && s21 == 0) { s21 = 1; p2.skill(skill2[0], 0); } if (GetKeyState('3') < 0 && s22 == 0) { s22 = 1; p2.skill(skill2[1], 1); } } if (dj2 == 0 && GetKeyState(VK_UP) < 0 && (p2.jh <= jumph || ((skill2[0] == -1 || skill2[1] == -1) && p2.jh <= 2 * jumph))) { dj2 = 1; if ((skill2[0] == -1 || skill2[1] == -1) && p2.jh >= 2 * jumph && !p2.fly)p2.jh = 3 * jumph; else if (p2.jh >= jumph && !p2.fly)p2.jh = 2 * jumph; else p2.jh = p2.j + jumph; p2.fly = 0; p2.jump(); } if (GetKeyState(VK_LEFT) < 0 && p2.x > 1) { p2.move(1); } if (GetKeyState(VK_RIGHT) < 0 && p2.x < 188) { p2.move(2); } } } void BoomGet() { if ((!p1.flying)&&(!p1.loving)&&(!p1.gaying)) { if (skill1[0] == 2 && cool[0][0] <= 0) { if (GetKeyState('K') < 0)++boom1; if (boom1 > 30 || (GetKeyState('K') >= 0 && boom1)) { p1.skill(2, 0); boom1 = 0; } } if (skill1[1] == 2 && cool[0][1] <= 0) { if (GetKeyState('L') < 0)++boom1; if (boom1 > 30 || (GetKeyState('L') >= 0 && boom1)) { p1.skill(2, 1); boom1 = 0; } } } if (p2.flying||p2.loving||p2.gaying)return; if (skill2[0] == 2&&cool[1][0]<=0) { if (GetKeyState('2') < 0)++boom2; if (boom2 > 30 || (GetKeyState('2') >= 0 && boom2)) { p2.skill(2,0); boom2 = 0; } } if (skill2[1] == 2&&cool[1][1]<=0) { if (GetKeyState('3') < 0)++boom2; if (boom2 > 30 || (GetKeyState('3') >= 0 && boom2)) { p2.skill(2,1); boom2 = 0; } } } void mapprint() { for (int i = 1; i <= 188; ++i) cout << " "; SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), BACKGROUND_BLUE | BACKGROUND_INTENSITY); for (int i = 1; i <= 80; ++i) cout << " "; SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_BLUE | FOREGROUND_INTENSITY | BACKGROUND_INTENSITY | BACKGROUND_GREEN | BACKGROUND_BLUE); cout << " player1 "; SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), BACKGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_INTENSITY); cout << "?§"; Setcolor(1); cout << " player2 "; SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), BACKGROUND_RED | BACKGROUND_INTENSITY); for (int i = 1; i <= 80; ++i) cout << " "; go(1, 42); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), BACKGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_INTENSITY); for (int i = 1; i <= 188; ++i) cout << (char)22; Backcolor(1); go(20-name1.size()/2, 44); cout << name1; go(8, 46); cout << "技能一: "; _skillprint(0, 0); go(8, 48); cout << "技能二: "; _skillprint(0, 1); Setcolor(1); go(160-name2.size()/2, 44); cout << name2; go(145, 46); cout << "技能一: "; _skillprint(1, 0); go(145, 48); cout << "技能二: "; _skillprint(1, 1); Backcolor(1); } void _skillprint(int a,int b) { if (!a) { if (!b) { if (skill1[0] == 1)cout << "闪现 0.0 s"; else if (skill1[0] == 2)cout << "手雷 0.0 s"; else if (skill1[0] == 3)cout << "魅惑 0.0 s"; else if (skill1[0] == 4)cout << "捡肥皂 0.0 s"; else if (skill1[0] == -1)cout << "三段跳 -"; else if (skill1[0] == -2)cout << "弹射 -"; } else { if (skill1[1] == 1)cout << "闪现 0.0 s"; else if (skill1[1] == 2)cout << "手雷 0.0 s"; else if (skill1[1] == 3)cout << "魅惑 0.0 s"; else if (skill1[1] == 4)cout << "捡肥皂 0.0 s"; else if (skill1[1] == -1)cout << "三段跳 -"; else if (skill1[1] == -2)cout << "弹射 -"; } } else { if (!b) { if (skill2[0] == 1)cout << "闪现 0.0 s"; else if (skill2[0] == 2)cout << "手雷 0.0 s"; else if (skill2[0] == 3)cout << "魅惑 0.0 s"; else if (skill2[0] == 4)cout << "捡肥皂 0.0 s"; else if (skill2[0] == -1)cout << "三段跳 -"; else if (skill2[0] == -2)cout << "弹射 -"; } else { if (skill2[1] == 1)cout << "闪现 0.0 s"; else if (skill2[1] == 2)cout << "手雷 0.0 s"; else if (skill2[1] == 3)cout << "魅惑 0.0 s"; else if (skill2[1] == 4)cout << "捡肥皂 0.0 s"; else if (skill2[1] == -1)cout << "三段跳 -"; else if (skill2[1] == -2)cout << "弹射 -"; } } } void skillprint(int a, int b) { if (!a) { if (!b)go(27, 46); else go(27, 48); } else { if (!b)go(164, 46); else go(164, 48); } Setcolor(a); printf("%.1f", cool[a][b]); if (cool[a][b] < 9.9)cout << " "; Backcolor(a); } void winprint(bool f) { Sleep(1000); system("cls"); string winner; if (!f)winner = name1; else winner = name2; go(91 - winner.size() / 2, 20); Setcolor(f); cout << winner << " Win !"; Sleep(3000); } int main() { system("color B9"); movewindow(); system("mode con lines=60 cols=188"); start1(); HideCursor(); gamestart: system("cls"); p1.a = 1; p2.a = 2; p1.b[0] = 17; p1.b[1] = 16; p2.b[0] = 17; p2.b[1] = 16; hit[0] = 14; hit[1] = 36; p1.x = 10; p1.y = bottom-28; p2.x = 160; p2.y = bottom-28; p1.j = 0; p2.j = 0; p1.life = 80; p2.life = 80; p1.fly = 1; p2.fly = 1; p1.flying = 0; p2.flying = 0; p1.gaying = 0; p2.gaying = 0; p1.myself = 0; p2.myself = 1; p1.dir = 1; start2(); system("cls"); mapprint(); p1.print(); p2.print(); bool flag = 0; float count=0; int num = 0; Sleep(500); bool flying = 0; while (p1.life > -1 && p2.life > -1) { ++count; ++num; if (num >= 1000)num = 0; if (da1)--da1; if (da2)--da2; if (p1.loving) { --p1.loving; if (num% 5 == 0) { if (p1.x > p2.x)p1.move(1); else p1.move(2); } if (!p1.loving)p1.print(); } if (p2.loving){ --p2.loving; if (num % 5 == 0) { if (p2.x > p1.x)p2.move(1); else p2.move(2); } if (!p2.loving)p2.print(); } if (p1.gaying)--p1.gaying; if (p2.gaying)--p2.gaying; if (p1.fly&& p1.y < bottom) { p1.clear(); ++p1.y; p1.print(); } if (p2.fly&& p2.y < bottom) { p2.clear(); ++p2.y; p2.print(); } if (p1.y == bottom) { p1.jh = 0; p1.fly = 0; p1.j = 0; flying = 1; } if (p2.y == bottom) { p2.jh = 0; p2.fly = 0; p2.j = 0; } if (p1.j) { if (!p1.fly)p1.jump(); else --p1.j; } if (p2.j) { if (!p2.fly)p2.jump(); else --p2.j; } if (p1.flying)p1.flown(); if (p2.flying)p2.flown(); if(flying)Getmove(); if (count >= 2.5) { count -= 2.5; for (register int i = 0; i <= 1; ++i) for (register int j = 0; j <= 1; ++j) { if (cool[i][j] > 0) { cool[i][j] -= 0.1; if (cool[i][j] < 0)cool[i][j] = 0; skillprint(i, j); } } } if (!flag&&p1.x == p2.x)flag = 1; if (flag && (p1.x != p2.x || p1.y != p2.y)) { flag = 0; p1.print(); p2.print(); } int strb = bu.size(); for (int i = 0; i < strb; ++i) { if (bu[i].soap) { if (bu[i].fly()) { bu.erase(bu.begin() + i); --i; --strb; break; } } else if (bu[i].boom || bu[i].love) { if (bu[i].fly() || bu[i].fly()) { bu.erase(bu.begin() + i); --i; --strb; break; } } else if (bu[i].fly() || bu[i].fly()||bu[i].fly()) { bu.erase(bu.begin() + i); --i; --strb; break; } } Sleep(40 - strb / 5); } winprint(p1.life < p2.life); goto gamestart; }
5.坦克对战(确实经典)
#include <stdio.h> #include <windows.h> #include <time.h> //里规格:长39*2=78 (真坐标)(假坐标宽为39) 高39 //外规格:长41*2=82 (真坐标)(假坐标宽为41) 高41 #define UP 1 #define DOWN 2 #define LEFT 3 #define RIGHT 4 #define MAX_LEVEL 8 #define BULLET_NUM 20 #define MAX_LIFE 4 //程序中未写入函数参数表中且未说明的变量只有map二维数组,level_info数组和level /* 此程序中涉及的x,y类的坐标值,分为以下两种: 假坐标:这里的坐标指的是以一个■长度为单位的坐标,而不是真正的coord坐标 (用于map数组的坐标) 真坐标:头文件自带的坐标结构coord中的坐标(也可以说是控制台里的真正坐标值) 区别:纵坐标y两值一致,假横坐标x值与真正coord横坐标(真坐标)关系是 x * 2 = coord 横坐标 coord横坐标既指GoTo函数中的x参数,因为本程序游戏界面以一个■长度为基本单位, 可以说涉及的coord横坐标全是偶数。既假坐标要变真坐标(变真坐标才能发挥真正作用),横坐标须乘以2 */ typedef struct //这里的出现次序指的是一个AI_tank变量中的次序,游戏共有四个AI_tank变量 { //∵设定每个AI_tank每种特殊坦克只出现一次 ∴fast_tank & firm_tank 最多出现次数不超过1 int fast_tank_order; //fast_tank出现的次序(在第fast_tank_order次复活出现,从第0次开始),且每个AI_tank只出现一次 int firm_tank_order; //firm_tank出现的次序,同上 } LevInfo; //关卡信息(准确说是该关出现的坦克信息) LevInfo level_info [MAX_LEVEL] = {{-1,-1},{3,-1},{-1,3},{2,3},{2,3},{2,3},{2,3},{2,3}}; //初始化,-1代表没有该类型坦克 typedef struct //子弹结构体 { int x,y; //子弹坐标,假坐标 int direction; //子弹方向变量 bool exist; //子弹存在与否的变量,1为存在,0不存在 bool initial; //子弹是否处于建立初状态的值,1为处于建立初状态,0为处于非建立初状态 bool my; //区分AI子弹与玩家子弹的标记,0为AI子弹,1为玩家(我的)子弹 } Bullet; Bullet bullet [BULLET_NUM]; //考虑到地图上不太可能同时存在20颗子弹,所以数组元素设置20个 typedef struct //坦克结构体 { int x,y; //坦克中心坐标 int direction; //坦克方向 int color; //颜色参方向数,1到6分别代表不同颜色,具体在PrintTank函数定义有说明 int model; //坦克图案模型,值为1,2,3,分别代表不同的坦克图案,0为我的坦克图案,AI不能使用 int stop; //只能是AI坦克使用的参数,非0代表坦克停止走动,0为可以走动 int revive; //坦克复活次数 int num; //AI坦克编号(固定值,为常量,初始化函数中定下)0~3 int CD; //发射子弹冷却计时 bool my; //是否敌方坦克参数,我的坦克此参数为1,为常量 bool alive; //存活为1,不存活为0 } Tank; Tank AI_tank[4] , my_tank; //my_tank为我的坦克,Ai_tank 代表AI坦克 //∵所有的函数都有可能对全局变量map进行读写(改变), //∴函数中不另说明是否会对全局变量map读写 //基本操作与游戏辅助函数 void GoToxy(int x,int y); //光标移动 void HideCursor(); //隐藏光标 void keyboard (); //接受键盘输入 void Initialize(); //初始化(含有对多个数据的读写) void Stop(); //暂停 void Getmap(); //地图数据存放与获取 void Frame (); //打印游戏主体框架 void PrintMap(); //打印地图(地图既地图障碍物)(含对level的读取) void SideScreen (); //副屏幕打印 void GameCheak(); //检测游戏输赢 void GameOver( bool home ); //游戏结束 void ClearMainScreen(); //主屏幕清屏函数∵system("cls")后打印框架有一定几率造成框架上移一行的错误∴单独编写清屏函数 void ColorChoose(int color); //颜色选择函数 void NextLevel(); //下一关(含有对level全局变量的读写) //子弹部分 void BuildAIBullet(Tank *tank); //AI坦克发射子弹(含有对my_tank的读取,只读取了my_tank坐标) void BuildBullet (Tank tank); //子弹发射(建立)(人机共用)(含全局变量bullet的修改)我的坦克发射子弹直接调用该函数,AI通过AIshoot间接调用 void BulletFly (Bullet bullet[BULLET_NUM]); //子弹移动和打击(人机共用), void BulletHit (Bullet* bullet); //子弹碰撞(人机共用)(含Tank全局变量的修改),只通过BulletFly调用,子弹间的碰撞不在本函数,子弹间碰撞已在BulletShoot中检测并处理 void PrintBullet (int x,int y,int T); //打印子弹(人机共用) void ClearBullet (int x,int y,int T); //清除子弹(人机共用) int BulletCheak (int x,int y); //判断子弹前方情况(人机共用) //坦克部分 void BuildAITank (int* position, Tank* AI_tank); //建立AI坦克 void BuildMyTank (Tank* my_tank); //建立我的坦克 void MoveAITank (Tank* AI_tank); //AI坦克移动 void MoveMyTank (int turn); //我的坦克移动,只通过keyboard函数调用,既键盘控制 void ClearTank (int x,int y); //清除坦克(人机共用) void PrintTank (Tank tank); //打印坦克(人机共用) bool TankCheak (Tank tank,int direction); //检测坦克dirtection方向的障碍物,返值1阻碍,0 畅通 int AIPositionCheak (int position); //检测AI坦克建立位置是否有障碍物AIPositionCheak //DWORD WINAPI InputX(LPVOID lpParameter); //声明线程函数,用于检查X键输入并设置X键的输入冷却时间 //注意map数组应是纵坐标在前,横坐标在后,既map[y][x],(∵数组行长度在前,列长度在后) //map里的值: 个位数的值为地图方块部分,百位数的值为坦克,子弹在map上没有值(子弹仅仅是一个假坐标) //map里的值: 0为可通过陆地,1为红砖,2黄砖,5为水,100~103为敌方坦克,200为我的坦克, //全局变量 int map[41][41]; //地图二维数组 int key_x; // X键是否被“读入”的变量,也是子弹是否可以发射的变, int bul_num; //子弹编号 int position; //位置计数,对应AI坦克生成位置,-1为左位置,0为中间,1为右,2为我的坦克位置 int speed=7; //游戏速度,调整用 int level=1; //游戏关卡数 int score=0; //游戏分数 int remain_enemy; //剩余敌人(未出现的敌人) char* tank_figure[4][3][4]= { { {"◢┃◣", "◢━◣", "◢┳◣", "◢┳◣"}, {"┣●┫", "┣●┫", "━●┃", "┃●━"}, {"◥━◤", "◥┃◤", "◥┻◤", "◥┻◤"} }, { {"┏┃┓", "┏┳┓", "┏┳┓", "┏┳┓"}, {"┣●┫", "┣●┫", "━●┫", "┣●━"}, {"┗┻┛", "┗┃┛", "┗┻┛", "┗┻┛"} }, { {"┏┃┓", "◢━◣", "┏┳◣", "◢┳┓"}, {"┣●┫", "┣●┫", "━●┃", "┃●━"}, {"◥━◤", "┗┃┛", "┗┻◤", "◥┻┛"} }, { {"╔┃╗", "╔╦╗", "╔╦╗", "╔╦╗"}, {"╠█╣", "╠█╣", "━█╣", "╠█━"}, {"╚╩╝", "╚┃╝", "╚╩╝", "╚╩╝"} } }; int main () //主函数 { int i; unsigned int interval[12]={1,1,1,1,1,1,1,1,1,1,1,1} ; //间隔计数器数组,用于控制速度 srand(time(NULL)); //设置随机数种子(若不设置种子而调用rand会使每次运行的随机数序列一致)随机数序列指:如首次调用rand得到1,第二次得2,第三次3,则此次随机数序列为1,2,3 HideCursor(); //隐藏光标 system("mode con cols=112 lines=42"); //控制窗口大小 Frame (); //打印游戏主体框架 Initialize(); //初始化,全局变量level初值便是1 // HANDLE h1 , h2 ; //定义句柄变量 for(;;) { if(interval[0]++%speed==0) //速度调整用,假设interval[0]为a, 语句意为 a % 2==0,a=a+1; { GameCheak(); //游戏胜负检测 BulletFly ( bullet ); for(i=0 ; i<=3 ; i++) //AI坦克移动循环 { if(AI_tank[i].model==2 && interval[i+1]++%2==0) //四个坦克中的快速坦克单独使用计数器1,2,3,4 MoveAITank( & AI_tank[i]); if(AI_tank[i].model!=2 && interval[i+5]++%3==0) //四个坦克中的慢速坦克单独使用计数器5,6,7,8 MoveAITank( & AI_tank[i]); } for(i=0;i<=3;i++) //建立AI坦克部分 if(AI_tank[i].alive==0 && AI_tank[i].revive<4 && interval[9]++%90==0) //一个敌方坦克每局只有4条命 { //如果坦克不存活。计时,每次建立有间隔 1750 ms BuildAITank( &position, & AI_tank[i] ); //建立AI坦克(复活) break; //每次循环只建立一个坦克 } for(i=0;i<=3;i++) if(AI_tank[i].alive) BuildAIBullet(&AI_tank[i]); //AIshoot自带int自增计数CD,不使用main中的CD interval if(my_tank.alive && interval[10]++%2==0 ) keyboard (); if(my_tank.alive==0 && interval[11]++%30==0 && my_tank.revive < MAX_LIFE) BuildMyTank( &my_tank ); } Sleep(5); } return 0; } /*//这里的多线程暂时不用 //x键用于子弹发射,x键的冷却时间不能和上下左右一同设置,那样就太快了 DWORD WINAPI InputX(LPVOID lpParameter) //如果不用多线程运行,那么在x键冷却时间内程序会因Sleep将会挂起,暂停运行 { //因为只有一个变量改变,而且变量改变先后顺序是显而易见的,所以不必设置缓冲区 for(;;) { if(GetAsyncKeyState( 88 )& 0x8000) //88为x键键值,当摁下x并且x键处于可输入状态 { key_x=1; // X键是否允许被“读入”的变量,也是子弹是否可以发射的变量 Sleep(600); // 子线程Sleep中,x就不能被"读入",主线程每操作完一次子弹发射,key_x会归零 } Sleep(10); } return 0; }*/ void keyboard () { // kbhit() getch() 用法可用但是不好用 /* 函数功能:该函数判断在此函数被调用时,某个键是处于UP状态还是处于DOWN状态,及前次调用GetAsyncKeyState函数后, 是否按过此键.如果返回值的最高位被置位,那么该键处于DOWN状态;如果最低位被置位,那么在前一次调用此函数后,此键被按过, 否则表示该键没被按过. 这里GetAsyncKeyState比 kbhit() + getch() 好用,操作更顺畅. GetAsyncKeyState的返回值表示两个内容, 一个是最高位bit的值,代表这个键是否被按下。一个是最低位bit的值,代表上次调用GetAsyncKeyState后,这个键是否被按下。 &为与操作,&0x8000就是判断这个返回值的高位字节。如果high-order bit是1,则是按下状态,否则是弹起状态,为0 */ int count=0; if (GetAsyncKeyState(VK_UP)& 0x8000) MoveMyTank( UP ); else if (GetAsyncKeyState(VK_DOWN)& 0x8000) MoveMyTank( DOWN ); else if (GetAsyncKeyState(VK_LEFT)& 0x8000) MoveMyTank( LEFT ); else if (GetAsyncKeyState(VK_RIGHT)& 0x8000) MoveMyTank( RIGHT ); else if (GetAsyncKeyState( 0x1B )& 0x8000) // Esc键 exit(0); //退出程序函数 else if (GetAsyncKeyState( 0x20 )& 0x8000) //空格 Stop(); else if (count++%7==0) //这里添加计数器是为了防止按键粘连不能达到微调效果 { if (speed>1 && GetAsyncKeyState( 0x6B )& 0x8000) // +键 { speed--; GoToxy(102,11); //在副屏幕打印出当前速度 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE|FOREGROUND_RED); printf("%d ",21-speed); //副屏幕显示的速度为1~10 } else if (speed<20 && GetAsyncKeyState( 0x6D )& 0x8000) // - 键 { speed++; GoToxy(102,11); //在副屏幕打印出当前速度 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE|FOREGROUND_RED); printf("%d ",21-speed); //副屏幕显示的速度为1~10 } } if(my_tank.CD==7) { if(GetAsyncKeyState( 88 )& 0x8000) { BuildBullet(my_tank); my_tank.CD=0; } } else my_tank.CD++; } void BuildAIBullet(Tank *tank) //AI子弹发射(建立)含有对my_tank的读取 { if(tank->CD==15) { if(!(rand()%11)) //冷却结束后在随后的每个游戏周期中有10分之一的可能发射子弹 { BuildBullet(*tank); tank->CD=0; } } else tank->CD++; if(tank->CD >= 14) //AI强化部分,在冷却到达一定范围即可使用 { if(tank->y==38 ) //如果坦克在底部(这个最优先) { if(tank->x < 20) //在老家左边 { if(tank->direction==RIGHT) //坦克方向朝左 { BuildBullet(*tank); //发射子弹 tank->CD=0; } } else //在老家右边 if(tank->direction==LEFT) //坦克方向朝右 { BuildBullet(*tank); //发射子弹 tank->CD=0; } } else if(tank->x==my_tank.x+1 || tank->x==my_tank.x || tank->x==my_tank.x-1) //AI坦克在纵向上"炮口"对准我的坦克 { if(tank->direction==DOWN && my_tank.y > tank->y || tank->direction==UP && my_tank.y < tank->y) { //若是AI朝下并且我的坦克在AI坦克下方(数值大的在下面)或者AI朝上我的坦克在AI上方 int big=my_tank.y , smal=tank->y , i; if(my_tank.y < tank->y) { big=tank->y; smal=my_tank.y; } for(i=smal+2;i<=big-2;i++) //判断AI炮口的直线上两坦克间有无障碍 if(map[i][tank->x]!=0 || map[i][tank->x]!=5) //若有障碍 break; if(i==big-1) //若i走到big-1说明无障碍 { BuildBullet(*tank); //则发射子弹 tank->CD=0; } } } else if(tank->y==my_tank.y+1 || tank->y==my_tank.y || tank->y==my_tank.y-1) //AI坦克在横向上"炮口"对准我的坦克 { if(tank->direction==RIGHT && my_tank.x > tank->x || tank->direction==LEFT && my_tank.x < tank->x) { //若是AI朝右并且我的坦克在AI坦克右方(数值大的在下面)或者AI朝左我的坦克在AI左方 int big=my_tank.y , smal=tank->y , i; if(my_tank.x < tank->x) { big=tank->x; smal=my_tank.x; } for(i=smal+2;i<=big-2;i++) //判断AI炮口的直线上两坦克间有无障碍 if(map[tank->y][i]!=0 || map[tank->y][i]!=5) //若有障碍 break; if(i==big-1) //若i走到big-1说明无障碍 { BuildBullet(*tank); //则发射子弹 tank->CD=0; } } } } } void BuildBullet(Tank tank) //子弹发射(建立),传入结构体Tank,这里包含改变了全局变量结构体bullet { //∵实现方式为顺序循环建立子弹,每次调用改变的bullet数组元素都不同 switch(tank.direction) //∴为了方便,不将bullet放入参数,bullet作为全局变量使用 { case UP : bullet [bul_num].x = tank.x; bullet [bul_num].y = tank.y-2; bullet [bul_num].direction=1; break; case DOWN : bullet [bul_num].x = tank.x; bullet [bul_num].y = tank.y+2; bullet [bul_num].direction=2; break; case LEFT : bullet [bul_num].x = tank.x-2; bullet [bul_num].y = tank.y; bullet [bul_num].direction=3; break; case RIGHT : bullet [bul_num].x = tank.x+2; bullet [bul_num].y = tank.y; bullet [bul_num].direction=4; break; } bullet [bul_num].exist = 1; //子弹被建立,此值为1则此子弹存在 bullet [bul_num].initial = 1; //子弹处于初建立状态 bullet [bul_num].my=tank.my; //如果是我的坦克发射的子弹bullet.my=1,否则为0 bul_num++; if(bul_num==BULLET_NUM) //如果子弹编号增长到20号,那么重头开始编号 bul_num=0; //考虑到地图上不可能同时存在20颗子弹,所以数组元素设置20个 } void BulletFly(Bullet bullet[BULLET_NUM]) //子弹移动和打击 { //含有全局变量Bullet的改变 for(int i =0; i<BULLET_NUM;i++) { if(bullet [i].exist) //如果子弹存在 { if(bullet [i].initial==0) //如果子弹不是初建立的 { if(map[bullet[i].y] [bullet[i].x]==0 || map[bullet[i].y] [bullet[i].x]==5) //如果子弹坐标当前位置无障碍 ClearBullet( bullet[i].x , bullet[i].y , BulletCheak(bullet[i].x , bullet[i].y )); //抹除子弹图形 switch(bullet [i].direction) //然后子弹坐标变化(子弹变到下一个坐标) { case UP :(bullet [i].y)--;break; case DOWN :(bullet [i].y)++;break; case LEFT :(bullet [i].x)--;break; case RIGHT :(bullet [i].x)++;break; } } int collide = BulletCheak ( bullet [i].x , bullet [i].y ); //判断子弹当前位置情况,判断子弹是否碰撞,是否位于水面上。 if( collide ) //如果检测到当前子弹坐标无障碍(无碰撞)(包括在地面上与在水面上) PrintBullet( bullet[i].x , bullet[i].y , collide); //则打印子弹,若有碰撞则不打印 else BulletHit( & bullet [i] ); //若有碰撞则执行子弹碰撞函数 if(bullet [i].initial) //若子弹初建立,则把初建立标记去除 bullet [i].initial = 0; for(int j=0; j< BULLET_NUM ; j++) //子弹间的碰撞判断,若是我方子弹和敌方子弹碰撞则都删除,若为两敌方子弹则无视 if(bullet [j].exist && j!=i && (bullet[i].my || bullet[j].my) && bullet[i].x==bullet[j].x && bullet[i].y==bullet[j].y) { //同样的两颗我方子弹不可能产生碰撞 bullet [j].exist=0; bullet [i].exist=0; ClearBullet( bullet[j].x , bullet[j].y , BulletCheak(bullet[j].x , bullet[j].y )); //抹除j子弹图形,子弹i图形已被抹除 break; } } } } void BulletHit(Bullet* bullet) //含有Tank全局变量的修改,子弹间的碰撞不在本函数,子弹间碰撞已在BulletShoot中检测并处理 { //∵每次打中的坦克都不一样,不可能把所有坦克放在参数表中 int x=bullet->x; //∴这里的Tank使用全局变量 int y=bullet->y; //这里传入的值是子弹坐标,这两个值不需要改变 int i; if(map[y][x]==1 || map[y][x]==2) //子弹碰到砖块 { if(bullet->direction==UP || bullet->direction==DOWN) //如果子弹是纵向的 for(i = -1 ; i<=1 ; i++) if(map[y][x+i]==1 || map[y][x+i]==2) //如果子弹打中砖块两旁为砖块,则删除砖,若不是(一旁为坦克或其他地形)则忽略 { map[y][x+i]=0; //砖块碎 GoToxy(2*x+2*i,y); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED); //背景黑色 printf(" "); } if(bullet->direction==LEFT || bullet->direction==RIGHT) //若子弹是横向的 (与子弹纵向实现同理) for(i = -1 ; i<=1 ; i++) if(map[y+i][x]==1 || map[y+i][x]==2) { map[y+i][x]=0; GoToxy(2*x,y+i); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED); //背景黑色 printf(" "); } bullet->exist=0; //这颗子弹已经不存在了 } else if(map[y][x]==4 || map[y][x]==6 ) //子弹碰到边框或者不可摧毁方块 bullet->exist=0; else if(bullet->my && map[y][x]>=100 && map[y][x]<104 ) //若我的子弹碰到了敌方坦克 { int num = map[y][x]%100; //map[y][x]%100 等同于 tank.num ,可通过map值读取该坦克信息 if(AI_tank[num].model==3 && AI_tank[num].color==2) //若为firm tank,且color==2。该坦克为绿色,表明没有受到伤害 AI_tank[num].color=3; //则变成黄色,color=3为黄色 else if (AI_tank[num].model==3 && AI_tank[num].color==3) AI_tank[num].color=4; //4为红色 else //其他类型的坦克或者firm tank为红色的情况 { AI_tank[num].alive=0; ClearTank(AI_tank[num].x , AI_tank[num].y); //清除该坦克 } bullet->exist=0; score+=100; GoToxy(102,5); //在副屏幕上打印出分数 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE); printf("%d ",score); } else if(map[y][x]==200 && bullet->my==0 ) //若敌方子弹击中我的坦克 { my_tank.alive=0; ClearTank(my_tank.x , my_tank.y); bullet->exist=0; my_tank.revive++; //我的坦克复活次数+1(∵我的坦克复活次数与生命值有关∴放在这里自减) score-=100; //分数减少 GoToxy(102,5); //在副屏幕上打印出分数 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE); printf("%d ",score); GoToxy(102,7); //在副屏幕打印出我的剩余生命值 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN); printf("%d ", MAX_LIFE-my_tank.revive); } // else if(bullet->my==0 && map[y][x]>=100 && map[y][x]<104) //敌方子弹击中敌方坦克,可以设置两种子弹运行方式,这种暂时不用 // bullet->exist=0; else if(map[y][x]==9) //子弹碰到家(无论是谁的子弹) { bullet->exist=0; SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_BLUE|FOREGROUND_RED|FOREGROUND_GREEN); GoToxy(38,37); printf(" "); GoToxy(38,38); printf("◢◣ "); GoToxy(38,39); printf("███"); GameOver(1); //游戏结束,传入1代表老家被毁 } } int BulletCheak (int x,int y) //判断子弹当前位置情况,判断子弹是否碰撞,是否位于水面上。 { //有障碍返回0,无障碍且子弹在地面返回1,子弹在水面上返回2 if(map[y][x]==0) return 1; else if(map[y][x]==5) return 2; else return 0; } void PrintBullet (int x,int y,int T) //当前坐标BulletCheak 的值做参量 T { if(T==1) // T==1 表示子弹当前坐标在陆地上 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_INTENSITY); else if(T==2) // T==2 表示子弹当前坐标在水面上 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_INTENSITY|BACKGROUND_BLUE); GoToxy(2*x,y); printf("☉"); } void ClearBullet(int x,int y,int T) //当前坐标BulletCheak 的值做参量 T { GoToxy(2*x,y); if(T==2) // T==2 表示子弹当前坐标在水面上 { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|BACKGROUND_BLUE|FOREGROUND_BLUE|FOREGROUND_GREEN); printf("~"); } else if(T==1) // T==1 表示子弹当前坐标在陆地上 { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_BLUE); printf(" "); } } //position为坦克生成位置,-1为左位置,0为中间,1为右,2为我的坦克位置 void BuildAITank(int* position, Tank* AI_tank) //执行一次该函数只建立一个坦克 { //rand函数公式:0<=rand()%(a+1)<=a 0+m<=rand()%(n-m+1)+m<=n //rand函数实现1到n:1<=rand()%(n)+1<=n if(AIPositionCheak(*position)) //若此位置无障碍,可生成。position参数详见AIPositionCheak函数定义 { AI_tank->x= 20 + 18*(*position); //20 + 18 * position 对应三个生成位置的x假坐标 AI_tank->y=2; if(AI_tank->revive==level_info[level-1].firm_tank_order) //坦克出现(复活)次序==关卡信息(level_info)中firm tank的出现次序 { AI_tank->model = 3; //3为firm tank的模型(外观) AI_tank->color = 2; //颜色参数2为绿色,具体详见函数ColorChoose } else if(AI_tank->revive==level_info[level-1].fast_tank_order) //同上if,这里是fast_tank的 { AI_tank->model = 2; AI_tank->color = rand()%6+1; //若不是firm tank则随机颜色,颜色参数为1~6,分别代表不同颜色,详见函数ColorChoose } else //普通坦克 { AI_tank->model = 1; AI_tank->color = rand()%6+1; //若不是firm tank则随机颜色 } AI_tank->alive = 1; //坦克变为存在 AI_tank->direction = 2 ; //方向朝下 AI_tank->revive++; //复活次数+1 PrintTank(*AI_tank); (*position)++; remain_enemy--; GoToxy(102,9); //在副屏幕上打印剩余坦克数 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED); printf("%d ",remain_enemy); if(*position==2) //position只能为0,1,-1,这里position循环重置 *position = -1; return ; //若生成了一辆坦克,则结束该函数 } } int AIPositionCheak( int position ) //position为坦克生成位置2为我的坦克位置,其余为AI位,-1为左位,0为中间位置,1为右位 { int x,y; if(position==2) //2为我的坦克位置,现在暂时用不到 x=15,y=38; else y=2 , x= 20 + 18 * position ; //20 + 18 * position 对应三个生成位置的x假坐标 for(int i=0;i<3;i++) for(int j=0;j<3;j++) if( map[y+j-1][x+i-1]!=0) //如果遍历的九宫格里有障碍物 return 0; //则返回0,表示此生成位置有阻碍 return 1; //否则生成1,表示此生成位置无阻碍 } void MoveAITank(Tank* AI_tank) //AI专用函数,该函数主要为AI加强 { if(AI_tank->alive) //如果坦克活着 { if(AI_tank->stop!=0) //坦克是否停止运动的判断,若stop参数不为0 { AI_tank->stop--; //则此坦克本回合停止运动 return; } if( !(rand()%23) ) //22分之1的概率执行方向重置 { AI_tank->direction = rand()%4+1; if( rand()%3 ) //在方向重置后有2分之1的概率停止走动3步的时间 { AI_tank->stop=2; return; } } ClearTank (AI_tank->x , AI_tank->y); if(TankCheak ( *AI_tank , AI_tank->direction)) //如果前方无障碍 switch ( AI_tank->direction ) { case UP : AI_tank->y--; break; //上前进一格 case DOWN : AI_tank->y++; break; //下前进一格 case LEFT : AI_tank->x--; break; //左前进一格 case RIGHT: AI_tank->x++; break; //右前进一格 } else //前方有障碍 { if(!(rand()%4)) //3分之1的概率乱转 { AI_tank->direction=rand()%4+1; AI_tank->stop=2; //乱转之后停止走动3步的时间 PrintTank(*AI_tank); return; //∵continue会跳过下面的打印函数,∴这里先打印 } else //另外3分之2的几率选择正确的方向 { int j; for(j=1;j<=4;j++) if(TankCheak ( *AI_tank , j )) //循环判断坦克四周有无障碍,此函数返值1为可通过 break; if(j==5) //j==5说明此坦克四周都有障碍物,无法通行 { PrintTank(*AI_tank); return; //则跳过下面的while循环以防程序卡死 } while(TankCheak ( *AI_tank , AI_tank->direction) == 0) //如果前方仍有障碍 AI_tank->direction=(rand()%4+1); //则换个随机方向检测 } } PrintTank(*AI_tank); //打印AI坦克 } } void BuildMyTank (Tank* my_tank) //建立我的坦克 { my_tank->x=15; my_tank->y=38; my_tank->stop=NULL; my_tank->direction=1; my_tank->model=0; my_tank->color=1; my_tank->alive=1; my_tank->my=1; my_tank->CD=7; PrintTank (*my_tank) ; //打印我的坦克 } void MoveMyTank(int turn ) //玩家专用函数,turn为keyboard函数里因输入不同方向键而传入的不同的值 { ClearTank(my_tank.x , my_tank.y); //map 数组中“我的坦克”参数清除工作已在此函数中完成 my_tank.direction=turn; //将键盘输入的方向值传入我的坦克方向值 if(TankCheak ( my_tank , my_tank.direction )) //若此时我的坦克当前方向上无障碍 switch (turn) { case UP : my_tank.y--; break; //上前进一格 case DOWN : my_tank.y++; break; //下前进一格 case LEFT : my_tank.x--; break; //左前进一格 case RIGHT: my_tank.x++; break; //右前进一格 } //若坦克当前方向上有障碍则跳过坐标变化直接打印该转向的坦克 PrintTank (my_tank); } bool TankCheak(Tank tank,int direction) //检测坦克前方障碍函数,参量为假坐标。返值1为可通过,返值0为阻挡(人机共用) { switch(direction) //direction变量 1上,2下,3左,4右 { case UP: if (map[tank.y-2][tank.x]==0 && map[tank.y-2][tank.x-1]==0 && map[tank.y-2][tank.x+1]==0) return 1; else return 0; case DOWN: if (map[tank.y+2][tank.x]==0 && map[tank.y+2][tank.x-1]==0 && map[tank.y+2][tank.x+1]==0) return 1; else return 0; case LEFT: if (map[tank.y][tank.x-2]==0 && map[tank.y-1][tank.x-2]==0 && map[tank.y+1][tank.x-2]==0) return 1; else return 0; case RIGHT: if (map[tank.y][tank.x+2]==0 && map[tank.y-1][tank.x+2]==0 && map[tank.y+1][tank.x+2]==0) return 1; else return 0; default: printf("错误!!"); Sleep(5000); return 0; } } void ClearTank(int x,int y) //清除坦克函数(人机共用) { for(int i=0;i<3;i++) for(int j=0;j<3;j++) { //将坦克占用的地图上的九格去掉 map[y+j-1][x+i-1]=0; SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN); GoToxy(2*x+2*j-2,y+i-1); printf(" "); } } void PrintTank(Tank tank) //打印坦克(人机共用) 由于读取的Tank参数较多,故就不将参数一一传入了 { // tank.color参数对应不同的颜色,范围 1 ~ 6 ColorChoose(tank.color); //颜色选择函数 定义一个数组里装着字符指针(既装字符串)的数组指针(指向一维数组首地址的指针) char *(*tankF)[4] = tank_figure[tank.model]; //将二维数组首址赋初值给数组指针 model==0为我的坦克,4为电脑1坦克,8为电脑2,类推 for(int i = 0; i < 3; i++) { GoToxy((tank.x-1)*2 , tank.y-1+i); //在坦克中心坐标的左边,上中下三行打印 printf("%s", tankF[i][tank.direction-1]); //打印的是地址,地址既字符串 for(int j=0;j<3;j++) if(tank.my) //若为我的坦克 map[tank.y+j-1][tank.x+i-1]=200; //在map上把"坦克"九格填满代表敌我坦克的参数。敌方此值为100~103,我方为200 else map[tank.y+j-1][tank.x+i-1]=100+tank.num; //这样可以通过map值读取坦克编号,读取操作在BulletHit 函数 } } void HideCursor() //隐藏光标 { //CONSOLE_CURSOR_INFO结构体包含控制台光标的信息,DWORD dwSize光标百分比厚度(1~100)和BOOL bVisible光标是否可见 CONSOLE_CURSOR_INFO cursor_info={1,0}; SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info); //SetConsoleCursorInfo用来设置指定的控制台光标的大小和可见性。 } void GoToxy(int x,int y) //光标移动函数,X表示横坐标,Y表示纵坐标。 { COORD coord; //使用头文件自带的坐标结构 coord.X=x; //这里将int类型值传给short,不过程序中涉及的坐标值均不会超过short范围 coord.Y=y; HANDLE a=GetStdHandle(STD_OUTPUT_HANDLE); //获得标准输出句柄 SetConsoleCursorPosition(a,coord); //以标准输出的句柄为参数设置控制台光标坐标 } void ColorChoose(int color) //颜色选择函数 { switch(color) { case 1: //天蓝色(我的坦克颜色) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE); break; case 2: //绿色 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN); break; case 3: //黄色 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN); break; case 4: //红色 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED); break; case 5: //紫色 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_BLUE); break; case 6: //白色 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_BLUE|FOREGROUND_GREEN); break; case 7: //深蓝色(∵颜色深难与黑色背景辨识度不高 ∴坦克颜色不选用此颜色),只用在字体颜色闪烁中 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE); break; } } void Stop() //暂停 { int color=1,timing=0; while(1) { if(timing++%30==0) { ColorChoose(color); //颜色选择 GoToxy(100,13); //副屏幕打印 printf("游戏暂停"); GoToxy(88,17); printf("按回车键回到游戏"); GoToxy(88,18); printf("或按 Esc键退出游戏"); if(++color==8) color=1; } if (GetAsyncKeyState( 0xD )& 0x8000) //回车键 { GoToxy(100,13); //副屏幕打印 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE); printf("正在进行"); //覆盖掉原来的提示 GoToxy(88,17); printf(" "); GoToxy(88,18); printf(" "); break; } else if(GetAsyncKeyState( 0x1B )& 0x8000) //Esc键退出 exit(0); Sleep(20); } } void ClearMainScreen() //主屏幕清屏函数,因使用system("cls");再打印框架有一定几率造成框架上移一行的错误,所以单独编写清屏函数 { for(int i=1;i<40;i++) { GoToxy(2,i); printf(" "); } } void Frame () //打印游戏主体框架 { //SetConsoleTextAttribute为设置文本颜色和文本背景颜色函数 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_INTENSITY); printf(" ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ "); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY|FOREGROUND_BLUE); printf(" ▂▂▂▂▂▂▂▂▂▂▂▂▂ \n"); for(int i=0;i<14;i++) { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN|FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_INTENSITY); printf("▕ ▏"); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY|FOREGROUND_BLUE); printf(" | |\n"); } SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN|FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_INTENSITY); printf("▕ ▏"); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY|FOREGROUND_BLUE); printf(" |═════════════|\n"); for(int i=0;i<24;i++) { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN|FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_INTENSITY); printf("▕ ▏"); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY|FOREGROUND_BLUE); printf(" | |\n"); } SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN|FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_INTENSITY); printf(" ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ "); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY| FOREGROUND_BLUE); printf(" ﹊﹊﹊﹊﹊﹊﹊﹊﹊﹊﹊﹊﹊﹊\n"); SideScreen (); //打印副屏幕 } void PrintMap() // 打印地图(地图既地图障碍物) { for(int j=0;j<41;j++) for(int i=0;i<41;i++) if(map[i][j]==6) { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN |FOREGROUND_RED|FOREGROUND_BLUE|BACKGROUND_GREEN|BACKGROUND_RED|BACKGROUND_BLUE); GoToxy(2*j,i); printf("■"); } else if(map[i][j]==2) { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED|BACKGROUND_GREEN|BACKGROUND_RED); GoToxy(2*j,i); printf("▓"); } else if(map[i][j]==1) { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|BACKGROUND_GREEN|BACKGROUND_RED); GoToxy(2*j,i); printf("▓"); } else if(map[i][j]==5) { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|BACKGROUND_BLUE|FOREGROUND_BLUE|FOREGROUND_GREEN); GoToxy(2*j,i); printf("~"); } SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_BLUE|FOREGROUND_RED|FOREGROUND_GREEN); GoToxy(38,37); printf("◣★◢"); GoToxy(38,38); printf("███"); //∵无论地图怎么变,家所在位置不变,且家的字符多种,不方便用上述方式打印 GoToxy(38,39); printf("◢█◣"); //∴直接打印(且家的map值与符号无关) } void GetMap() //地图存放函数 { //map里的值: 个位数的值为地图方块部分,百位数的值为坦克 int i ,j; //map里的值: 0为可通过陆地,1为红砖,2待定,5为水,100为敌方坦克,200为我的坦克, int Map[8][41][41]= { { {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,6,6,6,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,6,6,6,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,6,6,6,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,1,1,1,4}, {4,1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,1,1,1,4}, {4,6,6,6,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,6,6,6,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4} }, { {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,6,6,6,6,6,6,2,2,2,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,6,6,6,6,6,6,2,2,2,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,6,6,6,6,6,6,2,2,2,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,0,0,0,0,0,0,6,6,6,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,0,0,0,0,0,0,6,6,6,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,0,0,0,0,0,0,6,6,6,0,0,0,4}, {4,1,1,1,2,2,2,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,6,6,6,0,0,0,4}, {4,1,1,1,2,2,2,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,6,6,6,0,0,0,4}, {4,1,1,1,2,2,2,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,6,6,6,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,0,0,0,2,2,2,1,1,1,6,6,6,6,6,6,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,0,0,0,2,2,2,1,1,1,6,6,6,6,6,6,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,0,0,0,2,2,2,1,1,1,6,6,6,6,6,6,0,0,0,4}, {4,0,0,0,0,0,0,1,1,1,0,0,0,2,2,2,6,6,6,1,1,1,2,2,2,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,1,1,1,0,0,0,2,2,2,6,6,6,1,1,1,2,2,2,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,1,1,1,0,0,0,2,2,2,6,6,6,1,1,1,2,2,2,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,0,0,0,1,1,1,6,6,6,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,0,0,0,1,1,1,6,6,6,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,0,0,0,1,1,1,6,6,6,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,1,1,1,1,1,1,6,6,6,1,1,1,0,0,0,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,1,1,1,1,1,1,6,6,6,1,1,1,0,0,0,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,1,1,1,1,1,1,6,6,6,1,1,1,0,0,0,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,1,1,1,0,0,0,2,2,2,1,1,1,6,6,6,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,1,1,1,0,0,0,2,2,2,1,1,1,6,6,6,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,1,1,1,0,0,0,2,2,2,1,1,1,6,6,6,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,6,6,6,6,6,6,6,6,6,2,2,2,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,4}, {4,6,6,6,6,6,6,6,6,6,2,2,2,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,4}, {4,6,6,6,6,6,6,6,6,6,2,2,2,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,4}, {4,6,6,6,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,6,6,6,6,6,6,0,0,0,0,0,0,4}, {4,6,6,6,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,6,6,6,6,6,6,0,0,0,0,0,0,4}, {4,6,6,6,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,6,6,6,6,6,6,0,0,0,0,0,0,4}, {4,6,6,6,0,0,0,0,0,0,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,1,1,1,1,1,1,0,0,0,4}, {4,6,6,6,0,0,0,0,0,0,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,1,1,1,1,1,1,0,0,0,4}, {4,6,6,6,0,0,0,0,0,0,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,1,1,1,1,1,1,0,0,0,4}, {4,2,2,2,6,6,6,6,6,6,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,6,6,6,6,6,6,4}, {4,2,2,2,6,6,6,6,6,6,6,6,6,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,6,6,6,6,6,6,4}, {4,2,2,2,6,6,6,6,6,6,6,6,6,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,6,6,6,6,6,6,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,0,0,0,0,0,0,6,6,6,6,6,6,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,0,0,0,0,0,0,6,6,6,6,6,6,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,0,0,0,0,0,0,6,6,6,6,6,6,4}, {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4} }, { {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4}, {4,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,6,6,6,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,6,6,6,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,6,6,6,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,6,6,6,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,1,1,1,6,6,6,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,1,1,1,6,6,6,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,4}, {4,6,6,6,0,0,0,1,1,1,5,5,5,0,0,0,6,6,6,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,1,1,1,5,5,5,0,0,0,6,6,6,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,1,1,1,5,5,5,0,0,0,6,6,6,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,1,1,1,5,5,5,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,1,1,1,5,5,5,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,1,1,1,5,5,5,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,1,1,1,0,0,0,1,1,1,5,5,5,5,5,5,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,1,1,1,4}, {4,1,1,1,0,0,0,1,1,1,5,5,5,5,5,5,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,1,1,1,4}, {4,1,1,1,0,0,0,1,1,1,5,5,5,5,5,5,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,1,1,1,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,6,6,6,6,6,6,4}, {4,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,4}, {4,1,1,1,1,1,1,0,1,1,1,1,1,0,0,0,6,6,6,0,0,0,1,1,1,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,4}, {4,1,1,1,1,1,1,0,1,1,1,1,1,0,0,0,6,6,6,0,0,0,1,1,1,0,0,0,5,5,5,0,0,0,1,1,1,1,1,1,4}, {4,1,1,1,1,1,1,0,1,1,1,1,1,0,0,0,6,6,6,0,0,0,1,1,1,0,0,0,5,5,5,0,0,0,1,1,1,0,0,0,4}, {4,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,5,5,5,0,0,0,1,1,1,0,0,0,4}, {4,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,1,1,1,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,6,6,6,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,4}, {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4} }, { {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,6,6,6,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,4}, {4,6,6,6,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,1,0,0,0,0,4}, {4,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,1,0,0,0,0,4}, {4,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,4}, {4,5,5,5,0,0,0,0,1,1,1,0,0,0,6,0,0,0,0,0,6,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,4}, {4,5,5,5,0,0,0,0,1,1,1,0,0,0,6,0,0,0,0,0,6,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,4}, {4,5,5,5,0,0,0,0,1,1,1,0,0,0,6,0,0,0,0,0,6,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,5,5,5,4}, {4,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,5,5,5,4}, {4,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,5,5,5,4}, {4,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,4}, {4,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,4}, {4,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,4}, {4,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,4}, {4,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,4}, {4,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,4}, {4,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,4}, {4,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,4}, {4,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,4}, {4,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,4}, {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4} }, { {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4}, {4,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,5,5,5,5,5,5,0,0,0,5,5,5,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,5,5,5,5,5,5,5,5,5,4}, {4,5,5,5,5,5,5,0,0,0,5,5,5,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,5,5,5,5,5,5,5,5,5,4}, {4,5,5,5,5,5,5,0,0,0,5,5,5,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,5,5,5,5,5,5,5,5,5,4}, {4,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,5,5,5,0,0,0,5,5,5,0,0,0,5,5,5,4}, {4,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,5,5,5,0,0,0,5,5,5,0,0,0,5,5,5,4}, {4,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,5,5,5,0,0,0,5,5,5,0,0,0,5,5,5,4}, {4,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,6,6,6,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,6,6,6,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,6,6,6,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,5,5,5,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,5,5,5,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,5,5,5,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,4}, {4,5,5,5,5,5,5,0,0,0,5,5,5,0,0,0,5,5,5,5,5,5,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,4}, {4,5,5,5,5,5,5,0,0,0,5,5,5,0,0,0,5,5,5,5,5,5,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,4}, {4,5,5,5,5,5,5,0,0,0,5,5,5,0,0,0,5,5,5,5,5,5,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,5,5,5,4}, {4,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,5,5,5,4}, {4,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,5,5,5,4}, {4,0,0,0,5,5,5,5,5,5,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,1,1,1,0,0,0,5,5,5,4}, {4,0,0,0,5,5,5,5,5,5,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,1,1,1,0,0,0,5,5,5,4}, {4,0,0,0,5,5,5,5,5,5,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,1,1,1,0,0,0,5,5,5,4}, {4,1,1,1,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,5,5,5,4}, {4,1,1,1,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,5,5,5,4}, {4,1,1,1,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,5,5,5,4}, {4,5,5,5,5,5,5,0,0,0,5,5,5,5,5,5,0,0,0,5,5,5,1,1,1,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,4}, {4,5,5,5,5,5,5,0,0,0,5,5,5,5,5,5,0,0,0,5,5,5,1,1,1,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,4}, {4,5,5,5,5,5,5,0,0,0,5,5,5,5,5,5,0,0,0,5,5,5,1,1,1,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,5,5,5,4}, {4,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,5,5,5,4}, {4,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,0,5,5,5,4}, {4,0,0,0,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,5,5,5,5,5,5,4}, {4,0,0,0,5,5,5,5,5,5,5,5,5,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,5,5,5,0,0,0,5,5,5,5,5,5,4}, {4,0,0,0,5,5,5,5,5,5,5,5,5,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,5,5,5,0,0,0,5,5,5,5,5,5,4}, {4,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4} }, { {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,4}, {4,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,4}, {4,0,0,0,1,1,1,0,0,0,1,1,1,1,0,0,0,0,0,0,2,2,2,2,0,0,0,0,0,0,1,1,1,1,0,0,0,1,1,0,4}, {4,0,0,1,1,1,0,0,0,0,0,0,1,1,1,0,0,0,0,2,2,2,2,2,2,0,0,0,0,1,1,1,0,0,0,0,0,0,1,1,4}, {4,0,1,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,2,2,2,2,2,2,2,2,0,0,0,1,1,0,0,0,0,0,0,0,1,1,4}, {4,0,1,1,0,0,0,0,0,0,0,0,0,1,1,1,0,0,2,2,2,2,2,2,2,2,0,0,1,1,1,0,0,0,0,0,0,0,1,1,4}, {4,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,1,1,0,0,0,0,0,0,0,0,1,1,4}, {4,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,2,2,2,2,2,2,2,2,2,2,2,2,1,1,0,0,0,0,0,0,0,0,1,1,4}, {4,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,2,2,2,2,2,2,2,2,2,2,2,2,1,1,0,0,0,0,0,0,0,0,1,1,4}, {4,1,1,0,0,0,0,0,0,0,0,0,1,1,1,2,2,2,2,6,6,6,6,6,6,2,2,2,2,1,1,1,0,0,0,0,0,1,1,1,4}, {4,1,1,0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,6,6,6,6,6,6,2,2,2,2,1,1,1,1,0,0,0,0,1,1,1,4}, {4,1,1,0,0,0,0,0,0,0,1,1,1,1,1,2,2,2,2,6,6,6,6,6,6,2,2,2,2,1,1,1,1,0,0,0,1,1,1,1,4}, {4,0,1,1,0,0,0,0,0,0,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,0,0,1,1,1,1,4}, {4,0,1,1,1,0,0,0,0,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,1,1,1,1,1,4}, {4,0,0,1,1,1,1,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,1,1,1,1,1,4}, {4,0,0,0,1,1,1,1,1,1,1,1,1,6,6,6,6,6,6,1,1,1,6,6,6,6,6,6,1,1,1,1,1,1,1,1,1,1,1,0,4}, {4,0,0,0,1,1,1,1,1,1,1,1,1,6,6,6,6,6,6,1,1,1,6,6,6,6,6,6,1,1,1,1,1,1,1,1,1,1,1,0,4}, {4,0,0,0,0,1,1,1,1,1,1,1,1,6,6,6,6,6,6,1,1,1,6,6,6,6,6,6,1,1,1,1,1,1,1,1,1,1,0,0,4}, {4,0,0,0,0,0,1,1,1,1,1,1,1,6,6,6,0,0,0,1,1,1,0,0,0,6,6,6,1,1,1,1,1,1,1,1,1,0,0,0,4}, {4,0,0,0,0,0,0,1,1,1,1,1,1,6,6,6,0,0,0,1,1,1,0,0,0,6,6,6,1,1,1,1,1,1,1,1,1,0,0,0,4}, {4,0,0,0,0,0,0,1,1,1,1,1,1,6,6,6,0,0,0,1,1,1,0,0,0,6,6,6,1,1,1,1,1,1,1,1,1,0,0,0,4}, {4,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,4}, {4,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,4}, {4,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,4}, {4,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,6,6,6,6,6,6,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,4}, {4,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,6,6,6,6,6,6,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,4}, {4,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,4}, {4,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,4}, {4,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,4}, {4,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,4}, {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4} }, { {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4}, {4,0,0,0,0,0,0,0,0,0,6,6,6,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,6,6,6,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,6,6,6,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,6,6,6,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,6,6,6,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,6,6,6,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,6,6,6,0,0,0,0,0,0,6,6,6,0,0,0,6,6,6,6,6,6,4}, {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,6,6,6,0,0,0,0,0,0,6,6,6,0,0,0,6,6,6,6,6,6,4}, {4,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,6,6,6,0,0,0,0,0,0,6,6,6,0,0,0,6,6,6,6,6,6,4}, {4,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,6,6,6,1,1,1,0,0,0,0,0,0,0,0,0,6,6,6,4}, {4,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,6,6,6,1,1,1,0,0,0,0,0,0,0,0,0,6,6,6,4}, {4,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,6,6,6,1,1,1,0,0,0,0,0,0,0,0,0,6,6,6,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,6,6,6,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,6,6,6,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,6,6,6,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,6,6,6,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,4}, {4,0,0,0,0,0,0,6,6,6,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,4}, {4,0,0,0,0,0,0,6,6,6,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,4}, {4,6,6,6,0,0,0,6,6,6,0,0,0,0,0,0,1,1,1,0,0,0,6,6,6,0,0,0,0,0,0,6,6,6,1,1,1,0,0,0,4}, {4,6,6,6,0,0,0,6,6,6,0,0,0,0,0,0,1,1,1,0,0,0,6,6,6,0,0,0,0,0,0,6,6,6,1,1,1,0,0,0,4}, {4,6,6,6,0,0,0,6,6,6,0,0,0,0,0,0,1,1,1,0,0,0,6,6,6,0,0,0,0,0,0,6,6,6,1,1,1,0,0,0,4}, {4,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,6,6,6,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,6,6,6,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,6,6,6,0,0,0,0,0,0,4}, {4,0,0,0,6,6,6,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,4}, {4,0,0,0,6,6,6,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,4}, {4,0,0,0,6,6,6,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,4}, {4,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,4}, {4,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,4}, {4,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,4}, {4,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,1,1,1,6,6,6,0,0,0,6,6,6,0,0,0,0,0,0,1,1,1,4}, {4,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,1,1,1,6,6,6,0,0,0,6,6,6,0,0,0,0,0,0,1,1,1,4}, {4,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,1,1,1,6,6,6,0,0,0,6,6,6,0,0,0,0,0,0,1,1,1,4}, {4,1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,6,6,6,0,0,0,0,0,0,4}, {4,1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,1,1,1,6,6,6,0,0,0,0,0,0,4}, {4,1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,1,1,1,6,6,6,0,0,0,0,0,0,4}, {4,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,4}, {4,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,4}, {4,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,4}, {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4} }, { {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,4}, {4,0,0,0,1,1,1,5,5,5,5,5,5,0,0,0,6,6,6,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,1,1,1,5,5,5,5,5,5,0,0,0,6,6,6,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,1,1,1,5,5,5,5,5,5,0,0,0,6,6,6,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,5,5,5,5,5,5,1,1,1,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,0,0,0,6,6,6,0,0,0,4}, {4,0,0,0,0,0,0,5,5,5,5,5,5,1,1,1,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,0,0,0,6,6,6,0,0,0,4}, {4,0,0,0,0,0,0,5,5,5,5,5,5,1,1,1,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,0,0,0,6,6,6,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,1,1,1,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,1,1,1,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,1,1,1,0,0,0,0,0,0,4}, {4,0,0,0,6,6,6,0,0,0,0,0,0,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,6,6,6,0,0,0,0,0,0,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,6,6,6,0,0,0,0,0,0,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,1,1,1,0,0,0,5,5,5,5,5,5,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,4}, {4,0,0,0,0,0,0,1,1,1,0,0,0,5,5,5,5,5,5,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,4}, {4,0,0,0,0,0,0,1,1,1,0,0,0,5,5,5,5,5,5,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,0,0,0,0,0,0,6,6,6,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,0,0,0,0,0,0,6,6,6,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,0,0,0,0,0,0,6,6,6,4}, {4,0,0,0,1,1,1,5,5,5,5,5,5,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,1,1,1,5,5,5,5,5,5,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,1,1,1,5,5,5,5,5,5,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,6,6,6,0,0,0,5,5,5,5,5,5,0,0,0,0,0,0,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,4}, {4,6,6,6,0,0,0,5,5,5,5,5,5,0,0,0,0,0,0,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,4}, {4,6,6,6,0,0,0,5,5,5,5,5,5,0,0,0,0,0,0,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,0,0,0,0,0,0,5,5,5,5,5,5,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,0,0,0,0,0,0,5,5,5,5,5,5,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,0,0,0,0,0,0,5,5,5,5,5,5,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,0,0,0,4}, {4,0,0,0,0,0,0,0,0,0,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,0,0,0,4}, {4,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4}, {4,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,0,0,0,1,1,1,6,6,6,0,0,0,4}, {4,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,0,0,0,1,1,1,6,6,6,0,0,0,4}, {4,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,9,9,9,1,1,0,0,0,0,0,0,0,1,1,1,6,6,6,0,0,0,4}, {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4} }, }; for(i=0;i<41;i++) for(j=0;j<41;j++) map[i][j]=Map[level-1][i][j]; PrintMap(); //打印地图 } void GameOver(bool home) { int timing=0,color=1; while(1) { if(timing++%30==0) //游戏结束原因为生命值为0 { ColorChoose(color); //颜色选择 if(home) //游戏结束原因为老家被毁,则多打印一行字以提示玩家 { GoToxy(37,19); //主屏幕中心打印 printf("老家被毁!"); } GoToxy(37,20); //主屏幕中心打印 printf("游戏结束!"); GoToxy(100,13); //副屏幕打印 printf("游戏结束"); GoToxy(88,17); printf("请按回车键重新开始!"); GoToxy(88,18); printf("或按 Esc键退出游戏!"); if(++color==8) color=1; } if (GetAsyncKeyState( 0xD )& 0x8000) //回车键 { // system("cls"); //清屏,这里清屏后再次打印框架有一定几率造成框架上移一行的bug,因此选用自建清屏函数 // Frame (); //重新打印游戏框架 score-=500; //分数-500 ClearMainScreen(); //主屏清屏函数,无需再次打印框架 Initialize(); //从本关重新开始 break; } else if(GetAsyncKeyState( 0x1B )& 0x8000) //Esc键退出 exit(0); Sleep(20); } } void NextLevel() { int timing=0,color=1; level++; if(level<=MAX_LEVEL) while(1) { if(timing++%10==0) { ColorChoose(color); //颜色选择 GoToxy(37,20); //主屏幕中心打印 printf("恭喜过关!"); GoToxy(100,13); //副屏幕打印 printf("等待下关"); GoToxy(87,17); printf("请按回车键进入下一关!"); GoToxy(88,18); printf("或按 Esc键退出游戏!"); if(++color==8) color=1; } if (GetAsyncKeyState( 0xD )& 0x8000) //回车键 { GoToxy(88,17); //抹除副屏幕中的提示 printf(" "); GoToxy(88,18); printf(" "); ClearMainScreen(); //主屏清屏函数,无需再次打印框架 Initialize(); //初始化从下一关开始,level已++ break; } else if(GetAsyncKeyState( 0x1B )& 0x8000) //Esc键退出 exit(0); Sleep(20); } else //level>8 通关 while(1) { if(timing++%5==0) { ColorChoose(color); GoToxy(33,20); //主屏幕中心打印 printf("恭喜通过全部关卡!"); GoToxy(100,13); //副屏幕打印 printf("已通全关"); GoToxy(88,17); printf("恭喜通过全部关卡!"); GoToxy(88,19); printf("按 Esc键退出游戏!"); if(++color==8) color=1; } if(GetAsyncKeyState( 0x1B )& 0x8000) //Esc键退出 exit(0); Sleep(10); } } void GameCheak() { //剩余敌人为0且四坦克全部不存活 if(remain_enemy<=0 && !AI_tank[0].alive && !AI_tank[1].alive && !AI_tank[2].alive && !AI_tank[3].alive ) NextLevel(); //进入下一关 if(my_tank.revive>=MAX_LIFE) //我的生命值(复活次数)全部用完 MAX_LIFE GameOver(0); //游戏结束,传入0代表我的复活次数用光(生命值为0)。游戏结束有两种判断,另一种是老家被毁 } void SideScreen () //副屏幕 行(84起,110末,若双字符宽则在108打印最后一个字)列(11上屏末,13下屏初,39下屏末。为美观最好打在38) { // | 第 d 关 | " | |\n" GoToxy(93,2); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED); printf("第 关"); GoToxy(92,5); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_BLUE); printf("分 数:"); GoToxy(92,7); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN); printf("生 命:"); GoToxy(86,9); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED); printf("剩余敌方坦克:"); GoToxy(86,11); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_BLUE); printf("当前游戏速度: %d",21-speed); GoToxy(86,13); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE); printf("当前游戏状态:"); GoToxy(94,19); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED); GoToxy(94,24); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED); printf("帮 助"); GoToxy(86,27); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN); printf("方向键 ←↑→↓ 移动"); GoToxy(93,29); printf("x 键 射击"); GoToxy(89,31); printf("+ - 调整游戏速度"); GoToxy(90,33); printf("游戏速度范围1~20"); GoToxy(90,35); printf("回车键 暂停游戏"); GoToxy(90,37); printf("Esc键 退出游戏"); /* printf("帮 助"); //这是第二种详细说明的样式 GoToxy(86,21); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN); printf("方向键 ←↑→↓ 移动"); GoToxy(93,23); printf("x 键 射击"); GoToxy(89,25); printf("+ - 调整游戏速度"); GoToxy(90,27); printf("游戏速度范围1~20"); GoToxy(90,29); printf("回车键 暂停游戏"); GoToxy(90,31); printf("Esc键 退出游戏"); GoToxy(86,33); printf("敌方坦克全部消灭则过关"); GoToxy(87,34); printf("己方坦克生命值为0 或"); GoToxy(86,35); printf("正下方的老家被毁则失败"); GoToxy(86,36); printf("己坦克与敌坦克子弹碰撞"); GoToxy(87,37); printf("则抵消,敌坦克间子弹碰"); GoToxy(86,38); printf("撞不抵消且可穿过敌坦克");*/ } void Initialize() //初始化 { remain_enemy=16; my_tank.revive=0; //我的坦克复活次数为0 position=0; bul_num=0; GetMap(); BuildMyTank( &my_tank ); for(int i=0;i<12;i++) //子弹初始化 { bullet [i].exist=0; bullet [i].initial=0; } for(int i=0;i<=3;i++) //AI坦克初始化 { AI_tank [i].revive=0; AI_tank [i].alive=0; //初始化坦克全是不存活的,BuildAITank()会建立重新建立不存活的坦克 AI_tank [i].stop=0; AI_tank [i].num=i; AI_tank [i].my=0; AI_tank [i].CD=0; } GoToxy(97,2); //在副屏幕上关卡数 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN); printf("%d",level); GoToxy(102,5); //在副屏幕上打印分数 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_BLUE); printf("%d ",score); GoToxy(102,7); //在副屏幕打印我的剩余生命值 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN); printf("%d", MAX_LIFE-my_tank.revive); GoToxy(102,9); //在副屏幕上打印剩余坦克数 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED); printf("%d ",remain_enemy); GoToxy(100,13); //在副屏幕上打印状态 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE|FOREGROUND_GREEN); printf("正在游戏"); }
6.贪吃蛇(AI恩比)
#include<cstdio> #include<windows.h> #define UP 1 #define LEFT 2 #define DOWN 3 #define RIGHT 4 #define HEAD 5 #define WALL 22 struct botton{ int x; int y; int length; }; struct Snake{ Snake(int a,bool b,int c); bool life; int Flag ; int Length ; int Sum ; int color; int speed; POINT Head ; POINT End ; void Smarter() ; void Move() ; void Go(bool iiSmart,bool iiSmarter,bool iiMove,int up,int left,int down,int right) ; }; void GradeIn() ; void LevelChoose() ; void MenuPrint() ; void Menu() ; void GradePrint() ; void Setting() ; void Prepare() ; void Walk(int ,long&,long&) ; void Dead() ; void Foods() ; void GradeOut(int) ; void Check() ; void Pedge(int,int,int,bool) ; int Pposition(int,int) ; int Pcolor(int,int) ; char *Psame(int,char); char *Pempty(int) ; POINT Food ; Snake Person(10,true,1) ; Snake Computer(1,false,1) ; Snake Another(14,false,1) ; int Map[WALL][WALL] ={} ; int Level = 0 ; int Score[4] ={} ; bool iBegin = true ; bool iMenu = false ; bool iDead = true ; bool iFor = false ; bool iSmart = false ; bool iCheck = false ; char wLevel[4][5] ={"简单","普通","困难","炼狱"} ; Snake::Snake(int a,bool b,int c) { color=a; life=b; speed=c; } /* 数据导入 */ void GradeIn() { if ( fopen("score.txt","rb")){ fscanf(fopen("score.txt","rb"),"%d%d%d%d",&Score[0],&Score[1],&Score[2]),&Score[3] ; } } /* 选择菜单 */ void Menu() { int one=0 ; POINT edge[5]={{16,7},{13,10},{13,13},{23,13},{16,16}} ; int length[5]={12,18,10,8,12} ; Print: system("cls") ; printf("\n\n\n%s贪%s吃%s蛇\n\n\n\n",Pempty(17),Pempty(2),Pempty(2),Pcolor( 15, 3)) ; printf("\n%s开始游戏\n\n",Pempty(18)) ; printf("\n%s游戏难度 :%s\n\n",Pempty(15),wLevel[Level]) ; printf("\n%s排行榜%s设置\n\n",Pempty(15),Pempty(4)) ; printf("\n%s退出游戏",Pempty(18)) ; Pedge(edge[one].x,edge[one].y,length[one],true); Scan: Sleep(125) ; if ( GetAsyncKeyState(' ')||GetAsyncKeyState(VK_RETURN)){ void (*name[])()={Prepare,LevelChoose,GradePrint,Setting} ; if(one<4){ name[one]() ; } if(one==0||one==4){ iBegin=(one==4)?false:true ; return ; } one=0 ; } else if ((GetAsyncKeyState('S')||GetAsyncKeyState(VK_DOWN))&& one!=4){ one+=(one==2)?2:1 ; } else if ((GetAsyncKeyState('W')||GetAsyncKeyState(VK_UP))&& one!=0){ one-=(one==3)?2:1 ; } else if ((GetAsyncKeyState('D')||GetAsyncKeyState(VK_RIGHT))&& one==2){ one++ ; } else if ((GetAsyncKeyState('A')||GetAsyncKeyState(VK_LEFT))&& one==3){ one-- ; } else{ goto Scan ; } for(int i=0;i<5;i++){ Pedge(edge[i].x,edge[i].y,length[i],false); } goto Print ; } /* 难度选择 */ void LevelChoose() { Print : system("cls") ; printf("\n\n\n%s困 难 度 选 择\n\n\n\n",Pempty(20)) ; for(int i=0 ;i<4 ;i++){ printf("%s%s\n\n\n",Pempty(27),wLevel[i]) ; } for(int i=0 ;i<2 ;i++){ printf("--------",Pposition(25,(Level+2)*3+i*2) ) ; printf("#",Pposition(25+i*7,(Level+2)*3+1)) ; } Scan: Sleep(125) ; if ((GetAsyncKeyState('S')||GetAsyncKeyState(VK_DOWN))&& Level != 3){ Level++ ; } else if ((GetAsyncKeyState('W')||GetAsyncKeyState(VK_UP))&& Level != 0){ Level-- ; } else if ( GetAsyncKeyState(' ')||GetAsyncKeyState(VK_RETURN)){ return ; } else{ goto Scan ; } goto Print ; } /* 排行数据 */ void GradePrint() { system("cls") ; printf("\n\n\n%s排 行 榜\n\n",Pempty(18)) ; for(int i=0 ;i<3 ;i++){ printf("%s第%d名: %d\n\n",Pempty(17) ,i+1,Score[i]) ; } printf("\n\n\n%s知道了\n\n",Pempty(19)) ; Pedge(17,13,10,true); for(Sleep(125) ; (GetAsyncKeyState(' ') ||GetAsyncKeyState(VK_RETURN))== false ;Sleep(125)) ; } /* 系统设置 */ void Setting() { bool iScore=false ; bool iOut=false ; bool *str[8]={&iDead,&iFor,&iSmart,&Computer.life,&Another.life,&iScore,&iCheck,&iOut} ; char Name[8][9]={"死亡限制","循环地图","智能辅助","人机模式","双人模式","缓存清理","检查模式","退出设置"} ; int one=0 ; Print: system("cls") ; printf("\n\n%s设%s置\n\n",Pempty(25),Pempty(4)) ; for(int i=0 ;i<8 ;i++){ printf("%s%s%s",Pempty(20),Name[i],Pempty(8)) ; printf("%s\n\n",(*str[i])?" 开":"关",Pcolor((*str[i])?3:15,(*str[i])?15:3)) ; Pcolor(15,3) ; } for(int i=0 ;i<2 ;i++){ printf("--------",Pposition(34,one*2+3+i*2)) ; printf("#",Pposition(34+i*7,one*2+4) ) ; } Scan: Sleep(125) ; if((GetAsyncKeyState('S')||GetAsyncKeyState(VK_DOWN))&& one < 7){ one++ ; } else if((GetAsyncKeyState('W')||GetAsyncKeyState(VK_UP))&& one > 0){ one-- ; } else if( GetAsyncKeyState(' ')||GetAsyncKeyState(VK_RETURN)){ *str[one]=(*str[one])?false:true ; } else{ goto Scan ; } if(iScore){; Score[0] = Score[1] = Score[2] = Score[3]= 0 ; GradeOut(0); } if(iOut){ return ; } goto Print ; } /* 检查文件 */ void Check() { for(int i=0 ;i<WALL ;i++){ for(int j=0 ;j<WALL ;j++){ fprintf(fopen("check.txt","a"),"%c",Map[i][j]+32) ; } fprintf(fopen("check.txt","a"),"\n") ; } } /* 主函数 */ int main() { system("color 3f&mode con cols=44 lines=24&title 贪吃蛇") ; GradeIn() ; Menu: Menu() ; while( iBegin){ if(Another.life==false){ Person.Go(iSmart,false,false,VK_UP,VK_LEFT,VK_DOWN,VK_RIGHT) ; } Person.Go(iSmart,false,true,'W','A','S','D') ; Computer.Go(true,true,true,0,0,0,0) ; Another.Go(iSmart,false,true,VK_UP,VK_LEFT,VK_DOWN,VK_RIGHT) ; if ( iDead&&(Map[Person.Head.y][Person.Head.x] != HEAD || ( Computer.life&& Map[Computer.Head.y][Computer.Head.x] != HEAD) || ( Another.life&& Map[Another.Head.y][Another.Head.x] != HEAD))){ Dead() ; } if ( iMenu){ goto Menu ; } Sleep(( Level < 3) ? ( 150 - ( Level * 50)) : ( rand() % 80)) ; if(iCheck){ Check() ; } } return 0 ; } /* 玩家方向 */ void Snake::Go(bool iiSmart,bool iiSmarter,bool iiMove,int up,int left,int down,int right) { if(life){ Flag =((GetAsyncKeyState(left))&& Flag!=RIGHT)?LEFT:Flag ; Flag = ((GetAsyncKeyState(right))&& Flag!=LEFT)?RIGHT:Flag ; Flag = ((GetAsyncKeyState(up))&& Flag!=DOWN)?UP:Flag ; Flag = ((GetAsyncKeyState(down))&& Flag!=UP)?DOWN:Flag ; iMenu = (GetAsyncKeyState('R'))?true:false ; if(iiSmarter){ Smarter() ; } if(iiSmart){ for(int i=0 ;i<16 ;i++){ if((Flag==LEFT&&Map[Head.y][Head.x-1])||(Flag==DOWN&&Map[Head.y+1][Head.x])||(Flag==RIGHT&&Map[Head.y][Head.x+1])||(Flag==UP&&Map[Head.y-1][Head.x])){ Flag=rand()%4+1 ; } } } if(iiMove){ Move() ; } } } /* 智能方向 */ void Snake::Smarter() { Map[Food.y][Food.x]=-2 ; for(int nem=0 ;nem<50&&Map[Head.y-1][Head.x]!=-2&&Map[Head.y+1][Head.x]!=-2&&Map[Head.y][Head.x-1]!=-2&&Map[Head.y][Head.x+1]!=-2 ;nem++){ for(int i=1 ;i<WALL-1 ;i++){ for(int j=1 ;j<WALL-1 ;j++){ if(Map[i][j]==-2){ if(Map[i-1][j]==0){ Map[i-1][j]=-1 ; } if(Map[i+1][j]==0){ Map[i+1][j]=-1 ; } if(Map[i][j-1]==0){ Map[i][j-1]=-1 ; } if(Map[i][j+1]==0){ Map[i][j+1]=-1 ; } } } } if(iFor){ for(int i=0 ;i<WALL ;i++){ for(int j=0 ;j<WALL ;j+=(i==0||i==WALL-1)?1:WALL-1){ if(Map[i][j]==-1){ Map[(i==0||i==WALL-1)?abs(i-WALL+1):i][(j==0||j==WALL-1)?abs(j-WALL+1):j] = (Map[(i==0||i==WALL-1)?abs(i-WALL+1):i][(j==0||j==WALL-1)?abs(j-WALL+1):j]==0)?-2:Map[(i==0||i==WALL-1)?abs(i-WALL+1):i][(j==0||j==WALL-1)?abs(j-WALL+1):j] ; Map[(i==0||i==WALL-1)?abs(i-WALL+2):i][(j==0||j==WALL-1)?abs(j-WALL+2):j] = (Map[(i==0||i==WALL-1)?abs(i-WALL+2):i][(j==0||j==WALL-1)?abs(j-WALL+2):j]==0)?-2:Map[(i==0||i==WALL-1)?abs(i-WALL+2):i][(j==0||j==WALL-1)?abs(j-WALL+2):j] ; } } } } for(int i=0 ;i<WALL ;i++){ for(int j=0 ;j<WALL ;j++){ Map[i][j]=(Map[i][j]==-1)?-2:Map[i][j] ; } } } if(Map[Head.y-1][Head.x]==-2){ Flag=UP ; } else if(Map[Head.y+1][Head.x]==-2){ Flag=DOWN ; } else if(Map[Head.y][Head.x-1]==-2){ Flag=LEFT ; } else if(Map[Head.y][Head.x+1]==-2){ Flag=RIGHT ; } for(int i=0 ;i<WALL ;i++){ for(int j=0 ;j<WALL ;j++){ if(Map[i][j]==-2){ Map[i][j]=0 ; } } } } /* 定位打印 */ int Pposition ( int x ,int y) { COORD Pos ={ x,y } ; HANDLE Handle = GetStdHandle(STD_OUTPUT_HANDLE) ; SetConsoleCursorPosition(Handle, Pos) ; CONSOLE_CURSOR_INFO CurSor ; GetConsoleCursorInfo(Handle,&CurSor) ; CurSor.bVisible = false ; SetConsoleCursorInfo(Handle,&CurSor) ; return 0 ; } /* 颜色字体 */ int Pcolor( int a ,int b) { HANDLE Handle=GetStdHandle(STD_OUTPUT_HANDLE) ; SetConsoleTextAttribute(Handle, a + b * 0x10) ; return 0 ; } /* 批量打印 */ char * Psame (int n,char word) { char * sentence=new char [n+2] ; for(int i=0 ;i<n ;i++){ sentence[i]=word ; } sentence[n]=0 ; return sentence ; } /* 空格打印 */ char * Pempty(int n) { return Psame(n,' '); } /* 边框打印 */ void Pedge(int x,int y,int length,bool saw) { for(int i=0;i<2;i++){ printf("%s",Psame(length,'-'),Pposition(x,y+i*2),Pcolor(saw?15:3,3)); printf("#",Pposition(x+i*(length-1),y+1)); } } /* 运行准备 */ void Prepare() { Person.Flag = RIGHT ; Person.End.x = Person.Head.x = 3 ; Person.End.y = Person.Head.y = 10 ; Person.Sum = -3 ; Person.Length = 0 ; Computer.Flag = LEFT ; Computer.End.x = Computer.Head.x = 18 ; Computer.End.y = Computer.Head.y = 10 ; Computer.Sum = -3 ; Computer.Length = 0 ; Another.Flag =(Computer.life)?DOWN : LEFT ; Another.End.x = Another.Head.x =(Computer.life)? 11:18 ; Another.End.y = Another.Head.y =(Computer.life)? 3:10 ; Another.Sum = -3 ; Another.Length = 0 ; iMenu = false ; system("cls") ; for( int i = 0 ; i < WALL ; i++){ for( int j = 0 ; j < WALL ; ++j){ if( i == 0 || i == WALL -1 || j == 0 || j == WALL -1){ Map[i][j] = (iFor)?0:WALL ; Pcolor( 15,3) ; } else{ Map[i][j] = 0 ; Pcolor( 3 , 3) ; } printf("■") ; } } Foods() ; } /* 蛇皮走位 */ void Walk(int Flag,long&x,long&y) { switch(Flag){ case LEFT:{ x-=(iFor&&x==1)?-19:1 ; }return ; case RIGHT:{ x+=(iFor&&x==20)?-19:1 ; }return ; case UP:{ y-=(iFor&&y==1)?-19:1 ; }return ; case DOWN:{ y+=(iFor&&y==20)?-19:1 ; }return ; } } /* 蛇的移动 */ void Snake::Move() { printf("●",Pcolor(color,3) ,Pposition(End.x*2,End.y) ) ; Map[Head.y][Head.x] = Flag ; Walk(Flag,Head.x,Head.y) ; printf("●",Pcolor( color ,3),Pposition( Head.x * 2 ,Head.y)) ; Map[Head.y][Head.x] += HEAD ; if( Head.y==Food.y&& Head.x==Food.x){ Length++ ; Foods() ; } if( Sum==Length){ int Temp = Map[End.y][End.x] ; Map[End.y][End.x] = 0 ; printf("■",Pcolor( 3 ,3), Pposition( End.x * 2 ,End.y) ) ; Walk(Temp,End.x,End.y) ; } else{ Sum++ ; } } /* 判断死亡 */ void Dead() { GradeOut(Person.Length+Another.Length) ; printf(" Game Over !",Pcolor( 15, 3) ,Pposition( 16 , 9)) ; Sleep(1500) ; char wDead[3][9] ={"重新开始","返回菜单","退出游戏"} ; int one = iBegin = false ; Print: system("cls") ; printf("\n\n\n\n%s游 戏 结 束\n",Pempty(20)) ; if(Another.life&&Person.Length>Another.Length){ printf("%s左 边 赢 了",Pempty(20)) ; } else if(Another.life&&Person.Length<Another.Length){ printf("%s右 边 赢 了",Pempty(20)) ; } printf("\n%s分数 : %d\n\n\n\n" ,Pempty(22),Person.Length+Another.Length) ; for( int i = 0 ; i < 3 ; i++){ printf("%s%s\n\n\n",Pempty(23),wDead[i]) ; } for(int i=0 ;i<2 ;i++){ printf("------------",Pposition(21,one*3+9+i*2)) ; printf("#",Pposition(21+i*11,one*3+10) ) ; } Scan: Sleep(125) ; if((GetAsyncKeyState('W')||GetAsyncKeyState(VK_UP))&& one != 0){ one-- ; } else if((GetAsyncKeyState('S')||GetAsyncKeyState(VK_DOWN))&& one != 2){ one++ ; } else if( GetAsyncKeyState(' ')||GetAsyncKeyState(VK_RETURN)){ switch(one){ case 0:{ iBegin = true ; Prepare() ; }break ; case 1:{ iBegin = iMenu = true ; }break ; } return ; } else{ goto Scan ; } goto Print ; } /* 随机果实 */ void Foods() { do{ Food.x = rand() % ( WALL - 2) +1 ; Food.y = rand() % ( WALL - 2) +1 ; }while( Map[Food.y][Food.x]!=0) ; printf("★",Pcolor( 4 , 3),Pposition( Food.x * 2 ,Food.y)) ; } /* 分数保存 */ void GradeOut(int grade) { for(int i=2 ;i>=0 ;i--){ if(Score[i]<grade){ Score[i+1] = Score[i] ; Score[i] = grade ; } } fprintf(fopen("score.txt","w+"),"%d\n%d\n%d",Score[0],Score[1],Score[2]) ; }
7.拯救公主(lsy和sgdsm力推)
#include<stdlib.h> #include<stdio.h> #include<time.h> //suiji #include<string.h> #include<windows.h> //SLEEP函数 struct Player //玩家结构体,并初始化player { char name[21]; int attack; int defense; int health; long int max_health; int level; int exp; int range_exp; long int max_exp; } player= {"勇者",50,40,100,100,1,0,0,100}; struct Enemy //怪的结构体,并初始化各种怪 { char name[20]; char wupin[12]; int attack; int defense; int health; int money; long int exp; int wupin_sign; int wupinpro; int double_attack; int miss; } strongman= {"森林巨人","黄金圣衣",40,50,350,200,100,1,2,1,0}, witch= {"森林女巫","银甲",25,15,100,50,50,2,2,1,1}, xiyi= {"森林蜥蜴","铁甲",18,10,50,30,35,3,3,2,2}, big_strongman= {"森林巨人王","巨人之臂",40*5,50*5,350*5,200*5,100*5,4,4,2,0}, lion= {"草原雄狮","绝世好剑",60,30,280,200,100,5,2,1,0}, horse= {"草原野马","碧血剑",28,12,90,50,50,6,2,1,1}, bee= {"草原黄蜂","长剑",17,11,60,30,35,7,3,2,2}, shitu= {"使徒","\0",60*8,30*8,280*8,200*8,100*8,9,1,1,0}, guai= {"\0","\0",0,0,0,0,0,0,0,0,0}; struct Place { int bar,hotel,forest1,forest2,forest3,grass1,grass2,grass3; } place= {1,2,3,4,5,6,7,8}; int max_exp=0; int choose_number=0,s=0,strongman_arm=0,battle=0,money=500,place_sign=9; int cao=3,jijiubao=2,baiyao=2,superbaiyao=1,boom=3,dubiao=2,atom_boom=1; int fang=0,fang1=10,fang1n=0,fang2=20,fang2n=0,fang3=40,fang3n=0,fang4=100,fang4n=0; int gong=0,gong1=8,gong1n=0,gong2=15,gong2n=0,gong3=25,gong3n=0,gong4=60,gong4n=0; char gongname[20]="无",fangname[20]="无"; char proof; void AddWupin(int); int AttackResult(); void BattleAct(); void ChooseWupin(); void DisplayState(); void OrdinaryAct(); int SuiJi(); int SuiJi100(); void WhetherLevelUp(); void SlowDisplay(char *); int main() { int i=0,j=0,k=0; char player_name[21]; SlowDisplay("这是一个勇者的世界! 雅莉萨斯国的罗茜公主被陌生人绑架了!\n\n 伟大的勇者啊~拿起你们的武器,营救公主!\n\n\n输入你的名字: (20个字符)\n\n\n"); // sndPlaySound("res\\F005.wav",SND_LOOP); scanf("%s",player_name); strncpy(player.name,player_name,20); if(strcmp(player.name,"王永涵")==0) { SlowDisplay("封印多年的 王永涵 啊!你终于可以重见天日了!\n\n\n 王永涵 重新启动... 随即... 暴走!!!\n\n\n"); player.attack=999; player.defense=999; player.health=9999; player.max_health=9999; } getchar(); OrdinaryAct(); return 0; } int SuiJi() { srand((unsigned)time(NULL)); return rand()%10; } int SuiJi100() { srand((unsigned)time(NULL)); return rand()%100; } void ChooseWupin() //选择物品 并使用 { printf("物品: 1,止血草%d个 2,急救包%d个 3,云南白药%d个 4,超级云南白药%d个 5,手雷%d个 6,毒标%d个 7,手抛式原子弹%d个 0,返回\n\n\n",cao,jijiubao,baiyao,superbaiyao,boom,dubiao,atom_boom); switch(scanf("%d",&choose_number),choose_number) { case 1: if(cao>0) { SlowDisplay("使用止血草,HP增加60\n\n\n"); cao--; if(player.health+60>player.max_health)player.health=player.max_health; else player.health+=60; } else SlowDisplay("没有止血草了\n\n\n"); break; case 2: if(jijiubao>0) { SlowDisplay("使用急救包,HP增加80\n\n\n"); jijiubao--; if(player.health+80>player.max_health)player.health=player.max_health; else player.health+=80; } else SlowDisplay("没有急救包了\n\n\n"); break; case 3: if(baiyao>0) { SlowDisplay("使用云南白药,HP增加120\n\n\n"); baiyao--; if(player.health+120>player.max_health)player.health=player.max_health; else player.health+=120; } else SlowDisplay("没有云南白药了\n\n\n"); break; case 4: if(superbaiyao>0) { SlowDisplay("使用超级云南白药,HP增加200\n\n\n"); superbaiyao--; if(player.health+200>player.max_health)player.health=player.max_health; else player.health+=200; } else SlowDisplay("没有超级云南白药了\n\n\n"); break; case 5: if(battle) //在战斗中(battle=1),否则(battle=0)不能使用攻击性物品 { if(boom>0) { SlowDisplay("使用手雷,敌人HP减少100\n\n\n"); boom--; guai.health-=100; AttackResult(); } } else SlowDisplay("非战斗状态,不能使用手雷!\n\n\n"); break; case 6: if(battle) //在战斗中(battle=1),否则(battle=0)不能使用攻击性物品 { if(dubiao>0) { SlowDisplay("使用毒标,敌人HP减少200\n\n\n"); dubiao--; guai.health-=200; AttackResult(); } } else SlowDisplay("非战斗状态,不能使用毒标!\n\n\n"); break; case 7: if(battle) //在战斗中(battle=1),否则(battle=0)不能使用攻击性物品 { if(atom_boom>0) { SlowDisplay("使用手抛式原子弹,敌人HP减少500\n\n\n"); atom_boom--; guai.health-=500; AttackResult(); } } else SlowDisplay("非战斗状态,不能使用手抛式原子弹!\n\n\n"); break; case 0: break; default: printf("ChooseWupin error!\n\n\n"); } } int AttackResult() //攻击结果:判断是否获胜 是否获得物品 和 是否升级 { if(guai.health<=0) { battle=0; printf("战斗胜利!获得金币%d,经验%d\n\n\n",guai.money,guai.exp); player.exp+=guai.exp; player.range_exp+=guai.exp; money+=guai.money; s=SuiJi(); if(s<guai.wupinpro) { SlowDisplay("从敌人尸骸中发现"); printf("%s\n\n\n",guai.wupin); AddWupin(guai.wupin_sign); } WhetherLevelUp(); if(strcmp(guai.name,"使徒")==0) { puts("战斗胜利,救出公主!!!"); getchar(); getchar(); exit(0); } return 1; //攻击有结果了返回1,否则返回0,用于判断是否继续做战斗行为 } else { int s=SuiJi(); if((guai.attack+s-player.defense/3)<0) { player.health-=1; printf("%s反击,你的HP减少了 1\n\n",guai.name); } else { player.health-=guai.attack+s-player.defense/3; printf("%s反击,你的HP减少了%d\n\n",guai.name,guai.attack+s-player.defense/3); } if(player.health<0) { battle=0; printf("%s战死!金币掉落%d\n\n\n",player.name,player.level*500); money-=player.level*500; player.health=player.max_health/5; OrdinaryAct();////////// return 1; } } return 0; } void AddWupin(int wupin_sign) { switch(wupin_sign) { case 1: fang4n++; break; case 2: fang3n++; break; case 3: fang2n++; break; case 4: strongman_arm=1; break; case 5: gong4n++; break; case 6: gong3n++; break; case 7: gong2n++; break; default: printf("AddWupin error\n\n\n"); } } void WhetherLevelUp() { int i=0,j=0; int l1=player.range_exp/100; int l2=player.range_exp/300; int l3=player.range_exp/600; if(player.level<=15&&l1>0) //15级以下,经验足够 都满足则升级 { if(l1==1) { printf("%s",player.name); SlowDisplay(" 升级!\n\n\n攻击力+3, 防御力+2, HP上限+20\n\n\n"); player.exp=player.exp+guai.exp-(player.exp+guai.exp)%100; player.attack+=3; player.defense+=2; player.max_health+=20; player.health=player.max_health; player.level++; player.range_exp=0; player.exp=player.max_exp; player.max_exp+=100; } else { printf("好厉害!连升%d级!",l1); printf("攻击力+%d, 防御力+%d, HP上限+%d\n\n\n",3*l1,2*l1,20*l1); player.exp=player.exp+guai.exp-(player.exp+guai.exp)%100; player.attack+=3*l1; player.defense+=2*l1; player.max_health+=20*l1; player.health=player.max_health; player.level+=l1; player.range_exp=0; player.exp=player.max_exp; player.max_exp+=100*l1; } } else if(player.level<=40&&l2>0) { if(l2==1) { printf("%s",player.name); SlowDisplay(" 升级!\n\n\n攻击力+3, 防御力+2, HP上限+20\n\n\n"); player.exp=player.exp+guai.exp-(player.exp+guai.exp)%100; player.attack+=3; player.defense+=2; player.max_health+=20; player.health=player.max_health; player.level++; player.range_exp=0; player.exp=player.max_exp; player.max_exp+=300; } else { printf("好厉害!连升%d级!",l1); printf("攻击力+%d, 防御力+%d, HP上限+%d\n\n\n",3*l2,2*l2,20*l2); player.exp=player.exp+guai.exp-(player.exp+guai.exp)%100; player.attack+=3*l2; player.defense+=2*l2; player.max_health+=20*l2; player.health=player.max_health; player.level+=l2; player.range_exp=0; player.exp=player.max_exp; player.max_exp+=300*l2; } } else if(l3>0) { if(l3==1) { printf("%s",player.name); SlowDisplay(" 升级!\n\n\n攻击力+3, 防御力+2, HP上限+20\n\n\n"); player.exp=player.exp+guai.exp-(player.exp+guai.exp)%100; player.attack+=3; player.defense+=2; player.max_health+=20; player.health=player.max_health; player.level++; player.range_exp=0; player.exp=player.max_exp; player.max_exp+=600; } else { printf("好厉害!连升%d级!",l1); printf("攻击力+%d, 防御力+%d, HP上限+%d\n\n\n",3*l3,2*l3,20*l3); player.exp=player.exp+guai.exp-(player.exp+guai.exp)%100; player.attack+=3*l3; player.defense+=2*l3; player.max_health+=20*l3; player.health=player.max_health; player.level+=l3; player.range_exp=0; player.exp=player.max_exp; player.max_exp+=600*l3; } } } void OrdinaryAct() //正常行为菜单(移动,物品,对话,查看状态,装备,退出游戏) { while(1) { // \(1000); // system("cls"); puts("============================================================================="); printf("要做什么?\n\n\n 1,移动 2,道具 3,对话 4,查看状态 5,装备 0,退出游戏\n\n\n"); puts("============================================================================="); switch(scanf("%d",&choose_number),choose_number) { case 1: //显示移动菜单 SlowDisplay("要去哪里?\n\n\n"); printf("1,酒吧 2,旅馆 3,森林一层 4,森林二层 5,森林三层 6,草原一层 7,草原二层 8,草原三层\n\n\n"); switch(scanf("%d",&choose_number),choose_number) { case 1: place_sign=place.bar; //记录目前位置-酒吧 // OrdinaryAct(); break; case 2: place_sign=place.hotel; //进入旅店 SlowDisplay("要住店吗? 200个金币 1,是 0,否\n\n\n"); choose_number=1; switch(scanf("%d",&choose_number),choose_number) { case 1: if(money-200<0) //判断钱是否够 { SlowDisplay("Sorry,你的钱不够~\n\n\n"); } else { SlowDisplay("好好休息\n\tHP满\n\t\t第二天了\n\n"); money-=200; //花费200住店费 player.health=player.max_health; //体力满 } break; case 0: SlowDisplay("下次再来!\n\n\n"); break; default: printf("hotel talk error!\n\n\n"); } place_sign=0; break; case 3: place_sign=place.forest1; s=SuiJi(); if(s<7) { battle=1; guai=xiyi; printf("%s扑了过来!\n\n\n",guai.name); BattleAct(); } else if(s<9) { battle=1; guai=witch; printf("%s扑了过来!\n\n\n",guai.name); BattleAct(); } else { SlowDisplay("这里安全\n\n\n"); //不用调用OAct函数,会自动执行OAct函数; } break; case 4: place_sign=place.forest2; s=SuiJi(); if(s<7) { battle=1; guai=witch; printf("%s扑了过来!\n\n\n",guai.name); BattleAct(); } else if(s<9) { battle=1; guai=strongman; printf("%s扑了过来!\n\n\n",guai.name); BattleAct(); } else { SlowDisplay("这里安全\n\n\n"); } break; case 5: place_sign=place.forest3; s=SuiJi(); if(s<7) { battle=1; guai=strongman; printf("%s扑了过来!\n\n\n",guai.name); BattleAct(); } else if(s<9) { battle=1; guai=big_strongman; printf("%s扑了过来!\n\n\n",guai.name); BattleAct(); } else { SlowDisplay("这里安全\n\n\n"); } break; case 6: place_sign=place.grass1; s=SuiJi(); if(s<7) { battle=1; guai=bee; printf("%s扑了过来!\n\n\n",guai.name); BattleAct(); } else if(s<9) { battle=1; guai=horse; printf("%s扑了过来!\n\n\n",guai.name); BattleAct(); } else { SlowDisplay("这里安全\n\n\n"); } break; case 7: place_sign=place.grass2; s=SuiJi(); if(s<7) { battle=1; guai=horse; printf("%s扑了过来!\n\n\n",guai.name); BattleAct(); } else if(s<9) { battle=1; guai=lion; printf("%s扑了过来!\n\n\n",guai.name); BattleAct(); } else { SlowDisplay("这里安全\n\n\n"); } break; case 8: place_sign=place.grass3; s=SuiJi(); if(s<7) { battle=1; guai=lion; printf("%s扑了过来!\n\n\n",guai.name); BattleAct(); } else if(s<9) { battle=1; if(strongman_arm) { SlowDisplay("神秘老人:\n\n\n 哈哈,年轻人,做的不错,不过...嘿嘿,你上当啦!巨人之臂我要了,公主你也别想带走!\n\n\n"); guai=shitu; printf("%s扑了过来!\n\n\n",guai.name); BattleAct(); } else SlowDisplay("神秘老人:\n\n\n 年轻人,你好啊.如果你有巨人之臂,我可以告诉你公主的下落哦~\n\n\n"); } else { SlowDisplay("这里安全\n\n\n"); } break; default: printf("choose map error!\n\n\n"); } break; case 2: ChooseWupin(); break; //显示道具,并可以使用. case 3: //对话选项 if(place_sign==place.bar) { SlowDisplay("要和谁说话?\n\n\n1,红发女郎 2,赏金猎人 3,酒吧老板\n\n\n"); //显示对话人物 switch(scanf("%d",&choose_number),choose_number) { case 1: SlowDisplay("红发女郎:\n\n\n 吧台边那个Hunter好帅啊!(~脸红~)\n\n\n听说他经常外出打猎,外面的路他应该很熟悉的!\n\n\n"); break; case 2: if(fang1n<1&&gong1n<1) { SlowDisplay("赏金猎人:\n\n\n 你要救公主啊!好胆量!\n\n\n 不过外面的丛林和草原很险恶,而且越深越危险,这是匕首和布衣,对你会有些帮助的,拿去吧!\n\n\n"); printf("%s心想:(哇,这位大叔人真好啊!\n\n\n)",player.name); gong1n++; fang1n++; } else SlowDisplay("赏金猎人:\n\n\n 加油吧,年轻人!\n\n\n 不要被外面丛林和草原所吓倒!\n\n\n"); break; case 3: printf("要喝点什么?\n\n\n 1,二锅头25金币 HP+20 2,XO酒80金币 HP+50 3,人头马面150金币 HP+100 0,返回\n\n\n"); choose_number=1; while(choose_number) { switch(scanf("%d",&choose_number),choose_number) { case 1: if(money<25) { SlowDisplay("钱不够!"); } else { if(player.health+20<=player.max_health) { SlowDisplay("HP+20."); money-=25; player.health+=20; } else { SlowDisplay("HP满了"); player.health=player.max_health; } } break; case 2: if(money<80) { SlowDisplay("钱不够!"); } else { if(player.health+50<=player.max_health) { SlowDisplay("HP+50."); money-=80; player.health+=50; } else { SlowDisplay("HP满了"); player.health=player.max_health; } } break; case 3: if(money<150) { SlowDisplay("钱不够!"); } else { if(player.health+100<=player.max_health) { SlowDisplay("HP+100."); money-=150; player.health+=100; } else { SlowDisplay("HP满了"); player.health=player.max_health; } } break; case 0: SlowDisplay("下次再来!\n"); break; default: SlowDisplay("输入错误\n\n\n"); } } } } else if(place_sign==place.hotel) SlowDisplay("“老板娘!我...”\n\n\n“我忙着呢,没空理你~”\n\n\n"); else SlowDisplay("这里好像没人可以聊天\n\n\n"); break; case 4: DisplayState(); break; //显示状态 case 5: //装备 printf("攻装: 1,匕首:%d个 2,长剑:%d个 3,碧血剑:%d个 4,绝世好剑:%d个\n\n\n",gong1n,gong2n,gong3n,gong4n); printf("防装: 5,布衣:%d个 6,铁甲:%d个 7,银甲:%d个 8,黄金圣衣:%d个\t\t0,返回\n\n\n",fang1n,fang2n,fang3n,fang4n); SlowDisplay("选择要装备的武器或防具:\n\n\n"); switch(scanf("%d",&choose_number),choose_number) { case 1: if(gong1n>=1) { SlowDisplay("拿起了匕首\n\n\n"); gong=gong1; strcpy(gongname,"匕首"); } else SlowDisplay("你没有匕首可以装备\n\n\n"); break; case 2: if(gong2n>=1) { SlowDisplay("拿起了长剑\n\n\n"); gong=gong2; strcpy(gongname,"长剑"); } else SlowDisplay("你没有长剑可以装备\n\n\n"); break; case 3: if(gong3n>=1) { SlowDisplay("拿起了碧血剑\n\n\n"); gong=gong3; strcpy(gongname,"碧血剑"); } else SlowDisplay("你没有碧血剑可以装备\n\n\n"); break; case 4: if(gong4n>=1) { SlowDisplay("拿起了绝世好剑\n\n\n"); gong=gong4; strcpy(gongname,"绝世好剑"); } else SlowDisplay("你没有绝世好剑可以装备\n\n\n"); break; case 5: if(fang1n>=1) { SlowDisplay("穿上了布衣\n\n\n"); fang=fang1; strcpy(fangname,"布衣"); } else SlowDisplay("你没有布衣可以装备\n\n\n"); break; case 6: if(fang2>=1) { SlowDisplay("穿上了铁甲\n\n\n"); fang=fang2; strcpy(fangname,"铁甲"); } else SlowDisplay("你没有铁甲可以装备\n\n\n"); break; case 7: if(fang3n>=1) { SlowDisplay("穿上了银甲\n\n\n"); fang=fang3; strcpy(fangname,"银甲"); } else SlowDisplay("你没有银甲可以装备\n\n\n"); break; case 8: if(fang4n>=1) { SlowDisplay("穿上了黄金圣衣\n\n\n"); fang=fang4; strcpy(fangname,"黄金圣衣"); } else SlowDisplay("你没有黄金圣衣可以装备\n\n\n"); break; case 0: SlowDisplay("未更换装备\n\n\n"); break; default: printf("change error!"); } break; case 0: SlowDisplay("确定退出游戏?(Y/N)\n\n\n"); getchar(); proof=getchar(); if(proof=='y'||proof=='Y') { SlowDisplay("数据存储中..."); //向文件中更新数据; getchar(); SlowDisplay("按回车退出"); getchar(); return; } else if(proof=='n'||proof=='N')printf("继续游戏!\n\n\n"); else SlowDisplay("继续!\n\n\n"); break; default: SlowDisplay("输入错误!\n\n\n"); } } } void DisplayState() { printf("%s 攻击力:%d+%d=%d 防御力:%d+%d=%d HP:%d/%d \n\n\n",player.name,player.attack,gong,player.attack+gong,player.defense,fang,player.defense+fang,player.health,player.max_health); printf("武器: %s 防具: %s \n\n\n",gongname,fangname); printf("等级:%d 经验:%d/%d 还需要%d经验升级 金币:%d \n\n\n",player.level,player.exp,player.max_exp,player.max_exp-player.exp,money); } void BattleAct() { while(1) { puts("============================================================================="); printf("要怎么办?\n\n\n 1,攻击 2,物品 3,查看状态 4,逃跑\n\n\n"); switch(scanf("%d",&choose_number),choose_number) { case 1: s=SuiJi(); printf("%s攻击! %sHP减少%d\n\n\n",player.name,guai.name,player.attack+s+gong-guai.defense/3); guai.health-=player.attack+s+gong-guai.defense/3; if(AttackResult())return; //如果攻击有结果(敌人或玩家战死)退出函数 else continue; case 2: ChooseWupin(); break; //选择物品,可以使用,战斗中允许使用攻击性物品 case 3: DisplayState(); break; //显示状态 case 4: s=SuiJi(); if(s<4) //40%的概率可以逃跑 { printf("%s逃跑了~\n\n\n",player.name); battle=0; return; } else printf("%s逃跑失败!\n\n\n",player.name); break; default: SlowDisplay("输入错误,重新输入!\n\n\n"); } } } void SlowDisplay(char *p) { while(1) { if(*p!=0) printf("%c",*p++); else break; Sleep(100); } }