终于,经历了千辛万苦,我终于写出了人机(一个ZZ,能把自己闷在炸弹堆里)…
这个代码打得有些仓促,有问题请在评论区留言。

经典模式(1.0)

CodeCodeCode

#include <bits/stdc++.h>
#include <windows.h>
#include <conio.h>
#include <queue>
#include <utility>
using namespace std;const int M = 1e3 + 5;
int wall[15][15] = {{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},{0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},{0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1},{0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1},{0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1},{0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1},{0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1},{0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1},{0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1},{0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1},{0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1},{0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1},{0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}};
int block[15][15] = {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0},{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},{0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0},{0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0},{0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0},{0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0},{0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0},{0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0},{0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0},{0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 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, 0, 0, 0},{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
int thing[M][M];
int num, start;
int last;int wa[15][15] = {{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},{0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},{0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1},{0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1},{0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1},{0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1},{0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1},{0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1},{0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1},{0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1},{0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1},{0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1},{0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}};
int bl[15][15] = {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0},{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},{0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0},{0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0},{0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0},{0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0},{0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0},{0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0},{0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0},{0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 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, 0, 0, 0},{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};void stop() {for (int i = 2; i <= 5; i ++) {system("pause");}
}void put(char *p) {while(1) {if(*p != 0)printf("%c", *p ++);elsebreak;Sleep(20);}
}struct player{int x, y;int bown;int nom_bown;int time;int life;int fire;
}a[M];struct bown{int x, y;int time;int from;
}b[M];bool bow(int x, int y) {for(int i = start; i <= num && num != 0; i ++) {if(b[i].x == x && b[i].y == y) return true;}return false;
}void put_map() {system("cls");for(int i = 0; i <= 15; i ++) {for(int j = 0; j <= 15; j ++) {if(a[1].x == i && a[1].y == j) printf("①");else if(a[2].x == i && a[2].y == j) printf("②");else if(a[3].x == i && a[3].y == j) printf("③");else if (wall[i][j] == 1) printf("■");else if(block[i][j] == 1) printf("☆");else if(bow(i, j)) printf("●");else if(thing[i][j] == 1) printf("∷");else if(thing[i][j] == 2) printf("▓");else if(thing[i][j] == 3) printf("※");else if(thing[i][j] == 4) printf("◆");else printf("  ");}puts("");}printf("玩家一 生命值 %d  %d● %d级炸弹 爆炸时间 %dms\n", a[1].life, a[1].bown - a[1].nom_bown, a[1].fire, a[1].time);printf("玩家二 生命值 %d  %d● %d级炸弹 爆炸时间 %dms\n", a[2].life, a[2].bown - a[2].nom_bown, a[2].fire, a[2].time);printf("玩家三 生命值 %d  %d● %d级炸弹 爆炸时间 %dms\n", a[3].life, a[3].bown - a[3].nom_bown, a[3].fire, a[3].time);
}void in_to() {char c = getch();if(c == -32) {c = getch();if(c == 72 && block[a[1].x - 1][a[1].y] == 0 && wall[a[1].x - 1][a[1].y] == 0 && bow(a[1].x - 1, a[1].y) == false && a[1].life > 0) {-- a[1].x;}if(c == 80 && block[a[1].x + 1][a[1].y] == 0 && wall[a[1].x + 1][a[1].y] == 0 && bow(a[1].x + 1, a[1].y) == false && a[1].life > 0) {++ a[1].x;}if(c == 75 && block[a[1].x][a[1].y - 1] == 0 && wall[a[1].x][a[1].y - 1] == 0 && bow(a[1].x, a[1].y - 1) == false && a[1].life > 0) {-- a[1].y;}if(c == 77 && block[a[1].x][a[1].y + 1] == 0 && wall[a[1].x][a[1].y + 1] == 0 && bow(a[1].x, a[1].y + 1) == false && a[1].life > 0) {++ a[1].y;}}if(c == 'w' && block[a[2].x - 1][a[2].y] == 0 && wall[a[2].x - 1][a[2].y] == 0 && bow(a[2].x - 1, a[2].y) == false && a[2].life > 0) {-- a[2].x;}if(c == 's' && block[a[2].x + 1][a[2].y] == 0 && wall[a[2].x + 1][a[2].y] == 0 && bow(a[2].x, a[2].y + 1) == false && a[2].life > 0) {++ a[2].x;}if(c == 'a' && block[a[2].x][a[2].y - 1] == 0 && wall[a[2].x][a[2].y - 1] == 0 && bow(a[2].x, a[2].y - 1) == false && a[2].life > 0) {-- a[2].y;}if(c == 'd' && block[a[2].x][a[2].y + 1] == 0 && wall[a[2].x][a[2].y + 1] == 0 && bow(a[2].x, a[2].y + 1) == false && a[2].life > 0) {++ a[2].y;}if(c == 13 && a[1].nom_bown < a[1].bown && a[1].life > 0) {++ num;b[num].x = a[1].x;b[num].y = a[1].y;b[num].time = clock() + a[1].time;b[num].from = 1;++ a[1].nom_bown;}if(c == ' ' && a[2].nom_bown < a[2].bown && a[2].life > 0) {++ num;b[num].x = a[2].x;b[num].y = a[2].y;b[num].time = clock() + a[2].time;b[num].from = 2;++ a[2].nom_bown;}
}void happily() {for(int i = start; i <= num; i ++) {if(clock() >= b[i].time) {++ start;-- a[b[i].from].nom_bown;if (b[i].from == 3) {last = 0;}for(int j = b[i].x; j <= b[i].x + a[b[i].from].fire; j ++){thing[j][b[i].y] = 0;if(wall[j][b[i].y] == true) break;if(block[j][b[i].y] == true) {block[j][b[i].y] = false;thing[j][b[i].y] = rand() % 5;break;}if(a[1].x == j && a[1].y == b[i].y) a[1].life -= a[b[i].from].fire;if(a[2].x == j && a[2].y == b[i].y) a[2].life -= a[b[i].from].fire;if(a[3].x == j && a[3].y == b[i].y) a[3].life -= a[b[i].from].fire;}for(int j = b[i].x; j >= b[i].x - a[b[i].from].fire; j --){thing[j][b[i].y] = 0;if(wall[j][b[i].y] == true) break;if(block[j][b[i].y] == true) {block[j][b[i].y] = false;thing[j][b[i].y] = rand() % 5;break;}if(a[1].x == j && a[1].y == b[i].y) a[1].life -= a[b[i].from].fire;if(a[2].x == j && a[2].y == b[i].y) a[2].life -= a[b[i].from].fire;if(a[3].x == j && a[3].y == b[i].y) a[3].life -= a[b[i].from].fire;}for(int j = b[i].y; j <= b[i].y + a[b[i].from].fire; j ++){thing[b[i].x][j] = 0;if(wall[b[i].x][j] == true) break;if(block[b[i].x][j] == true) {block[b[i].x][j] = false;thing[b[i].x][j] = rand() % 5;break;}if(a[1].x == b[i].x && a[1].y == j) a[1].life -= a[b[i].from].fire;if(a[2].x == b[i].x && a[2].y == j) a[2].life -= a[b[i].from].fire;if(a[3].x == b[i].x && a[3].y == j) a[3].life -= a[b[i].from].fire;}for(int j = b[i].y; j >= b[i].y - a[b[i].from].fire; j --){thing[b[i].x][j] = 0;if(wall[b[i].x][j] == true) break;if(block[b[i].x][j] == true) {block[b[i].x][j] = false;thing[b[i].x][j] = rand() % 5;break;}if(a[1].x == b[i].x && a[1].y == j) a[1].life -= a[b[i].from].fire;if(a[2].x == b[i].x && a[2].y == j) a[2].life -= a[b[i].from].fire;if(a[3].x == b[i].x && a[3].y == j) a[3].life -= a[b[i].from].fire;}}}if(thing[a[1].x][a[1].y] == 1) {thing[a[1].x][a[1].y] = 0;++ a[1].bown;}if(thing[a[1].x][a[1].y] == 2) {thing[a[1].x][a[1].y] = 0;++ a[1].fire;}if(thing[a[2].x][a[2].y] == 1) {thing[a[2].x][a[2].y] = 0;++ a[2].bown;}if(thing[a[2].x][a[2].y] == 2) {thing[a[2].x][a[2].y] = 0;++ a[2].fire;}if(thing[a[3].x][a[3].y] == 1) {thing[a[3].x][a[3].y] = 0;++ a[3].bown;}if(thing[a[3].x][a[3].y] == 2) {thing[a[3].x][a[3].y] = 0;++ a[3].fire;}if(thing[a[1].x][a[1].y] == 3) {thing[a[1].x][a[1].y] = 0;a[1].time -= a[1].time >= 500 ? 150 : 0;}if(thing[a[2].x][a[2].y] == 3) {thing[a[2].x][a[2].y] = 0;a[2].time -= a[2].time >= 500 ? 150 : 0;}if(thing[a[3].x][a[3].y] == 3) {thing[a[3].x][a[3].y] = 0;a[3].time -= a[3].time >= 500 ? 150 : 0;}if(thing[a[1].x][a[1].y] == 4) {thing[a[1].x][a[1].y] = 0;a[1].life += 5;}if(thing[a[2].x][a[2].y] == 4) {thing[a[2].x][a[2].y] = 0;a[2].life += 5;}if(thing[a[3].x][a[3].y] == 4) {thing[a[3].x][a[3].y] = 0;a[3].life += 5;}
}bool nothing(int x1, int y1, int x2, int y2) {if (x1 == x2) {for (int i = min(y2, y1); i <= max(y1, y2); i ++) {if (wall[x1][i] || block[x1][i] || bow(x1, i)) {return false;}}}if (y1 == y2) {for (int i = min(x1, x2); i <= max(x1, x2); i ++) {if (wall[i][y1] || block[i][y1] || bow(i, y1)) {return false;}}}return true;
}struct coor {int x, y;int dis;
};void move_by_AI() {if (bow(a[3].x, a[3].y)) {if (wall[a[3].x + 1][a[3].y] == 0 && block[a[3].x + 1][a[3].y] == 0 && bow(a[3].x + 1, a[3].y) == false) {++ a[3].x;return ;}if (wall[a[3].x - 1][a[3].y] == 0 && block[a[3].x - 1][a[3].y] == 0 && bow(a[3].x - 1, a[3].y) == false) {-- a[3].x;return ;}if (wall[a[3].x][a[3].y + 1] == 0 && block[a[3].x][a[3].y + 1] == 0 && bow(a[3].x, a[3].y + 1) == false) {++ a[3].y;return ;}if (wall[a[3].x][a[3].y - 1] == 0 && block[a[3].x][a[3].y - 1] == 0 && bow(a[3].x, a[3].y - 1) == false) {-- a[3].y;return ;}}bool vis = false;for (int i = a[3].x + 1; i <= 14 && wall[i][a[3].y] == 0 && block[i][a[3].y] == 0; i ++) {if (bow(i, a[3].y)) {vis = true;break;}}for (int i = a[3].x - 1; i >= 1 && wall[i][a[3].y] == 0 && block[i][a[3].y] == 0; i --) {if (bow(i, a[3].y)) {vis = true;break;}}if (vis) {if (block[a[3].x][a[3].y - 1] == 0 && wall[a[3].x][a[3].y - 1] == 0 && a[3].y > 2 && bow(a[3].x, a[3].y - 1) == false) {-- a[3].y;return ;}if (block[a[3].x][a[3].y + 1] == 0 && wall[a[3].x][a[3].y + 1] == 0 && a[3].y < 14 && bow(a[3].x, a[3].y + 1) == false) {++ a[3].y;return ;}bool up = true, down = true;for (int i = 1; i + a[3].x <= 14 || a[3].x - i >= 1; i ++) {if (block[i + a[3].x][a[3].y] || wall[i + a[3].x][a[3].y] || bow(i + a[3].x, a[3].y)) {up = false;}if (block[a[3].x - i][a[3].y] || wall[a[3].x - i][a[3].y] || bow(a[3].x - i, a[3].y)) {down = false;}if (up) {if (block[a[3].x + i][a[3].y - 1] == 0 && wall[a[3].x + i][a[3].y - 1] == 0 && bow(a[3].x + i, a[3].y - 1) == false) {++ a[3].x;return ;}if (block[a[3].x + i][a[3].y + 1] == 0 && wall[a[3].x + i][a[3].y + 1] == 0 && bow(a[3].x + i, a[3].y + 1) == false) {++ a[3].x;return ;}}if (down) {if (block[a[3].x - i][a[3].y - 1] == 0 && wall[a[3].x - i][a[3].y - 1] == 0 && bow(a[3].x - i, a[3].y - 1) == false) {-- a[3].x;return ;}if (block[a[3].x - i][a[3].y + 1] == 0 && wall[a[3].x - i][a[3].y + 1] == 0 && bow(a[3].x - i, a[3].y + 1) == false) {-- a[3].x;return ;}}}}vis = false;for (int i = a[3].y + 1; i <= 14 && wall[a[3].x][i] == 0 && block[a[3].x][i] == 0; i ++) {if (bow(a[i].x, i)) {vis = true;break;}}for (int i = a[3].y - 1; i >= 1 && wall[a[3].x][i] == 0 && block[a[3].x][i] == 0; i --) {if (bow(a[i].x, i)) {vis = true;break;}}if (vis) {//      while (true);if (block[a[3].x - 1][a[3].y] == 0 && wall[a[3].x - 1][a[3].y] == 0 && bow(a[3].x - 1, a[3].y) == false) {-- a[3].x;return ;}if (block[a[3].x + 1][a[3].y] == 0 && wall[a[3].x + 1][a[3].y] == 0 && bow(a[3].x + 1, a[3].y) == false) {++ a[3].x;return ;}bool left = true, right = false;for (int i = 1; i + a[3].y <= 14 || a[3].y - i >= 1; i ++) {if (block[a[3].x][a[3].y + i] || wall[a[3].x][a[3].y + i] || bow(a[3].x, a[3].y + i)) {right = false;}if (block[a[3].x][a[3].y - i] || wall[a[3].x][a[3].y - i] || bow(a[3].x, a[3].y - i)) {left = false;}if (right) {if (block[a[3].x - 1][a[3].y + i] && wall[a[3].x - 1][a[3].y + i] && bow(a[3].x - 1, a[3].y + i) == false) {++ a[3].y;return ;}if (block[a[3].x + 1][a[3].y + i] && wall[a[3].x + 1][a[3].y + i] && bow(a[3].x + 1, a[3].y + i) == false) {++ a[3].y;return ;}}if (left) {if (block[a[3].x - 1][a[3].y - i] && wall[a[3].x - 1][a[3].y - i] && bow(a[3].x - 1, a[3].y - i) == false) {-- a[3].y;return ;}if (block[a[3].x + 1][a[3].y - i] && wall[a[3].x + 1][a[3].y - i] && bow(a[3].x + 1, a[3].y - i) == false) {-- a[3].y;return ;}}}}vis = false;if (a[1].x == a[3].x && abs(a[1].y - a[3].y) <= a[3].fire && nothing(a[1].x, a[1].y, a[3].x, a[3].y)) {++ num;b[num].x = a[3].x;b[num].y = a[3].y;b[num].time = clock() + a[3].time;b[num].from = 3;++ a[3].nom_bown;return ;}if (a[1].y == a[3].y && abs(a[1].x - a[3].x) <= a[3].fire && nothing(a[1].x, a[1].y, a[3].x, a[3].y)) {++ num;b[num].x = a[3].x;b[num].y = a[3].y;b[num].time = clock() + a[3].time;b[num].from = 3;++ a[3].nom_bown;return ;}if (a[2].x == a[3].x && abs(a[2].y - a[3].y) <= a[3].fire && nothing(a[2].x, a[2].y, a[3].x, a[3].y)) {++ num;b[num].x = a[3].x;b[num].y = a[3].y;b[num].time = clock() + a[3].time;b[num].from = 3;++ a[3].nom_bown;return ;}if (a[2].y == a[3].y && abs(a[2].x - a[3].x) <= a[3].fire && nothing(a[2].x, a[2].y, a[3].x, a[3].y)) {++ num;b[num].x = a[3].x;b[num].y = a[3].y;b[num].time = clock() + a[3].time;b[num].from = 3;++ a[3].nom_bown;return ;}if ((block[a[3].x][a[3].y + 1] || block[a[3].x][a[3].y - 1] || block[a[3].x + 1][a[3].y] || block[a[3].x - 1][a[3].y]) && a[3].nom_bown < a[3].bown && block[a[3].x][a[3].y] == 0) {++ num;b[num].x = a[3].x;b[num].y = a[3].y;b[num].time = clock() + a[3].time;b[num].from = 3;++ a[3].nom_bown;return ;}queue <coor > q;coor tmp;tmp.x = a[3].x + 1, tmp.y = a[3].y, tmp.dis = 2;q.push(tmp);tmp.x --;tmp.y --;tmp.dis = 4;q.push(tmp);tmp.y ++;tmp.x --;tmp.dis = 8;q.push(tmp);tmp.x ++;tmp.y ++;tmp.dis = 6;q.push(tmp);bool flag[15][15];memset(flag, false, sizeof flag);while (q.size()) {tmp = q.front();q.pop();if (flag[tmp.x][tmp.y] || wall[tmp.x][tmp.y] || bow(tmp.x, tmp.y)) {continue;}if (block[tmp.x][tmp.y]) {if (tmp.dis == 2 && block[a[3].x + 1][a[3].y] == 0 && wall[a[3].x + 1][a[3].y] == 0 && bow(a[3].x + 1, a[3].y) == false) {++ a[3].x;return ;}if (tmp.dis == 8 && block[a[3].x - 1][a[3].y] == 0 && wall[a[3].x - 1][a[3].y] == 0 && bow(a[3].x - 1, a[3].y) == false) {-- a[3].x;return ;}if (tmp.dis == 6 && block[a[3].x][a[3].y + 1] == 0 && wall[a[3].x][a[3].y + 1] == 0 && bow(a[3].x, a[3].y + 1) == false) {++ a[3].y;return ;}if (tmp.dis == 4 && block[a[3].x][a[3].y - 1] == 0 && wall[a[3].x][a[3].y - 1] == 0 && bow(a[3].x, a[3].y - 1) == false) {-- a[3].y;return ;}}flag[tmp.x][tmp.y] = true;tmp.x --;q.push(tmp);tmp.x ++;tmp.y ++;q.push(tmp);tmp.y --;tmp.x ++;q.push(tmp);tmp.x --;tmp.y --;q.push(tmp);}tmp.x = a[3].x + 1, tmp.y = a[3].y, tmp.dis = 2;q.push(tmp);tmp.x --;tmp.y --;tmp.dis = 4;q.push(tmp);tmp.y ++;tmp.x --;tmp.dis = 8;q.push(tmp);tmp.x ++;tmp.y ++;tmp.dis = 6;q.push(tmp);memset(flag, false, sizeof flag);while (q.size()) {tmp = q.front();q.pop();if (flag[tmp.x][tmp.y] || wall[tmp.x][tmp.y] || bow(tmp.x, tmp.y)) {continue;}if ((a[1].x == tmp.x && a[1].y == tmp.y) || (a[2].x == tmp.x && a[2].y == tmp.y)) {if (tmp.dis == 2 && block[a[3].x + 1][a[3].y] == 0 && wall[a[3].x + 1][a[3].y] == 0 && bow(a[3].x + 1, a[3].y) == false) {++ a[3].x;return ;}if (tmp.dis == 8 && block[a[3].x - 1][a[3].y] == 0 && wall[a[3].x - 1][a[3].y] == 0 && bow(a[3].x - 1, a[3].y) == false) {-- a[3].x;return ;}if (tmp.dis == 6 && block[a[3].x][a[3].y + 1] == 0 && wall[a[3].x][a[3].y + 1] == 0 && bow(a[3].x, a[3].y + 1) == false) {++ a[3].y;return ;}if (tmp.dis == 4 && block[a[3].x][a[3].y - 1] == 0 && wall[a[3].x][a[3].y - 1] == 0 && bow(a[3].x, a[3].y - 1) == false) {-- a[3].y;return ;}}flag[tmp.x][tmp.y] = true;tmp.x --;q.push(tmp);tmp.x ++;tmp.y ++;q.push(tmp);tmp.y --;tmp.x ++;q.push(tmp);tmp.x --;tmp.y --;q.push(tmp);}
}void PVE() {a[1].life = 50;a[3].life = 50;a[1].fire = 1;a[3].fire = 1;a[1].bown = 1;a[3].bown = 1;a[1].x = 13;a[1].y = 2;a[2].x = 15;a[2].y = 15;a[3].x = 2;a[3].y = 2;a[1].time = 2000;a[2].time = 2000;a[3].time = 2000;int ai = clock() + 100;while (a[1].life > 0 && a[3].life > 0) {put_map();if (kbhit()) { char c = getch();if(c == -32) {c = getch();if(c == 72 && block[a[1].x - 1][a[1].y] == 0 && wall[a[1].x - 1][a[1].y] == 0 && bow(a[1].x - 1, a[1].y) == false) {-- a[1].x;}if(c == 80 && block[a[1].x + 1][a[1].y] == 0 && wall[a[1].x + 1][a[1].y] == 0 && bow(a[1].x + 1, a[1].y) == false) {++ a[1].x;}if(c == 75 && block[a[1].x][a[1].y - 1] == 0 && wall[a[1].x][a[1].y - 1] == 0 && bow(a[1].x, a[1].y - 1) == false) {-- a[1].y;}if(c == 77 && block[a[1].x][a[1].y + 1] == 0 && wall[a[1].x][a[1].y + 1] == 0 && bow(a[1].x, a[1].y + 1) == false) {++ a[1].y;}}if(c == 13 && a[1].nom_bown < a[1].bown) {++ num;b[num].x = a[1].x;b[num].y = a[1].y;b[num].time = clock() + a[1].time;b[num].from = 1;++ a[1].nom_bown;}}happily();if (clock() > ai) {move_by_AI();ai = clock() + 175;}Sleep(5);}if (a[1].life > 0) {put("玩家一赢啦"); }else {put("智障人机赢啦");}
}void PVVE() {a[1].life = 50;a[2].life = 50;a[3].life = 50;a[1].fire = 1;a[2].fire = 1;a[3].fire = 1;a[1].bown = 1;a[2].bown = 1;a[3].bown = 1;a[1].x = 13;a[1].y = 2;a[2].x = 2;a[2].y = 13;a[3].x = 2;a[3].y = 2;a[1].time = 2000;a[2].time = 2000;a[3].time = 2000;int ai = clock() + 100;while ((a[1].life > 0 ? 1 : 0) + (a[2].life > 0 ? 1 : 0) + (a[3].life > 0 ? 1 : 0) >= 2) {put_map();if (kbhit()) { in_to(); }happily();if (clock() > ai) {move_by_AI();ai = clock() + 175;}Sleep(5);}if (a[1].life > 0) {put("玩家一赢啦"); }else if (a[2].life > 0){put("玩家二获得胜利");}else {put("智障人机赢啦");}
}void PVP() {a[1].life = 20;a[2].life = 20;a[1].fire = 1;a[2].fire = 1;a[1].bown = 1;a[2].bown = 1;a[1].x = 13;a[1].y = 2;a[2].x = 2;a[2].y = 13;a[1].time = 2000;a[2].time = 2000;while(a[1].life > 0 && a[2].life > 0) {for(int i = 1; i <= 14; i ++) {for(int j = 1; j <= 14; j ++) {if(wall[i][j] == 1) printf("■");else if(block[i][j] == 1) printf("☆");else if(a[1].x == i && a[1].y == j) printf("①");else if(a[2].x == i && a[2].y == j) printf("②");else if(bow(i, j)) printf("●");else if(thing[i][j] == 1) printf("∷");else if(thing[i][j] == 2) printf("▓");else if(thing[i][j] == 3) printf("※");else if(thing[i][j] == 4) printf("◆");else printf("  ");}puts("");}printf("玩家一 生命值 %d  %d● %d级炸弹 爆炸时间 %dms\n", a[1].life, a[1].bown - a[1].nom_bown, a[1].fire, a[1].time);printf("玩家二 生命值 %d  %d● %d级炸弹 爆炸时间 %dms\n", a[2].life, a[2].bown - a[2].nom_bown, a[2].fire, a[2].time);if(kbhit()){char c = getch();if(c == -32) {c = getch();if(c == 72 && block[a[1].x - 1][a[1].y] == 0 && wall[a[1].x - 1][a[1].y] == 0 && bow(a[1].x - 1, a[1].y) == false) {-- a[1].x;}if(c == 80 && block[a[1].x + 1][a[1].y] == 0 && wall[a[1].x + 1][a[1].y] == 0 && bow(a[1].x + 1, a[1].y) == false) {++ a[1].x;}if(c == 75 && block[a[1].x][a[1].y - 1] == 0 && wall[a[1].x][a[1].y - 1] == 0 && bow(a[1].x, a[1].y - 1) == false) {-- a[1].y;}if(c == 77 && block[a[1].x][a[1].y + 1] == 0 && wall[a[1].x][a[1].y + 1] == 0 && bow(a[1].x, a[1].y + 1) == false) {++ a[1].y;}}if(c == 'w' && block[a[2].x - 1][a[2].y] == 0 && wall[a[2].x - 1][a[2].y] == 0 && bow(a[2].x - 1, a[2].y) == false) {-- a[2].x;}if(c == 's' && block[a[2].x + 1][a[2].y] == 0 && wall[a[2].x + 1][a[2].y] == 0 && bow(a[2].x, a[2].y + 1) == false) {++ a[2].x;}if(c == 'a' && block[a[2].x][a[2].y - 1] == 0 && wall[a[2].x][a[2].y - 1] == 0 && bow(a[2].x, a[2].y - 1) == false) {-- a[2].y;}if(c == 'd' && block[a[2].x][a[2].y + 1] == 0 && wall[a[2].x][a[2].y + 1] == 0 && bow(a[2].x, a[2].y + 1) == false) {++ a[2].y;}if(c == 13 && a[1].nom_bown < a[1].bown) {++ num;b[num].x = a[1].x;b[num].y = a[1].y;b[num].time = clock() + a[1].time;b[num].from = 1;++ a[1].nom_bown;}if(c == ' ' && a[2].nom_bown < a[2].bown) {++ num;b[num].x = a[2].x;b[num].y = a[2].y;b[num].time = clock() + a[2].time;b[num].from = 2;++ a[2].nom_bown;}}for(int i = start; i <= num; i ++) {if(clock() >= b[i].time) {++ start;-- a[b[i].from].nom_bown;for(int j = b[i].x; j <= b[i].x + a[b[i].from].fire; j ++){thing[j][b[i].y] = 0;if(wall[j][b[i].y] == true) break;if(block[j][b[i].y] == true) {block[j][b[i].y] = false;thing[j][b[i].y] = rand() % 5;break;}if(a[1].x == j && a[1].y == b[i].y) a[1].life -= a[b[i].from].fire;if(a[2].x == j && a[2].y == b[i].y) a[2].life -= a[b[i].from].fire;}for(int j = b[i].x; j >= b[i].x - a[b[i].from].fire; j --){thing[j][b[i].y] = 0;if(wall[j][b[i].y] == true) break;if(block[j][b[i].y] == true) {block[j][b[i].y] = false;thing[j][b[i].y] = rand() % 5;break;}if(a[1].x == j && a[1].y == b[i].y) a[1].life -= a[b[i].from].fire;if(a[2].x == j && a[2].y == b[i].y) a[2].life -= a[b[i].from].fire;}for(int j = b[i].y; j <= b[i].y + a[b[i].from].fire; j ++){thing[b[i].x][j] = 0;if(wall[b[i].x][j] == true) break;if(block[b[i].x][j] == true) {block[b[i].x][j] = false;thing[b[i].x][j] = rand() % 5;break;}if(a[1].x == b[i].x && a[1].y == j) a[1].life -= a[b[i].from].fire;if(a[2].x == b[i].x && a[2].y == j) a[2].life -= a[b[i].from].fire;}for(int j = b[i].y; j >= b[i].y - a[b[i].from].fire; j --){thing[b[i].x][j] = 0;if(wall[b[i].x][j] == true) break;if(block[b[i].x][j] == true) {block[b[i].x][j] = false;thing[b[i].x][j] = rand() % 5;break;}if(a[1].x == b[i].x && a[1].y == j) a[1].life -= a[b[i].from].fire;if(a[2].x == b[i].x && a[2].y == j) a[2].life -= a[b[i].from].fire;}}}if(thing[a[1].x][a[1].y] == 1) {thing[a[1].x][a[1].y] = 0;++ a[1].bown;}if(thing[a[1].x][a[1].y] == 2) {thing[a[1].x][a[1].y] = 0;++ a[1].fire;}if(thing[a[2].x][a[2].y] == 1) {thing[a[2].x][a[2].y] = 0;++ a[2].bown;}if(thing[a[2].x][a[2].y] == 2) {thing[a[2].x][a[2].y] = 0;++ a[2].fire;}if(thing[a[1].x][a[1].y] == 3) {thing[a[1].x][a[1].y] = 0;a[1].time -= a[1].time >= 500 ? 150 : 0;}if(thing[a[2].x][a[2].y] == 3) {thing[a[2].x][a[2].y] = 0;a[2].time -= a[2].time >= 500 ? 150 : 0;}if(thing[a[1].x][a[1].y] == 4) {thing[a[1].x][a[1].y] = 0;a[1].life += 5;}if(thing[a[2].x][a[2].y] == 4) {thing[a[2].x][a[2].y] = 0;a[2].life += 5;}Sleep(5);system("cls");}if((a[1].life || a[2].life ) == 0) {put("一虎杀两羊\n");stop();return ; }if(a[1].life > 0) {put("二号在轰的一声巨响中消失了\n");stop();return ;}put("一号已升天\n");
}int main() {srand((unsigned)time(0));put("c++炸弹人\n");Sleep(1000);while (true) {for (int i = 0; i <= 14; i ++) {for (int j = 0; j <= 14; j ++) {wall[i][j] = wa[i][j], block[i][j] = bl[i][j];}}memset(thing, 0, sizeof thing);memset(b, 0, sizeof b);num = 0;start = 0;system("cls");put("模式:\n");put("    A.PVP B.PVPVE C.PVE D.退出");char ch = getch();if (ch == 'A' || ch == 'a') {PVP();stop();} if (ch == 'B' || ch == 'b') {PVVE();stop();}if (ch == 'C' || ch == 'c') {PVE();stop();}if (ch == 'D' || ch == 'd') {system("cls"); put("再见 拜~");return 0;}}return 0;
}

「游戏」c++ 炸弹人2.0(新增人机)相关推荐

  1. 「游戏」c++ 炸弹人1.0

    茫然ing N4Ig5iBcoKZaAXKBtUBLKICyIA0IAHTAJgEYAGADmIBZiBmAVgDp6A2AdnPoE4fK8IAI6ZS9EAF9c6TACdBIyCAaTpIDEo ...

  2. 「游戏」岩浆逃脱2.0

    经过一点点的努力,我把之前写的代码改精炼了些,然后也改了些内容,应该比以前要好玩些了 更新内容 去掉职业大乱斗(因为你打不到人) 改模式选择为规则调整 更改岩浆下降速度(更刺激了) 改为双视角同人物( ...

  3. 聊聊「游戏」这个磨人的小妖精

    引言:此文是我的「读书会」里一份优秀作业,刘昊男同学作品.对于游戏,我记得之前看过「六原则」,不妨放在开头: 研究不熟悉的东西使之变为熟悉的东西: 将熟悉的东西作有规律的重复: 在重复的过程中尽可能作 ...

  4. 这是波士顿动力机器狗「他爸」?美军80年代机器狗「考古」,身高3米,人机联合操作...

    这个 3 米高的庞然大物诞生于 80 年代,比波士顿动力机器狗还早 20 多年. >>>> 前段时间,波士顿动力机器狗 Spot 正式开售,而且已经有买家晒出了首个开箱视频.波 ...

  5. 「游戏」c++岩浆逃脱 1.0

    已更新至详见1.1 本游戏纯手打,无抄袭 单人模式(孤寂) 生存:努力逃脱上方的岩浆,取得胜利吧. 测试:测一测你究竟有多快. 双人模式(友尽) 生存:和朋友一起逃脱岩浆吧. 竞赛:互相设置陷阱,比比 ...

  6. 「游戏」寻路算法之A Star算法原理及实现

    前言 自动寻路是在一些如MMORPG等类型游戏中常见的一种功能,其给了玩家良好的游戏体验,使得玩家在游戏过程中省去了大量游戏坐标点的记录以及长时间的键盘操作,不必记忆坐标,不必担心迷路,用最快捷的方法 ...

  7. 「游戏」游戏服务器中AOI的原理及四叉树实现

    前言 要不是想起来这篇文章想写一个关于游戏服务器开发过程中关于AOI相关的文章,我都差不点忘了我是一个游戏服务器开发人员

  8. 绝版「游戏」保护计划!

    今天互联网上的内容,由于各种原因,正在以越来越快的速度消失,而新一代网民们,却并没有备份和记录的习惯及意识. 不远的将来,会有一天,当你特别想找一个东西却搜尽互联网你都找不到,本项目立足于将这样的损失 ...

  9. 「音响」三诺2.0音响性能对比 三诺 N-20GII 三诺 N-30G

    三诺 N-20GII 参数                                          参考报价:160 至 199元 声道 2.0 输出功率 有源 扬声器单元 4" ...

最新文章

  1. python安装在什么系统下最好-windows系统下Python环境的搭建
  2. mysql 按照指定字段拼接_mysql 根据某个字段将多条记录的某个字段拼接成一个字段...
  3. GDCM:检索dicom文件中某个位置存在的Icon测试程序
  4. 计算机技术朝着那个方面发展,目前,信息系统在朝着哪个方面发展?
  5. word List 33
  6. 计算机网络(二十五)-IP数据报格式
  7. 火狐浏览器表单不跳转_坑爹火狐浏览器会记录表单数据,导致服务器控件点击事件出bug...
  8. form表单input使用disabled后提交不能获取表单值的解决方法
  9. php大文件怎么排序去重,简单实现大文件的排序和去重
  10. 用ANSYS画矩形_用SolidWorks画一个带波浪纹路的瓶子
  11. FF与IE兼容性总结(转载)
  12. 泛微OA-SQL注入漏洞
  13. SSM实现毕业设计管理系统
  14. 中国重工[601989]
  15. win10 微信/QQ等能听到别人说话,别人听不到自己说话解决方案
  16. 新电脑安装系统时提示 File:\Boot\BCD Status:0xc000000e 错误解决方案
  17. Leetcode506.Relative Ranks相对名次
  18. BDE-TDataBase
  19. Android之微信开放平台创建应用
  20. 躁!DJ 风格 Java 桌面音乐播放器

热门文章

  1. iOS创建沙盒账号的步骤和注意事项
  2. mms彩信发送 java_Android编程之非调用系统界面实现发送彩信的方法(MMS)
  3. 神奇的cyclegan!
  4. linux宝塔杰奇安装,杰奇2.4安装教程+远程采集
  5. 【转】程序语言不是工具
  6. 小程序用户头像昵称获取不到解决办法
  7. prism DelegateCommand的使用
  8. Zookeeper客户端错误 Unable to read additional data from server
  9. 中科院计算所上海分所所长孔华威:算力驱动的智能硬件
  10. 给某汉化联盟讲些历史故事