VS2022 C++ EasyX EGE 吃豆人升级版
我是可爱的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的游戏的,大家敬请期待
相关文章:

VS2022 C++ EasyX EGE 吃豆人升级版
我是可爱的C小盆友(不要脸了),嘻嘻,等了这么久,吃豆人终于升级啦! 更新日志: 1.修复奇奇怪怪的bug 2.把敌人AI增强了一(hen)点(duo) 3.加入了…...

计算机图形学 | 动画模拟
动画模拟 布料模拟 质点弹簧系统: 红色部分很弱地阻挡对折 Steep connection FEM:有限元方法 粒子系统 粒子系统本质上就是在定义个体和群体的关系。 动画帧率 VR游戏要不晕需要达到90fps Forward Kinematics Inverse Kinematics 只告诉末端p点,中间…...

B2.3 Arm 内存模型定义
B2.3 Arm 内存模型定义 Arm 内存模型引入了以下几种关系: 内在关系 :例如,内在数据/控制/顺序依赖关系和内在翻译之前的关系,这些是源自指令语义的硬件要求。 之后关系 :例如,之后的连贯性和 TLB 之后的关系,这些关系在特定执行中发生这种方式,但在不同的执行中可以以…...

(javaweb)SpringBootWeb案例(毕业设计)案例--部门管理
目录 1.准备工作 2.部门管理--查询功能 3.前后端联调 3.部门管理--新增功能 1.准备工作 mapper数据访问层相当于dao层 根据页面原型和需求分析出接口文档--前后端必须遵循这种规范 大部分情况下 接口文档由后端人员来编写 前后端进行交互基于restful风格接口 http的请求方式…...

PCL 采样一致性模型介绍
采样一致性可以简单高效的检测出一些具有数学表达式的目标模型。PCL中的sample consensus模块中不仅包含各种的采样一致性估计方法,也包含一些已经编写好的数学模型,下面主要介绍一下PCL中的采样一致性模型。 1. 二维圆模型 pcl::SampleConsensusModelCircle2D< PointT …...

Unity手游开放大世界解决方案
开个新坑了,分享一个手游开放大世界的解决方案,也算是我开发研究了一年多的结果吧。之前项目需要,做了一整套的手游开放大世界解决方案,这里做一个总结归纳,将所需要的技术栈和解决方案等汇总。 这篇文章只是起头一个目…...

mysql B+ 树
问题: mysql innodb引擎 B树主键自增,插入数据时是从中间分裂,还是使用页尾部元素作为父节点的值然后添加一个新页,或者说主键连续自增,mysql有没有做这样的优化? 以下是Chat GPT给出的回答:...

Sublime Text常用快捷键大全
Sublime Text 是一款功能强大且广受欢迎的文本编辑器,其丰富的快捷键支持使得开发者能够更高效地编写和编辑代码。以下是 Sublime Text 中一些常用的快捷键,帮助你更加高效地使用这款工具: 功能分类快捷键 (Windows)快捷键 (Mac)新建文件Ctr…...

中成科信票务管理系统 TicketManager.ashx接口SQL注入漏洞复现 [附POC]
文章目录 中成科信票务管理系统 TicketManager.ashx接口SQL注入漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现0x06 修复建议中成科信票务管理系统 TicketManager.ashx接口SQL注入漏洞复现 [附POC] 0x01 前言 …...

设计模式六大原则之:依赖倒置原则
1. 依赖倒置原则简介 依赖倒置原则(Dependency Inversion Principle, DIP) 是面向对象设计的核心原则之一,由罗伯特马丁(Robert C. Martin)提出,旨在降低类间的依赖度,使之更易于维护和扩展。该原则主张高层模块不应该依赖于底层模块&#x…...

06_Linux中如何让程序重启后自动启动
Linux中如何让程序重启后自动启动 systemd单元文件1.创建服务文件!!!服务配置文件的介绍 2.需要配置服务的状态(加载和启用服务)3.验证服务程序的运行状态4.打印程序的标准输出 systemd单元文件 Systemd 是现代 Linux…...

优化业务流程的关键:深入探讨BPA流程设计
在当前竞争激烈的商业环境中,业务流程自动化(BPA)已经成为企业提升效率、减少成本和提高业务灵活性的关键工具。今天,我们将深入探讨BPA流程设计的重要性及其实施步骤,为企业提供实用的指南。 什么是BPA? …...

qt工程中调用sdl的流程
配置 Qt 工程 在你的 Qt 工程中,需要对项目文件(.pro 文件)进行配置,以包含 SDL 库的路径和链接选项。 # Qt Project File (.pro)# 设置 SDL 库的路径 INCLUDEPATH /path/to/SDL/include LIBS -L/path/to/SDL/lib -lSDL2初始化…...

ECMAScript性能优化技巧与陷阱
大家好,我是程序员小羊! 前言 ECMAScript,即JavaScript,是一种广泛应用于Web开发中的脚本语言。随着现代Web应用的复杂度日益增加,如何优化JavaScript的性能变得至关重要。性能优化不仅能提高应用的响应速度&#x…...

c++实现B树(上)
哈喽啊!好久不见,甚是想念!失踪人口要回归了,时隔一个多月小吉我终于要更新blog了🎉。在停更的一个多月中,小吉也有在好好学习提升自己,立志给大家呈现好文章。 现在让我们进入正题吧…...

