0
已解决
#include <iostream>
#include <Windows.h>
#include <conio.h>
#include <ctime>
using namespace std;
const int MAP_WIDTH = 40;
const int MAP_HEIGHT = 20;
char map[MAP_HEIGHT][MAP_WIDTH];
int playerX, playerY;
int obstacleX, obstacleY;
int score = 0;
void initMap() {
// 初始化地图边框
for (int i = 0; i < MAP_HEIGHT; i++) {
for (int j = 0; j < MAP_WIDTH; j++) {
if (i == 0 || i == MAP_HEIGHT - 1 || j == 0 || j == MAP_WIDTH - 1) {
map[i][j] = '#';
} else {
map[i][j] = ' ';
}
}
}
}
void drawMap(char map[MAP_HEIGHT][MAP_WIDTH]) {
// 输出地图
system("cls");
for (int i = 0; i < MAP_HEIGHT; i++) {
for (int j = 0; j < MAP_WIDTH; j++) {
cout << map[i][j];
}
cout << endl;
}
cout << "Score: " << score << endl;
}
void drawPlayer(char map[MAP_HEIGHT][MAP_WIDTH]) {
// 在地图上打印玩家
map[playerY][playerX] = 'O';
}
void clearPlayer(char map[MAP_HEIGHT][MAP_WIDTH]) {
// 清除玩家上一帧的位置
map[playerY][playerX] = ' ';
}
void updatePlayerPosition(int dx, int dy) {
// 更新玩家位置
int newX = playerX + dx;
int newY = playerY + dy;
if (newX >= 1 && newX <= MAP_WIDTH - 2) {
playerX = newX;
}
if (newY >= 1 && newY <= MAP_HEIGHT - 2) {
playerY = newY;
}
}
void drawObstacle(char map[MAP_HEIGHT][MAP_WIDTH]) {
// 在地图上打印障碍物
map[obstacleY][obstacleX] = '*';
}
void clearObstacle(char map[MAP_HEIGHT][MAP_WIDTH]) {
// 清除障碍物上一帧的位置
map[obstacleY][obstacleX] = ' ';
}
void updateObstaclePosition() {
// 更新障碍物位置
obstacleX--;
if (obstacleX < 1) {
obstacleX = MAP_WIDTH - 2;
obstacleY = rand() % (MAP_HEIGHT - 2) + 1;
}
}
bool collisionDetection() {
// 检测碰撞
if (playerX == obstacleX && playerY == obstacleY) {
return true;
}
return false;
}
int main() {
// 初始化地图和玩家位置
initMap();
playerX = MAP_WIDTH / 2;
playerY = MAP_HEIGHT / 2;
// 初始化障碍物位置
srand(time(NULL));
obstacleX = rand() % (MAP_WIDTH - 2) + 1;
obstacleY = MAP_HEIGHT / 2;
bool gameOver = false;
int speed = 50;
while (!gameOver) {
clearPlayer(map);
clearObstacle(map);
// 更新障碍物位置
updateObstaclePosition();
drawObstacle(map);
drawPlayer(map);
drawMap(map);
// 检测碰撞
if (collisionDetection()) {
gameOver = true;
cout << "Game Over! Your score is " << score << endl;
}
// 更新玩家位置
if (GetAsyncKeyState(VK_LEFT) & 0x8000) {
updatePlayerPosition(-1, 0);
}
if (GetAsyncKeyState(VK_RIGHT) & 0x8000) {
updatePlayerPosition(1, 0);
}
if (GetAsyncKeyState(VK_UP) & 0x8000) {
updatePlayerPosition(0, -1);
}
if (GetAsyncKeyState(VK_DOWN) & 0x8000) {
updatePlayerPosition(0, 1);
}
// 逐渐加快游戏速度
if (speed > 10) {
speed--;
}
Sleep(speed);
// 在通过障碍物时增加得分
if (obstacleX == playerX) {
score++;
}
}
return 0;
}
很离谱,不是吗???
包涵宇在2023-05-07 20:51:30追加了内容
没人吗???来回答结贴!!!