我是可爱的C++小盆友(不要脸了),嘻嘻,等了这么久,吃豆人终于升级啦!
更新日志:
1.修复奇奇怪怪的bug
2.把敌人AI增强了一(hen)点(duo)
3.加入了奖励豆,吃完有特殊的东西
1)万物复苏 玩家生命值+3
2)极致严寒 敌人移动速度降低
3)无限牢笼 送一个敌人到地图四个角落种一个
本小盆友很想破1000粉丝,求大家四连(点赞,关注,收藏,转发)
对了,提醒一句,如果要改我的代码,千万不要加using namespace std这一行,整个程序会炸,不信自己试,逝世了我可不负责昂
好啦,下面是大家最喜欢的代码环节!
#include<bits/stdc++.h>
#include<queue>
#include<conio.h>
#pragma comment(lib,"winmm.lib")
#define _CRT_SECURE_NO_WARNINGS
#define WIDTH 15*25
#define HEIGHT 22*25
#define GRID 25
#define ROW 20
#define COL 15
using std::cout;
using std::endl;
int b = 255;
int m = 0, n = 0;
int speed = 400;
int life = 5;
int score = 0;
bool willGo = true;
bool canGo = true;
bool isChange = true;
long long min = 99999999, timesa = 1, v[ROW][COL];
DWORD t1 = 0, t2 = 0;
DWORD t3 = 0, t4 = 0;
DWORD t5 = 0, t6 = 0;//奖励函数特用
IMAGE img[8];
IMAGE Enemy[4];
IMAGE bean, bean2;
COLORREF color = RGB(0, 0, 0);
enum DIR {
NONE,
UP,
DOWN,
LEFT,
RIGHT,
WAITING
};
enum TOOLS {
WALL,
PLAYER,
SPACE,
ENEMY,
BEAN,
ENEMYBEAN,
ENEMYSBEAN,
SBEAN
};
struct Point {
int x, y;
};
struct Player {
int x, y;
bool flag;
DIR dir;
}player;
struct ENEmy {
int x, y;
int flag;
DIR dir;
}enemy[4];
int map[ROW][COL] = {
WALL,WALL,WALL,WALL,WALL,WALL,WALL,BEAN,WALL,WALL,WALL,WALL,WALL,WALL,WALL,
WALL,BEAN,BEAN,BEAN,BEAN,WALL,BEAN,BEAN,BEAN,WALL,BEAN,BEAN,BEAN,BEAN,WALL,
WALL,BEAN,WALL,WALL,BEAN,WALL,BEAN,WALL,BEAN,WALL,BEAN,WALL,WALL,BEAN,WALL,
BEAN,BEAN,BEAN,BEAN,BEAN,BEAN,BEAN,BEAN,BEAN,BEAN,BEAN,BEAN,BEAN,BEAN,BEAN,
WALL,WALL,BEAN,WALL,WALL,WALL,WALL,BEAN,WALL,WALL,WALL,WALL,BEAN,WALL,WALL,
WALL,WALL,BEAN,BEAN,BEAN,BEAN,BEAN,BEAN,BEAN,BEAN,BEAN,BEAN,BEAN,WALL,WALL,
WALL,WALL,BEAN,WALL,WALL,BEAN,WALL,WALL,WALL,BEAN,WALL,WALL,BEAN,WALL,WALL,
WALL,BEAN,BEAN,BEAN,BEAN,BEAN,BEAN,BEAN,BEAN,BEAN,BEAN,BEAN,BEAN,BEAN,WALL,
WALL,BEAN,WALL,WALL,BEAN,WALL,WALL,BEAN,WALL,WALL,BEAN,WALL,WALL,BEAN,WALL,
WALL,BEAN,WALL,WALL,BEAN,WALL,BEAN,BEAN,BEAN,WALL,BEAN,WALL,WALL,BEAN,WALL,
WALL,BEAN,WALL,WALL,BEAN,WALL,WALL,BEAN,WALL,WALL,BEAN,WALL,WALL,BEAN,WALL,
WALL,BEAN,BEAN,BEAN,BEAN,BEAN,BEAN,BEAN,BEAN,BEAN,BEAN,BEAN,BEAN,BEAN,WALL,
WALL,WALL,BEAN,WALL,WALL,BEAN,WALL,BEAN,WALL,BEAN,WALL,WALL,BEAN,WALL,WALL,
WALL,WALL,BEAN,BEAN,BEAN,BEAN,BEAN,BEAN,BEAN,BEAN,BEAN,BEAN,BEAN,WALL,WALL,
WALL,BEAN,BEAN,BEAN,BEAN,WALL,WALL,BEAN,WALL,WALL,BEAN,BEAN,BEAN,BEAN,WALL,
WALL,WALL,BEAN,WALL,WALL,WALL,WALL,BEAN,WALL,WALL,WALL,WALL,BEAN,WALL,WALL,
BEAN,BEAN,BEAN,BEAN,BEAN,BEAN,BEAN,BEAN,BEAN,BEAN,BEAN,BEAN,BEAN,BEAN,BEAN,
WALL,BEAN,WALL,WALL,BEAN,WALL,BEAN,WALL,BEAN,WALL,BEAN,WALL,WALL,BEAN,WALL,
WALL,BEAN,BEAN,BEAN,BEAN,WALL,BEAN,BEAN,BEAN,WALL,BEAN,BEAN,BEAN,BEAN,WALL,
WALL,WALL,WALL,WALL,WALL,WALL,WALL,BEAN,WALL,WALL,WALL,WALL,WALL,WALL,WALL,
};
void drawText() {
if (b <= 1) {
isChange = false;
}
else if (b >= 255 - 8) {
isChange = true;
}
char ch[1000];
int spaceH;
settextcolor(RGB(60, 10, b));
settextstyle(25, 0, "华文行楷");
sprintf_s(ch, "生命: %d 得分: %d", life, score);
spaceH = (getwidth() - textwidth(ch)) / 2;
outtextxy(spaceH, 20 * 25, ch);
sprintf_s(ch, "x:%d y:%d", player.x, player.y);
spaceH = (getwidth() - textwidth(ch)) / 2;
outtextxy(spaceH, 21 * 25, ch);
if (isChange) {
b -= 7;
}
else {
b += 7;
}
}
void initMap() {
loadimage(&Enemy[0], "01.png", GRID, GRID);
loadimage(&Enemy[1], "02.png", GRID, GRID);
loadimage(&Enemy[2], "03.png", GRID, GRID);
loadimage(&Enemy[3], "04.png", GRID, GRID);
loadimage(&img[0], "UP_CLOSE.jpg", 24, 24);
loadimage(&img[1], "UP_OPEN.jpg", 24, 24);
loadimage(&img[2], "DOWN_CLOSE.jpg", 24, 24);
loadimage(&img[3], "DOWN_OPEN.jpg", 24, 24);
loadimage(&img[4], "LEFT_CLOSE.jpg", 24, 24);
loadimage(&img[5], "LEFT_OPEN.jpg", 24, 24);
loadimage(&img[6], "RIGHT_CLOSE.jpg", 24, 24);
loadimage(&img[7], "RIGHT_OPEN.jpg", 24, 24);
loadimage(&bean, "bean.png", 15, 15);
loadimage(&bean2, "sbean.png", 15, 15);
map[m][n] = PLAYER;
player.flag = true;
player.x = m;
player.y = n;
srand((unsigned int)time(NULL));
for (int i = 0; i < 4; i++) {
int a = rand() % (ROW - 2) + 1;
int b = rand() % (COL - 2) + 1;
while (map[a][b] == WALL || map[a][b] == PLAYER) {
a = rand() % (ROW - 2) + 1;
b = rand() % (COL - 2) + 1;
}
enemy[i].x = a;
enemy[i].y = b;
map[a][b] = ENEMYSBEAN;
}
}
void drawMap() {
setbkmode(TRANSPARENT);
setbkcolor(RGB(83, 55, 213));
cleardevice();
for (int i = 0; i < ROW; i++) {
for (int j = 0; j < COL; j++) {
switch (map[i][j]) {
case SPACE:
color = RGB(81, 55, 213);
setlinecolor(color);
setfillcolor(color);
fillrectangle(j * GRID, i * GRID, j * GRID + GRID, i * GRID + GRID);
break;
case WALL:
color = RGB(150, 0, 255);
setlinecolor(color);
setfillcolor(color);
setlinecolor(WHITE);
setlinestyle(PS_SOLID, 1);
fillroundrect(j * GRID, i * GRID, j * GRID + GRID, i * GRID + GRID, 6, 6);
break;
case PLAYER:
switch (player.flag) {
case true:
switch (player.dir) {
case UP:
putimage(j * GRID, i * GRID, &img[1]);
break;
case DOWN:
putimage(j * GRID, i * GRID, &img[3]);
break;
case LEFT:
putimage(j * GRID, i * GRID, &img[5]);
break;
case RIGHT:
putimage(j * GRID, i * GRID, &img[7]);
break;
}
break;
case false:
switch (player.dir) {
case UP:
putimage(j * GRID, i * GRID, &img[0]);
break;
case DOWN:
putimage(j * GRID, i * GRID, &img[2]);
break;
case LEFT:
putimage(j * GRID, i * GRID, &img[4]);
break;
case RIGHT:
putimage(j * GRID, i * GRID, &img[6]);
break;
}
break;
}
break;
case ENEMY:
for (int k = 0; k < 4; k++) {
if (enemy[k].x == i && enemy[k].y == j) {
putimage(j * GRID, i * GRID, &Enemy[k]);
}
}
break;
case BEAN:
putimage(j * GRID + 5, i * GRID + 5, &bean);
break;
case SBEAN:
putimage(j * GRID + 5, i * GRID + 5, &bean2);
break;
case ENEMYSBEAN:
for (int k = 0; k < 4; k++) {
if (enemy[k].x == i && enemy[k].y == j) {
putimage(j * GRID, i * GRID, &Enemy[k]);
}
}
break;
case ENEMYBEAN:
for (int k = 0; k < 4; k++) {
if (enemy[k].x == i && enemy[k].y == j) {
putimage(j * GRID, i * GRID, &Enemy[k]);
}
}
break;
}
}
}
for (int i = 0; i < ROW; i++) {
for (int j = 0; j < COL; j++) {
switch (map[i][j]) {
case WALL:
color = RGB(150, 0, 255);
setlinecolor(color);
setfillcolor(color);
setlinecolor(WHITE);
setlinestyle(PS_SOLID, 1);
fillroundrect(j * GRID, i * GRID, j * GRID + GRID, i * GRID + GRID, 6, 6);
break;
}
}
}
drawText();
}
void drawText2(char ch[100]) {
mciSendString("pause 1.mp3", 0, 0, 0);
//setbkcolor(BLACK);
//cleardevice();
//setfillcolor(BLACK);
//fillrectangle(0, 0, WIDTH, HEIGHT);
settextcolor(RED);
settextstyle(45, 0, "华文行楷");
int spaceH = (getwidth() - textwidth(ch)) / 2;
int spaceV = (getheight() - textheight(ch)) / 2;
outtextxy(spaceH, spaceV, ch);
FlushBatchDraw();
Sleep(1250);
drawMap();
mciSendString("play 1.mp3 repeat", 0, 0, 0);
}
void movePlayer() {
int sp;
char c;
char ch1[22] = "万 物 复 苏";
char ch2[22] = "极 致 严 寒";
char ch3[22] = "无 限 牢 笼";
Player next = player;
switch (player.dir) {
case UP:
next.x--;
break;
case DOWN:
next.x++;
break;
case LEFT:
next.y--;
break;
case RIGHT:
next.y++;
break;
}
if (player.x == 16 && player.y == 0 && canGo) {
map[player.x][player.y] = SPACE;
player.x = 16;
player.y = COL - 1;
player.dir = LEFT;
map[player.x][player.y] = PLAYER;
player.flag = !player.flag;
canGo = false;
}
else if (player.x == 16 && player.y == COL - 1 && canGo) {
map[player.x][player.y] = SPACE;
player.x = 16;
player.y = 0;
player.dir = RIGHT;
map[player.x][player.y] = PLAYER;
player.flag = !player.flag;
canGo = false;
}
if (player.x == 3 && player.y == 0 && canGo) {
map[player.x][player.y] = SPACE;
player.x = 3;
player.y = COL - 1;
player.dir = LEFT;
map[player.x][player.y] = PLAYER;
player.flag = !player.flag;
canGo = false;
}
else if (player.x == 3 && player.y == COL - 1 && canGo) {
map[player.x][player.y] = SPACE;
player.x = 3;
player.y = 0;
player.dir = RIGHT;
map[player.x][player.y] = PLAYER;
player.flag = !player.flag;
canGo = false;
}
if (player.x == 0 && player.y == 7 && canGo) {
map[player.x][player.y] = SPACE;
player.x = ROW - 1;
player.y = 7;
player.dir = UP;
map[player.x][player.y] = PLAYER;
player.flag = !player.flag;
canGo = false;
}
else if (player.x == ROW - 1 && player.y == 7 && canGo) {
map[player.x][player.y] = SPACE;
player.x = 0;
player.y = 7;
player.dir = DOWN;
map[player.x][player.y] = PLAYER;
player.flag = !player.flag;
canGo = false;
}
/*
Player next2 = player;
switch (map[next2.x][next2.y]) {
case WALL:
break;
case SPACE:
map[player.x][player.y] = SPACE;
player = next2;
map[player.x][player.y] = PLAYER;
player.flag = !player.flag;
canGo = true;
break;
case ENEMY:
case ENEMYBEAN:
case ENEMYSBEAN:
for (int i = 0; i < 4; i++) {
if (next2.x == enemy[i].x && next2.y == enemy[i].y) {
life--;
if (life == 0) {
mciSendString("close 1.mp3", 0, 0, 0);
c = getchar();
exit(0);
}
else {
map[player.x][player.y] = SPACE;
player.x = m;
player.y = n;
break;
}
}
}
break;
case BEAN:
score++;
map[player.x][player.y] = SPACE;
player = next2;
map[player.x][player.y] = PLAYER;
player.flag = !player.flag;
canGo = true;
break;
case SBEAN:
score += 10;
map[player.x][player.y] = SPACE;
player = next2;
map[player.x][player.y] = PLAYER;
player.flag = !player.flag;
canGo = true;
srand((unsigned int)time(NULL));
sp = rand() % 3 + 1;
switch (sp) {
case 1:
break;
case 2:
break;
case 3:
break;
}
break;
}
*/
switch (map[next.x][next.y]) {
case WALL:
break;
case SPACE:
map[player.x][player.y] = SPACE;
player = next;
map[player.x][player.y] = PLAYER;
player.flag = !player.flag;
canGo = true;
break;
case ENEMY:
case ENEMYBEAN:
case ENEMYSBEAN:
for (int i = 0; i < 4; i++) {
if (next.x == enemy[i].x && next.y == enemy[i].y) {
life--;
if (life == 0) {
mciSendString("close 1.mp3", 0, 0, 0);
c = getchar();
exit(0);
}
else {
map[player.x][player.y] = SPACE;
player.x = m;
player.y = n;
break;
}
}
}
break;
case BEAN:
score++;
map[player.x][player.y] = SPACE;
player = next;
map[player.x][player.y] = PLAYER;
player.flag = !player.flag;
canGo = true;
break;
case SBEAN:
score += 10;
map[player.x][player.y] = SPACE;
player = next;
map[player.x][player.y] = PLAYER;
player.flag = !player.flag;
canGo = true;
srand((unsigned int)time(NULL));
sp = rand() % 4 + 1;
if (sp == 1) {
drawText2(ch1);
life += 3;
}
else if (sp == 2) {
drawText2(ch2);
speed += 200;
}
else {
drawText2(ch3);
for (int i = 0; i < 4; i++) {
if (enemy[i].x != 0 && enemy[i].y != 0 && map[0][0] != ENEMY) {
map[enemy[i].x][enemy[i].y] = SBEAN;
enemy[i].x = 0;
enemy[i].y = 0;
map[enemy[i].x][enemy[i].y] = ENEMY;
break;
}
else if (enemy[i].x != 0 && enemy[i].y != 0 && map[0][COL - 1] != ENEMY) {
map[enemy[i].x][enemy[i].y] = SBEAN;
enemy[i].x = 0;
enemy[i].y = COL - 1;
map[enemy[i].x][enemy[i].y] = ENEMY;
break;
}
else if (enemy[i].x != 0 && enemy[i].y != 0 && map[ROW - 1][0] != ENEMY) {
map[enemy[i].x][enemy[i].y] = SBEAN;
enemy[i].x = ROW - 1;
enemy[i].y = 0;
map[enemy[i].x][enemy[i].y] = ENEMY;
break;
}
else if (enemy[i].x != 0 && enemy[i].y != 0 && map[ROW - 1][COL - 1] != ENEMY) {
map[enemy[i].x][enemy[i].y] = SBEAN;
enemy[i].x = ROW - 1;
enemy[i].y = COL - 1;
map[enemy[i].x][enemy[i].y] = ENEMY;
break;
}
}
}
break;
}
}
void keyDown() {
if (_kbhit()) {
canGo = true;
switch (_getch()) {
case 72:
player.dir = UP;
break;
case 80:
player.dir = DOWN;
break;
case 75:
player.dir = LEFT;
break;
case 77:
player.dir = RIGHT;
break;
}
}
}
void moveEnemy() {
char c;
for (int i = 0; i < 4; i++) {
ENEmy next = enemy[i];
switch (enemy[i].dir) {
case UP:
next.x--;
break;
case DOWN:
next.x++;
break;
case LEFT:
next.y--;
break;
case RIGHT:
next.y++;
break;
}
if (enemy[i].x == 16 && enemy[i].y == 0 && canGo) {
map[enemy[i].x][enemy[i].y] = SPACE;
enemy[i].x = 16;
enemy[i].y = COL - 1;
enemy[i].dir = LEFT;
map[enemy[i].x][enemy[i].y] = ENEMY;
canGo = false;
}
else if (enemy[i].x == 16 && enemy[i].y == COL - 1 && canGo) {
map[enemy[i].x][enemy[i].y] = SPACE;
enemy[i].x = 16;
enemy[i].y = 0;
enemy[i].dir = RIGHT;
map[enemy[i].x][enemy[i].y] = ENEMY;
canGo = false;
}
if (enemy[i].x == 3 && enemy[i].y == 0 && canGo) {
map[enemy[i].x][enemy[i].y] = SPACE;
enemy[i].x = 3;
enemy[i].y = COL - 1;
enemy[i].dir = LEFT;
map[enemy[i].x][enemy[i].y] = ENEMY;
canGo = false;
}
else if (enemy[i].x == 3 && enemy[i].y == COL - 1 && canGo) {
map[enemy[i].x][enemy[i].y] = SPACE;
enemy[i].x = 3;
enemy[i].y = 0;
enemy[i].dir = RIGHT;
map[enemy[i].x][enemy[i].y] = ENEMY;
canGo = false;
}
if (enemy[i].x == 0 && enemy[i].y == 7 && canGo) {
map[enemy[i].x][enemy[i].y] = SPACE;
enemy[i].x = ROW - 1;
enemy[i].y = 7;
enemy[i].dir = UP;
map[enemy[i].x][enemy[i].y] = ENEMY;
canGo = false;
}
else if (enemy[i].x == ROW - 1 && enemy[i].y == 7 && canGo) {
map[enemy[i].x][enemy[i].y] = SPACE;
enemy[i].x = 0;
enemy[i].y = 7;
enemy[i].dir = DOWN;
map[enemy[i].x][enemy[i].y] = ENEMY;
canGo = false;
}
/*
ENEmy next2 = enemy[i];
switch (map[next2.x][next2.y]) {
case WALL:
break;
case SPACE:
if (map[enemy[i].x][enemy[i].y] == ENEMYBEAN) {
map[enemy[i].x][enemy[i].y] = BEAN;
}
else if (map[enemy[i].x][enemy[i].y] == ENEMYSBEAN) {
map[enemy[i].x][enemy[i].y] = SBEAN;
}
else {
map[enemy[i].x][enemy[i].y] = SPACE;
}
enemy[i] = next2;
map[enemy[i].x][enemy[i].y] = ENEMY;
break;
case ENEMY:
case ENEMYBEAN:
case ENEMYSBEAN:
break;
case PLAYER:
for (int i = 0; i < 4; i++) {
if (next2.x == enemy[i].x && next2.y == enemy[i].y) {
for (int i = 0; i < ROW; i++) {
for (int j = 0; j < COL; j++) {
printf("%d ", map[i][j]);
}
printf("\n");
}
printf("\n");
life--;
if (life == 0) {
mciSendString("close 1.mp3", 0, 0, 0);
c = getchar();
exit(0);
}
else {
map[player.x][player.y] = SPACE;
player.x = m;
player.y = n;
break;
}
}
}
break;
case BEAN:
if (map[enemy[i].x][enemy[i].y] == ENEMY) {
map[enemy[i].x][enemy[i].y] = SPACE;
}
else if (map[enemy[i].x][enemy[i].y] == ENEMYBEAN) {
map[enemy[i].x][enemy[i].y] = BEAN;
}
else if (map[enemy[i].x][enemy[i].y] == ENEMYSBEAN) {
map[enemy[i].x][enemy[i].y] = SBEAN;
}
enemy[i] = next2;
map[enemy[i].x][enemy[i].y] = ENEMYBEAN;
break;
case SBEAN:
if (map[enemy[i].x][enemy[i].y] == ENEMY) {
map[enemy[i].x][enemy[i].y] = SPACE;
}
else if (map[enemy[i].x][enemy[i].y] == ENEMYBEAN) {
map[enemy[i].x][enemy[i].y] = BEAN;
}
else if (map[enemy[i].x][enemy[i].y] == ENEMYSBEAN) {
map[enemy[i].x][enemy[i].y] = SBEAN;
}
enemy[i] = next2;
map[enemy[i].x][enemy[i].y] = ENEMYSBEAN;
break;
}
*/
switch (map[next.x][next.y]) {
case WALL:
break;
case SPACE:
if (map[enemy[i].x][enemy[i].y] == ENEMYBEAN) {
map[enemy[i].x][enemy[i].y] = BEAN;
}
else if (map[enemy[i].x][enemy[i].y] == ENEMYSBEAN) {
map[enemy[i].x][enemy[i].y] = SBEAN;
}
else {
map[enemy[i].x][enemy[i].y] = SPACE;
}
enemy[i] = next;
map[enemy[i].x][enemy[i].y] = ENEMY;
break;
case ENEMY:
case ENEMYBEAN:
case ENEMYSBEAN:
break;
case PLAYER:
for (int i = 0; i < 4; i++) {
if (next.x == player.x && next.y == player.y) {
life--;
if (life == 0) {
mciSendString("close 1.mp3", 0, 0, 0);
c = getchar();
exit(0);
}
else {
map[player.x][player.y] = SPACE;
player.x = m;
player.y = n;
break;
}
}
}
break;
case BEAN:
if (map[enemy[i].x][enemy[i].y] == ENEMY) {
map[enemy[i].x][enemy[i].y] = SPACE;
}
else if (map[enemy[i].x][enemy[i].y] == ENEMYBEAN) {
map[enemy[i].x][enemy[i].y] = BEAN;
}
else if (map[enemy[i].x][enemy[i].y] == ENEMYSBEAN) {
map[enemy[i].x][enemy[i].y] = SBEAN;
}
enemy[i] = next;
map[enemy[i].x][enemy[i].y] = ENEMYBEAN;
break;
case SBEAN:
if (map[enemy[i].x][enemy[i].y] == ENEMY) {
map[enemy[i].x][enemy[i].y] = SPACE;
}
else if (map[enemy[i].x][enemy[i].y] == ENEMYBEAN) {
map[enemy[i].x][enemy[i].y] = BEAN;
}
else if (map[enemy[i].x][enemy[i].y] == ENEMYSBEAN) {
map[enemy[i].x][enemy[i].y] = SBEAN;
}
enemy[i] = next;
map[enemy[i].x][enemy[i].y] = ENEMYSBEAN;
break;
}
}
}
DIR EnemyBFS(int xx,int xy) {
int dx[4], dy[4];
int rnd[4];
DIR vis[ROW][COL] = { NONE };
int oridx[4] = { 0,0,-1,1 };
int oridy[4] = { 1,-1,0,0 };
DIR oridir[4] = { RIGHT,LEFT,UP,DOWN };
DIR dr[4];
Point v[ROW][COL];
rnd[0] = rand() % 4;
for (int i = 1; i < 4; i++) {
bool x = 1;
while (x) {
rnd[i] = rand() % 4, x = 0;
for (int j = 0; j < i; j++) if (rnd[i] == rnd[j]) x = 1;
}
}
for (int i = 0; i < 4; i++) dx[i] = oridx[rnd[i]], dy[i] = oridy[rnd[i]], dr[i] = oridir[rnd[i]];
std::queue<Point> q;
q.push({ xx,xy });
for (int i = 0; i < ROW; i++)
for (int j = 0; j < COL; j++)
if (map[i][j] != WALL) vis[i][j] = WAITING;
else vis[i][j] = NONE;
vis[xx][xy] = NONE;
v[xx][xy] = { xx,xy };
while (!q.empty()) {
int _x_ = q.front().x, _y_ = q.front().y; q.pop();
if (_x_ == player.x && _y_ == player.y) {
Point t = { player.x,player.y }, lst = t;
while (v[t.x][t.y].x!=t.x||v[t.x][t.y].y!=t.y) {
lst = t;
t = v[t.x][t.y];
}
int gox = lst.x, goy = lst.y;
for (int i = 0; i < 4; i++) {
if (xx + oridx[i] == gox && xy + oridy[i] == goy) return oridir[i];
}
return NONE;
}
for (int i = 0; i < 4; i++) {
int nx = _x_ + dx[i], ny = _y_ + dy[i];
if (vis[nx][ny] == WAITING) {
vis[nx][ny] = dr[i];
v[nx][ny] = { _x_,_y_ };
q.push({ nx,ny });
}
}
}
return NONE;
}
void enemyControl() {
srand((unsigned int)time(NULL));
while (1) {
for (int i = 0; i < 4; i++) {
/*int r = player.x;
int c = player.y;
int r2 = enemy[i].x;
int c2 = enemy[i].y;
int m = rand() % 2 + 1;
switch (m) {
case 1:
if (r < r2 && map[r2 - 1][c2] != WALL) {
enemy[i].dir = UP;
}
else if (r > r2 && map[r2 + 1][c2] != WALL) {
enemy[i].dir = DOWN;
}
else if (c < c2 && map[r2][c2 - 1] != WALL) {
enemy[i].dir = LEFT;
}
else if (c > c2 && map[r2][c2 + 1] != WALL) {
enemy[i].dir = RIGHT;
}
else {
int n = rand() % 4 + 1;
switch (n) {
case 1:
enemy[i].dir = UP;
break;
case 2:
enemy[i].dir = DOWN;
break;
case 3:
enemy[i].dir = LEFT;
break;
case 4:
enemy[i].dir = RIGHT;
}
}
break;
case 2:
if (r < r2 && map[r2 - 1][c2] != WALL) {
enemy[i].dir = UP;
}
else if (r > r2 && map[r2 + 1][c2] != WALL) {
enemy[i].dir = DOWN;
}
else if (c < c2 && map[r2][c2 - 1] != WALL) {
enemy[i].dir = LEFT;
}
else if (c > c2 && map[r2][c2 + 1] != WALL) {
enemy[i].dir = RIGHT;
}
else {
int n = rand() % 4 + 1;
switch (n) {
case 1:
enemy[i].dir = UP;
break;
case 2:
enemy[i].dir = DOWN;
break;
case 3:
enemy[i].dir = LEFT;
break;
case 4:
enemy[i].dir = RIGHT;
}
}
break;
}*/
enemy[i].dir = EnemyBFS(enemy[i].x, enemy[i].y);
Sleep(300);
}
}
}
bool isWin() {
for (int i = 0; i < ROW; i++) {
for (int j = 0; j < COL; j++) {
if (map[i][j] == BEAN || map[i][j] == SBEAN) return false;
}
}
}
int main() {
initgraph(WIDTH, HEIGHT);
CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)enemyControl, NULL, NULL, NULL);
mciSendString("open 1.mp3", 0, 0, 0);
mciSendString("play 1.mp3 repeat", 0, 0, 0);
int s = 0;
srand((unsigned int)time(NULL));
do {
m = rand() % ROW;
n = rand() % COL;
} while (map[m][n] == WALL || map[m][n] == ENEMY);
BeginBatchDraw();
initMap();
while (life) {
drawMap();
do {
m = rand() % ROW;
n = rand() % COL;
} while (map[m][n] == WALL);
if (t1 - t2 >= 150) {
movePlayer();
t2 = t1;
}
if (t3 - t4 >= speed) {
moveEnemy();
t4 = t3;
}
if (t5 - t6 >= 10000 && willGo == false) {
willGo = true;
t6 = t5;
}
t1 = GetTickCount64();
t3 = GetTickCount64();
t5 = GetTickCount64();
keyDown();
//enemyControl();
if (isWin()) {
s++;
if (s == 3) {
mciSendString("close 1.mp3", 0, 0, 0);
mciSendString("open 2.mp3", 0, 0, 0);
mciSendString("play 2.mp3", 0, 0, 0);
break;
}
}
FlushBatchDraw();
}
EndBatchDraw();
closegraph();
return 0;
}
嘿嘿,竟然真的有人看完了整篇博客?欸嘿,那肯定要送一点福利呀,简单给个预告,下一篇很可能是关于flappy bird的游戏的,大家敬请期待