【机器学习】深度强化学习–RL的基本概念、经典场景以及算法分类
引言 深度强化学习(Deep Reinforcement Learning, DRL)是机器学习的一个分支,它结合了深度学习(Deep Learning)和强化学习(Reinforcement Learning, RL)的技术 文章目录 引言一、深度强化学习–…...

【git】将本地文件上传到github
安装git 选择一个文件夹作为git仓库,cd到文件夹输入 git init文件夹出现.git文件夹,该文件夹默认为隐藏文件夹,设置为不隐藏 在cmd中输入 ssh-keygen -t rsa -C "xxxxxx.com"该邮箱为github邮箱,然后一路enter出现以…...

安卓应用开发学习:手机摇一摇功能应用尝试--摇骰子和摇红包
一、引言 前几天,我发布的日志《安卓应用开发学习:查看手机传感器信息》记录了如何查看手机传感器的信息,通过上述的方法,可以看到我的OPPO手机支持19种传感器。本篇日志就记录一下常见的加速度传感器的典型应用——“摇一摇”功…...

HTML中的<fieldset>标签元素框的使用
HTML 提供的 <fieldset> 标签用于在表单中分组相关元素。 <fieldset> 标签会在相关元素周围绘制一个框。 <legend> 标签为 fieldset 元素定义标题。 语法如下: <fieldset><legend>标题</legend><!-- 元素内容... -->…...

Linux驱动入门实验班——SR501红外模块驱动(附百问网视频链接)
目录 一、工作方式 二、接口图 三、编写思路 1.构造file_operations结构体 2.实现read函数 3.编写入口函数 4.编写中断处理函数 5.编写出口函数 6.声明出入口函数以及协议 四、源码 五、课程链接 一、工作方式 SR501人体红外感应模块有两种工作模式: …...

windows C++- Com技术简介(上)
在介绍C和winrt与COM组件技术的关系之前,有必要介绍一下com组件技术,这项技术比较古老,但是它一直作为windows的基石存在。COM 是一类独立于平台且面向对象的分布式系统,用于创建可交互的二进制软件组件。 COM 技术是 Microsoft O…...

Jenkins持续集成工具学习
一、从装修厨房看项目开发效率优化 二、持续集成工具 三、JavaEE项目部署方式对比 四、JenkinsSVN持续集成环境搭建 五、JenkinsGitHub持续集成环境搭建...

Redis:查询是否包含某个字符/字符串之三
上一篇:Redis:查询是否包含某个字符/字符串之二-CSDN博客 摘要: 遍历key,在跟进value的类型遍历value是否包含指定字符串 search_strings ,这里使用redis-py库,默认只能处理utf-8编码,如果存在…...

【Redis】数据类型详解及其应用场景
目录 Redis 常⻅数据类型预备知识基本全局命令小结 数据结构和内部编码单线程架构引出单线程模型为什么单线程还能这么快 Redis 常⻅数据类型 Redis 提供了 5 种数据结构,理解每种数据结构的特点对于 Redis 开发运维⾮常重要,同时掌握每种数据结构的常⻅…...

PARA-Drive:设计并行模型实现端到端自动驾驶
论文链接 https://openaccess.thecvf.com/content/CVPR2024/papers/Weng_PARA-Drive_Parallelized_Architecture_for_Real-time_Autonomous_Driving_CVPR_2024_paper.pdfhttps://openaccess.thecvf.com/content/CVPR2024/papers/Weng_PARA-Drive_Parallelized_Architecture_fo…...

vs2022 x64 C/C++和汇编混编 遇到的坑
vs2022 x64 C/C和汇编混编 遇到的坑 遇到的问题二、问题复现1.出错代码2.问题分析2.1 堆栈对齐问题 3.解决方案 总结奇数和偶数个寄存器的影响为什么 sub rsp, 8 对奇数个寄存器有用?结论 遇到的问题 0x00007FFFFAE24A29 (msvcp140.dll)处(位于 TestCompileConsole…...

PHP概述、环境搭建与基本语法讲解
目录 【学习目标、重难点知识】 什么是网站? 1. PHP 介绍 1.1. PHP 概述 1.1.1. PHP 是什么? 1.1.2. PHP 都能做什么? 1.2. PHP 环境搭建 1.2.1. PhpStudy 2. PHP 基本语法 2.1. PHP 语法入门 2.1.1. 第一个 PHP 程序 2.1.2. PHP …...

实现信创Linux麦克风摄像头录制(源码,银河麒麟、统信UOS)
随着信创国产化浪潮的来临,在国产操作系统上的应用开发的需求越来越多,其中一个就是需要在银河麒麟或统信UOS上实现录制摄像头视频和麦克风声音,将它们录制成一个mp4文件。那么这个要如何实现了? 一. 技术方案 要完成这些功能&a…...

深度学习9--目标检测
1.概念介绍 目标检测不仅可以检测数字,而且可以检测动物的种类、汽车的种类等。例如,自动驾驶车辆需要自动识别前方物体是车辆还是行人,需要自动识别道路两 旁的指示牌和前方的红绿灯颜色。对于自动检测的算法,有两个要求…...

第131天:内网安全-横向移动Kerberos 攻击SPN扫描WinRMWinRSRDP
案例一:域横向移动-RDP-明文&NTLM RDP利用的三种方式 1.直接在当前被控主机上进行远程连接 2.建立节点进行连接 3.端口转发,(访问当前主机的2222端口等于访问目标的3389) 第一种方式(动静太大) 直接利用被控主机进行远程连接…...