C++简单项目--推箱子-LMLPHP

在处理移动的时候有太多种情况了:

1、有空位

2、在推箱子,推到了空地

3、推箱子推到了目标,

4、推目标位的箱子推到另一个目标

5、推目标位的箱子推到空地

首先记录目标位置,在每次推动之后会再绘画中自动修正目标位置的情况

C++简单项目--推箱子-LMLPHP

修改地图之后发现不能将上述情况的5实现,还要再改。

C++简单项目--推箱子-LMLPHP

C++简单项目--推箱子-LMLPHP

接下来应该尝试如何实现多个关卡或者从文件中读取地图信息

#include<iostream>
#include<graphics.h>
#include<conio.h>
#include<vector>
using namespace std;
//0空白,1墙,2人,3箱子,4目标,5箱子与目标,6人与目标
int x, y,temp;
vector<int>goalx, goaly;
int mapp[][] = {,,,,, ,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,,, ,
,,,,, ,,,,,,,,,,,,,,,, ,,,, ,,, ,,,, ,,,, ,,, ,
,,,,,,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,,
,,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,, ,
,,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,, ,
,,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,, ,
,,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,, ,
,,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,, ,
,,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,, ,
,,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,, ,
,,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,, ,
,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,, ,
,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,, ,
,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,, ,
,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,, ,
,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,, ,
,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,, ,
,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,, ,
,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,, ,
,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,, ,
,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,, ,
,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,, ,
,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,, ,
,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,, ,
,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,, ,
,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,, ,
,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,, ,
,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,, ,
,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,, ,
,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,,
};
void scann() {
int i, j;
for (i = ; i < ; i++) {
for (j = ; j < ; j++) {
if (mapp[i][j] >= ) {
goalx.push_back(i);
goaly.push_back(j);
}
}
}
}
void drawmapp() {
int i, j,k;
for (i = ; i < ; i++) {
for (j = ; j < ; j++) {
for (k = ; k < goalx.size(); k++) {
if (i == goalx[k] && j == goaly[k]) {
if (mapp[i][j] == ) {
mapp[i][j] = ;
}
if (mapp[i][j] == ) {
mapp[i][j] = ;
}
if (mapp[i][j] == ) {
mapp[i][j] = ;
} }
}
switch (mapp[i][j]) {
case :
setlinecolor(RGB(,,));
setfillcolor(RGB(, , ));
fillrectangle(j * , i * , j * + , i * + );
break;
case :
x = i;
y = j;
setlinecolor(RGB(, , ));
setfillcolor(RGB(, , ));
fillrectangle(j * , i * , j * + , i * + );
break;
case :
setlinecolor(RGB(, , ));
setfillcolor(RGB(, , ));
fillrectangle(j * , i * , j * + , i * + );
break;
case :
setlinecolor(RGB(, , ));
setfillcolor(RGB(, , ));
fillrectangle(j * , i * , j * + , i * + );
break;
case :
setlinecolor(RGB(, , ));
setfillcolor(RGB(, , ));
fillrectangle(j * , i * , j * + , i * + );
break;
case :
x = i;
y = j;
setlinecolor(RGB(, , ));
setfillcolor(RGB(, , ));
fillrectangle(j * , i * , j * + , i * + );
break;
}
}
}
}
void keyDown() {
char ch = '\0';
ch = _getch();
switch (ch)
{
case 'w':
case 'W':
if (mapp[x - ][y] == ) {
temp = mapp[x][y];
mapp[x][y] = mapp[x - ][y];
mapp[x - ][y] =;
}
if (mapp[x - ][y] == ) {
mapp[x][y] = ;
mapp[x - ][y] = ;
}
if (mapp[x - ][y] == && mapp[x-][y]==) {
mapp[x-][y] = ;
mapp[x - ][y] = ;
mapp[x][y] = ;
}
if (mapp[x - ][y] == && mapp[x - ][y] == ) {
mapp[x - ][y] = ;
mapp[x - ][y] = ;
mapp[x][y] = ;
}
if (mapp[x - ][y] == && mapp[x - ][y] == ) {
mapp[x - ][y] = ;
mapp[x - ][y] = ;
mapp[x][y] = ;
}
if (mapp[x - ][y] == && mapp[x - ][y] == ) {
mapp[x - ][y] = ;
mapp[x - ][y] = ;
mapp[x][y] = ;
} break;
case 'a':
case 'A':
if (mapp[x][y-] == ) {
temp = mapp[x][y];
mapp[x][y] = mapp[x][y-];
mapp[x][y-] =;
}
if (mapp[x][y-] == ) {
mapp[x][y] = ;
mapp[x][y-] = ;
}
if (mapp[x][y-] == && mapp[x][y-] == ) {
mapp[x][y-] = ;
mapp[x][y-] = ;
mapp[x][y] = ;
}
if (mapp[x][y - ] == && mapp[x][y - ] == ) {
mapp[x][y - ] = ;
mapp[x][y - ] = ;
mapp[x][y] = ;
}
if (mapp[x][y - ] == && mapp[x][y - ] == ) {
mapp[x][y - ] = ;
mapp[x][y - ] = ;
mapp[x][y] = ;
}
if (mapp[x][y - ] == && mapp[x][y - ] ==) {
mapp[x][y - ] = ;
mapp[x][y - ] = ;
mapp[x][y] = ;
}
break;
case 's':
case 'S':
if (mapp[x + ][y] == ) {
temp = mapp[x][y];
mapp[x][y] = mapp[x + ][y];
mapp[x + ][y] =;
}
if (mapp[x + ][y] == ) {
mapp[x][y] = ;
mapp[x + ][y] = ;
}
if (mapp[x + ][y] == && mapp[x + ][y] == ) {
mapp[x + ][y] = ;
mapp[x + ][y] = ;
mapp[x][y] = ;
}
if (mapp[x + ][y] == && mapp[x + ][y] == ) {
mapp[x + ][y] = ;
mapp[x + ][y] = ;
mapp[x][y] = ;
}
if (mapp[x + ][y] == && mapp[x + ][y] == ) {
mapp[x + ][y] = ;
mapp[x + ][y] = ;
mapp[x][y] = ;
}
if (mapp[x + ][y] == && mapp[x + ][y] == ) {
mapp[x + ][y] = ;
mapp[x + ][y] = ;
mapp[x][y] = ;
}
break;
case 'd':
case 'D':
if (mapp[x][y+] == ) {
mapp[x][y] = mapp[x][y+];
mapp[x][y+] =;
}
if (mapp[x][y+] == ) {
mapp[x][y] = ;
mapp[x][y+] = ;
}
if (mapp[x][y+] == && mapp[x][y+] == ) {
mapp[x][y+] = ;
mapp[x][y+] = ;
mapp[x][y] = ;
}
if (mapp[x][y + ] == && mapp[x][y + ] == ) {
mapp[x][y + ] = ;
mapp[x][y + ] = ;
mapp[x][y] = ;
}
if (mapp[x][y + ] == && mapp[x][y + ] == ) {
mapp[x][y + ] = ;
mapp[x][y + ] = ;
mapp[x][y] = ;
}
if (mapp[x][y + ] == && mapp[x][y + ] ==) {
mapp[x][y + ] = ;
mapp[x][y + ] = ;
mapp[x][y] = ;
}
break;
default:
break;
}
}
int main() {
int kl;
bool checkk;
HWND hwnd=initgraph(, );
setbkcolor(RGB(,,));
cleardevice();
drawmapp();
scann();
while (true) {
checkk = true;
settextcolor(BLACK);
outtextxy(, , "WASD控制");
keyDown();
cleardevice();
drawmapp();
for (kl = ; kl < goalx.size(); kl++) {
if (mapp[goalx[kl]][goaly[kl]] != ) checkk = false;
}
if (checkk) {
MessageBox(hwnd, "Finish", "Finish!", );
break;
}
}
system("pause");
return ; }
05-28 13:52