新手天翼
俄罗斯方块
#include <iostream>
#include <string>
#include <ctime>
#include <cstdlib>
#include <windows.h>
#include <conio.h>
using namespace std;
int block00[4][4] = { { 10,0,0,0 },{ 1,1,1,1 },{ 0,0,0,0 },{ 0,0,0,0 } };
int block01[4][4] = { { 11,0,1,0 },{ 0,0,1,0 },{ 0,0,1,0 },{ 0,0,1,0 } };
int block02[4][4] = { { 12,0,0,0 },{ 0,0,0,0 },{ 1,1,1,0 },{ 0,1,0,0 } };
int block03[4][4] = { { 13,0,0,0 },{ 0,1,0,0 },{ 1,1,0,0 },{ 0,1,0,0 } };
int block04[4][4] = { { 14,0,0,0 },{ 0,0,0,0 },{ 0,1,0,0 },{ 1,1,1,0 } };
int block05[4][4] = { { 15,0,0,0 },{ 0,1,0,0 },{ 0,1,1,0 },{ 0,1,0,0 } };
int block06[4][4] = { { 16,0,0,0 },{ 0,0,0,0 },{ 1,1,1,0 },{ 1,0,0,0 } };
int block07[4][4] = { { 17,0,0,0 },{ 1,1,0,0 },{ 0,1,0,0 },{ 0,1,0,0 } };
int block08[4][4] = { { 18,0,0,0 },{ 0,0,0,0 },{ 0,0,1,0 },{ 1,1,1,0 } };
int block09[4][4] = { { 19,0,0,0 },{ 0,1,0,0 },{ 0,1,0,0 },{ 0,1,1,0 } };
int block10[4][4] = { { 20,0,0,0 },{ 0,0,0,0 },{ 1,1,1,0 },{ 0,0,1,0 } };
int block11[4][4] = { { 21,0,0,0 },{ 0,1,0,0 },{ 0,1,0,0 },{ 1,1,0,0 } };
int block12[4][4] = { { 22,0,0,0 },{ 0,0,0,0 },{ 1,0,0,0 },{ 1,1,1,0 } };
int block13[4][4] = { { 23,0,0,0 },{ 0,1,1,0 },{ 0,1,0,0 },{ 0,1,0,0 } };
int block14[4][4] = { { 24,0,0,0 },{ 0,0,0,0 },{ 0,1,1,0 },{ 1,1,0,0 } };
int block15[4][4] = { { 25,0,0,0 },{ 1,0,0,0 },{ 1,1,0,0 },{ 0,1,0,0 } };
int block16[4][4] = { { 26,0,0,0 },{ 0,0,0,0 },{ 1,1,0,0 },{ 0,1,1,0 } };
int block17[4][4] = { { 27,0,0,0 },{ 0,0,1,0 },{ 0,1,1,0 },{ 0,1,0,0 } };
int block18[4][4] = { { 28,0,0,0 },{ 0,0,0,0 },{ 1,1,0,0 },{ 1,1,0,0 } };
void initialWindow(HANDLE hOut);//初始化窗口
void initialPrint(HANDLE hOut);//初始化界面
void gotoXY(HANDLE hOut, int x, int y);//移动光标
void roundBlock(HANDLE hOut, int block[4][4]);//随机生成方块并打印到下一个方块位置
bool collisionDetection(int block[4][4], int map[21][12], int x, int y);//检测碰撞
void printBlock(HANDLE hOut, int block[4][4], int x, int y);//打印方块
void clearBlock(HANDLE hOut, int block[4][4], int x, int y);//消除方块
void myLeft(HANDLE hOut, int block[4][4], int map[21][12], int x, int &y);//左移
void myRight(HANDLE hOut, int block[4][4], int map[21][12], int x, int &y);//右移
void myUp(HANDLE hOut, int block[4][4], int map[21][12], int x, int &y);//顺时针旋转90度
int myDown(HANDLE hOut, int block[4][4], int map[21][12], int &x, int y);//加速下落
void myStop(HANDLE hOut, int block[4][4]);//游戏暂停
void gameOver(HANDLE hOut, int block[4][4], int map[21][12]);//游戏结束
void eliminateRow(HANDLE hOut, int map[21][12], int &val, int &fraction, int &checkpoint);//判断是否能消行并更新分值
int main()
{
int map[21][12];
int blockA[4][4];//候选区的方块
int blockB[4][4];//下落中的方块
int positionX, positionY;//方块左上角的坐标
bool check;//检查方块还能不能下落
char key;//用来存储按键
int val;//用来控制下落速度
int fraction;//用来存储得分
int checkpoint;//用来存储关卡
int times;
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);//获取标准输出设备句柄
initialWindow(hOut);
initial:
gotoXY(hOut, 0, 0);
initialPrint(hOut);
check = true;
val = 50;
fraction = 0;
checkpoint = 1;
times = val;
for (int i = 0; i < 20; ++i)
{
for (int j = 1; j < 11; ++j)
{
map[i][j] = 0;
}
}
for (int i = 0; i < 20; ++i)
{
map[i][0] = map[i][11] = 1;
}
for (int i = 0; i < 12; ++i)
{
map[20][i] = 1;
}
srand((unsigned)time(NULL));
roundBlock(hOut, blockA);
while (true)
{
if (check)
{
eliminateRow(hOut, map, val, fraction, checkpoint);
check = false;
positionX = -3;
positionY = 4;
if (collisionDetection(blockA, map, positionX, positionY))
{
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
blockB[i][j] = blockA[i][j];
}
}
roundBlock(hOut, blockA);
}
else
{
gameOver(hOut, blockA, map);
goto initial;
}
}
printBlock(hOut, blockB, positionX, positionY);
if (_kbhit())
{
key = _getch();
switch (key)
{
case 72:
myUp(hOut, blockB, map, positionX, positionY);
break;
case 75:
myLeft(hOut, blockB, map, positionX, positionY);
break;
case 77:
myRight(hOut, blockB, map, positionX, positionY);
break;
case 80:
switch (myDown(hOut, blockB, map, positionX, positionY))
{
case 0:
check = false;
break;
case 1:
check = true;
break;
case 2:
gameOver(hOut, blockB, map);
goto initial;
default:
break;
}
break;
case 32:
myStop(hOut, blockA);
break;
case 27:
exit(0);
default:
break;
}
}
Sleep(20);
if (0 == --times)
{
switch (myDown(hOut, blockB, map, positionX, positionY))
{
case 0:
check = false;
break;
case 1:
check = true;
break;
case 2:
gameOver(hOut, blockB, map);
goto initial;
default:
break;
}
times = val;
}
}
cin.get();
return 0;
}
void initialWindow(HANDLE hOut)
{
SetConsoleTitle("俄罗斯方块");
COORD size = { 80, 25 };
SetConsoleScreenBufferSize(hOut, size);
SMALL_RECT rc = { 0, 0, 79, 24 };
SetConsoleWindowInfo(hOut, true, &rc);
CONSOLE_CURSOR_INFO cursor_info = { 1, 0 };
SetConsoleCursorInfo(hOut, &cursor_info);
}
void initialPrint(HANDLE hOut)
{
SetConsoleTextAttribute(hOut, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
for (int i = 0; i < 20; ++i)
{
cout << "■ ■☆ ☆" << endl;
}
gotoXY(hOut, 26, 0);
cout << "☆☆☆☆☆☆☆☆☆☆☆";
gotoXY(hOut, 0, 20);
cout << "■■■■■■■■■■■■☆☆☆☆☆☆☆☆☆☆☆☆☆";
gotoXY(hOut, 26, 1);
cout << "分 数: ";
gotoXY(hOut, 26, 2);
cout << "关 卡: ";
gotoXY(hOut, 26, 4);
cout << "下一方块:";
gotoXY(hOut, 26, 9);
cout << "操作方法:";
gotoXY(hOut, 30, 11);
cout << "↑:旋转 ↓:速降";
gotoXY(hOut, 30, 12);
cout << "→:右移 ←:左移";
gotoXY(hOut, 30, 13);
cout << "空格键:开始/暂停";
gotoXY(hOut, 30, 14);
cout << "Esc 键:退出";
gotoXY(hOut, 26, 16);
cout << "关 于:";
gotoXY(hOut, 30, 18);
cout << "俄罗斯方块V1.0";
gotoXY(hOut, 35, 19);
cout << "作者:徐云皓";
}
void gotoXY(HANDLE hOut, int x, int y)
{
COORD pos;
pos.X = x;
pos.Y = y;
SetConsoleCursorPosition(hOut, pos);
}
void roundBlock(HANDLE hOut, int block[4][4])
{
clearBlock(hOut, block, 5, 15);
switch (rand() % 19)
{
case 0:
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block00[i][j];
}
}
break;
case 1:
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block01[i][j];
}
}
break;
case 2:
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block02[i][j];
}
}
break;
case 3:
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block03[i][j];
}
}
break;
case 4:
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block04[i][j];
}
}
break;
case 5:
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block05[i][j];
}
}
break;
case 6:
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block06[i][j];
}
}
break;
case 7:
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block07[i][j];
}
}
break;
case 8:
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block08[i][j];
}
}
break;
case 9:
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block09[i][j];
}
}
break;
case 10:
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block10[i][j];
}
}
break;
case 11:
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block11[i][j];
}
}
break;
case 12:
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block12[i][j];
}
}
break;
case 13:
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block13[i][j];
}
}
break;
case 14:
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block14[i][j];
}
}
break;
case 15:
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block15[i][j];
}
}
break;
case 16:
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block16[i][j];
}
}
break;
case 17:
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block17[i][j];
}
}
break;
case 18:
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block18[i][j];
}
}
break;
default:
break;
}
printBlock(hOut, block, 5, 15);
}
bool collisionDetection(int block[4][4], int map[21][12], int x, int y)
{
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
if (x + i >= 0 && y + j >= 0 && map[x + i][y + j] == 1 && block[i][j] == 1)
{
return false;
}
}
}
return true;
}
void printBlock(HANDLE hOut, int block[4][4], int x, int y)
{
switch (block[0][0])
{
case 10:
case 11:
SetConsoleTextAttribute(hOut, FOREGROUND_GREEN);
break;
case 12:
case 13:
case 14:
case 15:
SetConsoleTextAttribute(hOut, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY);
break;
case 16:
case 17:
case 18:
case 19:
SetConsoleTextAttribute(hOut, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY);
break;
case 20:
case 21:
case 22:
case 23:
SetConsoleTextAttribute(hOut, FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_INTENSITY);
break;
case 24:
case 25:
SetConsoleTextAttribute(hOut, FOREGROUND_GREEN | FOREGROUND_INTENSITY);
break;
case 26:
case 27:
SetConsoleTextAttribute(hOut, FOREGROUND_BLUE | FOREGROUND_INTENSITY);
break;
case 28:
SetConsoleTextAttribute(hOut, FOREGROUND_RED | FOREGROUND_INTENSITY);
break;
default:
break;
}
for (int i = 0; i < 4; ++i)
{
if (i + x >= 0)
{
for (int j = 0; j < 4; ++j)
{
if (block[i][j] == 1)
{
gotoXY(hOut, 2 * (y + j), x + i);
cout << "■";
}
}
}
}
}
void clearBlock(HANDLE hOut, int block[4][4], int x, int y)
{
for (int i = 0; i < 4; ++i)
{
if (i + x >= 0)
{
for (int j = 0; j < 4; ++j)
{
if (block[i][j] == 1)
{
gotoXY(hOut, 2 * (y + j), x + i);
cout << " ";
}
}
}
}
}
void gameOver(HANDLE hOut, int block[4][4], int map[21][12])
{
SetConsoleTextAttribute(hOut, FOREGROUND_RED | FOREGROUND_INTENSITY);
gotoXY(hOut, 9, 8);
cout << "GAME OVER";
gotoXY(hOut, 8, 9);
cout << "空格键:重来";
gotoXY(hOut, 8, 10);
cout << "ESC键:退出";
char key;
while (true)
{
key = _getch();
if (key == 32)
{
return;
}
if (key == 27)
{
exit(0);
}
}
}
int myDown(HANDLE hOut, int block[4][4], int map[21][12], int &x, int y)
{
if (collisionDetection(block, map, x + 1, y))
{
clearBlock(hOut, block, x, y);
++x;
return 0;
}
if (x < 0)
{
return 2;
}
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
if (block[i][j] == 1)
{
map[x + i][y + j] = 1;
SetConsoleTextAttribute(hOut, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY);
gotoXY(hOut, 2 * (y + j), x + i);
cout << "■";
}
}
}
return 1;
}
void myLeft(HANDLE hOut, int block[4][4], int map[21][12], int x, int &y)
{
if (collisionDetection(block, map, x, y - 1))
{
clearBlock(hOut, block, x, y);
--y;
}
}
void myRight(HANDLE hOut, int block[4][4], int map[21][12], int x, int &y)
{
if (collisionDetection(block, map, x, y + 1))
{
clearBlock(hOut, block, x, y);
++y;
}
}
void myUp(HANDLE hOut, int block[4][4], int map[21][12], int x, int &y)
{
switch (block[0][0])
{
case 10:
if (collisionDetection(block01, map, x, y))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block01[i][j];
}
}
}
break;
case 11:
if (collisionDetection(block00, map, x, y))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block00[i][j];
}
}
}
else if (collisionDetection(block00, map, x, y - 1))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block00[i][j];
}
}
--y;
}
else if (collisionDetection(block00, map, x, y + 1))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block00[i][j];
}
}
++y;
}
else if (collisionDetection(block00, map, x, y - 2))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block00[i][j];
}
}
y = y - 2;
}
else if (collisionDetection(block00, map, x, y + 2))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block00[i][j];
}
}
y = y + 2;
}
break;
case 12:
if (collisionDetection(block03, map, x, y))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block03[i][j];
}
}
}
else if (collisionDetection(block03, map, x, y - 1))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block03[i][j];
}
}
--y;
}
else if (collisionDetection(block03, map, x, y + 1))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block03[i][j];
}
}
++y;
}
break;
case 13:
if (collisionDetection(block04, map, x, y))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block04[i][j];
}
}
}
else if (collisionDetection(block04, map, x, y - 1))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block04[i][j];
}
}
--y;
}
else if (collisionDetection(block04, map, x, y + 1))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block04[i][j];
}
}
++y;
}
break;
case 14:
if (collisionDetection(block05, map, x, y))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block05[i][j];
}
}
}
else if (collisionDetection(block05, map, x, y - 1))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block05[i][j];
}
}
--y;
}
else if (collisionDetection(block05, map, x, y + 1))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block05[i][j];
}
}
++y;
}
break;
case 15:
if (collisionDetection(block02, map, x, y))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block02[i][j];
}
}
}
else if (collisionDetection(block02, map, x, y - 1))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block02[i][j];
}
}
--y;
}
else if (collisionDetection(block02, map, x, y + 1))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block02[i][j];
}
}
++y;
}
break;
case 16:
if (collisionDetection(block07, map, x, y))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block07[i][j];
}
}
}
else if (collisionDetection(block07, map, x, y - 1))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block07[i][j];
}
}
--y;
}
else if (collisionDetection(block07, map, x, y + 1))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block07[i][j];
}
}
++y;
}
break;
case 17:
if (collisionDetection(block08, map, x, y))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block08[i][j];
}
}
}
else if (collisionDetection(block08, map, x, y - 1))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block08[i][j];
}
}
--y;
}
else if (collisionDetection(block08, map, x, y + 1))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block08[i][j];
}
}
++y;
}
break;
case 18:
if (collisionDetection(block09, map, x, y))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block09[i][j];
}
}
}
else if (collisionDetection(block09, map, x, y - 1))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block09[i][j];
}
}
--y;
}
else if (collisionDetection(block09, map, x, y + 1))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block09[i][j];
}
}
++y;
}
break;
case 19:
if (collisionDetection(block06, map, x, y))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block06[i][j];
}
}
}
else if (collisionDetection(block06, map, x, y - 1))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block06[i][j];
}
}
--y;
}
else if (collisionDetection(block06, map, x, y + 1))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block06[i][j];
}
}
++y;
}
break;
case 20:
if (collisionDetection(block11, map, x, y))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block11[i][j];
}
}
}
else if (collisionDetection(block11, map, x, y - 1))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block11[i][j];
}
}
--y;
}
else if (collisionDetection(block11, map, x, y + 1))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block11[i][j];
}
}
++y;
}
break;
case 21:
if (collisionDetection(block12, map, x, y))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block12[i][j];
}
}
}
else if (collisionDetection(block12, map, x, y - 1))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block12[i][j];
}
}
--y;
}
else if (collisionDetection(block12, map, x, y + 1))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block12[i][j];
}
}
++y;
}
break;
case 22:
if (collisionDetection(block13, map, x, y))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block13[i][j];
}
}
}
else if (collisionDetection(block13, map, x, y - 1))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block13[i][j];
}
}
--y;
}
else if (collisionDetection(block13, map, x, y + 1))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block13[i][j];
}
}
++y;
}
break;
case 23:
if (collisionDetection(block10, map, x, y))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block10[i][j];
}
}
}
else if (collisionDetection(block10, map, x, y - 1))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block10[i][j];
}
}
--y;
}
else if (collisionDetection(block10, map, x, y + 1))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block10[i][j];
}
}
++y;
}
break;
case 24:
if (collisionDetection(block15, map, x, y))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block15[i][j];
}
}
}
else if (collisionDetection(block15, map, x, y - 1))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block15[i][j];
}
}
--y;
}
else if (collisionDetection(block15, map, x, y + 1))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block15[i][j];
}
}
++y;
}
break;
case 25:
if (collisionDetection(block14, map, x, y))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block14[i][j];
}
}
}
else if (collisionDetection(block14, map, x, y - 1))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block14[i][j];
}
}
--y;
}
else if (collisionDetection(block14, map, x, y + 1))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block14[i][j];
}
}
++y;
}
break;
case 26:
if (collisionDetection(block17, map, x, y))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block17[i][j];
}
}
}
else if (collisionDetection(block17, map, x, y - 1))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block17[i][j];
}
}
--y;
}
else if (collisionDetection(block17, map, x, y + 1))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block17[i][j];
}
}
++y;
}
break;
case 27:
if (collisionDetection(block16, map, x, y))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block16[i][j];
}
}
}
else if (collisionDetection(block16, map, x, y - 1))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block16[i][j];
}
}
--y;
}
else if (collisionDetection(block16, map, x, y + 1))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block16[i][j];
}
}
++y;
}
break;
default:
break;
}
}
void myStop(HANDLE hOut, int block[4][4])
{
clearBlock(hOut, block, 5, 15);
SetConsoleTextAttribute(hOut, FOREGROUND_RED | FOREGROUND_INTENSITY);
gotoXY(hOut, 30, 7);
cout << "游戏暂停";
char key;
while (true)
{
key = _getch();
if (key == 32)
{
gotoXY(hOut, 30, 7);
cout << " ";
printBlock(hOut, block, 5, 15);
return;
}
if (key == 27)
{
exit(0);
}
}
}
void eliminateRow(HANDLE hOut, int map[21][12], int &val, int &fraction, int &checkpoint)
{
SetConsoleTextAttribute(hOut, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY);
for (int i = 19; i >= 0; --i)
{
int x = 0;
for (int j = 1; j < 11; ++j)
{
x += map[i][j];
}
if (x == 10)
{
fraction += 100;
if (val > 1 && fraction / 1000 + 1 != checkpoint)
{
checkpoint = fraction / 1000 + 1;
val -= 5;
}
for (int m = i; m > 0; --m)
{
for (int n = 1; n < 11; ++n)
{
map[m][n] = map[m - 1][n];
gotoXY(hOut, 2 * n, m);
if (map[m][n] == 1)
{
cout << "■";
}
else
{
cout << " ";
}
}
}
++i;
}
}
gotoXY(hOut, 36, 1);
cout << fraction;
gotoXY(hOut, 36, 2);
cout << checkpoint;
}
高级光能
新手天翼
贪吃蛇
#include<iostream>
#include<windows.h>
#include<time.h>
#include<conio.h>
using namespace std;
// 刷新当前屏幕
inline void Refresh(char q[][22], int grade, int gamespeed){
system("cls"); // 清屏
int i,j;
cout << endl;
for(i=0;i<22;i++){
cout << "\t";
for(j=0;j<22;j++)
cout<<q[i][j]<<' '; // 输出贪吃蛇棋盘
if(i==0) cout << "\t等级为:" << grade;
if(i==4) cout << "\t自动前进时间";
if(i==6) cout << "\t间隔为:" << gamespeed << "ms";
cout<<endl;
}
}
int main(){
char tcsQipan[22][22]; // 贪吃蛇棋盘是一个二维数组(如22*22,包括墙壁)
int i,j;
for(i=1;i<=20;i++)
for(j=1;j<=20;j++)
tcsQipan[i][j]=' '; // 初始化贪吃蛇棋盘中间空白部分
for(i=0;i<=21;i++)
tcsQipan[0][i] = tcsQipan[21][i] = '-'; //初始化贪吃蛇棋盘上下墙壁
for(i=1;i<=20;i++)
tcsQipan[i][0] = tcsQipan[i][21] = '|'; //初始化贪吃蛇棋盘左右墙壁
int tcsZuobiao[2][100]; //蛇的坐标数组
for(i=0; i<4; i++){
tcsZuobiao[0][i] = 1;
tcsZuobiao[1][i] = i + 1;
}
int head = 3,tail = 0;
for(i=1;i<=3;i++)
tcsQipan[1][i]='*'; //蛇身
tcsQipan[1][4]='#'; //蛇头
int x1, y1; // 随机出米
srand(time(0));
do{
x1=rand()%20+1;
y1=rand()%20+1;
}while(tcsQipan[x1][y1]!=' ');
tcsQipan[x1][y1]='*';
cout<<"\n\n\t\t贪吃蛇游戏即将开始 !"<<endl;//准备开始;;
long start;
int grade = 1, length = 4;
int gamespeed = 500; //前进时间间隔
for(i=3;i>=0;i--){
start=clock();
while(clock()-start<=1000);
system("cls");
if(i>0)
cout << "\n\n\t\t进入倒计时:" << i << endl;
else
Refresh(tcsQipan,grade,gamespeed);
}
int timeover;
char direction = 77; // 初始情况下,向右运动
int x,y;
while(1){
timeover = 1;
start = clock();
while((timeover=(clock()-start<=gamespeed))&&!kbhit());
//如果有键按下或时间超过自动前进时间间隔则终止循环
if(timeover){
getch();direction = getch();
}
switch(direction){
case 72: x= tcsZuobiao[0][head]-1; y= tcsZuobiao[1][head];break; // 向上
case 80: x= tcsZuobiao[0][head]+1; y= tcsZuobiao[1][head];break; // 向下
case 75: x= tcsZuobiao[0][head]; y= tcsZuobiao[1][head]-1;break; // 向左
case 77: x= tcsZuobiao[0][head]; y= tcsZuobiao[1][head]+1; // 向右
}
if(!(direction==72||direction==80||direction==75 ||direction==77)){ // 按键非方向键
cout << "\tGame over!" << endl;return 0;
}
if(x==0 || x==21 ||y==0 || y==21){ // 碰到墙壁
cout << "\tGame over!" << endl;return 0;
}
if(tcsQipan[x][y]!=' '&&!(x==x1&&y==y1)){ // 蛇头碰到蛇身
cout << "\tGame over!" << endl;return 0;
}
if(x==x1 && y==y1){ // 吃米,长度加1
length ++;
if(length>=8){
length -= 8;
grade ++;
if(gamespeed>=200)
gamespeed = 550 - grade * 50; // 改变自动前进时间间隔
}
tcsQipan[x][y]= '#';
tcsQipan[tcsZuobiao[0][head]][tcsZuobiao[1][head]] = '*';
head = (head+1)%100;
tcsZuobiao[0][head] = x;
tcsZuobiao[1][head] = y;
do
{
x1=rand()%20+1;
y1=rand()%20+1;
}while(tcsQipan[x1][y1]!=' ');
tcsQipan[x1][y1]='*';
Refresh(tcsQipan,grade,gamespeed);
}
else{ // 不吃米
tcsQipan [tcsZuobiao[0][tail]][tcsZuobiao[1][tail]]=' ';
tail=(tail+1)%100;
tcsQipan [tcsZuobiao[0][head]][tcsZuobiao[1][head]]='*';
head=(head+1)%100;
tcsZuobiao[0][head]=x;
tcsZuobiao[1][head]=y;
tcsQipan[tcsZuobiao[0][head]][tcsZuobiao[1][head]]='#';
Refresh(tcsQipan,grade,gamespeed);
}
}
return 0;
}
新手天翼
#include<stdio.h>
#include <windows.h>
#include<conio.h>
#include<time.h>
void gotoxy(int x,int y);//控制光标。X表示横坐标,Y表示纵坐标
void my_print();//设置界面
void print_thing();//打印物品
void print_home();//打印老家
void refresh_map();//刷新地图
void stop();//暂停
void print_my_tank();//打印我的坦克
void print_tank_1();//打印坦克1号
void print_tank_2();//打印坦克2号
void print_tank_3();//打印坦克3号
void clear_my_tank();//清除我的坦克,用于坦克移动后
void clear_tank_1();//清除坦克1号
void clear_tank_2();//清除坦克2号
void clear_tank_3();//清除坦克3号
void turn_up(int a[][3]);//我的坦克上转
void turn_down(int a[][3]);//我的坦克下转
void turn_left(int a[][3]);//我的坦克左转
void turn_right(int a[][3]);//我的坦克右转
void turn_up_1(int a[][3]);//坦克1号上转
void turn_down_1(int a[][3]);//坦克1号下转
void turn_left_1(int a[][3]);//坦克1号左转
void turn_right_1(int a[][3]);//坦克1号右转
void turn_up_2(int a[][3]);//坦克2号上转
void turn_down_2(int a[][3]);//坦克2号下转
void turn_left_2(int a[][3]);//坦克2号左转
void turn_right_2(int a[][3]);//坦克2号右转
void turn_up_3(int a[][3]);//坦克3号上转
void turn_down_3(int a[][3]);//坦克3号下转
void turn_left_3(int a[][3]);//坦克3号左转
void turn_right_3(int a[][3]);//坦克3号右转
void my_move();//我的坦克移动
void move_1();//坦克1号移动
void move_2();//坦克2号移动
void move_3();//坦克3号移动
void print_bullet(int x,int y);//打印敌方坦克的子弹
void print_my_bullet(int x,int y);//打印我的子弹
void clear_bullet(int x,int y);//清楚子弹
int check_bullet(int x,int y);//检查子弹是否碰撞,没碰返回1,碰到返回0
void shoot();//计算我的坦克子弹的坐标
void shoot_1();//计算坦克1号子弹的坐标
void shoot_2();//计算坦克2号子弹的坐标
void shoot_3();//计算坦克3号子弹的坐标
void change_thing();//记录物品的变化
void change_home();//记录老家的变化
void change_bullet();//纪录子弹的变化
void change_star();//记录星星的变化
void change_tank();//记录我的坦克的变化
void change_tank_1();//记录坦克1号的变化
void change_tank_2();//记录坦克2号的变化
void change_tank_3();//记录坦克3号的变化
void switch_weapons();//切换武器
void switch_skin();//切换皮肤
void help();//帮助
void check_game();//检查游戏胜负
void check_lv();//检查等级
void next_level();//下一关
void get_map();//获得每一关的地图
void initial();//将所有量初始化
void gameover();//游戏结束
void console();//控制窗口
void screen_1();//屏幕1
void screen_2(char *p,int color);//屏幕2
void screen_3();//屏幕3
void produce_star();//产生一个星星
void print_star();//打印星星
void check_star();//检查星星的数量
void clear_star();//清除星星
int my_abs(int x);//绝对值函数,用系统的会有问题
int judge(int x,int y,int state);//判断我的坦克能否前进
int judge2(int x,int y,int state);// 辅助电脑判断能否前进
int check1(int x,int y);//辅助电脑判断的函数
int check2(int x,int y);//辅助电脑判断的函数
int check3(int x,int y);//辅助电脑判断的函数
int life=3;//生命
int enemy=13;//敌人数量
int level=1;//关卡
int weapons=1;//武器
int skin=1;//皮肤
int star=1;//星星
int s=0,t=0;//星星坐标
int score=0;//分数
int lv=1;//等级
int speed=10;//速度
char *info[5]={" "," "," "," "," "};//通知
int map[30][30]={0};//记录整个屏幕上的物体
int thing[28][28]={0};//障碍物,不包括边界
int home[3][4]={{2,2,2,2},{2,1,1,2},{2,1,1,2}};//老家,3行4列
int my_tank[3][3]={0};//我的坦克
int tank_1[3][3]={0};//敌人的坦克1号
int tank_2[3][3]={0};//敌人的坦克2号
int tank_3[3][3]={0};//敌人的坦克3号
int x , y ;//我的坦克中心坐标
int x1 , y1;//坦克1号中心坐标
int x2 , y2;//坦克2号中心坐标
int x3 , y3;//坦克3号中心坐标
int m=0 , n=0 ;//我的坦克子弹的坐标
int m1=0 , n1=0;//坦克1号子弹的坐标
int m2=0 , n2=0;//坦克2号子弹的坐标
int m3=0 , n3=0;//坦克3号子弹的坐标
int state=0; //我的坦克方向(1上,2下,3左,4右)
int state_1=0;//坦克1号方向
int state_2=0;//坦克2号方向
int state_3=0;//坦克3号方向
int direction=0;//我的坦克子弹射向
int direction_1=0;//坦克1号子弹射向
int direction_2=0;//坦克2号子弹射向
int direction_3=0;//坦克3号子弹射向
int cp1=2;//辅助电脑判断的变量
int cp2=2;//辅助电脑判断的变量
int cp3=2;//辅助电脑判断的变量
int main()//主函数
{
srand(time(NULL));//设置随机数种子
console();//设置窗口
my_print();//打印边框
initial();//所有量初始化
while(1)
{
int i1,i2,i3,i4,i5,i6,i7;
my_move();//控制我的坦克移动
if(i1++%30==0) //控制敌人坦克速度
move_1();
if(i2++%30==0)
move_2();
if(i3++%30==0)
move_3();
if(i4++%speed==0) //控制子弹速度
shoot();
if(i5++%speed==0)
shoot_1();
if(i6++%speed==0)
shoot_2();
if(i7++%speed==0)
shoot_3();
screen_1();//刷新屏幕
Sleep(30);
}
return 0;
}
//设置光标输出的位置函数
void gotoxy(int x,int y)//X表示横坐标,Y表示纵坐标。
{
HANDLE app;
COORD pos;
pos.X=x;
pos.Y=y;
app=GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(app,pos);
}
//控制窗口
void console()
{
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_SCREEN_BUFFER_INFO bInfo;
GetConsoleScreenBufferInfo(hOut, &bInfo );
SetConsoleTitle("坦克大战"); // 设置窗口的标题
COORD size = {90, 32};//设置窗口大小
SetConsoleScreenBufferSize(hOut,size);
SMALL_RECT rc = {0,0, 63, 31};
SetConsoleWindowInfo(hOut,true ,&rc);
}
//打印边界
void my_print()
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_BLUE |FOREGROUND_INTENSITY);//蓝色
printf("■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ |﹊﹊﹊﹊﹊﹊﹊﹊﹊﹊﹊﹊﹊|\n");
for(int i=0;i<13;i++)
printf("■ ■ | |\n");
printf("■ ■ |--------------------------|\n");
for(int j=14;j<28;j++)
printf("■ ■ | |\n");
printf("■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ |﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍|\n");
}
//打印与清除坦克
void print_my_tank()
{
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
if(my_tank[i][j]==1)
{
switch(skin)
{
case 1 :
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);//淡蓝色
gotoxy(2*x+2*j-2,y+i-1);
printf("■");
}break;
case 2 :
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);//绿色
gotoxy(2*x+2*j-2,y+i-1);
printf("■");
}break;
case 3 :
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED);//黄色
gotoxy(2*x+2*j-2,y+i-1);
printf("■");
}break;
case 4 :
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_RED);//白色
gotoxy(2*x+2*j-2,y+i-1);
printf("■");
}break;
case 5 :
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_BLUE);//紫色
gotoxy(2*x+2*j-2,y+i-1);
printf("■");
}break;
case 6 :
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);//红色
gotoxy(2*x+2*j-2,y+i-1);
printf("■");
}break;
case 7 :
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE);//蓝色
gotoxy(2*x+2*j-2,y+i-1);
printf("■");
}break;
}
}
}
void clear_my_tank()
{
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
{
gotoxy(2*x+2*j-2,y+i-1);
printf(" ");
}
}
void print_tank_1()
{
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
if(tank_1[i][j]==1)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_BLUE);// 紫色
gotoxy(2*x1+2*j-2,y1+i-1);
printf("■");
}
}
void clear_tank_1()
{
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
{
gotoxy(2*x1+2*j-2,y1+i-1);
printf(" ");
}
}
void print_tank_2()
{
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
if(tank_2[i][j]==1)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_BLUE);// 紫色
gotoxy(2*x2+2*j-2,y2+i-1);
printf("■");
}
}
void clear_tank_2()
{
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
{
gotoxy(2*x2+2*j-2,y2+i-1);
printf(" ");
}
}
void print_tank_3()
{
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
if(tank_3[i][j]==1)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_BLUE);// 紫色
gotoxy(2*x3+2*j-2,y3+i-1);
printf("■");
}
}
void clear_tank_3()
{
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
{
gotoxy(2*x3+2*j-2,y3+i-1);
printf(" ");
}
}
void print_thing() // 打印物品
{
for(int j=0;j<28;j++) // 从坐标(1,1)点开始打印
for(int i=0;i<28;i++)
if(thing[i][j]==1)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);
gotoxy(2+2*j,1+i);
printf("■");
}
else if(thing[i][j]==2)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED);
gotoxy(2+2*j,1+i);
printf("■");
}
else if(thing[i][j]==3)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_BLUE);
gotoxy(2+2*j,1+i);
printf("■");
}
else if(thing[i][j]==4)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE);
gotoxy(2+2*j,1+i);
printf("■");
}
}
void print_home() //打印老家
{
for(int i=0;i<3;i++) //打印老家外墙
for(int j=0;j<4;j++)
if(home[i][j]==1)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);
gotoxy(26+2*j,26+i);
printf("■");
}
else if(home[i][j]==2)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED);
gotoxy(26+2*j,26+i);
printf("■");
}
else if(home[i][j]==3)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_BLUE);
gotoxy(26+2*j,26+i);
printf("■");
}
{
for(int i=1;i<3;i++) //打印老家内部
for(int j=1;j<3;j++)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);
gotoxy(26+2*j,26+i);
printf("■");
}
}
}
void print_bullet(int x,int y) //打印敌方坦克的子弹子弹
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_BLUE);
gotoxy(2*x,y);
printf("⊕");
}
void print_my_bullet(int x,int y) //打印我的子弹
{
switch(weapons)
{
case 1 :
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);
gotoxy(2*x,y);
printf("⊕");
}break;
case 2 :
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
gotoxy(2*x,y);
printf("∷");
}break;
case 3 :
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);
gotoxy(2*x,y);
printf("◎");
}break;
case 4 :
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_BLUE);
gotoxy(2*x,y);
printf("※");
}break;
case 5 :
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
gotoxy(2*x,y);
printf("●");
}break;
}
}
void clear_bullet(int x,int y)
{
gotoxy(2*x,y);
printf(" ");
}
void screen_1()
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED);
gotoxy(62,2);
printf(" 第 %d 关 ",level);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);
gotoxy(62,4);
printf("分数: %d",score);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE|FOREGROUND_RED);
gotoxy(80,4);
printf("LV: %d ",lv);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_BLUE);
gotoxy(62,6);
printf("生命: 坦克×%d ",life-1);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
gotoxy(62,8);
printf("敌方: 坦克×%d ",enemy);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_BLUE);
gotoxy(62,11);
printf("当前武器: ");
switch(weapons)
{
case 1 :
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);
gotoxy(62,13);
printf(" 普通子弹 ⊕ ");
}break;
case 2 :
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
gotoxy(62,13);
printf(" 散弹 ∷ ");
}break;
case 3 :
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);
gotoxy(62,13);
printf(" 气泡弹 ◎ ");
}break;
case 4 :
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_BLUE);
gotoxy(62,13);
printf(" 雪花弹 ※ ");
}break;
case 5 :
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
gotoxy(62,13);
printf(" 超级炮弹 ● ");
}break;
}
}
void screen_2(char *p,int color)
{
for(int i=15;i<27;i++)//先清屏
{
gotoxy(62,i);
printf(" ");
}
info[0]=info[1];//内容上移
info[1]=info[2];
info[2]=info[3];
info[3]=info[4];
info[4]=p;
for(int j=15;j<22;j=j+2)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_RED);
gotoxy(62,j);
printf("%s",info[(j+1)/2-8]);
}
switch(color)
{
case 1 :
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);//绿
gotoxy(62,23);
printf("%s",info[4]);
}break;
case 2 :
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);//淡蓝
gotoxy(62,23);
printf("%s",info[4]);
}break;
case 3 :
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED);//黄
gotoxy(62,23);
printf("%s",info[4]);
}break;
case 4 :
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);//红
gotoxy(62,23);
printf("%s",info[4]);
}break;
}
}
void screen_3()
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN);
gotoxy(62,27);
printf(" h键帮助 Esc退出");
gotoxy(62,28);
printf(" ");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
if(star<=13)
for(int i=1;i<=star;i++)
{
gotoxy(60+2*i,28);
printf("★");
}
}
void produce_star()
{
int a=0;
for(int i=4;i<26;i++)
{
for(int j=1;j<29;j++)
if(map[i][j]==0 && rand()%300==0)
{
s=j,t=i;
print_star();
a=1;
break;
}
if(a)
break;
}
}
void print_star()
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
gotoxy(2*s,t);
printf("★");
}
void change_star()
{
if(s==x&&t==(y-1) || s==x&&t==(y+1) || s==(x-1)&&t==y || s==(x+1)&&t==y)
{
clear_star();
s=0,t=0;
star++;
screen_2("恭喜你获得一颗星星",2);
printf("\7");
check_star();
print_my_tank();
}
if(s==x1&&t==(y1-1) || s==x1&&t==(y1+1) || s==(x1-1)&&t==y1 || s==(x1+1)&&t==y1)
{
clear_star();
s=0,t=0;
screen_2("很遗憾星星被抢走了",4);
printf("\7");
print_tank_1();
}
if(s==x2&&t==(y2-1) || s==x2&&t==(y2+1) || s==(x2-1)&&t==y2 || s==(x2+1)&&t==y2)
{
clear_star();
s=0,t=0;
screen_2("很遗憾星星被抢走了",4);
printf("\7");
print_tank_2();
}
if(s==x3&&t==(y3-1) || s==x3&&t==(y3+1) || s==(x3-1)&&t==y3 || s==(x3+1)&&t==y3)
{
clear_star();
s=0,t=0;
screen_2("很遗憾星星被抢走了",4);
printf("\7");
print_tank_3();
}
}
void clear_star()
{
gotoxy(2*s,t);
printf(" ");
}
void check_star()
{
switch(star)
{
case 2 :screen_2("解锁新武器: 散弹",4),screen_3();break;
case 3 :screen_2("成功解锁 绿色皮肤",2),screen_3();break;
case 4 :screen_2("解锁新武器: 气泡弹",2),screen_3();break;
case 5 :screen_2("成功解锁 黄色皮肤",3),screen_3();break;
case 6 :screen_2("解锁新武器: 雪花弹",1),screen_3();break;
case 7 :screen_2("成功解锁 白色皮肤",1),screen_3();break;
case 8 :screen_2("解锁新武器: 超级炮弹",4),screen_3();break;
case 9 :screen_2("成功解锁 紫色皮肤",1),screen_3();break;
case 10 :screen_2("您已拥有10颗星啦",3),screen_3();break;
case 11 :screen_2("成功解锁 红色皮肤",4),screen_3();break;
case 12 :screen_2("您已拥有12颗星啦",3),screen_3();break;
case 13 :screen_2("成功解锁 蓝色皮肤",1),screen_3();break;
}
}
void switch_weapons()
{
weapons++;
if(weapons>star/2+1)
weapons=1;
if(star==1)
screen_2("当前星星数不足,赶快收集吧",1);
else
{
switch(weapons)
{
case 1 :screen_2("切换到普通子弹",1);break;
case 2 :screen_2("切换到散弹",1);break;
case 3 :screen_2("切换到气泡弹",1);break;
case 4 :screen_2("切换到雪花弹",1);break;
case 5 :screen_2("切换到超级炮弹弹",1);break;
}
}
}
void switch_skin()
{
skin++;
if(skin>(star-1)/2+1)
skin=1;
if(star==1 || star==2)
screen_2("当前星星数不足,赶快收集吧",1);
else
{
switch(skin)
{
case 1 :screen_2("切换到淡蓝色皮肤",1);break;
case 2 :screen_2("切换到绿色皮肤",1);break;
case 3 :screen_2("切换到黄色皮肤",1);break;
case 4 :screen_2("切换到白色皮肤",1);break;
case 5 :screen_2("切换到紫色皮肤",1);break;
case 6 :screen_2("切换到红色皮肤",1);break;
case 7 :screen_2("切换到蓝色皮肤",1);break;
}
}
}
void shoot()
{
if(m!=0 || n!=0)
if(map[n][m]==0)//如果子弹还留在地图上,就清除掉
clear_bullet(m,n);
if(m==0 && n==0)//代表现在场上没有我的坦克的子弹,则重新发射子弹
{
switch(state)
{
case 1 :
{
m=x;
n=y-2;
direction=1;
}break;
case 2 :
{
m=x;
n=y+2;
direction=2;
}break;
case 3 :
{
m=x-2;
n=y;
direction=3;
}break;
case 4 :
{
m=x+2;
n=y;
direction=4;
}break;
}
}
else
{
switch(direction)
{
case 1 :n--;break;
case 2 :n++;break;
case 3 :m--;break;
case 4 :m++;break;
}
}
change_thing();//检查是否击中障碍物
change_home();//检查是否击中老家
change_bullet();//检查是否击中子弹
change_tank_1();//检查是否击中坦克1号
change_tank_2();//检查是否击中坦克2号
change_tank_3();//检查是否击中坦克3号
if(check_bullet(m,n))
print_my_bullet(m,n);
else
m=0,n=0;
}
void shoot_1()
{
if(m1!=0 || n1!=0)
if(map[n1][m1]==0)//如果子弹还留在地图上,就清除掉
clear_bullet(m1,n1);
if(m1==0 && n1==0)//代表现在场上没有坦克1号的子弹,则重新发射子弹
{
switch(state_1)
{
case 1 :
{
m1=x1;
n1=y1-2;
direction_1=1;
}break;
case 2 :
{
m1=x1;
n1=y1+2;
direction_1=2;
}break;
case 3 :
{
m1=x1-2;
n1=y1;
direction_1=3;
}break;
case 4 :
{
m1=x1+2;
n1=y1;
direction_1=4;
}break;
}
}
else
{
switch(direction_1)
{
case 1 :n1--;break;
case 2 :n1++;break;
case 3 :m1--;break;
case 4 :m1++;break;
}
}
change_thing();//检查是否击中障碍物
change_home();//检查是否击中老家
change_bullet();//检查是否击中子弹
change_tank();//检查是否击中我的坦克
if(check_bullet(m1,n1))
print_bullet(m1,n1);
else
m1=0,n1=0;
}
void shoot_2()
{
if(m2!=0 || n2!=0)
if(map[n2][m2]==0)//如果子弹还留在地图上,就清除掉
clear_bullet(m2,n2);
if(m2==0 && n2==0)//代表现在场上没有坦克2号的子弹,则重新发射子弹
{
switch(state_2)
{
case 1 :
{
m2=x2;
n2=y2-2;
direction_2=1;
}break;
case 2 :
{
m2=x2;
n2=y2+2;
direction_2=2;
}break;
case 3 :
{
m2=x2-2;
n2=y2;
direction_2=3;
}break;
case 4 :
{
m2=x2+2;
n2=y2;
direction_2=4;
}break;
}
}
else
{
switch(direction_2)
{
case 1 :n2--;break;
case 2 :n2++;break;
case 3 :m2--;break;
case 4 :m2++;break;
}
}
change_thing();//检查是否击中障碍物
change_home();//检查是否击中老家
change_bullet();//检查是否击中子弹
change_tank();//检查是否击中我的坦克
if(check_bullet(m2,n2))
print_bullet(m2,n2);
else
m2=0,n2=0;
}
void shoot_3()
{
if(m3!=0 || n3!=0)
if(map[n3][m3]==0)//如果子弹还留在地图上,就清除掉
clear_bullet(m3,n3);
if(m3==0 && n3==0)//代表现在场上没有坦克3号的子弹,则重新发射子弹
{
switch(state_3)
{
case 1 :
{
m3=x3;
n3=y3-2;
direction_3=1;
}break;
case 2 :
{
m3=x3;
n3=y3+2;
direction_3=2;
}break;
case 3 :
{
m3=x3-2;
n3=y3;
direction_3=3;
}break;
case 4 :
{
m3=x3+2;
n3=y3;
direction_3=4;
}break;
}
}
else
{
switch(direction_3)
{
case 1 :n3--;break;
case 2 :n3++;break;
case 3 :m3--;break;
case 4 :m3++;break;
}
}
change_thing();//检查是否击中障碍物
change_home();//检查是否击中老家
change_bullet();//检查是否击中子弹
change_tank();//检查是否击中我的坦克
if(check_bullet(m3,n3))
print_bullet(m3,n3);
else
m3=0,n3=0;
}
void turn_up(int a[][3])
{
int tank_up[3][3]={{0,1,0},{1,1,1},{1,0,1}};
if(state==1)
{
if(judge(x,y,state))
{
clear_my_tank();
y--;
print_my_tank();
refresh_map();
}
}
else
{
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
a[i][j]=tank_up[i][j];
clear_my_tank();
print_my_tank();
state=1;
refresh_map();
}
change_star();
}
void turn_down(int a[][3])
{
int tank_down[3][3]={{1,0,1},{1,1,1},{0,1,0}};
if(state==2)
{
if(judge(x,y,state))
{
clear_my_tank();
y++;
print_my_tank();
refresh_map();
}
}
else
{
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
a[i][j]=tank_down[i][j];
clear_my_tank();
print_my_tank();
state=2;
refresh_map();
}
change_star();
}
void turn_left(int a[][3])
{
int tank_left[3][3]={{0,1,1},{1,1,0},{0,1,1}};
if(state==3)
{
if(judge(x,y,state))
{
clear_my_tank();
x--;
print_my_tank();
refresh_map();
}
}
else
{
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
a[i][j]=tank_left[i][j];
clear_my_tank();
print_my_tank();
state=3;
refresh_map();
}
change_star();
}
void turn_right(int a[][3])
{
int tank_right[3][3]={{1,1,0},{0,1,1},{1,1,0}};
if(state==4)
{
if(judge(x,y,state))
{
clear_my_tank();
x++;
print_my_tank();
refresh_map();
}
}
else
{
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
a[i][j]=tank_right[i][j];
clear_my_tank();
print_my_tank();
state=4;
refresh_map();
}
change_star();
}
void turn_up_1(int a[][3])
{
int tank_up[3][3]={{0,1,0},{1,1,1},{1,0,1}};
if(state_1==1)
{
clear_tank_1();
y1--;
print_tank_1();
refresh_map();
}
else
{
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
a[i][j]=tank_up[i][j];
clear_tank_1();
print_tank_1();
state_1=1;
refresh_map();
}
}
void turn_down_1(int a[][3])
{
int tank_down[3][3]={{1,0,1},{1,1,1},{0,1,0}};
if(state_1==2)
{
clear_tank_1();
y1++;
print_tank_1();
refresh_map();
}
else
{
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
a[i][j]=tank_down[i][j];
clear_tank_1();
print_tank_1();
state_1=2;
refresh_map();
}
}
void turn_left_1(int a[][3])
{
int tank_left[3][3]={{0,1,1},{1,1,0},{0,1,1}};
if(state_1==3)
{
clear_tank_1();
x1--;
print_tank_1();
refresh_map();
}
else
{
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
a[i][j]=tank_left[i][j];
clear_tank_1();
print_tank_1();
state_1=3;
refresh_map();
}
}
void turn_right_1(int a[][3])
{
int tank_right[3][3]={{1,1,0},{0,1,1},{1,1,0}};
if(state_1==4)
{
clear_tank_1();
x1++;
print_tank_1();
refresh_map();
}
else
{
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
a[i][j]=tank_right[i][j];
clear_tank_1();
print_tank_1();
state_1=4;
refresh_map();
}
}
void turn_up_2(int a[][3])
{
int tank_up[3][3]={{0,1,0},{1,1,1},{1,0,1}};
if(state_2==1)
{
clear_tank_2();
y2--;
print_tank_2();
refresh_map();
}
else
{
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
a[i][j]=tank_up[i][j];
clear_tank_2();
print_tank_2();
state_2=1;
refresh_map();
}
}
void turn_down_2(int a[][3])
{
int tank_down[3][3]={{1,0,1},{1,1,1},{0,1,0}};
if(state_2==2)
{
clear_tank_2();
y2++;
print_tank_2();
refresh_map();
}
else
{
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
a[i][j]=tank_down[i][j];
clear_tank_2();
print_tank_2();
state_2=2;
refresh_map();
}
}
void turn_left_2(int a[][3])
{
int tank_left[3][3]={{0,1,1},{1,1,0},{0,1,1}};
if(state_2==3)
{
clear_tank_2();
x2--;
print_tank_2();
refresh_map();
}
else
{
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
a[i][j]=tank_left[i][j];
clear_tank_2();
print_tank_2();
state_2=3;
refresh_map();
}
}
void turn_right_2(int a[][3])
{
int tank_right[3][3]={{1,1,0},{0,1,1},{1,1,0}};
if(state_2==4)
{
clear_tank_2();
x2++;
print_tank_2();
refresh_map();
}
else
{
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
a[i][j]=tank_right[i][j];
clear_tank_2();
print_tank_2();
state_2=4;
refresh_map();
}
}
void turn_up_3(int a[][3])
{
int tank_up[3][3]={{0,1,0},{1,1,1},{1,0,1}};
if(state_3==1)
{
clear_tank_3();
y3--;
print_tank_3();
refresh_map();
}
else
{
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
a[i][j]=tank_up[i][j];
clear_tank_3();
print_tank_3();
state_3=1;
refresh_map();
}
}
void turn_down_3(int a[][3])
{
int tank_down[3][3]={{1,0,1},{1,1,1},{0,1,0}};
if(state_3==2)
{
clear_tank_3();
y3++;
print_tank_3();
refresh_map();
}
else
{
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
a[i][j]=tank_down[i][j];
clear_tank_3();
print_tank_3();
state_3=2;
refresh_map();
}
}
void turn_left_3(int a[][3])
{
int tank_left[3][3]={{0,1,1},{1,1,0},{0,1,1}};
if(state_3==3)
{
clear_tank_3();
x3--;
print_tank_3();
refresh_map();
}
else
{
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
a[i][j]=tank_left[i][j];
clear_tank_3();
print_tank_3();
state_3=3;
refresh_map();
}
}
void turn_right_3(int a[][3])
{
int tank_right[3][3]={{1,1,0},{0,1,1},{1,1,0}};
if(state_3==4)
{
clear_tank_3();
x3++;
print_tank_3();
refresh_map();
}
else
{
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
a[i][j]=tank_right[i][j];
clear_tank_3();
print_tank_3();
state_3=4;
refresh_map();
}
}
int judge(int x,int y,int state)//x,y坦克当前坐标,state坦克当前方向
{
switch(state)
{
case 1 :if(map[y-2][x]==0 && map[y-1][x-1]==0 && map[y-1][x+1]==0 && map[y-2][x-1]==0 && map[y-2][x+1]==0)
return 1;
else
return 0;
case 2 :if(map[y+2][x]==0 && map[y+1][x-1]==0 && map[y+1][x+1]==0 && map[y+2][x-1]==0 && map[y+2][x+1]==0)
return 1;
else
return 0;
case 3 :if(map[y][x-2]==0 && map[y-1][x-1]==0 && map[y+1][x-1]==0 && map[y-1][x-2]==0 && map[y+1][x-2]==0)
return 1;
else
return 0;
case 4 :if(map[y][x+2]==0 && map[y-1][x+1]==0 && map[y+1][x+1]==0 && map[y-1][x+2]==0 && map[y+1][x+2]==0)
return 1;
else
return 0;
}
}
int judge2(int x,int y,int state)//x,y坦克当前坐标,state坦克当前方向
{
switch(state)
{
case 1 :if(map[y-2][x]==0 && map[y-2][x-1]==0 && map[y-2][x+1]==0)
return 1;
else
return 0;
case 2 :if(map[y+2][x]==0 && map[y+2][x-1]==0 && map[y+2][x+1]==0)
return 1;
else
return 0;
case 3 :if(map[y][x-2]==0 && map[y-1][x-2]==0 && map[y+1][x-2]==0)
return 1;
else
return 0;
case 4 :if(map[y][x+2]==0 && map[y-1][x+2]==0 && map[y+1][x+2]==0)
return 1;
else
return 0;
}
}
void refresh_map() //i代表行,即纵坐标;j代表列,即横坐标
{
{
for(int i=0;i<30;i++) //首先地图清零
for(int j=0;j<30;j++)
map[i][j]=0;
}
{
for(int i=0;i<30;i++) //地图第一部分:围墙(完全不动)
{
map[i][0]=1;
map[i][29]=1;
}
for(int j=0;j<30;j++)
{
map[0][j]=1;
map[29][j]=1;
}
}
{
for(int i=0;i<3;i++) //地图第二部分:老家(几乎不动)
for(int j=0;j<4;j++)
map[i+26][j+13]=home[i][j];
}
{
for(int i=0;i<28;i++) //地图第三部分:障碍物(有时改变)
for(int j=0;j<28;j++)
map[i+1][j+1]=thing[i][j];
}
{
switch(state) //地图第四部分:坦克(总是改变)
{
case 1 :
{
map[y-1][x-1]=0; map[y-1][x]=1; map[y-1][x+1]=0;
map[y][x-1]=1; map[y][x]=1; map[y][x+1]=1;
map[y+1][x-1]=1; map[y+1][x]=0; map[y+1][x+1]=1;
}break;
case 2 :
{
map[y-1][x-1]=1; map[y-1][x]=0; map[y-1][x+1]=1;
map[y][x-1]=1; map[y][x]=1; map[y][x+1]=1;
map[y+1][x-1]=0; map[y+1][x]=1; map[y+1][x+1]=0;
}break;
case 3 :
{
map[y-1][x-1]=0; map[y-1][x]=1; map[y-1][x+1]=1;
map[y][x-1]=1; map[y][x]=1; map[y][x+1]=0;
map[y+1][x-1]=0; map[y+1][x]=1; map[y+1][x+1]=1;
}break;
case 4 :
{
map[y-1][x-1]=1; map[y-1][x]=1; map[y-1][x+1]=0;
map[y][x-1]=0; map[y][x]=1; map[y][x+1]=1;
map[y+1][x-1]=1; map[y+1][x]=1; map[y+1][x+1]=0;
}break;
}
switch(state_1)
{
case 1 :
{
map[y1-1][x1-1]=0; map[y1-1][x1]=1; map[y1-1][x1+1]=0;
map[y1][x1-1]=1; map[y1][x1]=1; map[y1][x1+1]=1;
map[y1+1][x1-1]=1; map[y1+1][x1]=0; map[y1+1][x1+1]=1;
}break;
case 2 :
{
map[y1-1][x1-1]=1; map[y1-1][x1]=0; map[y1-1][x1+1]=1;
map[y1][x1-1]=1; map[y1][x1]=1; map[y1][x1+1]=1;
map[y1+1][x1-1]=0; map[y1+1][x1]=1; map[y1+1][x1+1]=0;
}break;
case 3 :
{
map[y1-1][x1-1]=0; map[y1-1][x1]=1; map[y1-1][x1+1]=1;
map[y1][x1-1]=1; map[y1][x1]=1; map[y1][x1+1]=0;
map[y1+1][x1-1]=0; map[y1+1][x1]=1; map[y1+1][x1+1]=1;
}break;
case 4 :
{
map[y1-1][x1-1]=1; map[y1-1][x1]=1; map[y1-1][x1+1]=0;
map[y1][x1-1]=0; map[y1][x1]=1; map[y1][x1+1]=1;
map[y1+1][x1-1]=1; map[y1+1][x1]=1; map[y1+1][x1+1]=0;
}break;
}
switch(state_2)
{
case 1 :
{
map[y2-1][x2-1]=0; map[y2-1][x2]=1; map[y2-1][x2+1]=0;
map[y2][x2-1]=1; map[y2][x2]=1; map[y2][x2+1]=1;
map[y2+1][x2-1]=1; map[y2+1][x2]=0; map[y2+1][x2+1]=1;
}break;
case 2 :
{
map[y2-1][x2-1]=1; map[y2-1][x2]=0; map[y2-1][x2+1]=1;
map[y2][x2-1]=1; map[y2][x2]=1; map[y2][x2+1]=1;
map[y2+1][x2-1]=0; map[y2+1][x2]=1; map[y2+1][x2+1]=0;
}break;
case 3 :
{
map[y2-1][x2-1]=0; map[y2-1][x2]=1; map[y2-1][x2+1]=1;
map[y2][x2-1]=1; map[y2][x2]=1; map[y2][x2+1]=0;
map[y2+1][x2-1]=0; map[y2+1][x2]=1; map[y2+1][x2+1]=1;
}break;
case 4 :
{
map[y2-1][x2-1]=1; map[y2-1][x2]=1; map[y2-1][x2+1]=0;
map[y2][x2-1]=0; map[y2][x2]=1; map[y2][x2+1]=1;
map[y2+1][x2-1]=1; map[y2+1][x2]=1; map[y2+1][x2+1]=0;
}break;
}
switch(state_3)
{
case 1 :
{
map[y3-1][x3-1]=0; map[y3-1][x3]=1; map[y3-1][x3+1]=0;
map[y3][x3-1]=1; map[y3][x3]=1; map[y3][x3+1]=1;
map[y3+1][x3-1]=1; map[y3+1][x3]=0; map[y3+1][x3+1]=1;
}break;
case 2 :
{
map[y3-1][x3-1]=1; map[y3-1][x3]=0; map[y3-1][x3+1]=1;
map[y3][x3-1]=1; map[y3][x3]=1; map[y3][x3+1]=1;
map[y3+1][x3-1]=0; map[y3+1][x3]=1; map[y3+1][x3+1]=0;
}break;
case 3 :
{
map[y3-1][x3-1]=0; map[y3-1][x3]=1; map[y3-1][x3+1]=1;
map[y3][x3-1]=1; map[y3][x3]=1; map[y3][x3+1]=0;
map[y3+1][x3-1]=0; map[y3+1][x3]=1; map[y3+1][x3+1]=1;
}break;
case 4 :
{
map[y3-1][x3-1]=1; map[y3-1][x3]=1; map[y3-1][x3+1]=0;
map[y3][x3-1]=0; map[y3][x3]=1; map[y3][x3+1]=1;
map[y3+1][x3-1]=1; map[y3+1][x3]=1; map[y3+1][x3+1]=0;
}break;
}
}
}
void my_move()
{
char key;
if (kbhit()) //检测,如果有按键就执行if里面的
{
key = getch();//捕获按键
switch( key )
{
case 72:turn_up(my_tank);//上
break;
case 75:turn_left(my_tank);//左
break;
case 77:turn_right(my_tank);//右
break;
case 80:turn_down(my_tank);//下
break;
case 32:stop();//空格 暂停或开始
break;
case 104:help();//小h切换到帮助菜单
break;
case 115:switch_skin(),print_my_tank();//小s键切换皮肤
break;
case 119:switch_weapons();//小w键切换武器
break;
case 27:exit(0);//Esc 退出
default: ;
}
}
}
int check1(int x,int y)//在正上面,用它检测
{
for(int j=y;j<27;j++)
if(map[j][x]==4)
return 0;
return 1;
}
int check2(int x,int y)//在正左面,用它检测
{
for(int i=x;i<14;i++)
if(map[y][i]==4)
return 0;
return 1;
}
int check3(int x,int y)//在正右面,用它检测
{
for(int i=x;i>15;i--)
if(map[y][i]==4)
return 0;
return 1;
}
void move_1()
{
if((x1==14 || x1==15) && check1(x1,y1))//在正上面
{
if(state_1!=2)
turn_down_1(tank_1);
}
else if(x1<14 && y1==27 && check2(x1,y1))//在正左面
{
if(state_1!=4)
turn_right_1(tank_1);
}
else if(x1>15 && y1==27 && check3(x1,y1))//在正右面
{
if(state_1!=3)
turn_left_1(tank_1);
}
else
{
if(judge2(x1,y1,cp1))
switch(cp1)
{
case 1 :turn_up_1(tank_1);break;
case 2 :turn_down_1(tank_1);break;
case 3 :turn_left_1(tank_1);break;
case 4 :turn_right_1(tank_1);break;
}
while(judge2(x1,y1,cp1) == 0)
{
cp1=(rand()%4+1);
}
}
}
void move_2()
{
if((x2==14 || x2==15) && check1(x2,y2))//在正上面
{
if(state_2!=2)
turn_down_2(tank_2);
}
else if(x2<14 && y2==27 && check2(x2,y2))//在正左面
{
if(state_2!=4)
turn_right_2(tank_2);
}
else if(x2>15 && y2==27 && check3(x2,y2))//在正右面
{
if(state_2!=3)
turn_left_2(tank_2);
}
else
{
if(judge2(x2,y2,cp2))
switch(cp2)
{
case 1 :turn_up_2(tank_2);break;
case 2 :turn_down_2(tank_2);break;
case 3 :turn_left_2(tank_2);break;
case 4 :turn_right_2(tank_2);break;
}
while(judge2(x2,y2,cp2) == 0)
{
cp2=(rand()%4+1);
}
}
}
void move_3()
{
if((x3==14 || x3==15) && check1(x3,y3))//在正上面
{
if(state_3!=2)
turn_down_3(tank_3);
}
else if(x3<14 && y3==27 && check2(x3,y3))//在正左面
{
if(state_3!=4)
turn_right_3(tank_3);
}
else if(x3>15 && y3==27 && check3(x3,y3))//在正右面
{
if(state_3!=3)
turn_left_3(tank_3);
}
else
{
if(judge2(x3,y3,cp3))
switch(cp3)
{
case 1 :turn_up_3(tank_3);break;
case 2 :turn_down_3(tank_3);break;
case 3 :turn_left_3(tank_3);break;
case 4 :turn_right_3(tank_3);break;
}
while(judge2(x3,y3,cp3) == 0)
{
cp3=(rand()%4+1);
}
}
}
int check_bullet(int x,int y)
{
if(map[y][x])
return 0;
return 1;
}
void change_thing()//物品被子弹击中会改变
{
if(m>0&&m<29 && n>0&&n<29)//被我的子弹击中
if(thing[n-1][m-1]==1)//打中第一种方块
{
if(weapons==2)
{
if(thing[n][m-1]==1)
thing[n][m-1]=0;
gotoxy(2*m,n+1);
printf(" ");//擦去方块
if(thing[n-2][m-1]==1)
thing[n-2][m-1]=0;
gotoxy(2*m,n-1);
printf(" ");//擦去方块
if(thing[n-1][m]==1)
thing[n-1][m]=0;
gotoxy(2*(m+1),n);
printf(" ");//擦去方块
if(thing[n-1][m-2]==1)
thing[n-1][m-2]=0;
gotoxy(2*(m-1),n);
printf(" ");//擦去方块
thing[n-1][m-1]=0;
gotoxy(2*m,n);
printf(" ");//擦去方块
m=0,n=0;//子弹消失
print_thing();
refresh_map();
}
else if(weapons==3)
{
thing[n-1][m-1]=0;
gotoxy(2*m,n);
printf(" ");//擦去方块
print_my_bullet(m,n);
print_thing();
refresh_map();
}
else
{
thing[n-1][m-1]=0;
gotoxy(2*m,n);
printf(" ");//擦去方块
m=0,n=0;//子弹消失
print_thing();
refresh_map();
}
}
else if(thing[n-1][m-1]==2)//打到第二种方块
{
if(weapons==5)
{
thing[n-1][m-1]=0;
gotoxy(2*m,n);
printf(" ");
m=0,n=0;//子弹消失
print_thing();
refresh_map();
}
else if(weapons==2)
{
m=0,n=0;
}
else
{
thing[n-1][m-1]=1;
m=0,n=0;//子弹消失
print_thing();
refresh_map();
}
}
else if(thing[n-1][m-1]==3)
{
if(weapons==4 || weapons==2)
m=0,n=0;
else if(weapons==5)
{
thing[n-1][m-1]=0;
gotoxy(2*m,n);
printf(" ");
m=0,n=0;//子弹消失
print_thing();
refresh_map();
}
else
{
thing[n-1][m-1]=2;
m=0,n=0;//子弹消失
print_thing();
refresh_map();
}
}
else if(thing[n-1][m-1]==4)//此方块不受子弹影响
{
m=0,n=0;//子弹消失
}
if(m1>0&&m1<29 && n1>0&&n1<29)//被坦克1号子弹击中
if(thing[n1-1][m1-1]==1)
{
thing[n1-1][m1-1]=0;
gotoxy(2*m1,n1);
printf(" ");
m1=0,n1=0;
print_thing();
refresh_map();
}
else if(thing[n1-1][m1-1]==2)
{
thing[n1-1][m1-1]=1;
m1=0,n1=0;//子弹消失
print_thing();
refresh_map();
}
else if(thing[n1-1][m1-1]==3)
{
thing[n1-1][m1-1]=2;
m1=0,n1=0;//子弹消失
print_thing();
refresh_map();
}
else if(thing[n-1][m-1]==4)//此方块不受子弹影响
{
m1=0,n1=0;//子弹消失
}
if(m2>0&&m2<29 && n2>0&&n2<29)
if(thing[n2-1][m2-1]==1)
{
thing[n2-1][m2-1]=0;
gotoxy(2*m2,n2);
printf(" ");
m2=0,n2=0;
print_thing();
refresh_map();
}
else if(thing[n2-1][m2-1]==2)
{
thing[n2-1][m2-1]=1;
m2=0,n2=0;//子弹消失
print_thing();
refresh_map();
}
else if(thing[n2-1][m2-1]==3)
{
thing[n2-1][m2-1]=2;
m2=0,n2=0;//子弹消失
print_thing();
refresh_map();
}
else if(thing[n2-1][m2-1]==4)//此方块不受子弹影响
{
m2=0,n2=0;//子弹消失
}
if(m3>0&&m3<29 && n3>0&&n3<29)
if(thing[n3-1][m3-1]==1)
{
thing[n3-1][m3-1]=0;
gotoxy(2*m3,n3);
printf(" ");
m3=0,n3=0;
print_thing();
refresh_map();
}
else if(thing[n3-1][m3-1]==2)
{
thing[n3-1][m3-1]=1;
m3=0,n3=0;//子弹消失
print_thing();
refresh_map();
}
else if(thing[n3-1][m3-1]==3)
{
thing[n3-1][m3-1]=2;
m3=0,n3=0;//子弹消失
print_thing();
refresh_map();
}
else if(thing[n3-1][m3-1]==4)//此方块不受子弹影响
{
m3=0,n3=0;//子弹消失
}
}
void change_home()
{
if(m==14&&n==27 || m==15&&n==27 || m==14&&n==28 || m==15&&n==28)//如果子弹打到老家里,游戏结束
gameover();
else if(m>12 && n>25 && m<17 && n<29)
if(weapons==4)//只有4号子弹对老家的墙有效
{
home[n-26][m-13]=3;
screen_2("你修复了老家哦!",1);
m=0,n=0; //子弹消失
print_home();
refresh_map();
}
else
m=0,n=0;
if(m1==14&&n1==27 || m1==15&&n1==27 || m1==14&&n1==28 || m1==15&&n1==28)
gameover();
else if(m1>12 && n1>25 && m1<17 && n1<29)
if(home[n1-26][m1-13]==1)
{
home[n1-26][m1-13]=0;
screen_2("警报! 警报!",4);
gotoxy(2*m1,n1);
printf(" ");
m1=0,n1=0;
print_home();
refresh_map();
}
else if(home[n1-26][m1-13]==2)
{
home[n1-26][m1-13]=1;
screen_2("敌人威胁到了你的老家",4);
m1=0,n1=0; //子弹消失
print_home();
refresh_map();
}
else if(home[n1-26][m1-13]==3)
{
home[n1-26][m1-13]=2;
screen_2("敌人对你的防御开始了打击",4);
m1=0,n1=0; //子弹消失
print_home();
refresh_map();
}
if(m2==14&&n2==27 || m2==15&&n2==27 || m2==14&&n2==28 || m2==15&&n2==28)
gameover();
else if(m2>12 && n2>25 && m2<17 && n2<29)
if(home[n2-26][m2-13]==1)
{
home[n2-26][m2-13]=0;
screen_2("警报! 警报!",4);
gotoxy(2*m2,n2);
printf(" ");
m2=0,n2=0;
print_home();
refresh_map();
}
else if(home[n2-26][m2-13]==2)
{
home[n2-26][m2-13]=1;
screen_2("敌人威胁到了你的老家",4);
m2=0,n2=0; //子弹消失
print_home();
refresh_map();
}
else if(home[n2-26][m2-13]==3)
{
home[n2-26][m2-13]=2;
screen_2("敌人对你的防御开始了打击",4);
m2=0,n2=0; //子弹消失
print_home();
refresh_map();
}
if(m3==14&&n3==27 || m3==15&&n3==27 || m3==14&&n3==28 || m3==15&&n3==28)
gameover();
else if(m3>12 && n3>25 && m3<17 && n3<29)
if(home[n3-26][m3-13]==1)
{
home[n3-26][m3-13]=0;
screen_2("警报! 警报!",4);
gotoxy(2*m3,n3);
printf(" ");
m3=0,n3=0;
print_home();
refresh_map();
}
else if(home[n3-26][m3-13]==2)
{
home[n3-26][m3-13]=1;
screen_2("敌人威胁到了你的老家",4);
m3=0,n3=0; //子弹消失
print_home();
refresh_map();
}
else if(home[n3-26][m3-13]==3)
{
home[n3-26][m3-13]=2;
screen_2("敌人对你的防御开始了打击",4);
m3=0,n3=0; //子弹消失
print_home();
refresh_map();
}
}
void change_bullet()//当我的坦克子弹和敌人坦克子弹碰撞
{
if(m!=0 && m==m1 && n==n1)
{
clear_bullet(m,n);
m=0,n=0,
clear_bullet(m1,n1);
m1=0,n1=0;
}
if(m!=0 && m==m2 && n==n2)
{
clear_bullet(m,n);
m=0,n=0,
clear_bullet(m2,n2);
m2=0,n2=0;
}
if(m!=0 && m==m3 && n==n3)
{
clear_bullet(m,n);
m=0,n=0,
clear_bullet(m3,n3);
m3=0,n3=0;
}
}
void change_tank()
{
switch(state)
{
case 1 : //当我的坦克方向向上时
{
if(x==m1&&(y-1)==n1 || (x-1)==m1&&y==n1 || x==m1&&y==n1 || (x+1)==m1&&y==n1 || (x-1)==m1&&(y+1)==n1 || (x+1)==m1&&(y+1)==n1)//如果坦克1号子弹打到我的坦克
clear_my_tank(),screen_2("坦克1号击中了你 生命值减1",4),x=10,y=27,m1=0,n1=0,life--,check_game(),turn_up(my_tank);//我的坦克回到初始位置,坦克1号子弹消失,生命值减1,检查游戏是否结束,若没结束初始化方向
if(x==m2&&(y-1)==n2 || (x-1)==m2&&y==n2 || x==m2&&y==n2 || (x+1)==m2&&y==n2 || (x-1)==m2&&(y+1)==n2 || (x+1)==m2&&(y+1)==n2)//如果坦克2号子弹打到我的坦克
clear_my_tank(),screen_2("坦克2号击中了你 生命值减1",4),x=10,y=27,m2=0,n2=0,life--,check_game(),turn_up(my_tank);//我的坦克回到初始位置,坦克2号子弹消失,生命值减1,检查游戏是否结束,若没结束初始化方向
if(x==m3&&(y-1)==n3 || (x-1)==m3&&y==n3 || x==m3&&y==n3 || (x+1)==m3&&y==n3 || (x-1)==m3&&(y+1)==n3 || (x+1)==m3&&(y+1)==n3)//如果坦克3号子弹打到我的坦克
clear_my_tank(),screen_2("坦克3号击中了你 生命值减1",4),x=10,y=27,m3=0,n3=0,life--,check_game(),turn_up(my_tank);//我的坦克回到初始位置,坦克3号子弹消失,生命值减1,检查游戏是否结束,若没结束初始化方向
}break;
case 2 :
{
if(x==m1&&(y+1)==n1 || (x-1)==m1&&y==n1 || x==m1&&y==n1 || (x+1)==m1&&y==n1 || (x-1)==m1&&(y-1)==n1 || (x+1)==m1&&(y-1)==n1)
clear_my_tank(),screen_2("坦克1号击中了你 生命值减1",4),x=10,y=27,m1=0,n1=0,life--,check_game(),turn_up(my_tank);
if(x==m2&&(y+1)==n2 || (x-1)==m2&&y==n2 || x==m2&&y==n2 || (x+1)==m2&&y==n2 || (x-1)==m2&&(y-1)==n2 || (x+1)==m2&&(y-1)==n2)
clear_my_tank(),screen_2("坦克2号击中了你 生命值减1",4),x=10,y=27,m2=0,n2=0,life--,check_game(),turn_up(my_tank);
if(x==m3&&(y+1)==n3 || (x-1)==m3&&y==n3 || x==m3&&y==n3 || (x+1)==m3&&y==n3 || (x-1)==m3&&(y-1)==n3 || (x+1)==m3&&(y-1)==n3)
clear_my_tank(),screen_2("坦克3号击中了你 生命值减1",4),x=10,y=27,m3=0,n3=0,life--,check_game(),turn_up(my_tank);
}
case 3 :
{
if(x==m1&&(y-1)==n1 || (x-1)==m1&&y==n1 || x==m1&&y==n1 || (x+1)==m1&&(y-1)==n1 || x==m1&&(y+1)==n1 || (x+1)==m1&&(y+1)==n1)
clear_my_tank(),screen_2("坦克1号击中了你 生命值减1",4),x=10,y=27,m1=0,n1=0,life--,check_game(),turn_up(my_tank);
if(x==m2&&(y-1)==n2 || (x-1)==m2&&y==n2 || x==m2&&y==n2 || (x+1)==m2&&(y-1)==n2 || x==m2&&(y+1)==n2 || (x+1)==m2&&(y+1)==n2)
clear_my_tank(),screen_2("坦克2号击中了你 生命值减1",4),x=10,y=27,m2=0,n2=0,life--,check_game(),turn_up(my_tank);
if(x==m3&&(y-1)==n3 || (x-1)==m3&&y==n3 || x==m3&&y==n3 || (x+1)==m3&&(y-1)==n3 || x==m3&&(y+1)==n3 || (x+1)==m3&&(y+1)==n3)
clear_my_tank(),screen_2("坦克3号击中了你 生命值减1",4),x=10,y=27,m3=0,n3=0,life--,check_game(),turn_up(my_tank);
}
case 4 :
{
if(x==m1&&(y-1)==n1 || (x-1)==m1&&(y-1)==n1 || x==m1&&y==n1 || (x-1)==m1&&(y+1)==n1 || x==m1&&(y+1)==n1 || (x+1)==m1&&y==n1)
clear_my_tank(),screen_2("坦克1号击中了你 生命值减1",4),x=10,y=27,m1=0,n1=0,life--,check_game(),turn_up(my_tank);
if(x==m2&&(y-1)==n2 || (x-1)==m2&&(y-1)==n2 || x==m2&&y==n2 || (x-1)==m2&&(y+1)==n2 || x==m2&&(y+1)==n2 || (x+1)==m2&&y==n2)
clear_my_tank(),screen_2("坦克2号击中了你 生命值减1",4),x=10,y=27,m2=0,n2=0,life--,check_game(),turn_up(my_tank);
if(x==m3&&(y-1)==n3 || (x-1)==m3&&(y-1)==n3 || x==m3&&y==n3 || (x-1)==m3&&(y+1)==n3 || x==m3&&(y+1)==n3 || (x+1)==m3&&y==n3)
clear_my_tank(),screen_2("坦克3号击中了你 生命值减1",4),x=10,y=27,m3=0,n3=0,life--,check_game(),turn_up(my_tank);
}
}
}
void change_tank_1()
{
switch(state_1)
{
case 1 :
{
if(x1==m&&(y1-1)==n || (x1-1)==m&&y1==n || x1==m&&y1==n || (x1+1)==m&&y1==n || (x1-1)==m&&(y1+1)==n || (x1+1)==m&&(y1+1)==n)//如果我的坦克子弹打到坦克1号
clear_tank_1(),screen_2("你击中了坦克1号 +100分",3),x1=2,y1=2,m=0,n=0,enemy--,score=score+100,check_lv(),produce_star(),check_game();//坦克1号回到初始位置,我的坦克号子弹消失,敌人数量值减1,分数加100,检查胜负
}break;
case 2 :
{
if(x1==m&&(y1+1)==n || (x1-1)==m&&y1==n || x1==m&&y1==n || (x1+1)==m&&y1==n || (x1-1)==m&&(y1-1)==n || (x1+1)==m&&(y1-1)==n)
clear_tank_1(),screen_2("你击中了坦克1号 +100分",3),x1=2,y1=2,m=0,n=0,enemy--,score=score+100,check_lv(),produce_star(),check_game();
}
case 3 :
{
if(x1==m&&(y1-1)==n || (x1-1)==m&&y1==n || x1==m&&y1==n || (x1+1)==m&&(y1-1)==n || x1==m&&(y1+1)==n || (x1+1)==m&&(y1+1)==n)
clear_tank_1(),screen_2("你击中了坦克1号 +100分",3),x1=2,y1=2,m=0,n=0,enemy--,score=score+100,check_lv(),produce_star(),check_game();
}
case 4 :
{
if(x1==m&&(y1-1)==n || (x1-1)==m&&(y1-1)==n || x1==m&&y1==n || (x1-1)==m&&(y1+1)==n || x1==m&&(y1+1)==n || (x1+1)==m&&y1==n)
clear_tank_1(),screen_2("你击中了坦克1号 +100分",3),x1=2,y1=2,m=0,n=0,enemy--,score=score+100,check_lv(),produce_star(),check_game();
}
}
}
void change_tank_2()
{
switch(state_2)
{
case 1 :
{
if(x2==m&&(y2-1)==n || (x2-1)==m&&y2==n || x2==m&&y2==n || (x2+1)==m&&y2==n || (x2-1)==m&&(y2+1)==n || (x2+1)==m&&(y2+1)==n)//如果我的坦克子弹打到坦克2号
clear_tank_2(),screen_2("你击中了坦克2号 +100分",3),x2=14,y2=2,m=0,n=0,enemy--,score=score+100,check_lv(),produce_star(),check_game();//坦克2号回到初始位置,我的坦克号子弹消失,敌人数量值减1,分数加100,检查胜负
}break;
case 2 :
{
if(x2==m&&(y2+1)==n || (x2-1)==m&&y2==n || x2==m&&y2==n || (x2+1)==m&&y2==n || (x2-1)==m&&(y2-1)==n || (x2+1)==m&&(y2-1)==n)
clear_tank_2(),screen_2("你击中了坦克2号 +100分",3),x2=14,y2=2,m=0,n=0,enemy--,score=score+100,check_lv(),produce_star(),check_game();
}
case 3 :
{
if(x2==m&&(y2-1)==n || (x2-1)==m&&y2==n || x2==m&&y2==n || (x2+1)==m&&(y2-1)==n || x2==m&&(y2+1)==n || (x2+1)==m&&(y2+1)==n)
clear_tank_2(),screen_2("你击中了坦克2号 +100分",3),x2=14,y2=2,m=0,n=0,enemy--,score=score+100,check_lv(),produce_star(),check_game();
}
case 4 :
{
if(x2==m&&(y2-1)==n || (x2-1)==m&&(y2-1)==n || x2==m&&y2==n || (x2-1)==m&&(y2+1)==n || x2==m&&(y2+1)==n || (x2+1)==m&&y2==n)
clear_tank_2(),screen_2("你击中了坦克2号 +100分",3),x2=14,y2=2,m=0,n=0,enemy--,score=score+100,check_lv(),produce_star(),check_game();
}
}
}
void change_tank_3()
{
switch(state_3)
{
case 1 :
{
if(x3==m&&(y3-1)==n || (x3-1)==m&&y3==n || x3==m&&y3==n || (x3+1)==m&&y3==n || (x3-1)==m&&(y3+1)==n || (x3+1)==m&&(y3+1)==n)//如果我的坦克子弹打到坦克3号
clear_tank_3(),screen_2("你击中了坦克3号 +100分",3),x3=27,y3=2,m=0,n=0,enemy--,score=score+100,check_lv(),produce_star(),check_game();//坦克3号回到初始位置,我的坦克号子弹消失,敌人数量值减1,分数加100,检查胜负
}break;
case 2 :
{
if(x3==m&&(y3+1)==n || (x3-1)==m&&y3==n || x3==m&&y3==n || (x3+1)==m&&y3==n || (x3-1)==m&&(y3-1)==n || (x3+1)==m&&(y3-1)==n)
clear_tank_3(),screen_2("你击中了坦克3号 +100分",3),x3=27,y3=2,m=0,n=0,enemy--,score=score+100,check_lv(),produce_star(),check_game();
}
case 3 :
{
if(x3==m&&(y3-1)==n || (x3-1)==m&&y3==n || x3==m&&y3==n || (x3+1)==m&&(y3-1)==n || x3==m&&(y3+1)==n || (x3+1)==m&&(y3+1)==n)
clear_tank_3(),screen_2("你击中了坦克3号 +100分",3),x3=27,y3=2,m=0,n=0,enemy--,score=score+100,check_lv(),produce_star(),check_game();
}
case 4 :
{
if(x3==m&&(y3-1)==n || (x3-1)==m&&(y3-1)==n || x3==m&&y3==n || (x3-1)==m&&(y3+1)==n || x3==m&&(y3+1)==n || (x3+1)==m&&y3==n)
clear_tank_3(),screen_2("你击中了坦克3号 +100分",3),x3=27,y3=2,m=0,n=0,enemy--,score=score+100,check_lv(),produce_star(),check_game();
}
}
}
void check_lv()
{
switch(score/1000)
{
case 0 :lv=1,speed=10;break;
case 1 :if(lv==1) screen_2("恭喜升到2级!",2);lv=2,speed=9;break;
case 2 :if(lv==2) screen_2("恭喜升到3级!",2);lv=3,speed=8;break;
case 3 :if(lv==3) screen_2("恭喜升到4级!",2);lv=4,speed=7;break;
case 4 :if(lv==4) screen_2("恭喜升到5级!",2);lv=5,speed=6;break;
case 5 :if(lv==5) screen_2("恭喜升到6级!",2);lv=6,speed=5;break;
case 6 :if(lv==6) screen_2("恭喜升到7级!",2);lv=7,speed=4;break;
case 7 :if(lv==7) screen_2("恭喜升到8级!",2);lv=8,speed=3;break;
case 8 :if(lv==8) screen_2("恭喜升到9级!",2);lv=9,speed=2;break;
case 9 :if(lv==9) screen_2("恭喜升到10级!,满级啦",2);lv=10,speed=1;break;
}
}
void get_map()
{
int map1[28][28]={{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{1,1,1,1,2,2,2,1,1,1,1,1,1,3,3,3,3,1,1,1,1,1,1,1,1,0,0,0},{1,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0},{1,1,1,1,2,2,2,1,1,1,1,1,1,3,3,3,3,1,1,1,1,1,1,1,1,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},{0,0,0,1,1,1,1,1,1,1,1,4,4,4,4,4,4,4,4,1,1,1,1,1,1,1,1,1},{0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0},{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0},{2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},{0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},{0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0},{3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0},{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}};
int map2[28][28]={{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1},{1,1,1,1,1,1,0,0,1,3,3,3,3,3,3,3,3,3,3,3,1,0,0,1,1,1,1,1},{1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1},{1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1},{1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1},{1,1,1,1,1,1,0,0,1,4,4,4,4,4,4,4,4,4,4,4,1,0,0,1,1,1,1,1},{1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1},{4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4},{3,3,3,3,3,3,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,3,3,3,3,3,3},{1,1,1,1,3,3,0,0,3,3,1,1,1,1,1,1,1,1,3,3,0,0,3,3,1,1,1,1},{3,3,3,3,0,0,0,0,0,0,3,3,3,3,3,3,3,3,0,0,0,0,0,0,3,3,3,3},{1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1},{1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1},{2,2,2,2,2,2,0,0,2,2,2,2,2,2,2,2,2,2,2,2,0,0,2,2,2,2,2,2},{3,3,3,3,3,3,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,3,3,3,3,3,3},{1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1},{3,3,3,3,3,3,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,3,3,3,3,3,3},{2,2,2,2,2,2,0,0,2,2,2,2,2,2,2,2,2,2,2,2,0,0,2,2,2,2,2,2},{1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}};
int map3[28][28]={{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0},{0,2,2,2,2,2,0,4,4,4,4,0,1,1,1,1,0,4,4,4,4,0,2,2,2,2,2,0},{0,0,2,2,2,0,4,4,4,4,4,4,0,1,1,0,4,4,4,4,4,4,0,2,2,2,0,0},{0,0,0,2,0,4,4,4,4,4,4,4,4,0,0,4,4,4,4,4,4,4,4,0,2,0,0,0},{0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,0,0},{0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,0,0,0},{0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,0,0,0,0},{1,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,0,0,0,0,1},{1,1,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,0,0,0,0,0,0,1,1},{1,1,1,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,0,0,0,0,0,0,1,1,1},{1,1,1,4,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,1,1,1,1},{1,1,1,3,4,0,0,0,0,0,0,4,4,4,4,4,4,0,0,0,0,0,0,4,1,1,1,1},{1,1,1,1,3,4,0,0,0,0,0,0,4,4,4,4,0,0,0,0,0,0,4,3,1,1,1,1},{1,1,1,1,1,3,4,0,0,0,0,0,0,4,4,0,0,0,0,0,0,4,3,1,1,1,1,1},{1,1,1,1,1,1,3,4,0,0,0,0,0,0,0,0,0,0,1,0,4,3,1,1,1,1,1,1},{1,1,1,1,1,1,1,3,4,0,0,0,0,0,1,0,0,0,0,4,3,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,3,4,0,0,0,0,0,0,0,0,4,3,1,1,1,1,1,1,1,1},{3,3,3,3,3,3,3,3,4,0,0,0,0,0,0,0,0,0,0,4,3,3,3,3,3,3,3,3},{4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}};
int map4[28][28]={{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4},{0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,0},{1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1},{1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}};
int map5[28][28]={{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},{3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3},{2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},{3,3,4,4,3,3,3,3,3,3,3,3,3,3,4,4,3,3,3,3,4,4,3,3,3,3,3,3},{1,1,4,4,1,1,1,1,1,1,1,3,3,1,1,4,4,1,1,4,4,1,1,1,1,1,1,1},{1,1,4,4,1,1,1,1,1,1,1,3,3,1,1,1,4,4,4,4,1,1,1,1,1,1,1,1},{1,1,4,4,1,1,1,1,1,1,1,3,3,1,1,1,1,4,4,1,1,1,1,1,1,1,1,1},{1,1,4,4,1,1,1,1,1,1,1,3,3,1,1,1,1,4,4,1,1,1,1,1,1,1,1,1},{1,1,4,4,1,1,1,1,1,1,1,3,3,1,1,1,1,4,4,1,1,1,1,1,1,1,1,1},{1,1,4,4,1,1,1,1,1,1,1,3,3,1,1,1,1,4,4,1,1,1,1,1,1,1,1,1},{1,1,4,4,1,1,1,1,1,1,1,3,3,1,1,1,1,4,4,1,1,1,1,1,1,1,1,1},{1,1,4,4,1,1,1,1,1,1,1,3,3,1,1,1,1,4,4,1,1,1,1,1,1,1,1,1},{1,1,4,4,4,4,4,4,4,1,1,3,3,1,1,1,1,4,4,1,1,1,1,1,1,1,1,1},{1,1,4,4,4,4,4,4,4,1,1,3,3,1,1,1,1,4,4,1,1,1,1,1,1,1,1,1},{3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3},{1,1,1,1,1,1,1,1,1,1,2,3,3,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,2,3,3,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,2,3,3,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,2,3,3,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}};
int map6[28][28]={{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{1,1,1,1,4,0,0,0,4,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0},{1,1,1,1,4,0,0,0,4,1,1,0,0,0,1,1,1,1,1,4,4,4,4,4,4,0,0,0},{1,1,0,1,4,0,0,0,4,1,1,0,0,0,1,1,1,1,1,4,0,0,0,0,0,0,0,0},{1,1,0,1,4,0,0,0,4,1,1,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0},{1,1,0,1,4,0,0,4,1,1,1,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0},{1,1,0,1,4,0,0,0,4,1,1,0,0,0,0,0,0,0,0,4,0,0,0,3,4,0,0,0},{1,1,0,1,4,0,0,0,4,4,4,4,4,4,4,4,0,0,0,4,0,0,0,3,4,0,0,0},{1,1,0,1,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,3,4,0,0,0},{1,1,0,1,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,3,4,0,0,0},{1,1,0,1,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,3,4,0,0,0},{4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,0,4,4,4,4,0,0,0,3,4,0,0,0},{1,1,0,1,1,1,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,4,0,0,0},{1,1,0,1,1,1,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,4,0,0,0},{1,1,0,1,1,1,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,4,0,0,0},{1,1,0,1,1,1,4,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,3,4,0,0,0},{1,1,0,1,1,1,4,0,0,0,1,2,1,3,3,3,3,3,3,3,3,3,3,3,4,0,0,0},{1,1,0,4,4,4,4,0,0,0,1,2,1,4,4,4,4,4,4,4,4,4,4,4,4,0,0,0},{0,0,0,0,0,0,0,0,0,0,1,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,1,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,1,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,1,1,1,1,1,1,1,1,2,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1},{0,0,0,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}};
switch(level)//判断是第几关,然后载入相应地图
{
case 1 :
{
for(int i=0;i<28;i++)
for(int j=0;j<28;j++)
thing[i][j]=map1[i][j];
}break;
case 2 :
{
for(int i=0;i<28;i++)
for(int j=0;j<28;j++)
thing[i][j]=map2[i][j];
}break;
case 3 :
{
for(int i=0;i<28;i++)
for(int j=0;j<28;j++)
thing[i][j]=map3[i][j];
}break;
case 4 :
{
for(int i=0;i<28;i++)
for(int j=0;j<28;j++)
thing[i][j]=map4[i][j];
}break;
case 5 :
{
for(int i=0;i<28;i++)
for(int j=0;j<28;j++)
thing[i][j]=map5[i][j];
}break;
case 6 :
{
for(int i=0;i<28;i++)
for(int j=0;j<28;j++)
thing[i][j]=map6[i][j];
}break;
default :
{
for(int i=4;i<24;i++)
for(int j=0;j<28;j++)
thing[i][j]=rand()%5;
}
}
}
void stop()
{
int a=0;
char *poem[50]={" 壮哉神将陆伯言"," 丈八二桃把营连"," 一兵队友张文远"," 二兵袁术只等闲"," 己方残血放万箭"," 敌人弱势开桃园"," 转眼队友全托管"," 挂上闪电继续连"," 铁索全场遭天谴"," 一道闪电划过天"," 苦心经营几十年"," 一夜回到解放前"," 队友绝望人心散"," 濒死求桃无人怜"," 凡人闻之结叹惋"," 只见神将笑不言"," 我有牌堆很简单"," 神技自救不要钱"," 连完桃来再连酒"," 救完自己救队友"," 年轻任性谁能管"," 笑看三核被炸残"," 只是敌人太狡诈"," 各种刷牌各种卡"," 凡人皆畏二术禅"," 国太香香没得玩"," 手牌装备全都有"," 体力瞬间就回满"," 队友全问怎么办"," 怀疑陆神要崩盘"," 神将表示莫惊慌"," 掏出神器从裤裆"," 要问神器是什么"," 连弩44杀清全场"," 凡人表示瞎狗眼"," 不识神将在眼前"," 从此美名天下传"," 众神闻之皆跪舔"," 遍寻三国名将传"," 谁人不识陆伯言"," "," "," "," "," 你居然看完。。。 "," "," "," "," "," "};
char key;
screen_2("游戏暂停",4);
while(1)
{
for(int i=0;i<50;i++)
{
Sleep(2000);
if (kbhit()) //检测
{
key = getch();//捕获按键
if(key==32)
{
screen_2("准备开始",2);
a=1;
break;
}
}
screen_2(poem[i],2);
if(a)
break;
}
if(a)
break;
}
}
void help()
{
char key1,key2;
int a=1;
for(int i=15;i<29;i++)//先清屏
{
gotoxy(62,i);
printf(" ");
}
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);
gotoxy(62,15);
printf(" 帮助 ");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);
gotoxy(62,17);
printf("↑ ↓ ← → 控制方向");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);
gotoxy(62,19);
printf(" 小写 w 切换武器");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);
gotoxy(62,21);
printf(" 小写 s 切换皮肤");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);
gotoxy(62,23);
printf(" 小写 h 帮助/退出");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);
gotoxy(62,25);
printf(" 空格 暂停/开始");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_BLUE|FOREGROUND_GREEN);
gotoxy(62,27);
printf("按0查看更多");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE);
gotoxy(62,28);
printf(" 版本:1.0");
while(1)
{
if (kbhit()) //检测,如果有按键就执行if里面的
{
key1 = getch();//捕获按键
if( 104 == key1 )
{
screen_2("看完帮助 继续游戏吧",2);
screen_3();
break;
}
else if( 48 == key1 )
{
while(1)
{
for(int i=17;i<29;i++)//先清屏
{
gotoxy(62,i);
printf(" ");
}
switch(a)
{
case 1 :
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);
gotoxy(62,17);
printf("■ 绿色方块可承受一次打击");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED);
gotoxy(62,19);
printf("■ 黄色油块可承受两次打击");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_BLUE);
gotoxy(62,21);
printf("■ 白色冰块可承受三次打击");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE);
gotoxy(62,23);
printf("■ 蓝色石块无法被破环");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_BLUE|FOREGROUND_GREEN);
gotoxy(62,27);
printf("按空格键继续");
}break;
case 2 :
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);
gotoxy(62,17);
printf("⊕ 普通子弹攻击力为1 ");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
gotoxy(62,19);
printf("∷ 散弹可对绿色方块造成大");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
gotoxy(62,21);
printf("范围破坏,但是无法对其它类");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
gotoxy(62,23);
printf("型的方块造成破坏 ");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);
gotoxy(62,25);
printf("◎ 气泡弹可以对一排的绿色");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);
gotoxy(62,27);
printf("方块造成破坏");
}break;
case 3 :
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_RED);
gotoxy(62,17);
printf("※ 雪花弹对白色冰块无效,");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_RED);
gotoxy(62,19);
printf("但是可以将老家的围墙修成白");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_RED);
gotoxy(62,21);
printf("色冰块,从而保护老家");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
gotoxy(62,23);
printf("● 超级炮弹可以对除蓝色石");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
gotoxy(62,25);
printf("块外所有方块造成一次性的巨");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
gotoxy(62,27);
printf("大破坏");
}break;
case 4 :
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_RED);
gotoxy(62,17);
printf("每打掉一辆坦克加100 分,同");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_RED);
gotoxy(62,19);
printf("时有一定几率掉落星星,收集");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_RED);
gotoxy(62,21);
printf("星星可解锁武器和皮肤。每当");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_RED);
gotoxy(62,23);
printf("分数达到整千时,你将升级,");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_RED);
gotoxy(62,25);
printf("升级后,子弹速度将会变快,");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_RED);
gotoxy(62,27);
printf("同时敌人也将变强");
}break;
case 5 :
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_RED);
gotoxy(62,17);
printf("游戏内置六张地图,第六关往");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_RED);
gotoxy(62,19);
printf("后将会出现系统的随机地图");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_RED);
gotoxy(62,21);
printf("友情提示:你自己的子弹都");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_RED);
gotoxy(62,23);
printf("无法对老家的围墙造成破坏");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_RED);
gotoxy(62,25);
printf(",但是可以对内部造成破坏");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_RED);
gotoxy(62,27);
printf(",因此别总把枪口对着老家");
}break;
case 6 :
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_BLUE|FOREGROUND_GREEN);
gotoxy(62,27);
printf("按空格键退出");
}break;
}
while(1)
{
if (32==getch()) a++;break;
}
if(a==7)break;
}
}
}
if(a==7)
{
screen_2("看完帮助 继续游戏吧",2);
screen_3();
break;
}
}
}
void check_game()
{
if(life==0)
gameover();
if(enemy==0)
next_level();
}
void next_level()
{
screen_1();
level++;
for(int i=15;i<29;i++)//先清屏
{
gotoxy(62,i);
printf(" ");
}
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);
gotoxy(62,17);
printf(" 恭喜过关 ");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);
gotoxy(62,23);
printf(" 按 空格键 继续游戏 ");
while(1)
{
if(32 == getch())
{
int home0[3][4]={{2,2,2,2},{2,1,1,2},{2,1,1,2}};//定义一个老家的初始化值
{
for(int i=0;i<5;i++)
info[i]=" ";//通知清零
}
{
for(int i=0;i<3;i++)//老家初始化
for(int j=0;j<4;j++)
home[i][j]=home0[i][j];
}
m=0 , n=0 ;//我的坦克子弹的坐标清零
m1=0 , n1=0;//坦克1号子弹的坐标清零
m2=0 , n2=0;//坦克2号子弹的坐标清零
m3=0 , n3=0;//坦克3号子弹的坐标清零
{
for(int i=1;i<29;i++)
for(int j=1;j<29;j++)
{
gotoxy(2*i,j);
printf(" ");
}
}
life=3;//生命初始化
enemy=13;//敌人数量初始化
s=0,t=0;//星星坐标
get_map();//获得地图
refresh_map();//刷新地图
print_home();//打印老家
print_thing();//打印物品
direction=0;//我的坦克子弹射向初始化
direction_1=0;//坦克1号子弹射向初始化
direction_2=0;//坦克2号子弹射向初始化
direction_3=0;//坦克3号子弹射向初始化
x=10;y=27;//我的坦克位置初始化
state=0;
turn_up(my_tank);//我的坦克方向初始化
x1=2;y1=2;//坦克1号位置初始化
state_1=0;
turn_down_1(tank_1);//坦克1号方向初始化
x2=14;y2=2;//坦克2号位置初始化
state_2=0;
turn_down_2(tank_2);//坦克2号方向初始化
x3=27;y3=2;//坦克3号位置初始化
state_3=0;
turn_down_3(tank_3);//坦克3号方向初始化
screen_1();
screen_2("游戏开始",4);
break;
}
}
}
void gameover()
{
for(int i=15;i<29;i++)//先清屏
{
gotoxy(62,i);
printf(" ");
}
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
gotoxy(62,17);
printf(" 游戏结束 ");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);
gotoxy(62,23);
printf(" 按 空格键 重新开始 ");
while(1)
{
if(32 == getch())
{
initial();
break;
}
}
}
void initial()
{
int home0[3][4]={{2,2,2,2},{2,1,1,2},{2,1,1,2}};//定义一个老家的初始化值
life=3;//生命初始化
enemy=13;//敌人数量初始化
level=1;//关卡初始化
weapons=1;//武器初始化
skin=1;//皮肤初始化
star=1;//星星初始化
s=0,t=0;//星星坐标
score=0;//分数初始化
lv=1;//等级初始化
speed=10;//速度初始化
{
for(int i=0;i<5;i++)
info[i]=" ";//通知清零
}
{
for(int i=0;i<3;i++)//老家初始化
for(int j=0;j<4;j++)
home[i][j]=home0[i][j];
}
m=0 , n=0 ;//我的坦克子弹的坐标清零
m1=0 , n1=0;//坦克1号子弹的坐标清零
m2=0 , n2=0;//坦克2号子弹的坐标清零
m3=0 , n3=0;//坦克3号子弹的坐标清零
{
for(int i=1;i<29;i++)
for(int j=1;j<29;j++)
{
gotoxy(2*i,j);
printf(" ");
}
}
get_map();//获得地图
refresh_map();//刷新地图
print_home();//打印老家
print_thing();//打印物品
direction=0;//我的坦克子弹射向初始化
direction_1=0;//坦克1号子弹射向初始化
direction_2=0;//坦克2号子弹射向初始化
direction_3=0;//坦克3号子弹射向初始化
x=10;y=27;//我的坦克位置初始化
state=0;
turn_up(my_tank);//我的坦克方向初始化
x1=2;y1=2;//坦克1号位置初始化
state_1=0;
turn_down_1(tank_1);//坦克1号方向初始化
x2=14;y2=2;//坦克2号位置初始化
state_2=0;
turn_down_2(tank_2);//坦克2号方向初始化
x3=27;y3=2;//坦克3号位置初始化
state_3=0;
turn_down_3(tank_3);//坦克3号方向初始化
screen_1();
screen_2("游戏开始",4);
screen_3();
}
新手守护
贪吃蛇
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <ctime>
#include <conio.h>
#include <cmath>
#include <windows.h>
using namespace std;
/*** 光标定位 ***/
HANDLE hout=GetStdHandle(STD_OUTPUT_HANDLE);
COORD coord;
void locate(int x,int y)
{
coord.X=y;
coord.Y=x;
SetConsoleCursorPosition(hout,coord);
};
/*** 隐藏光标 ***/
void hide()
{
CONSOLE_CURSOR_INFO cursor_info={1,0};
SetConsoleCursorInfo(hout, &cursor_info);
}
/*** 生成随机数 ***/
double random(double start, double end)
{
return start+(end-start)*rand()/(RAND_MAX + 1.0);
}
/*** 定义地图的长宽,蛇的坐标,长度,方向,食物的位置 ***/
int m,n;
struct node
{
int x,y;
}snake[1000];
int snake_length,dir;
node food;
int direct[4][2]={{-1,0},{1,0},{0,-1},{0,1}};
/*** 输出墙 ***/
void print_wall()
{
cout << " ";
for (int i=1;i<=n;i++)
cout << "-";
cout << endl;
for (int j=0;j<=m-1;j++)
{
cout << "|";
for (int i=1;i<=n;i++) cout << " ";
cout << "|" << endl;
}
cout << " ";
for (int i=1;i<=n;i++)
cout << "-";
}
/*** 首次输出蛇,其中snake[0]代表头 ***/
void print_snake()
{
locate(snake[0].x,snake[0].y);
cout << "#";
for (int i=1;i<=snake_length-1;i++)
{
locate(snake[i].x,snake[i].y);
//cout << "*";
}
}
/*** 判断是否撞墙或者自撞 ***/
bool is_correct()
{
if (snake[0].x==0 || snake[0].y==0 || snake[0].x==m+1 || snake[0].y==n+1) return false;
for (int i=1;i<=snake_length-1;i++)
{
if (snake[0].x==snake[i].x && snake[0].y==snake[i].y) return false;
}
return true;
}
/*** 随机生成并输出食物位置 ***/
bool print_food()
{
srand((unsigned)time(0));
bool e;
while (3)
{
e=true;
int i=(int) random(0,m)+1,j=(int) random(0,n)+1;
food.x=i;food.y=j;
for (int k=0;k<=snake_length-1;k++)
{
if (snake[k].x==food.x && snake[k].y==food.y)
{
e=false;break;
}
}
if (e) break;
}
locate(food.x,food.y);
cout << "$";
return true;
}
bool print_food2()
{
srand((unsigned)time(0));
bool e;
while (3)
{
e=true;
int i=(int) random(0,m)+1,j=(int) random(0,n)+1;
food.x=i;food.y=j;
for (int k=0;k<=snake_length-1;k++)
{
if (snake[k].x==food.x && snake[k].y==food.y)
{
e=false;break;
}
}
if (e) break;
}
locate(food.x,food.y);
cout << "$";
return true;
}
bool print_food3()
{
srand((unsigned)time(0));
bool e;
while (3)
{
e=true;
int i=(int) random(0,m)+1,j=(int) random(0,n)+1;
food.x=i;food.y=j;
for (int k=0;k<=snake_length-1;k++)
{
if (snake[k].x==food.x && snake[k].y==food.y)
{
e=false;break;
}
}
if (e) break;
}
locate(food.x,food.y);
cout << "$";
return true;
}
/*** 蛇的前进 ***/
bool go_ahead()
{
node temp;
bool e=false;
temp=snake[snake_length-1];
for (int i=snake_length-1;i>=1;i--)
snake[i]=snake[i-1];
snake[0].x+=direct[dir][0];
snake[0].y+=direct[dir][1];
locate(snake[1].x,snake[1].y);
cout << "*";
/*** 吃到了食物 ***/
if (snake[0].x==food.x && snake[0].y==food.y)
{
snake_length++;
e=true;
snake[snake_length-1]=temp;
}
/*** 输出此时蛇状态 ***/
if (!e)
{
locate(temp.x,temp.y);
cout << " ";
}
else
{print_food();
print_food2();
print_food3();
}
locate(snake[0].x,snake[0].y);
cout << "@";
/*** 如果自撞 ***/
if (!is_correct())
{
system("cls");
cout << "You lose!" << endl << "Length: " << snake_length << endl;
return false;
}
return true;
}
/*** 主函数 ***/
int main()
{
cout << "--------------------贪吃蛇---------------------" << endl;
cout << "请先输入两个数,表示地图大小.要求长宽均不小于10." << endl;
cout << "请注意窗口大小,以免发生错位.建议将窗口调为最大." << endl;
cout << "再选择难度.请在1-10中输入1个数,1最简单,10则最难" << endl;
cout << "然后进入游戏画面,以方向键控制方向.祝你游戏愉快!" << endl;
cout << "-----------------------------------------------" << endl;
cin >> m >> n;
if (m<1 || n<1 || m>400 || n>600)
{
cout << "ERROR" << endl;
system("pause");
return 0;
}
int hard;
cin >> hard;
if (hard<=0 || hard>100)
{
cout << "ERROR" << endl;
system("pause");
return 0;
}
/*** 数据全部初始化,包括蛇长,位置,方向 ***/
snake_length=10;
clock_t a,b;
char ch;
double hard_len;
for (int i=0;i<=4;i++)
{
snake[i].x=1;
snake[i].y=5-i;
}
dir=3;
/*** 输出初始地图,蛇与食物 ***/
system("cls");
hide();
print_wall();
print_food();
print_snake();
locate(m+2,0);
cout << "Now length: ";
/*** 开始游戏 ***/
while (1)
{
/*** 难度随长度增加而提高 ***/
hard_len=(double)snake_length/(double) (m*n);
/*** 调节时间,单位是ms ***/
a=clock();
while (1)
{
b=clock();
if (b-a>=(int)(400-30*hard)*(1-sqrt(hard_len))) break;
}
/*** 接受键盘输入的上下左右,并以此改变方向 ***/
if (kbhit())
{
ch=getch();
if (ch==-32)
{
ch=getch();
switch(ch)
{
case 72:
if (dir==2 || dir==3)
dir=0;
break;
case 80:
if (dir==2 || dir==3)
dir=1;
break;
case 75:
if (dir==0 || dir==1)
dir=2;
break;
case 77:
if (dir==0 || dir==1)
dir=3;
break;
}
}
}
/*** 前进 ***/
if (!go_ahead()) break;
/*** 在最后输出此时长度 ***/
locate(m+2,12);
cout << snake_length;
}
system("pause");
return 0;
}
新手守护
#include<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 控制战机移动。";
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<<"制作:五八最帅!";
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)制作:五八最帅!";
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();
}