#include <stdio.h>
#include <algorithm>
#include <conio.h>
#include <tchar.h>
#include <Windows.h>
#include <stdbool.h>
typedef struct location {
int x;
int y;
}MAPLOCATION;
MAPLOCATION location = { -1, -1 };
typedef struct dastination {
int x;
int y;
}dastination;
dastination DStion[100] = { 0 };
int DESTINATION = 0;
int customs = 1;
int MAP[23][10] =
{
{0, 1, 1, 1, 1, 1, 1, 1, 0, 0},
{0, 1, 0, 0, 0, 0, 0, 1, 1, 1},
{1, 1, 3, 1, 1, 1, 0, 0, 0, 1},
{1, 4, 0, 0, 3, 0, 0, 3, 0, 1},
{1, 0, 2, 2, 1, 0, 3, 0, 1, 1},
{1, 1, 2, 2, 1, 0, 0, 0, 1, 0},
{0, 1, 1, 1, 1, 1, 1, 1, 1, 0},
{0, 0, 1, 1, 1, 1, 0, 0, 0, 0},
{0, 0, 1, 4, 0, 1, 1, 1, 0, 0},
{0, 0, 1, 0, 3, 0, 0, 1, 0, 0},
{0, 1, 1, 1, 0, 1, 0, 1, 1, 0},
{0, 1, 2, 1, 0, 1, 0, 0, 1, 0},
{0, 1, 2, 3, 0, 0, 1, 0, 1, 0},
{0, 1, 2, 0, 0, 0, 3, 0, 1, 0},
{0, 1, 1, 1, 1, 1, 1, 1, 1, 0},
{0, 0, 0, 1, 1, 1, 1, 1, 1, 1},
{0, 0, 1, 1, 0, 0, 1, 0, 4, 1},
{0, 0, 1, 0, 0, 0, 1, 0, 0, 1},
{0, 0, 1, 3, 0, 3, 0, 3, 0, 1},
{0, 0, 1, 0, 3, 1, 1, 0, 0, 1},
{1, 1, 1, 0, 3, 0, 1, 0, 1, 1},
{1, 2, 2, 2, 2, 2, 0, 0, 1, 0},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 0}
};
void Swap(int *a, int *b);
void map();
void GetLocation();
void Getdastination();
void UP();
void below();
void left();
void right();
int main() {
int next;
char KEY;
int flag = 0;
next:Getdastination();
while (1) {
GetLocation();
map();
if (flag == DESTINATION) {
break;
}
flag = 0;
KEY = _getch();
switch (KEY) {
case 'w': case 'W':
UP();
break;
case 's': case 'S':
below();
break;
case 'a': case 'A':
left();
break;
case 'd': case 'D':
right();
break;
}
for (int i = 0; i < DESTINATION; i++) {
if (MAP[DStion[i].x][DStion[i].y] == 3) {
flag++;
}
}
}
printf("恭喜通关!\n");
customs++;
DESTINATION = 0;
flag = 0;
system("pause");
goto next;
return 0;
}
void map() {
system("CLS");
if (customs == 1) {
for (int i = 0; i < 7; i++) {
for (int j = 0; j < 10; j++) {
switch (MAP[i][j]) {
case 0:
printf(" ");
break;
case 1:
printf("■");
break;
case 2:
printf("○");
break;
case 3:
printf("□");
break;
case 4:
printf("♀");
break;
}
}
printf("\n");
}
}
if (customs == 2) {
for (int i = 7; i < 15; i++) {
for (int j = 0; j < 10; j++) {
switch (MAP[i][j]) {
case 0:
printf(" ");
break;
case 1:
printf("■");
break;
case 2:
printf("○");
break;
case 3:
printf("□");
break;
case 4:
printf("♀");
break;
}
}
printf("\n");
}
}
if (customs == 3) {
for (int i = 15; i < 23; i++) {
for (int j = 0; j < 10; j++) {
switch (MAP[i][j]) {
case 0:
printf(" ");
break;
case 1:
printf("■");
break;
case 2:
printf("○");
break;
case 3:
printf("□");
break;
case 4:
printf("♀");
break;
}
}
printf("\n");
}
}
}
void Swap(int *a, int *b) {
int c;
c = *a;
*a = *b;
*b = c;
}
void GetLocation() {
if (customs == 1) {
for (int i = 0; i < 7; i++) {
for (int j = 0; j < 10; j++) {
if (MAP[i][j] == 4) {
location.x = i;
location.y = j;
}
}
}
}
if (customs == 2) {
for (int i = 7; i < 15; i++) {
for (int j = 0; j < 10; j++) {
if (MAP[i][j] == 4) {
location.x = i;
location.y = j;
}
}
}
}
if (customs == 3) {
for (int i = 15; i < 23; i++) {
for (int j = 0; j < 10; j++) {
if (MAP[i][j] == 4) {
location.x = i;
location.y = j;
}
}
}
}
}
void Getdastination() {
if (customs == 1) {
for (int i = 0; i < 7; i++) {
for (int j = 0; j < 10; j++) {
if (MAP[i][j] == 2) {
DStion[DESTINATION].x = i;
DStion[DESTINATION].y = j;
DESTINATION++;
}
}
}
}
if (customs == 2) {
for (int i = 7; i < 15; i++) {
for (int j = 0; j < 10; j++) {
if (MAP[i][j] == 2) {
DStion[DESTINATION].x = i;
DStion[DESTINATION].y = j;
DESTINATION++;
}
}
}
}
if (customs == 3) {
for (int i = 15; i < 23; i++) {
for (int j = 0; j < 10; j++) {
if (MAP[i][j] == 2) {
DStion[DESTINATION].x = i;
DStion[DESTINATION].y = j;
DESTINATION++;
}
}
}
}
}
void UP() {
int flag = true;
for (int i = 0; i < DESTINATION; i++) {
if (location.x == DStion[i].x && location.y == DStion[i].y) {
flag = false;
break;
}
}
if (flag) {
if (MAP[location.x - 1][location.y] == 0 || MAP[location.x - 1][location.y] == 2) {
if (MAP[location.x - 1][location.y] == 0)
Swap(&MAP[location.x - 1][location.y], &MAP[location.x][location.y]);
else {
MAP[location.x][location.y] = 0;
MAP[location.x - 1][location.y] = 4;
}
return;
}
if (MAP[location.x - 1][location.y] == 3 && (MAP[location.x - 2][location.y] == 0 || MAP[location.x - 2][location.y] == 2)) {
if (MAP[location.x - 2][location.y] == 0) {
MAP[location.x][location.y] = 0;
MAP[location.x - 1][location.y] = 4;
MAP[location.x - 2][location.y] = 3;
}
else {
MAP[location.x][location.y] = 0;
MAP[location.x - 1][location.y] = 4;
MAP[location.x - 2][location.y] = 3;
}
}
}
else {
if (MAP[location.x - 1][location.y] == 0 || MAP[location.x - 1][location.y] == 2) {
if (MAP[location.x - 1][location.y] == 0) {
MAP[location.x][location.y] = 2;
MAP[location.x - 1][location.y] = 4;
}
else {
Swap(&MAP[location.x - 1][location.y], &MAP[location.x][location.y]);
}
return;
}
if (MAP[location.x - 1][location.y] == 3 && (MAP[location.x - 2][location.y] == 0 || MAP[location.x - 2][location.y] == 2)) {
if (MAP[location.x - 2][location.y] == 0) {
MAP[location.x][location.y] = 2;
MAP[location.x - 1][location.y] = 4;
MAP[location.x - 2][location.y] = 3;
}
else {
MAP[location.x][location.y] = 2;
MAP[location.x - 1][location.y] = 4;
MAP[location.x - 2][location.y] = 3;
}
}
}
}
void below() {
int flag = true;
for (int i = 0; i < DESTINATION; i++) {
if (location.x == DStion[i].x && location.y == DStion[i].y) {
flag = false;
break;
}
}
if (flag) {
if (MAP[location.x + 1][location.y] == 0 || MAP[location.x + 1][location.y] == 2) {
if (MAP[location.x + 1][location.y] == 0)
Swap(&MAP[location.x + 1][location.y], &MAP[location.x][location.y]);
else {
MAP[location.x][location.y] = 0;
MAP[location.x + 1][location.y] = 4;
}
return;
}
if (MAP[location.x + 1][location.y] == 3 && (MAP[location.x + 2][location.y] == 0 || MAP[location.x + 2][location.y] == 2)) {
if (MAP[location.x + 2][location.y] == 0) {
MAP[location.x][location.y] = 0;
MAP[location.x + 1][location.y] = 4;
MAP[location.x + 2][location.y] = 3;
}
else {
MAP[location.x][location.y] = 0;
MAP[location.x + 1][location.y] = 4;
MAP[location.x + 2][location.y] = 3;
}
}
}
else {
if (MAP[location.x + 1][location.y] == 0 || MAP[location.x + 1][location.y] == 2) {
if (MAP[location.x + 1][location.y] == 0) {
MAP[location.x][location.y] = 2;
MAP[location.x + 1][location.y] = 4;
}
else {
Swap(&MAP[location.x + 1][location.y], &MAP[location.x][location.y]);
}
return;
}
if (MAP[location.x + 1][location.y] == 3 && (MAP[location.x + 2][location.y] == 0 || MAP[location.x + 2][location.y] == 2)) {
if (MAP[location.x + 2][location.y] == 0) {
MAP[location.x][location.y] = 2;
MAP[location.x + 1][location.y] = 4;
MAP[location.x + 2][location.y] = 3;
}
else {
MAP[location.x][location.y] = 2;
MAP[location.x + 1][location.y] = 4;
MAP[location.x + 2][location.y] = 3;
}
}
}
}
void left() {
int flag = true;
for (int i = 0; i < DESTINATION; i++) {
if (location.x == DStion[i].x && location.y == DStion[i].y) {
flag = false;
break;
}
}
if (flag) {
if (MAP[location.x][location.y - 1] == 0 || MAP[location.x][location.y - 1] == 2) {
if (MAP[location.x][location.y - 1] == 0)
Swap(&MAP[location.x][location.y - 1], &MAP[location.x][location.y]);
else {
MAP[location.x][location.y] = 0;
MAP[location.x][location.y-1] = 4;
}
return;
}
if (MAP[location.x][location.y - 1] == 3 && (MAP[location.x][location.y - 2] == 0 || MAP[location.x][location.y - 2] == 2)) {
if (MAP[location.x][location.y - 2] == 0) {
MAP[location.x][location.y] = 0;
MAP[location.x][location.y - 1] = 4;
MAP[location.x][location.y - 2] = 3;
}
else {
MAP[location.x][location.y] = 0;
MAP[location.x][location.y - 1] = 4;
MAP[location.x][location.y - 2] = 3;
}
}
}
else {
if (MAP[location.x][location.y - 1] == 0 || MAP[location.x][location.y - 1] == 2) {
if (MAP[location.x][location.y - 1] == 0) {
MAP[location.x][location.y] = 2;
MAP[location.x][location.y - 1] = 4;
}
else {
Swap(&MAP[location.x][location.y - 1], &MAP[location.x][location.y]);
}
return;
}
if (MAP[location.x][location.y - 1] == 3 && (MAP[location.x][location.y - 2] == 0 || MAP[location.x][location.y - 2] == 2)) {
if (MAP[location.x][location.y - 2] == 0) {
MAP[location.x][location.y] = 2;
MAP[location.x][location.y - 1] = 4;
MAP[location.x][location.y - 2] = 3;
}
else {
MAP[location.x][location.y] = 2;
MAP[location.x][location.y - 1] = 4;
MAP[location.x][location.y - 2] = 3;
}
}
}
}
void right() {
int flag = true;
for (int i = 0; i < DESTINATION; i++) {
if (location.x == DStion[i].x && location.y == DStion[i].y) {
flag = false;
break;
}
}
if (flag) {
if (MAP[location.x][location.y + 1] == 0 || MAP[location.x][location.y + 1] == 2) {
if (MAP[location.x][location.y + 1] == 0)
Swap(&MAP[location.x][location.y + 1], &MAP[location.x][location.y]);
else {
MAP[location.x][location.y] = 0;
MAP[location.x][location.y + 1] = 4;
}
return;
}
if (MAP[location.x][location.y + 1] == 3 && (MAP[location.x][location.y + 2] == 0 || MAP[location.x][location.y + 2] == 2)) {
if (MAP[location.x][location.y + 2] == 0) {
MAP[location.x][location.y] = 0;
MAP[location.x][location.y + 1] = 4;
MAP[location.x][location.y + 2] = 3;
}
else {
MAP[location.x][location.y] = 0;
MAP[location.x][location.y + 1] = 4;
MAP[location.x][location.y + 2] = 3;
}
}
}
else {
if (MAP[location.x][location.y + 1] == 0 || MAP[location.x][location.y + 1] == 2) {
if (MAP[location.x][location.y + 1] == 0) {
MAP[location.x][location.y] = 2;
MAP[location.x][location.y + 1] = 4;
}
else {
Swap(&MAP[location.x][location.y + 1], &MAP[location.x][location.y]);
}
return;
}
if (MAP[location.x][location.y + 1] == 3 && (MAP[location.x][location.y + 2] == 0 || MAP[location.x][location.y + 2] == 2)) {
if (MAP[location.x][location.y + 2] == 0) {
MAP[location.x][location.y] = 2;
MAP[location.x][location.y + 1] = 4;
MAP[location.x][location.y + 2] = 3;
}
else {
MAP[location.x][location.y] = 2;
MAP[location.x][location.y + 1] = 4;
MAP[location.x][location.y + 2] = 3;
}
}
}
}
|