游戏名称
推箱子小游戏
游戏玩法
请见游戏进行是提示
不说了,上代码~~~
源码
#include<bits/stdc++.h>
#include<conio.h>
#include <windows.h>
using namespace std;
void op(HANDLE hout);
void tishi(HANDLE hout);
void gotoxy(HANDLE hout, int x, int y);
int newmp(HANDLE hout);
void Move(HANDLE hout);
int finish();
void setmap(int n);
void color(int m);
bool flag = true;
int pass = 1;
#define R 10
#define C 10
#define framex 20
#define framey 14
int mp[R][C];
int map1[R][C] = { //图1
{ 0, 0, 1, 1, 1, 0, 0, 0 },
{ 0, 0, 1, 3, 1, 0, 0, 0 },
{ 0, 0, 1, 0, 1, 1, 1, 1 },
{ 1, 1, 1, 0, 0, 4, 3, 1 },
{ 1, 3, 4, 4, 0, 1, 1, 1 },
{ 1, 1, 1, 5, 4, 1, 0, 0 },
{ 0, 0, 0, 1, 3, 1, 0, 0 },
{ 0, 0, 0, 1, 1, 1, 0, 0 }
};
int map2[R][C] = { //图2
{1, 1, 1, 1, 1, 0, 0, 0, 0, 0},
{1, 5, 0, 0, 1, 0, 0, 0, 0, 0},
{1, 0, 4, 4, 1, 0, 1, 1, 1, 0},
{1, 0, 4, 0, 1, 0, 1, 3, 1, 0},
{1, 1, 1, 0, 1, 1, 1, 3, 1, 0},
{0, 1, 1, 0, 0, 0, 0, 3, 1, 0},
{0, 1, 0, 0, 0, 1, 0, 0, 1, 0},
{0, 1, 0, 0, 0, 1, 1, 1, 1, 0},
{0, 1, 1, 1, 1, 1, 0, 0, 0, 0}
};
int map3[R][C] = { //图3
{ 0, 0, 0, 1, 1, 1, 1, 1, 1, 1 },
{ 0, 0, 1, 1, 0, 0, 1, 0, 5, 1 },
{ 0, 0, 1, 0, 0, 0, 1, 0, 0, 1 },
{ 0, 0, 1, 4, 0, 4, 0, 4, 0, 1 },
{ 0, 0, 1, 0, 4, 1, 1, 0, 0, 1 },
{ 1, 1, 1, 0, 4, 0, 1, 0, 1, 1 },
{ 1, 3, 3, 3, 3, 3, 0, 0, 1, 0 },
{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 },
};
void op(HANDLE hout) { //初始菜单
system("cls");//任意键输入
gotoxy(hout, framex, 1);
cout << "*********************";
gotoxy(hout, framex, 3);
cout << " 推箱子 ";
gotoxy(hout, framex, 5);
cout << " 按s开始 ";
gotoxy(hout, framex, 7);
cout << " 按q或Q退出 ";
gotoxy(hout, framex, 9);
cout << "游戏前请开启英文输入 ";
gotoxy(hout, framex, 11);
cout << "**********************";
_getch();
};
void tishi(HANDLE hout) { //提示操作
system("cls");
gotoxy(hout, framex, 1);
cout << "*****************************";
gotoxy(hout, framex, 3);
cout << " 按方向键上下左右移动 ";
gotoxy(hout, framex, 5);
cout << " 所有箱子到达目的地游戏胜利 ";
gotoxy(hout, framex, 7);
cout << " 按q退出 ";
gotoxy(hout, framex, 9);
cout << "*****************************";
};
void gotoxy(HANDLE hout, int x, int y) { //移动
COORD pos;
pos.X = x;
pos.Y = y;
SetConsoleCursorPosition(hout, pos);
};
void print(int i) {
switch (i) {
case 0:
color(0x7);
cout << " ";
break;
case 1:
color(8);
cout << "■";
break;
case 3:
color(0xE);
cout << "◇";
break;
case 4:
color(4);
cout << "□";
break;
case 5:
color(3);
cout << "♀";
break;
case 7:
color(6);
cout << "◆";
break;
case 8:
color(3);
cout << "♀";
break;
default:
break;
}
}
int newmp(HANDLE hout) { //加载新地图
gotoxy(hout, framex + C, framey - 3);
color(0xF);
cout << "第" << pass << "关";
for (int i = 0; i < R; i++) {
gotoxy(hout, framex, framey + i);
for (int j = 0; j < C; j++) {
print(mp[i][j]);
}
}
return 0;
};
void Move(HANDLE hout) { //移动自己
int x = 0, y = 0;
for (int i = 0; i < R; i++) {
for (int j = 0; j < C; j++) {
if (mp[i][j] == 5 || mp[i][j] == 8) {
x = i;
y = j;
break;
}
}
}
gotoxy(hout, framex, framey + R);
color(0xF);
printf("当前位置:(%d, %d)", x, y);
int ch = _getch();
switch (ch) {
case 'w':
case 72:
if (mp[x - 1][y] == 0 || mp[x - 1][y] == 3) {
mp[x][y] -= 5;
gotoxy(hout, framex + 2 * y, framey + x);
print(mp[x][y]);
mp[x - 1][y] += 5;
gotoxy(hout, framex + 2 * y, framey + x - 1);
print(mp[x - 1][y]);
} else if (mp[x - 1][y] == 4 || mp[x - 1][y] == 7) {
if (mp[x - 2][y] == 0 || mp[x - 2][y] == 3) {
mp[x][y] -= 5;
gotoxy(hout, framex + 2 * y, framey + x);
print(mp[x][y]);
mp[x - 1][y] += 1;
gotoxy(hout, framex + 2 * y, framey + x - 1);
print(mp[x - 1][y]);
mp[x - 2][y] += 4;
gotoxy(hout, framex + 2 * y, framey + x - 2);
print(mp[x - 2][y]);
}
}
break;
case 's':
case 80:
if (mp[x + 1][y] == 0 || mp[x + 1][y] == 3) {
mp[x][y] -= 5;
gotoxy(hout, framex + 2 * y, framey + x);
print(mp[x][y]);
mp[x + 1][y] += 5;
gotoxy(hout, framex + 2 * y, framey + x + 1);
print(mp[x + 1][y]);
} else if (mp[x + 1][y] == 4 || mp[x + 1][y] == 7) {
if (mp[x + 2][y] == 0 || mp[x + 2][y] == 3) {
mp[x][y] -= 5;
gotoxy(hout, framex + 2 * y, framey + x);
print(mp[x][y]);
mp[x + 1][y] += 1;
gotoxy(hout, framex + 2 * y, framey + x + 1);
print(mp[x + 1][y]);
mp[x + 2][y] += 4;
gotoxy(hout, framex + 2 * y, framey + x + 2);
print(mp[x + 2][y]);
}
}
break;
case 'a':
case 75:
if (mp[x][y - 1] == 0 || mp[x][y - 1] == 3) {
mp[x][y] -= 5;
gotoxy(hout, framex + 2 * y, framey + x);
print(mp[x][y]);
mp[x][y - 1] += 5;
gotoxy(hout, framex + 2 * y - 2, framey + x);
print(mp[x][y - 1]);
} else if (mp[x][y - 1] == 4 || mp[x][y - 1] == 7) {
if (mp[x][y - 2] == 0 || mp[x][y - 2] == 3) {
mp[x][y] -= 5;
gotoxy(hout, framex + 2 * y, framey + x);
print(mp[x][y]);
mp[x][y - 1] += 1;
gotoxy(hout, framex + 2 * y - 2, framey + x);
print(mp[x][y - 1]);
mp[x][y - 2] += 4;
gotoxy(hout, framex + 2 * y - 4, framey + x);
print(mp[x][y - 2]);
}
}
break;
case 'd':
case 77:
if (mp[x][y + 1] == 0 || mp[x][y + 1] == 3) {
mp[x][y] -= 5;
gotoxy(hout, framex + 2 * y, framey + x);
print(mp[x][y]);
mp[x][y + 1] += 5;
gotoxy(hout, framex + 2 * y + 2, framey + x);
print(mp[x][y + 1]);
} else if (mp[x][y + 1] == 4 || mp[x][y + 1] == 7) {
if (mp[x][y + 2] == 0 || mp[x][y + 2] == 3) {
mp[x][y] -= 5;
gotoxy(hout, framex + 2 * y, framey + x);
print(mp[x][y]);
mp[x][y + 1] += 1;
gotoxy(hout, framex + 2 * y + 2, framey + x);
print(mp[x][y + 1]);
mp[x][y + 2] += 4;
gotoxy(hout, framex + 2 * y + 4, framey + x);
print(mp[x][y + 2]);
}
}
break;
case 'q':
flag = false;
default:
break;
}
};
int finish() { //结束游戏
for (int i = 0; i < R; i++) {
for (int j = 0; j < C; j++) {
if (mp[i][j] == 4) {
return 0;
}
}
}
return 1;
};
void setmap(int n) {
switch (n) {
case 1:
memcpy(mp, map1, sizeof(map1));
break;
case 2:
memcpy(mp, map2, sizeof(map2));
break;
case 3:
memcpy(mp, map3, sizeof(map3));
break;
}
};
void color(int m)
{
HANDLE consolehend;
consolehend = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(consolehend, m);
};
int main() {
HANDLE hout = GetStdHandle(STD_OUTPUT_HANDLE);
op(hout);
char ch = getch();
setmap(pass);
tishi(hout);
newmp(hout);
if (ch == 'q') {
return 0;
}
while (flag==1) {
Move(hout);
if (finish()) {
newmp(hout);
gotoxy(hout, framex, framey + R);
cout << " 恭喜,成功过关!";
gotoxy(hout, framex, framey + R + 2);
cout << "重玩(R)";
ch = getch();
system("cls");
pass++;
if (ch == 'r' || ch == 'R')pass--;
if (pass > 3) {
gotoxy(hout, framex, framey);
cout << " 您已通过全部关卡!";
getch();
flag = false;
} else {
setmap(pass);
tishi(hout);
newmp(hout);
}
}
}
return 0;
}