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人体红外感应模块有两种工作模式: …...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...
Cursor实现用excel数据填充word模版的方法
cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...
力扣-35.搜索插入位置
题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...

排序算法总结(C++)
目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指:同样大小的样本 **(同样大小的数据)**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...

Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement
Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement 1. LAB环境2. L2公告策略2.1 部署Death Star2.2 访问服务2.3 部署L2公告策略2.4 服务宣告 3. 可视化 ARP 流量3.1 部署新服务3.2 准备可视化3.3 再次请求 4. 自动IPAM4.1 IPAM Pool4.2 …...
Vue 模板语句的数据来源
🧩 Vue 模板语句的数据来源:全方位解析 Vue 模板(<template> 部分)中的表达式、指令绑定(如 v-bind, v-on)和插值({{ }})都在一个特定的作用域内求值。这个作用域由当前 组件…...

内窥镜检查中基于提示的息肉分割|文献速递-深度学习医疗AI最新文献
Title 题目 Prompt-based polyp segmentation during endoscopy 内窥镜检查中基于提示的息肉分割 01 文献速递介绍 以下是对这段英文内容的中文翻译: ### 胃肠道癌症的发病率呈上升趋势,且有年轻化倾向(Bray等人,2018&#x…...

渗透实战PortSwigger Labs指南:自定义标签XSS和SVG XSS利用
阻止除自定义标签之外的所有标签 先输入一些标签测试,说是全部标签都被禁了 除了自定义的 自定义<my-tag onmouseoveralert(xss)> <my-tag idx onfocusalert(document.cookie) tabindex1> onfocus 当元素获得焦点时(如通过点击或键盘导航&…...