KIMI
2025-11-03 20:05:09
发布于:广东
#include <iostream>
#include <ctime>
#include <cstdlib>
#include <conio.h>
#include <windows.h>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
#define W 30
#define H 20
enum Color {
BLACK = 0, BLUE = 1, GREEN = 2, CYAN = 3, RED = 4,
MAGENTA = 5, BROWN = 6, LIGHTGRAY = 7, DARKGRAY = 8,
LIGHTBLUE = 9, LIGHTGREEN = 10, LIGHTCYAN = 11,
LIGHTRED = 12, LIGHTMAGENTA = 13, YELLOW = 14, WHITE = 15
};
char map[H][W];
int skillPoints = 0;
bool skillUnlocked[6] = {1, 1, 1, 1, 1, 1};
int skillCooldown[6] = {0};
int clearedCount = 0;
int score = 0;
bool timeFrozen = false;
int freezeTimer = 0;
bool shieldActive = false;
int shieldTimer = 0;
bool cloneActive = false;
int cloneTimer = 0;
int cloneX1, cloneY1, cloneX2, cloneY2;
void setColor(int textColor, int bgColor) {
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), (bgColor << 4) | textColor);
}
void gotoxy(int x, int y) {
COORD coord;
coord.X = x;
coord.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}
void hideCursor() {
CONSOLE_CURSOR_INFO cursor_info = {1, 0};
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}
void clearUIArea() {
for (int i = 2; i < H; i++) {
gotoxy(W + 2, i);
cout << " ";
}
}
void pmap() {
for (int i = 0; i < H; i++) {
for (int j = 0; j < W; j++) {
gotoxy(j, i);
if (map[i][j] == 'A') {
setColor(LIGHTGREEN, BLACK);
cout << 'A';
} else if (map[i][j] == 'P') {
setColor(LIGHTMAGENTA, BLACK);
cout << 'P';
} else {
setColor(LIGHTCYAN, BLACK);
cout << map[i][j];
}
}
}
}
void showSkillStatus() {
string skillNames[] = {"E-闪电冲刺", "R-范围清除", "F-时间冻结",
"T-护盾防御", "G-磁力吸引", "V-分身幻影"
};
for (int i = 0; i < 6; i++) {
gotoxy(W + 2, 7 + i);
if (skillUnlocked[i]) {
if (skillCooldown[i] > 0) {
setColor(DARKGRAY, BLACK);
cout << skillNames[i] << " 冷却中(" << skillCooldown[i] << ")";
} else {
setColor(LIGHTGREEN, BLACK);
cout << skillNames[i] << " 就绪";
}
} else {
setColor(DARKGRAY, BLACK);
cout << skillNames[i] << " 未解锁";
}
}
}
void showSpecialStatus() {
int line = 14;
if (shieldActive) {
gotoxy(W + 2, line);
setColor(LIGHTBLUE, BLACK);
cout << "护盾剩余: " << shieldTimer / 10 << "秒";
line++;
}
if (cloneActive) {
gotoxy(W + 2, line);
setColor(LIGHTMAGENTA, BLACK);
cout << "分身剩余: " << cloneTimer / 10 << "秒";
line++;
}
if (timeFrozen) {
gotoxy(W + 2, line);
setColor(LIGHTCYAN, BLACK);
cout << "时间冻结剩余: " << freezeTimer / 10 << "秒";
}
}
void showControls() {
gotoxy(W + 2, 17);
setColor(LIGHTGRAY, BLACK);
cout << "控制说明:";
gotoxy(W + 2, 18);
cout << "WASD - 移动";
gotoxy(W + 2, 19);
cout << "Q - 攻击";
gotoxy(W + 2, 20);
cout << "B - 技能商店";
gotoxy(W + 2, 21);
cout << "ESC - 退出";
}
void showUI(int x, int y) {
clearUIArea();
gotoxy(W + 2, 2);
setColor(YELLOW, BLACK);
cout << "分数: " << score;
gotoxy(W + 2, 4);
setColor(LIGHTBLUE, BLACK);
cout << "技能点: " << skillPoints;
gotoxy(W + 2, 6);
setColor(WHITE, BLACK);
cout << "技能状态:";
showSkillStatus();
showSpecialStatus();
showControls();
}
void magneticAttract(int x, int y) {
setColor(YELLOW, BLACK);
for (int i = 0; i < H; i++) {
for (int j = 0; j < W; j++) {
if (map[i][j] == 'A') {
int dx = (x - j) > 0 ? 1 : -1;
int dy = (y - i) > 0 ? 1 : -1;
int moveX = min(2, abs(x - j));
int moveY = min(2, abs(y - i));
int newX = j + dx * moveX;
int newY = i + dy * moveY;
if (newX >= 0 && newX < W && newY >= 0 && newY < H) {
map[i][j] = '.';
map[newY][newX] = 'A';
gotoxy(j, i);
cout << ".";
gotoxy(newX, newY);
setColor(LIGHTGREEN, BLACK);
cout << "A";
}
}
}
}
}
void createClones(int x, int y) {
cloneActive = true;
cloneTimer = 150;
cloneX1 = max(0, x - 2);
cloneY1 = y;
cloneX2 = min(W - 1, x + 2);
cloneY2 = y;
gotoxy(cloneX1, cloneY1);
setColor(LIGHTMAGENTA, BLACK);
cout << "P";
gotoxy(cloneX2, cloneY2);
setColor(LIGHTMAGENTA, BLACK);
cout << "P";
}
void cloneAttack() {
if (cloneActive) {
for (int i = max(0, cloneY1 - 1); i <= min(H - 1, cloneY1 + 1); i++) {
for (int j = max(0, cloneX1 - 1); j <= min(W - 1, cloneX1 + 1); j++) {
if (map[i][j] == 'A') {
score += 5;
map[i][j] = '.';
gotoxy(j, i);
cout << ".";
}
}
}
for (int i = max(0, cloneY2 - 1); i <= min(H - 1, cloneY2 + 1); i++) {
for (int j = max(0, cloneX2 - 1); j <= min(W - 1, cloneX2 + 1); j++) {
if (map[i][j] == 'A') {
score += 5;
map[i][j] = '.';
gotoxy(j, i);
cout << ".";
}
}
}
}
}
void showSkillShop() {
system("cls");
setColor(WHITE, BLACK);
cout << "=== 技能商店 ===" << endl;
cout << "技能点: " << skillPoints << endl << endl;
cout << "1. 闪电冲刺 (2点)" << endl;
cout << " 效果: 瞬间向前移动3格" << endl;
cout << " 状态: " << (skillUnlocked[0] ? "已解锁" : "未解锁") << endl << endl;
cout << "2. 范围清除 (3点)" << endl;
cout << " 效果: 清除3x3范围内的敌人" << endl;
cout << " 状态: " << (skillUnlocked[1] ? "已解锁" : "未解锁") << endl << endl;
cout << "3. 时间冻结 (5点)" << endl;
cout << " 效果: 暂停敌人生成10秒" << endl;
cout << " 状态: " << (skillUnlocked[2] ? "已解锁" : "未解锁") << endl << endl;
cout << "4. 护盾防御 (4点)" << endl;
cout << " 效果: 生成5秒防护罩免疫伤害" << endl;
cout << " 状态: " << (skillUnlocked[3] ? "已解锁" : "未解锁") << endl << endl;
cout << "5. 磁力吸引 (3点)" << endl;
cout << " 效果: 吸引所有敌人到身边" << endl;
cout << " 状态: " << (skillUnlocked[4] ? "已解锁" : "未解锁") << endl << endl;
cout << "6. 分身幻影 (6点)" << endl;
cout << " 效果: 创建2个自动攻击的分身" << endl;
cout << " 状态: " << (skillUnlocked[5] ? "已解锁" : "未解锁") << endl << endl;
cout << "输入数字购买技能 (0返回): ";
char choice = _getch();
if (choice == '1' && !skillUnlocked[0] && skillPoints >= 2) {
skillPoints -= 2;
skillUnlocked[0] = true;
cout << "闪电冲刺已解锁!" << endl;
} else if (choice == '2' && !skillUnlocked[1] && skillPoints >= 3) {
skillPoints -= 3;
skillUnlocked[1] = true;
cout << "范围清除已解锁!" << endl;
} else if (choice == '3' && !skillUnlocked[2] && skillPoints >= 5) {
skillPoints -= 5;
skillUnlocked[2] = true;
cout << "时间冻结已解锁!" << endl;
} else if (choice == '4' && !skillUnlocked[3] && skillPoints >= 4) {
skillPoints -= 4;
skillUnlocked[3] = true;
cout << "护盾防御已解锁!" << endl;
} else if (choice == '5' && !skillUnlocked[4] && skillPoints >= 3) {
skillPoints -= 3;
skillUnlocked[4] = true;
cout << "磁力吸引已解锁!" << endl;
} else if (choice == '6' && !skillUnlocked[5] && skillPoints >= 6) {
skillPoints -= 6;
skillUnlocked[5] = true;
cout << "分身幻影已解锁!" << endl;
}
Sleep(1000);
}
void updateSkillCooldowns() {
for (int i = 0; i < 6; i++) {
if (skillCooldown[i] > 0) {
skillCooldown[i]--;
}
}
}
void updateSpecialEffects() {
if (timeFrozen) {
freezeTimer--;
if (freezeTimer <= 0) {
timeFrozen = false;
}
}
if (shieldActive) {
shieldTimer--;
if (shieldTimer <= 0) {
shieldActive = false;
}
}
if (cloneActive) {
cloneTimer--;
if (cloneTimer <= 0) {
cloneActive = false;
gotoxy(cloneX1, cloneY1);
cout << ".";
gotoxy(cloneX2, cloneY2);
cout << ".";
}
}
}
void attackEffect(int x, int y) {
setColor(LIGHTRED, BLACK);
int directions[8][2] = {{1, 1}, {1, -1}, {-1, 1}, {-1, -1}, {1, 0}, {-1, 0}, {0, 1}, {0, -1}};
for (int i = 0; i < 8; i++) {
int nx = x + directions[i][0];
int ny = y + directions[i][1];
if (nx >= 0 && nx < W && ny >= 0 && ny < H) {
if (map[ny][nx] == 'A') {
clearedCount++;
score += 10;
if (clearedCount % 10 == 0) {
skillPoints++;
}
}
map[ny][nx] = '.';
gotoxy(nx, ny);
cout << "X";
}
}
Sleep(100);
}
int main() {
srand(time(nullptr));
hideCursor();
int x = 5, y = 5;
for (int i = 0; i < H; i++) {
for (int j = 0; j < W; j++) {
map[i][j] = '.';
}
}
system("cls");
setColor(LIGHTCYAN, BLACK);
pmap();
gotoxy(x, y);
setColor(YELLOW, BLACK);
cout << "O";
showUI(x, y);
char ch;
while (true) {
if (!timeFrozen && rand() % 100 <= 5) {
int rh = rand() % H;
int rw = rand() % W;
if (map[rh][rw] == '.') {
map[rh][rw] = 'A';
}
}
updateSkillCooldowns();
updateSpecialEffects();
if (cloneActive && cloneTimer % 30 == 0) {
cloneAttack();
}
if (_kbhit()) {
ch = _getch();
if (ch == 27) {
break;
} else if (ch == 'b') {
showSkillShop();
system("cls");
setColor(LIGHTCYAN, BLACK);
pmap();
} else if (ch == 'w' && y > 0) {
y--;
} else if (ch == 's' && y < H - 1) {
y++;
} else if (ch == 'a' && x > 0) {
x--;
} else if (ch == 'd' && x < W - 1) {
x++;
} else if (ch == 'q') {
attackEffect(x, y);
} else if (ch == 'e' && skillUnlocked[0] && skillCooldown[0] == 0) {
x = min(W - 1, x + 3);
skillCooldown[0] = 30;
} else if (ch == 'r' && skillUnlocked[1] && skillCooldown[1] == 0) {
setColor(LIGHTMAGENTA, BLACK);
for (int i = max(0, y - 1); i <= min(H - 1, y + 1); i++) {
for (int j = max(0, x - 1); j <= min(W - 1, x + 1); j++) {
if (map[i][j] == 'A') {
clearedCount++;
score += 10;
if (clearedCount % 10 == 0) {
skillPoints++;
}
}
map[i][j] = '.';
gotoxy(j, i);
cout << "*";
}
}
skillCooldown[1] = 60;
Sleep(50);
} else if (ch == 'f' && skillUnlocked[2] && skillCooldown[2] == 0) {
timeFrozen = true;
freezeTimer = 100;
skillCooldown[2] = 300;
} else if (ch == 't' && skillUnlocked[3] && skillCooldown[3] == 0) {
shieldActive = true;
shieldTimer = 50;
skillCooldown[3] = 120;
} else if (ch == 'g' && skillUnlocked[4] && skillCooldown[4] == 0) {
magneticAttract(x, y);
skillCooldown[4] = 90;
} else if (ch == 'v' && skillUnlocked[5] && skillCooldown[5] == 0) {
createClones(x, y);
skillCooldown[5] = 180;
}
}
gotoxy(0, 0);
setColor(LIGHTCYAN, BLACK);
pmap();
setColor(YELLOW, BLACK);
gotoxy(x, y);
cout << "O";
showUI(x, y);
Sleep(15);
}
system("cls");
setColor(WHITE, BLACK);
cout << "游戏结束!" << endl;
cout << "最终分数: " << score << endl;
cout << "获得技能点: " << skillPoints << endl;
setColor(LIGHTGRAY, BLACK);
return 0;
}
和
#include <iostream>
#include <ctime>
#include <cstdlib>
#include <conio.h>
#include <windows.h>
#include <vector>
#include <string>
using namespace std;
#define W 30
#define H 20
// 颜色定义
enum Color {
BLACK = 0, BLUE = 1, GREEN = 2, CYAN = 3, RED = 4,
MAGENTA = 5, BROWN = 6, LIGHTGRAY = 7, DARKGRAY = 8,
LIGHTBLUE = 9, LIGHTGREEN = 10, LIGHTCYAN = 11,
LIGHTRED = 12, LIGHTMAGENTA = 13, YELLOW = 14, WHITE = 15
};
// 全局变量
char map[H][W];
int skillPoints = 0;
bool skillUnlocked[6] = {1, 1, 1, 1, 1, 1}; // 扩展到6个技能
int skillCooldown[6] = {0};
int clearedCount = 0;
int score = 0;
bool timeFrozen = false;
int freezeTimer = 0;
bool shieldActive = false;
int shieldTimer = 0;
bool cloneActive = false;
int cloneTimer = 0;
int cloneX1, cloneY1, cloneX2, cloneY2;
// 设置控制台文本颜色
void setColor(int textColor, int bgColor) {
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), (bgColor << 4) | textColor);
}
// 移动光标到指定位置
void gotoxy(int x, int y) {
COORD coord;
coord.X = x;
coord.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}
// 隐藏光标
void hideCursor() {
CONSOLE_CURSOR_INFO cursor_info = {1, 0};
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}
// 绘制地图
void pmap() {
for (int i = 0; i < H; i++) {
for (int j = 0; j < W; j++) {
if (map[i][j] == 'A') {
setColor(LIGHTGREEN, BLACK);
cout << 'A';
} else if (map[i][j] == 'P') {
setColor(LIGHTMAGENTA, BLACK);
cout << 'P';
} else {
setColor(LIGHTCYAN, BLACK);
cout << map[i][j];
}
}
cout << endl;
}
}
// 显示游戏界面
void showUI(int x, int y) {
// 显示分数和技能点数
gotoxy(W + 2, 2);
setColor(YELLOW, BLACK);
cout << "分数: " << score;
gotoxy(W + 2, 4);
setColor(LIGHTBLUE, BLACK);
cout << "技能点: " << skillPoints;
// 显示技能状态
gotoxy(W + 2, 6);
setColor(WHITE, BLACK);
cout << "技能状态:";
gotoxy(W + 2, 7);
setColor(skillUnlocked[0] ? LIGHTGREEN : DARKGRAY, BLACK);
cout << "E-闪电冲刺 " << (skillCooldown[0] > 0 ? to_string(skillCooldown[0]) : "就绪");
gotoxy(W + 2, 8);
setColor(skillUnlocked[1] ? LIGHTRED : DARKGRAY, BLACK);
cout << "R-范围清除 " << (skillCooldown[1] > 0 ? to_string(skillCooldown[1]) : "就绪");
gotoxy(W + 2, 9);
setColor(skillUnlocked[2] ? LIGHTCYAN : DARKGRAY, BLACK);
cout << "F-时间冻结 " << (skillCooldown[2] > 0 ? to_string(skillCooldown[2]) : "就绪");
gotoxy(W + 2, 10);
setColor(skillUnlocked[3] ? LIGHTBLUE : DARKGRAY, BLACK);
cout << "T-护盾防御 " << (skillCooldown[3] > 0 ? to_string(skillCooldown[3]) : "就绪");
gotoxy(W + 2, 11);
setColor(skillUnlocked[4] ? YELLOW : DARKGRAY, BLACK);
cout << "G-磁力吸引 " << (skillCooldown[4] > 0 ? to_string(skillCooldown[4]) : "就绪");
gotoxy(W + 2, 12);
setColor(skillUnlocked[5] ? LIGHTMAGENTA : DARKGRAY, BLACK);
cout << "V-分身幻影 " << (skillCooldown[5] > 0 ? to_string(skillCooldown[5]) : "就绪");
// 显示特殊状态
if (shieldActive) {
gotoxy(W + 2, 14);
setColor(LIGHTBLUE, BLACK);
cout << "护盾剩余: " << shieldTimer / 10 << "秒";
if (cloneActive) {
gotoxy(W + 2, 15);
setColor(LIGHTMAGENTA, BLACK);
cout << "分身剩余: " << cloneTimer / 10 << "秒";
}
// 显示控制说明
gotoxy(W + 2, 17);
setColor(LIGHTGRAY, BLACK);
cout << "控制说明:";
gotoxy(W + 2, 18);
cout << "WASD - 移动";
gotoxy(W + 2, 19);
cout << "Q - 攻击";
gotoxy(W + 2, 20);
cout << "B - 技能商店";
gotoxy(W + 2, 21);
cout << "ESC - 退出";
}
}
// 磁力吸引技能
void magneticAttract(int x, int y) {
setColor(YELLOW, BLACK);
for (int i = 0; i < H; i++) {
for (int j = 0; j < W; j++) {
if (map[i][j] == 'A') {
// 计算方向向量
int dx = (x - j) > 0 ? 1 : -1;
int dy = (y - i) > 0 ? 1 : -1;
// 移动敌人2-3格
int moveX = min(2, abs(x - j));
int moveY = min(2, abs(y - i));
int newX = j + dx * moveX;
int newY = i + dy * moveY;
if (newX >= 0 && newX < W && newY >= 0 && newY < H) {
map[i][j] = '.';
map[newY][newX] = 'A';
// 显示拖尾效果
gotoxy(j, i);
cout << ".";
gotoxy(newX, newY);
setColor(LIGHTGREEN, BLACK);
cout << "A";
}
}
}
}
}
// 创建分身技能
void createClones(int x, int y) {
cloneActive = true;
cloneTimer = 150; // 15秒
// 在玩家左右两侧创建分身
cloneX1 = max(0, x - 2);
cloneY1 = y;
cloneX2 = min(W - 1, x + 2);
cloneY2 = y;
// 显示分身
gotoxy(cloneX1, cloneY1);
setColor(LIGHTMAGENTA, BLACK);
cout << "P";
gotoxy(cloneX2, cloneY2);
setColor(LIGHTMAGENTA, BLACK);
cout << "P";
}
// 分身攻击逻辑
void cloneAttack() {
if (cloneActive) {
// 分身1攻击
for (int i = max(0, cloneY1 - 1); i <= min(H - 1, cloneY1 + 1); i++) {
for (int j = max(0, cloneX1 - 1); j <= min(W - 1, cloneX1 + 1); j++) {
if (map[i][j] == 'A') {
score += 5; // 分身攻击获得50%分数
map[i][j] = '.';
gotoxy(j, i);
cout << ".";
}
}
// 分身2攻击
for (int i = max(0, cloneY2 - 1); i <= min(H - 1, cloneY2 + 1); i++) {
for (int j = max(0, cloneX2 - 1); j <= min(W - 1, cloneX2 + 1); j++) {
if (map[i][j] == 'A') {
score += 5;
map[i][j] = '.';
gotoxy(j, i);
cout << ".";
}
}
}
}
}
}
// 技能商店
void showSkillShop() {
system("cls");
setColor(WHITE, BLACK);
cout << "=== 技能商店 ===" << endl;
cout << "技能点: " << skillPoints << endl << endl;
cout << "1. 闪电冲刺 (2点)" << endl;
cout << " 效果: 瞬间向前移动3格" << endl;
cout << " 状态: " << (skillUnlocked[0] ? "已解锁" : "未解锁") << endl << endl;
cout << "2. 范围清除 (3点)" << endl;
cout << " 效果: 清除3x3范围内的敌人" << endl;
cout << " 状态: " << (skillUnlocked[1] ? "已解锁" : "未解锁") << endl << endl;
cout << "3. 时间冻结 (5点)" << endl;
cout << " 效果: 暂停敌人生成10秒" << endl;
cout << " 状态: " << (skillUnlocked[2] ? "已解锁" : "未解锁") << endl << endl;
cout << "4. 护盾防御 (4点)" << endl;
cout << " 效果: 生成5秒防护罩免疫伤害" << endl;
cout << " 状态: " << (skillUnlocked[3] ? "已解锁" : "未解锁") << endl << endl;
cout << "5. 磁力吸引 (3点)" << endl;
cout << " 效果: 吸引所有敌人到身边" << endl;
cout << " 状态: " << (skillUnlocked[4] ? "已解锁" : "未解锁") << endl << endl;
cout << "6. 分身幻影 (6点)" << endl;
cout << " 效果: 创建2个自动攻击的分身" << endl;
cout << " 状态: " << (skillUnlocked[5] ? "已解锁" : "未解锁") << endl << endl;
cout << "输入数字购买技能 (0返回): ";
char choice = _getch();
if (choice == '1' && !skillUnlocked[0] && skillPoints >= 2) {
skillPoints -= 2;
skillUnlocked[0] = true;
cout << "闪电冲刺已解锁!" << endl;
} else if (choice == '2' && !skillUnlocked[1] && skillPoints >= 3) {
skillPoints -= 3;
skillUnlocked[1] = true;
cout << "范围清除已解锁!" << endl;
} else if (choice == '3' && !skillUnlocked[2] && skillPoints >= 5) {
skillPoints -= 5;
skillUnlocked[2] = true;
cout << "时间冻结已解锁!" << endl;
} else if (choice == '4' && !skillUnlocked[3] && skillPoints >= 4) {
skillPoints -= 4;
skillUnlocked[3] = true;
cout << "护盾防御已解锁!" << endl;
} else if (choice == '5' && !skillUnlocked[4] && skillPoints >= 3) {
skillPoints -= 3;
skillUnlocked[4] = true;
cout << "磁力吸引已解锁!" << endl;
} else if (choice == '6' && !skillUnlocked[5] && skillPoints >= 6) {
skillPoints -= 6;
skillUnlocked[5] = true;
cout << "分身幻影已解锁!" << endl;
}
Sleep(1000);
}
// 更新技能冷却
void updateSkillCooldowns() {
for (int i = 0; i < 6; i++) {
if (skillCooldown[i] > 0) {
skillCooldown[i]--;
}
}
}
// 更新特殊效果
void updateSpecialEffects() {
// 更新时间冻结
if (timeFrozen) {
freezeTimer--;
if (freezeTimer <= 0) {
timeFrozen = false;
}
}
// 更新护盾
if (shieldActive) {
shieldTimer--;
if (shieldTimer <= 0) {
shieldActive = false;
}
}
// 更新分身
if (cloneActive) {
cloneTimer--;
if (cloneTimer <= 0) {
cloneActive = false;
// 清除分身显示
gotoxy(cloneX1, cloneY1);
cout << ".";
gotoxy(cloneX2, cloneY2);
cout << ".";
}
}
}
// 攻击效果
void attackEffect(int x, int y) {
setColor(LIGHTRED, BLACK);
// 清除周围8个方向的敌人
int directions[8][2] = {{1, 1}, {1, -1}, {-1, 1}, {-1, -1}, {1, 0}, {-1, 0}, {0, 1}, {0, -1}};
for (int i = 0; i < 8; i++) {
int nx = x + directions[i][0];
int ny = y + directions[i][1];
if (nx >= 0 && nx < W && ny >= 0 && ny < H) {
if (map[ny][nx] == 'A') {
clearedCount++;
score += 10;
if (clearedCount % 10 == 0) {
skillPoints++;
}
}
map[ny][nx] = '.';
gotoxy(nx, ny);
cout << "X";
}
}
Sleep(100);
}
int main() {
srand(time(nullptr));
hideCursor();
int x = 10, y = 10;
// 初始化地图
for (int i = 0; i < H; i++) {
for (int j = 0; j < W; j++) {
map[i][j] = '.';
}
}
system("cls");
setColor(LIGHTCYAN, BLACK);
pmap();
gotoxy(x, y);
setColor(YELLOW, BLACK);
cout << "O";
showUI(x, y);
char ch;
while (true) {
// 生成敌人(除非时间冻结)
if (!timeFrozen && rand() % 100 <= 8) {
int rh = rand() % H;
int rw = rand() % W;
map[rh][rw] = 'A';
}
// 更新技能冷却和特殊效果
updateSkillCooldowns();
updateSpecialEffects();
// 分身自动攻击
if (cloneActive && cloneTimer % 30 == 0) {
cloneAttack();
}
if (_kbhit()) {
ch = _getch();
if (ch == 27) { // ESC键退出
break;
} else if (ch == 'b') {
showSkillShop();
system("cls");
setColor(LIGHTCYAN, BLACK);
pmap();
} else if (ch == 'w' && y > 0) {
y--;
} else if (ch == 's' && y < H - 1) {
y++;
} else if (ch == 'a' && x > 0) {
x--;
} else if (ch == 'd' && x < W - 1) {
x++;
} else if (ch == 'q') {
attackEffect(x, y);
} else if (ch == 'i' && y > 0) {
y--;
attackEffect(x, y);
} else if (ch == 'k' && y < H - 1) {
y++;
attackEffect(x, y);
} else if (ch == 'j' && x > 0) {
x--;
attackEffect(x, y);
} else if (ch == 'l' && x < W - 1) {
x++;
attackEffect(x, y);
} else if (ch == 'z') {
x = 29;
y = 19;
} else if (ch == 'c') {
for (int i = 0; i < 5; i++) {
int rh = rand() % H;
int rw = rand() % W;
map[rh][rw] = 'A';
}
} else if (ch == 'x') {
x = 1;
}
// 技能触发
else if (ch == 'e'/* && skillUnlocked[0] && skillCooldown[0] == 0*/) {
// 闪电冲刺
int newX = min(W - 1, x + 3);
x = newX;
skillCooldown[0] = 30;
} else if (ch == 'r'/*&& skillUnlocked[1] && 0skillCooldown[1] == 0*/) {
// 范围清除
setColor(LIGHTMAGENTA, BLACK);
for (int i = max(0, y - 1); i <= min(H - 1, y + 1); i++) {
for (int j = max(0, x - 1); j <= min(W - 1, x + 1); j++) {
if (map[i][j] == 'A') {
clearedCount++;
score += 10;
if (clearedCount % 10 == 0) {
skillPoints++;
}
}
map[i][j] = '.';
gotoxy(j, i);
cout << "*";
}
}
skillCooldown[1] = 60;
Sleep(50);
} else if (ch == 'f'/* && skillUnlocked[2] && skillCooldown[2] == 0*/) {
// 时间冻结
timeFrozen = true;
freezeTimer = 100; // 约10秒
skillCooldown[2] = 300;
}
// 新增技能触发
else if (ch == 't'/* && skillUnlocked[3] && skillCooldown[3] == 0*/) {
// 护盾防御
shieldActive = true;
shieldTimer = 50; // 5秒
skillCooldown[3] = 120;
} else if (ch == 'g'/* && skillUnlocked[4] && skillCooldown[4] == 0*/) {
// 磁力吸引
magneticAttract(x, y);
skillCooldown[4] = 90;
} else if (ch == 'v'/* && skillUnlocked[5] && skillCooldown[5] == 0*/) {
// 分身幻影
createClones(x, y);
skillCooldown[5] = 180;
}
// 更新地图显示
gotoxy(0, 0);
setColor(LIGHTCYAN, BLACK);
pmap();
// 更新玩家位置
setColor(YELLOW, BLACK);
gotoxy(x, y);
cout << "O";
// 更新UI
showUI(x, y);
}
Sleep(5); // 控制游戏速度
}
// 游戏结束显示
system("cls");
setColor(WHITE, BLACK);
cout << "游戏结束!" << endl;
cout << "最终分数: " << score << endl;
cout << "获得技能点: " << skillPoints << endl;
setColor(LIGHTGRAY, BLACK);
return 0;
}
哪个好一点?
都不好
全部评论 2
TiMI
昨天 来自 浙江
0行
昨天 来自 广东
0
AI神力(
2天前 来自 重庆
0差不多,但框架是我写的
大部分技能都是 AI 加的2天前 来自 广东
0你的关注数有那么一点点的细节啊
2天前 来自 广东
0














有帮助,赞一个