添加可用角色:大筒木博人、千手柱间、佐助(六道-阴)
适当削弱了人机,给技能判定做了增强
代码如下:
cpp
#include <iostream>
#include <conio.h>
#include <windows.h>
#include <string>
#include <vector>
#include <cstdlib>
#include <ctime>
#include <thread>
#include <chrono>
#include <cmath>
using namespace std;
void setColor(int color) { HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleTextAttribute(hConsole, color); }
void gotoxy(int x, int y) { if (x < 0) x = 0; if (y < 0) y = 0; COORD coord; coord.X = (SHORT)x; coord.Y = (SHORT)y; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord); }
void hideCursor() { HANDLE consoleHandle = GetStdHandle(STD_OUTPUT_HANDLE); CONSOLE_CURSOR_INFO info; info.dwSize = 100; info.bVisible = FALSE; SetConsoleCursorInfo(consoleHandle, &info); }
void clearScreen() { system("cls"); }
struct Skill { string name; int cooldown; int currentCD; int damageMin; int damageMax; string displayChar; int duration; };
struct Character { string name; int hp; int maxHp; int x, y; bool available; vector<Skill> skills; int characterType; };
const int MAP_WIDTH = 100; const int MAP_HEIGHT = 24; const int MAP_START_X = 2; const int MAP_START_Y = 3; const int CHARACTER_ROW = MAP_HEIGHT - 1;
Character player, enemy;
bool gameRunning = false, skillInProgress = false, enemySkillInProgress = false;
int playerCharacterType = 0, enemyCharacterType = 0;
chrono::steady_clock::time_point playerSkill1CDEnd, playerSkill2CDEnd, playerSkill3CDEnd;
chrono::steady_clock::time_point enemySkill1CDEnd, enemySkill2CDEnd, enemySkill3CDEnd;
int playerShinraTenseiStack = 0, playerShinraTenseiRadius = 1, playerShinraTenseiCurrentCD = 15;
chrono::steady_clock::time_point playerShinraTenseiStart; bool playerShinraTenseiActive = false;
int enemyShinraTenseiStack = 0, enemyShinraTenseiRadius = 1, enemyShinraTenseiCurrentCD = 15;
chrono::steady_clock::time_point enemyShinraTenseiStart; bool enemyShinraTenseiActive = false;
bool playerBanshoTeninActive = false, enemyBanshoTeninActive = false;
chrono::steady_clock::time_point playerBanshoTeninEnd, enemyBanshoTeninEnd;
int playerBlackRodLeftX = 0, playerBlackRodRightX = 0, enemyBlackRodLeftX = 0, enemyBlackRodRightX = 0;
chrono::steady_clock::time_point lastEnemyAction;
bool playerNarutoTailActive = false, enemyNarutoTailActive = false;
chrono::steady_clock::time_point playerNarutoTailEnd, enemyNarutoTailEnd;
int playerNarutoTailX[3] = { 0 }, enemyNarutoTailX[3] = { 0 };
bool playerPainRodActive = false, enemyPainRodActive = false;
int playerPainRodX = 0, enemyPainRodX = 0;
chrono::steady_clock::time_point playerPainRodEnd, enemyPainRodEnd;
bool playerRodHitting = false, enemyRodHitting = false;
chrono::steady_clock::time_point playerRodHitEnd, enemyRodHitEnd;
bool playerObitoKickActive = false, playerObitoWoodSpikeActive = false, playerObitoEnemyTrapped = false;
chrono::steady_clock::time_point playerObitoKickEnd, playerObitoWoodSpikeEnd, playerObitoEnemyTrappedEnd;
int playerObitoKickX = 0, playerObitoWoodSpikeX = 0;
bool playerObitoKamuiActive = false, playerObitoKamuiSpaceActive = false, playerObitoEnemyInSpace = false;
chrono::steady_clock::time_point playerObitoKamuiEnd, playerObitoKamuiSpaceEnd;
int playerObitoSavedX = 0;
bool playerObitoFireActive = false, playerObitoWoodStormActive = false, playerObitoUltimateActive = false;
bool enemyObitoKickActive = false, enemyObitoWoodSpikeActive = false, enemyObitoEnemyTrapped = false;
chrono::steady_clock::time_point enemyObitoKickEnd, enemyObitoWoodSpikeEnd, enemyObitoEnemyTrappedEnd;
int enemyObitoKickX = 0, enemyObitoWoodSpikeX = 0;
bool enemyObitoKamuiActive = false, enemyObitoKamuiSpaceActive = false, enemyObitoPlayerInSpace = false;
chrono::steady_clock::time_point enemyObitoKamuiEnd, enemyObitoKamuiSpaceEnd;
int enemyObitoSavedX = 0;
bool enemyObitoFireActive = false, enemyObitoWoodStormActive = false, enemyObitoUltimateActive = false;
bool playerBorutoSwordActive = false; chrono::steady_clock::time_point playerBorutoSwordEnd;
int playerBorutoSwordX = 0; bool playerBorutoSwordSlashing = false;
bool playerBorutoRasenganActive = false; chrono::steady_clock::time_point playerBorutoRasenganEnd; bool playerBorutoRasenganHit = false;
bool playerBorutoMarkActive = false; chrono::steady_clock::time_point playerBorutoMarkEnd; int playerBorutoMarkX = 0;
bool playerBorutoTeleported = false; int playerBorutoTeleportSavedX = 0; bool playerBorutoTeleportBack = false;
chrono::steady_clock::time_point playerBorutoTeleportTime;
bool playerBorutoKarmaActive = false; chrono::steady_clock::time_point playerBorutoKarmaEnd;
bool playerBorutoFlying = false; chrono::steady_clock::time_point playerBorutoFlyingEnd;
int playerBorutoEnhancedAttackCount = 0; chrono::steady_clock::time_point playerBorutoEnhancedAttackCD;
bool playerBorutoBigRasenganActive = false; chrono::steady_clock::time_point playerBorutoBigRasenganDotEnd; bool playerBorutoBigRasenganHit = false;
bool playerBorutoEnhancedAttackActive = false; chrono::steady_clock::time_point playerBorutoEnhancedAttackEnd; int playerBorutoEnhancedAttackX = 0;
bool playerBorutoBigRasenganBallActive = false;
bool enemyBorutoSwordActive = false; chrono::steady_clock::time_point enemyBorutoSwordEnd;
int enemyBorutoSwordX = 0; bool enemyBorutoSwordSlashing = false;
bool enemyBorutoRasenganActive = false; chrono::steady_clock::time_point enemyBorutoRasenganEnd; bool enemyBorutoRasenganHit = false;
bool enemyBorutoMarkActive = false; chrono::steady_clock::time_point enemyBorutoMarkEnd; int enemyBorutoMarkX = 0;
bool enemyBorutoTeleported = false; int enemyBorutoTeleportSavedX = 0; bool enemyBorutoTeleportBack = false;
chrono::steady_clock::time_point enemyBorutoTeleportTime;
bool enemyBorutoKarmaActive = false; chrono::steady_clock::time_point enemyBorutoKarmaEnd;
bool enemyBorutoFlying = false; chrono::steady_clock::time_point enemyBorutoFlyingEnd;
int enemyBorutoEnhancedAttackCount = 0; chrono::steady_clock::time_point enemyBorutoEnhancedAttackCD;
bool playerHashiramaStompActive = false; chrono::steady_clock::time_point playerHashiramaStompEnd; int playerHashiramaStompX = 0;
bool playerHashiramaWoodDragonActive = false; chrono::steady_clock::time_point playerHashiramaWoodDragonEnd; int playerHashiramaWoodDragonX = 0;
bool playerHashiramaWoodDragonHit = false; chrono::steady_clock::time_point playerHashiramaWoodDragonTrapEnd; bool playerHashiramaEnemyTrapped = false;
bool playerHashiramaMyojinmonActive = false; bool playerHashiramaMyojinmonUsed = false;
bool playerHashiramaWoodGolemActive = false; chrono::steady_clock::time_point playerHashiramaWoodGolemEnd;
int playerHashiramaWoodGolemAttackCount = 0; chrono::steady_clock::time_point playerHashiramaWoodGolemAttackCD;
bool playerHashiramaUltimateActive = false;
bool enemyHashiramaStompActive = false; chrono::steady_clock::time_point enemyHashiramaStompEnd; int enemyHashiramaStompX = 0;
bool enemyHashiramaWoodDragonActive = false; chrono::steady_clock::time_point enemyHashiramaWoodDragonEnd; int enemyHashiramaWoodDragonX = 0;
bool enemyHashiramaWoodDragonHit = false; chrono::steady_clock::time_point enemyHashiramaWoodDragonTrapEnd; bool enemyHashiramaEnemyTrapped = false;
bool enemyHashiramaMyojinmonActive = false; bool enemyHashiramaMyojinmonUsed = false;
bool enemyHashiramaWoodGolemActive = false; chrono::steady_clock::time_point enemyHashiramaWoodGolemEnd;
int enemyHashiramaWoodGolemAttackCount = 0; chrono::steady_clock::time_point enemyHashiramaWoodGolemAttackCD;
bool enemyHashiramaUltimateActive = false;
bool playerSasukeSlashActive = false; chrono::steady_clock::time_point playerSasukeSlashEnd; chrono::steady_clock::time_point playerSasukeSlashCD;
int playerSasukeSlashX = 0;
bool playerSasukeAmaterasuActive = false; chrono::steady_clock::time_point playerSasukeAmaterasuEnd; chrono::steady_clock::time_point playerSasukeAmaterasuTick;
bool playerSasukeAmaterasuHit = false;
bool playerSasukeSusanooActive = false; chrono::steady_clock::time_point playerSasukeSusanooEnd;
int playerSasukeSusanooSlashCount = 0; chrono::steady_clock::time_point playerSasukeSusanooSlashCD;
bool playerSasukeSusanooSlashActive = false; chrono::steady_clock::time_point playerSasukeSusanooSlashEnd;
bool playerSasukeUltimateActive = false; chrono::steady_clock::time_point playerSasukeSubSkillCD;
bool enemySasukeSlashActive = false; chrono::steady_clock::time_point enemySasukeSlashEnd; chrono::steady_clock::time_point enemySasukeSlashCD;
int enemySasukeSlashX = 0;
bool enemySasukeAmaterasuActive = false; chrono::steady_clock::time_point enemySasukeAmaterasuEnd; chrono::steady_clock::time_point enemySasukeAmaterasuTick;
bool enemySasukeAmaterasuHit = false;
bool enemySasukeSusanooActive = false; chrono::steady_clock::time_point enemySasukeSusanooEnd;
int enemySasukeSusanooSlashCount = 0; chrono::steady_clock::time_point enemySasukeSusanooSlashCD;
bool enemySasukeSusanooSlashActive = false; chrono::steady_clock::time_point enemySasukeSusanooSlashEnd;
bool enemySasukeUltimateActive = false; chrono::steady_clock::time_point enemySasukeSubSkillCD;
int enemyPhase = 0, enemyNormalAttackCount = 0; chrono::steady_clock::time_point enemyPhaseStart; bool enemyUltimateReady = false;
int enemyAIMood = 0, enemyConsecutiveSkills = 0, enemyStuckCounter = 0, enemyLastActionType = -1;
chrono::steady_clock::time_point enemyLastSkillTime; bool enemyJustMoved = false;
int getRemainingCD(chrono::steady_clock::time_point cdEnd) { auto now = chrono::steady_clock::now(); if (now >= cdEnd) return 0; return chrono::duration_cast<chrono::seconds>(cdEnd - now).count() + 1; }
vector<Character> getAllCharacters() {
vector<Character> chars;
Character c1 = { "漩涡鸣人(九尾查克拉)",300,300,0,0,true,{{"螺旋丸",8,0,8,15,"O",1},{"九尾抓取",15,0,20,25,"------",0},{"尾兽玉",0,0,35,35,"0",3}},0 };
Character c10 = { "佩恩(天道)",300,300,0,0,true,{{"万象天引",12,0,10,13,"\\/",5},{"神罗天征",15,0,8,15,"()",3},{"超神罗天征",0,0,50,50,"{}",5}},1 };
Character c13 = { "宇智波带土(忍界大战)",300,300,0,0,true,{{"木遁-扦插/火遁-火龙卷",20,0,12,16,"-",15},{"神威/神威-空间",10,0,0,0,"()",5},{"十尾入侵",0,0,50,50,"*",5}},2 };
Character c70 = { "大筒木博人",300,300,0,0,true,{{"螺旋丸-涡彦/大筒木-飞行",18,0,8,12,"O",3},{"亚-飞雷神/超大玉-螺旋丸-涡彦",8,0,10,18,"----",5},{"楔",45,0,0,0,"*",60}},3 };
Character c71 = { "千手柱间",300,300,0,0,true,{{"木龙扦插之术/明神门",15,0,15,20,"~",8},{"木人之术",18,0,22,35,"¥",5},{"千手观音",0,0,80,80,"\\",3}},4 };
Character c72 = { "宇智波佐助(六道-阴)",300,300,0,0,true,{{"天照",10,0,5,5,"-",5},{"天手力",8,0,12,18,")",2},{"地爆天星-斩",0,0,20,35,"*",5}},5 };
chars.push_back(c1); chars.push_back({ "佐助(鹰小队)",300,300,0,0,false,{},0 }); chars.push_back({ "旗木卡卡西(万花筒写轮眼)",300,300,0,0,false,{},0 });
chars.push_back({ "波风水门(四代目火影)",300,300,0,0,false,{},0 }); chars.push_back({ "春野樱(百豪怪力)",300,300,0,0,false,{},0 });
chars.push_back({ "自来也(仙人模式)",300,300,0,0,false,{},0 }); chars.push_back({ "纲手(百豪)",300,300,0,0,false,{},0 });
chars.push_back({ "大蛇丸(八岐之术)",300,300,0,0,false,{},0 }); chars.push_back({ "漩涡长门(轮回之力)",300,300,0,0,false,{},0 });
chars.push_back(c10); chars.push_back({ "佩恩(修罗道)",300,300,0,0,false,{},0 }); chars.push_back({ "宇智波斑(虎皮面具男)",300,300,0,0,false,{},0 });
chars.push_back(c13); chars.push_back(c70); chars.push_back(c71); chars.push_back(c72);
chars.push_back({ "佩恩(畜生道-男)",300,300,0,0,false,{},0 }); chars.push_back({ "佩恩(畜生道-女)",300,300,0,0,false,{},0 });
chars.push_back({ "佩恩(人间道)",300,300,0,0,false,{},0 }); chars.push_back({ "佩恩(地狱道)",300,300,0,0,false,{},0 });
chars.push_back({ "佩恩(饿鬼道)",300,300,0,0,false,{},0 }); chars.push_back({ "宇智波斑",300,300,0,0,false,{},0 });
chars.push_back({ "千手柱间(已选)",300,300,0,0,false,{},0 }); chars.push_back({ "千手扉间",300,300,0,0,false,{},0 });
chars.push_back({ "宇智波斑(秽土转生)",300,300,0,0,false,{},0 }); chars.push_back({ "千手柱间(秽土转生)",300,300,0,0,false,{},0 });
chars.push_back({ "千手扉间(秽土转生)",300,300,0,0,false,{},0 }); chars.push_back({ "宇智波鼬(灭族之夜)",300,300,0,0,false,{},0 });
chars.push_back({ "宇智波鼬(晓)",300,300,0,0,false,{},0 }); chars.push_back({ "宇智波鼬(秽土转生)",300,300,0,0,false,{},0 });
chars.push_back({ "面具男(灭族之夜)",300,300,0,0,false,{},0 }); chars.push_back({ "旗木卡卡西(须佐能乎)",300,300,0,0,false,{},0 });
chars.push_back({ "黑绝",300,300,0,0,false,{},0 }); chars.push_back({ "绝(晓)",300,300,0,0,false,{},0 });
chars.push_back({ "鬼鲛(晓)",300,300,0,0,false,{},0 }); chars.push_back({ "鬼鲛(鲛肌)",300,300,0,0,false,{},0 });
chars.push_back({ "迪达拉(晓)",300,300,0,0,false,{},0 }); chars.push_back({ "迪达拉(秽土转生)",300,300,0,0,false,{},0 });
chars.push_back({ "蝎(晓)",300,300,0,0,false,{},0 }); chars.push_back({ "蝎(秽土转生)",300,300,0,0,false,{},0 });
chars.push_back({ "宇智波止水(万花筒写轮眼)",300,300,0,0,false,{},0 }); chars.push_back({ "宇智波止水(须佐能乎)",300,300,0,0,false,{},0 });
chars.push_back({ "宇智波佐助(须佐能乎)",300,300,0,0,false,{},0 }); chars.push_back({ "宇智波佐助(六道-阴已选)",300,300,0,0,false,{},0 });
chars.push_back({ "漩涡鸣人(六道-阳)",300,300,0,0,false,{},0 }); chars.push_back({ "宇智波泉奈",300,300,0,0,false,{},0 });
chars.push_back({ "神农",300,300,0,0,false,{},0 }); chars.push_back({ "我爱罗(青年)",300,300,0,0,false,{},0 });
chars.push_back({ "宇智波带土(十尾人柱力)",300,300,0,0,false,{},0 }); chars.push_back({ "宇智波斑(十尾人柱力)",300,300,0,0,false,{},0 });
chars.push_back({ "宇智波斑(六道)",300,300,0,0,false,{},0 }); chars.push_back({ "宇智波带土(双神威)",300,300,0,0,false,{},0 });
chars.push_back({ "宇智波带土(百战成灰)",300,300,0,0,false,{},0 }); chars.push_back({ "春野樱(忍战)",300,300,0,0,false,{},0 });
chars.push_back({ "我爱罗(忍战)",300,300,0,0,false,{},0 }); chars.push_back({ "大筒木辉夜",300,300,0,0,false,{},0 });
chars.push_back({ "角都(晓)",300,300,0,0,false,{},0 }); chars.push_back({ "角都(秽土转生)",300,300,0,0,false,{},0 });
chars.push_back({ "宇智波佐良娜",300,300,0,0,false,{},0 }); chars.push_back({ "漩涡博人",300,300,0,0,false,{},0 });
chars.push_back({ "漩涡向日葵",300,300,0,0,false,{},0 }); chars.push_back({ "宇智波佐良娜(万花筒写轮眼)",300,300,0,0,false,{},0 });
chars.push_back({ "川木(楔)",300,300,0,0,false,{},0 }); chars.push_back({ "漩涡博人(桃式)",300,300,0,0,false,{},0 });
chars.push_back({ "漩涡向日葵(九尾查克拉)",300,300,0,0,false,{},0 });
chars.push_back({ "漩涡川木(青年)",300,300,0,0,false,{},0 }); chars.push_back({ "漩涡鸣人(重粒子模式)",300,300,0,0,false,{},0 });
chars.push_back({ "宇智波佐助(轮回眼)",300,300,0,0,false,{},0 }); chars.push_back({ "大筒木桃式",300,300,0,0,false,{},0 });
chars.push_back({ "大筒木金式",300,300,0,0,false,{},0 }); chars.push_back({ "大筒木壹式",300,300,0,0,false,{},0 });
return chars;
}
void drawStartScreen() { clearScreen(); hideCursor(); setColor(6); gotoxy(35, 10); cout << "========================="; gotoxy(35, 11); cout << "|| ||"; gotoxy(35, 12); cout << "|| 火影忍者 ||"; gotoxy(35, 13); cout << "|| ||"; gotoxy(35, 14); cout << "========================="; setColor(7); gotoxy(35, 17); cout << "按 ENTER 进入游戏"; }
void drawLaunchScreen(int selectedIndex) { clearScreen(); hideCursor(); setColor(6); gotoxy(40, 5); cout << "火 影 忍 者"; setColor(7); vector<string> options = { "对决模式","剧情模式","打开官网","退出游戏" }; for (int i = 0;i < options.size();i++) { gotoxy(35, 10 + i * 3); if (i == selectedIndex) { setColor(10);cout << "> "; } else { cout << " "; } setColor(7); cout << options[i]; } setColor(8); gotoxy(30, 25); cout << "W/S - 选择 | ENTER - 确认"; }
void drawSelectScreen(int selectedIndex) { clearScreen(); hideCursor(); setColor(6); gotoxy(35, 2); cout << "=== 选择你的忍者 ==="; vector<Character> chars = getAllCharacters(); int row = 0, col = 0; for (int i = 0;i < chars.size();i++) { int x = 2 + col * 24; int y = 5 + row * 3; gotoxy(x, y); if (i == selectedIndex) { setColor(10);cout << "> "; } else { cout << " "; } if (chars[i].available) { setColor(10); } else { setColor(12); } cout << chars[i].name; cout << " "; col++; if (col >= 5) { col = 0;row++; } } }
void drawBattleMap() {
clearScreen(); hideCursor(); gotoxy(2, 0); setColor(10); cout << player.name; gotoxy(2, 1); cout << "HP: ["; int hpBars = player.hp * 50 / player.maxHp; if (hpBars < 0)hpBars = 0; for (int i = 0;i < 50;i++) { if (i < hpBars) { setColor(10);cout << "#"; } else { setColor(8);cout << "-"; } } setColor(7); cout << "] " << player.hp << "/" << player.maxHp; gotoxy(MAP_WIDTH + MAP_START_X - 20, 0); setColor(12); cout << enemy.name; gotoxy(MAP_WIDTH + MAP_START_X - 20, 1); cout << "HP: ["; hpBars = enemy.hp * 50 / enemy.maxHp; if (hpBars < 0)hpBars = 0; for (int i = 0;i < 50;i++) { if (i < hpBars) { setColor(12);cout << "#"; } else { setColor(8);cout << "-"; } } setColor(7); cout << "] " << enemy.hp << "/" << enemy.maxHp; setColor(7); gotoxy(MAP_START_X, MAP_START_Y); for (int i = 0;i < MAP_WIDTH;i++)cout << "-"; gotoxy(MAP_START_X, MAP_START_Y + MAP_HEIGHT); for (int i = 0;i < MAP_WIDTH;i++)cout << "-"; for (int i = 0;i < MAP_HEIGHT;i++) { gotoxy(MAP_START_X, MAP_START_Y + i);cout << "|";gotoxy(MAP_START_X + MAP_WIDTH, MAP_START_Y + i);cout << "|"; } int charY = MAP_START_Y + CHARACTER_ROW; if (!playerObitoEnemyInSpace && !enemyObitoPlayerInSpace) { gotoxy(MAP_START_X + enemy.x, charY);setColor(12);cout << "&"; } int borutoY = charY; if (playerBorutoFlying) { auto now = chrono::steady_clock::now();if (now < playerBorutoFlyingEnd)borutoY = charY - 2;else playerBorutoFlying = false; } if (enemyBorutoFlying) { auto now = chrono::steady_clock::now();if (now < enemyBorutoFlyingEnd)charY = MAP_START_Y + CHARACTER_ROW - 2;else enemyBorutoFlying = false; } gotoxy(MAP_START_X + player.x, borutoY);setColor(10);cout << "@";
if (playerNarutoTailActive) { auto now = chrono::steady_clock::now();if (now < playerNarutoTailEnd) { for (int i = 0;i < 3;i++) { if (playerNarutoTailX[i] > 0 && playerNarutoTailX[i] < MAP_WIDTH && playerNarutoTailX[i] != enemy.x) { gotoxy(MAP_START_X + playerNarutoTailX[i], charY);setColor(14);cout << "-"; } } } else { playerNarutoTailActive = false; } }
if (enemyNarutoTailActive) { auto now = chrono::steady_clock::now();if (now < enemyNarutoTailEnd) { for (int i = 0;i < 3;i++) { if (enemyNarutoTailX[i] > 0 && enemyNarutoTailX[i] < MAP_WIDTH && enemyNarutoTailX[i] != player.x) { gotoxy(MAP_START_X + enemyNarutoTailX[i], charY);setColor(14);cout << "-"; } } } else { enemyNarutoTailActive = false; } }
if (playerPainRodActive) { auto now = chrono::steady_clock::now();if (now < playerPainRodEnd) { if (playerPainRodX > 0 && playerPainRodX < MAP_WIDTH && playerPainRodX != enemy.x && playerPainRodX != player.x) { gotoxy(MAP_START_X + playerPainRodX, charY);setColor(8);cout << "\\"; } } else { playerPainRodActive = false;playerRodHitting = false; } }
if (enemyPainRodActive) { auto now = chrono::steady_clock::now();if (now < enemyPainRodEnd) { if (enemyPainRodX > 0 && enemyPainRodX < MAP_WIDTH && enemyPainRodX != player.x && enemyPainRodX != enemy.x) { gotoxy(MAP_START_X + enemyPainRodX, charY);setColor(8);cout << "\\"; } } else { enemyPainRodActive = false;enemyRodHitting = false; } }
if (playerBanshoTeninActive) { auto now = chrono::steady_clock::now();if (now < playerBanshoTeninEnd) { if (playerBlackRodLeftX > 0 && playerBlackRodLeftX != enemy.x && playerBlackRodLeftX != player.x) { gotoxy(MAP_START_X + playerBlackRodLeftX, charY);setColor(8);cout << "\\"; }if (playerBlackRodRightX < MAP_WIDTH && playerBlackRodRightX != enemy.x && playerBlackRodRightX != player.x) { gotoxy(MAP_START_X + playerBlackRodRightX, charY);cout << "/"; } } else { playerBanshoTeninActive = false; } }
if (enemyBanshoTeninActive) { auto now = chrono::steady_clock::now();if (now < enemyBanshoTeninEnd) { if (enemyBlackRodLeftX > 0 && enemyBlackRodLeftX != player.x && enemyBlackRodLeftX != enemy.x) { gotoxy(MAP_START_X + enemyBlackRodLeftX, charY);setColor(8);cout << "\\"; }if (enemyBlackRodRightX < MAP_WIDTH && enemyBlackRodRightX != player.x && enemyBlackRodRightX != enemy.x) { gotoxy(MAP_START_X + enemyBlackRodRightX, charY);cout << "/"; } } else { enemyBanshoTeninActive = false; } }
if (playerObitoKickActive) { auto now = chrono::steady_clock::now();if (now < playerObitoKickEnd) { if (playerObitoKickX > 0 && playerObitoKickX < MAP_WIDTH && playerObitoKickX != enemy.x) { gotoxy(MAP_START_X + playerObitoKickX, charY);setColor(8);cout << "-"; } } else { playerObitoKickActive = false; } }
if (enemyObitoKickActive) { auto now = chrono::steady_clock::now();if (now < enemyObitoKickEnd) { if (enemyObitoKickX > 0 && enemyObitoKickX < MAP_WIDTH && enemyObitoKickX != player.x) { gotoxy(MAP_START_X + enemyObitoKickX, charY);setColor(8);cout << "-"; } } else { enemyObitoKickActive = false; } }
if (playerObitoWoodSpikeActive) { auto now = chrono::steady_clock::now();if (now < playerObitoWoodSpikeEnd && playerObitoWoodSpikeX>0 && playerObitoWoodSpikeX < MAP_WIDTH) { if (playerObitoWoodSpikeX != enemy.x && playerObitoWoodSpikeX != player.x) { gotoxy(MAP_START_X + playerObitoWoodSpikeX, charY);setColor(2);cout << "-"; } }if (playerObitoEnemyTrapped && now < playerObitoEnemyTrappedEnd) { if (enemy.x - 1 > 0 && enemy.x - 1 != player.x) { gotoxy(MAP_START_X + enemy.x - 1, charY);setColor(2);cout << ">"; }if (enemy.x + 1 < MAP_WIDTH && enemy.x + 1 != player.x) { gotoxy(MAP_START_X + enemy.x + 1, charY);setColor(2);cout << "<"; } } else if (now >= playerObitoEnemyTrappedEnd) { playerObitoEnemyTrapped = false;playerObitoWoodSpikeActive = false; } }
if (enemyObitoWoodSpikeActive) { auto now = chrono::steady_clock::now();if (now < enemyObitoWoodSpikeEnd && enemyObitoWoodSpikeX>0 && enemyObitoWoodSpikeX < MAP_WIDTH) { if (enemyObitoWoodSpikeX != player.x && enemyObitoWoodSpikeX != enemy.x) { gotoxy(MAP_START_X + enemyObitoWoodSpikeX, charY);setColor(2);cout << "-"; } }if (enemyObitoEnemyTrapped && now < enemyObitoEnemyTrappedEnd) { if (player.x - 1 > 0 && player.x - 1 != enemy.x) { gotoxy(MAP_START_X + player.x - 1, charY);setColor(2);cout << ">"; }if (player.x + 1 < MAP_WIDTH && player.x + 1 != enemy.x) { gotoxy(MAP_START_X + player.x + 1, charY);setColor(2);cout << "<"; } } }
if (playerObitoKamuiActive && !playerObitoKamuiSpaceActive) { auto now = chrono::steady_clock::now();if (now < playerObitoKamuiEnd) { if (player.x - 1 > 0) { gotoxy(MAP_START_X + player.x - 1, charY);setColor(4);cout << "("; }if (player.x + 1 < MAP_WIDTH) { gotoxy(MAP_START_X + player.x + 1, charY);setColor(4);cout << ")"; } } else { playerObitoKamuiActive = false; } }
if (enemyObitoKamuiActive && !enemyObitoKamuiSpaceActive) { auto now = chrono::steady_clock::now();if (now < enemyObitoKamuiEnd) { if (enemy.x - 1 > 0) { gotoxy(MAP_START_X + enemy.x - 1, charY);setColor(4);cout << "("; }if (enemy.x + 1 < MAP_WIDTH) { gotoxy(MAP_START_X + enemy.x + 1, charY);setColor(4);cout << ")"; } } else { enemyObitoKamuiActive = false; } }
if (playerBorutoSwordActive && playerBorutoSwordSlashing) { if (playerBorutoSwordX > 0 && playerBorutoSwordX < MAP_WIDTH) { gotoxy(MAP_START_X + playerBorutoSwordX, charY);setColor(15);cout << "-";if (playerBorutoSwordX + 1 < MAP_WIDTH) { gotoxy(MAP_START_X + playerBorutoSwordX + 1, charY);setColor(15);cout << "-"; } } }
if (enemyBorutoSwordActive && enemyBorutoSwordSlashing) { if (enemyBorutoSwordX > 0 && enemyBorutoSwordX < MAP_WIDTH) { gotoxy(MAP_START_X + enemyBorutoSwordX, charY);setColor(15);cout << "-";if (enemyBorutoSwordX + 1 < MAP_WIDTH) { gotoxy(MAP_START_X + enemyBorutoSwordX + 1, charY);setColor(15);cout << "-"; } } }
if (playerBorutoRasenganActive) { auto now = chrono::steady_clock::now();if (now < playerBorutoRasenganEnd) { gotoxy(MAP_START_X + enemy.x - 1, charY);setColor(11);cout << "O"; } else { playerBorutoRasenganActive = false; } }
if (enemyBorutoRasenganActive) { auto now = chrono::steady_clock::now();if (now < enemyBorutoRasenganEnd) { gotoxy(MAP_START_X + player.x + 1, charY);setColor(11);cout << "O"; } else { enemyBorutoRasenganActive = false; } }
if (playerBorutoMarkActive) { auto now = chrono::steady_clock::now();if (now < playerBorutoMarkEnd) { if (playerBorutoMarkX > 0 && playerBorutoMarkX < MAP_WIDTH) { gotoxy(MAP_START_X + playerBorutoMarkX, charY - 1);setColor(9);cout << "*"; } } else { playerBorutoMarkActive = false; } }
if (enemyBorutoMarkActive) { auto now = chrono::steady_clock::now();if (now < enemyBorutoMarkEnd) { if (enemyBorutoMarkX > 0 && enemyBorutoMarkX < MAP_WIDTH) { gotoxy(MAP_START_X + enemyBorutoMarkX, charY - 1);setColor(9);cout << "*"; } } else { enemyBorutoMarkActive = false; } }
if (playerHashiramaStompActive) { auto now = chrono::steady_clock::now();if (now < playerHashiramaStompEnd) { if (playerHashiramaStompX > 0 && playerHashiramaStompX < MAP_WIDTH && playerHashiramaStompX != enemy.x) { gotoxy(MAP_START_X + playerHashiramaStompX, charY);setColor(8);cout << "L"; } } else { playerHashiramaStompActive = false; } }
if (enemyHashiramaStompActive) { auto now = chrono::steady_clock::now();if (now < enemyHashiramaStompEnd) { if (enemyHashiramaStompX > 0 && enemyHashiramaStompX < MAP_WIDTH && enemyHashiramaStompX != player.x) { gotoxy(MAP_START_X + enemyHashiramaStompX, charY);setColor(8);cout << "L"; } } else { enemyHashiramaStompActive = false; } }
if (playerHashiramaWoodDragonActive) { auto now = chrono::steady_clock::now();if (now < playerHashiramaWoodDragonEnd) { for (int i = 0;i < 10;i++) { int dx = player.x + 1 + i;if (dx < MAP_WIDTH && dx != enemy.x && dx != player.x) { gotoxy(MAP_START_X + dx, charY);setColor(2);cout << "~"; } }if (player.x + 1 < MAP_WIDTH) { gotoxy(MAP_START_X + player.x + 1, charY);setColor(2);cout << "€"; } }if (playerHashiramaEnemyTrapped && now < playerHashiramaWoodDragonTrapEnd) { if (enemy.x - 1 > 0 && enemy.x - 1 != player.x) { gotoxy(MAP_START_X + enemy.x - 1, charY);setColor(2);cout << ">"; }if (enemy.x + 1 < MAP_WIDTH && enemy.x + 1 != player.x) { gotoxy(MAP_START_X + enemy.x + 1, charY);setColor(2);cout << "<"; } } }
if (enemyHashiramaWoodDragonActive) { auto now = chrono::steady_clock::now();if (now < enemyHashiramaWoodDragonEnd) { for (int i = 0;i < 10;i++) { int dx = enemy.x - 1 - i;if (dx > 0 && dx != player.x && dx != enemy.x) { gotoxy(MAP_START_X + dx, charY);setColor(2);cout << "~"; } }if (enemy.x - 1 > 0) { gotoxy(MAP_START_X + enemy.x - 1, charY);setColor(2);cout << "€"; } }if (enemyHashiramaEnemyTrapped && now < enemyHashiramaWoodDragonTrapEnd) { if (player.x - 1 > 0 && player.x - 1 != enemy.x) { gotoxy(MAP_START_X + player.x - 1, charY);setColor(2);cout << ">"; }if (player.x + 1 < MAP_WIDTH && player.x + 1 != enemy.x) { gotoxy(MAP_START_X + player.x + 1, charY);setColor(2);cout << "<"; } } }
if (playerHashiramaMyojinmonActive) { if (enemy.x - 2 > 0 && enemy.x - 2 != player.x) { gotoxy(MAP_START_X + enemy.x - 2, charY);setColor(12);cout << "|"; }if (enemy.x + 2 < MAP_WIDTH && enemy.x + 2 != player.x) { gotoxy(MAP_START_X + enemy.x + 2, charY);setColor(12);cout << "|"; } }
if (enemyHashiramaMyojinmonActive) { if (player.x - 2 > 0 && player.x - 2 != enemy.x) { gotoxy(MAP_START_X + player.x - 2, charY);setColor(12);cout << "|"; }if (player.x + 2 < MAP_WIDTH && player.x + 2 != enemy.x) { gotoxy(MAP_START_X + player.x + 2, charY);setColor(12);cout << "|"; } }
if (playerBorutoBigRasenganHit) { auto now = chrono::steady_clock::now();if (now < playerBorutoBigRasenganDotEnd) { int dotDamage = rand() % 4 + 2;enemy.hp -= dotDamage;if (enemy.hp < 0)enemy.hp = 0; } else { playerBorutoBigRasenganHit = false; } }
if (playerBorutoKarmaActive) { auto now = chrono::steady_clock::now();if (now >= playerBorutoKarmaEnd) { playerBorutoKarmaActive = false;playerBorutoFlying = false;playerBorutoEnhancedAttackCount = 0;playerBorutoBigRasenganHit = false; } }
if (enemyBorutoKarmaActive) { auto now = chrono::steady_clock::now();if (now >= enemyBorutoKarmaEnd) { enemyBorutoKarmaActive = false;enemyBorutoFlying = false;enemyBorutoEnhancedAttackCount = 0; } }
if (playerHashiramaWoodGolemActive) { auto now = chrono::steady_clock::now();if (now < playerHashiramaWoodGolemEnd) { for (int row = 0;row < 3;row++) { for (int col = 0;col < 4;col++) { int gx = player.x - 1 + col;int gy = charY - 3 - row;if (gx > 0 && gx < MAP_WIDTH && gy>0) { gotoxy(MAP_START_X + gx, MAP_START_Y + gy);setColor(6);cout << "¥"; } } } } else { playerHashiramaWoodGolemActive = false;playerHashiramaWoodGolemAttackCount = 0; } }
if (enemyHashiramaWoodGolemActive) { auto now = chrono::steady_clock::now();if (now < enemyHashiramaWoodGolemEnd) { for (int row = 0;row < 3;row++) { for (int col = 0;col < 4;col++) { int gx = enemy.x - 1 + col;int gy = charY - 3 - row;if (gx > 0 && gx < MAP_WIDTH && gy>0) { gotoxy(MAP_START_X + gx, MAP_START_Y + gy);setColor(6);cout << "¥"; } } } } else { enemyHashiramaWoodGolemActive = false;enemyHashiramaWoodGolemAttackCount = 0; } }
if (playerSasukeSlashActive) { auto now = chrono::steady_clock::now();if (now < playerSasukeSlashEnd) { if (playerSasukeSlashX > 0 && playerSasukeSlashX < MAP_WIDTH && playerSasukeSlashX != enemy.x) { gotoxy(MAP_START_X + playerSasukeSlashX, charY);setColor(13);cout << ")"; } } else { playerSasukeSlashActive = false; } }
if (enemySasukeSlashActive) { auto now = chrono::steady_clock::now();if (now < enemySasukeSlashEnd) { if (enemySasukeSlashX > 0 && enemySasukeSlashX < MAP_WIDTH && enemySasukeSlashX != player.x) { gotoxy(MAP_START_X + enemySasukeSlashX, charY);setColor(13);cout << ")"; } } else { enemySasukeSlashActive = false; } }
if (playerSasukeAmaterasuActive) { auto now = chrono::steady_clock::now();if (now < playerSasukeAmaterasuEnd) { for (int i = 1;i <= 8;i++) { int ax = player.x + i;if (ax < MAP_WIDTH && ax < enemy.x && ax != player.x) { gotoxy(MAP_START_X + ax, charY);setColor(13);cout << "-"; } }if (enemy.x - 1 > 0) { gotoxy(MAP_START_X + enemy.x - 1, charY);setColor(13);cout << "|"; }if (enemy.x + 1 < MAP_WIDTH) { gotoxy(MAP_START_X + enemy.x + 1, charY);setColor(13);cout << "|"; }if (playerSasukeAmaterasuHit) { if (now >= playerSasukeAmaterasuTick) { enemy.hp -= 5;if (enemy.hp < 0)enemy.hp = 0;playerSasukeAmaterasuTick = now + chrono::milliseconds(500); } } } else { playerSasukeAmaterasuActive = false;playerSasukeAmaterasuHit = false; } }
if (enemySasukeAmaterasuActive) { auto now = chrono::steady_clock::now();if (now < enemySasukeAmaterasuEnd) { for (int i = 1;i <= 8;i++) { int ax = enemy.x - i;if (ax > 0 && ax > player.x && ax != enemy.x) { gotoxy(MAP_START_X + ax, charY);setColor(13);cout << "-"; } }if (player.x - 1 > 0) { gotoxy(MAP_START_X + player.x - 1, charY);setColor(13);cout << "|"; }if (player.x + 1 < MAP_WIDTH) { gotoxy(MAP_START_X + player.x + 1, charY);setColor(13);cout << "|"; }if (enemySasukeAmaterasuHit) { if (now >= enemySasukeAmaterasuTick) { player.hp -= 5;if (player.hp < 0)player.hp = 0;enemySasukeAmaterasuTick = now + chrono::milliseconds(500); } } } else { enemySasukeAmaterasuActive = false;enemySasukeAmaterasuHit = false; } }
if (playerSasukeSusanooActive) { auto now = chrono::steady_clock::now();if (now < playerSasukeSusanooEnd) { for (int row = 0;row < 8;row++) { for (int col = 0;col < 4;col++) { int sx = player.x - 1 + col;int sy = charY - 2 - row;if (sx > 0 && sx < MAP_WIDTH && sy>0) { gotoxy(MAP_START_X + sx, MAP_START_Y + sy);setColor(13);cout << "#"; } } } }if (playerSasukeSusanooSlashActive) { for (int row = 0;row < 8;row++) { int sx = player.x + 3;int sy = charY - 2 - row;if (sx > 0 && sx < MAP_WIDTH && sy>0) { gotoxy(MAP_START_X + sx, MAP_START_Y + sy);setColor(13);cout << "}"; } } } }
else { playerSasukeSusanooActive = false;playerSasukeSusanooSlashCount = 0;playerSasukeUltimateActive = false; }
if (enemySasukeSusanooActive) { auto now = chrono::steady_clock::now();if (now < enemySasukeSusanooEnd) { for (int row = 0;row < 8;row++) { for (int col = 0;col < 4;col++) { int sx = enemy.x - 1 + col;int sy = charY - 2 - row;if (sx > 0 && sx < MAP_WIDTH && sy>0) { gotoxy(MAP_START_X + sx, MAP_START_Y + sy);setColor(13);cout << "#"; } } } }if (enemySasukeSusanooSlashActive) { for (int row = 0;row < 8;row++) { int sx = enemy.x - 3;int sy = charY - 2 - row;if (sx > 0 && sx < MAP_WIDTH && sy>0) { gotoxy(MAP_START_X + sx, MAP_START_Y + sy);setColor(13);cout << "}"; } } } }
else { enemySasukeSusanooActive = false;enemySasukeSusanooSlashCount = 0;enemySasukeUltimateActive = false; }
setColor(7); gotoxy(MAP_START_X, MAP_START_Y + MAP_HEIGHT + 2);
if (playerCharacterType == 0) { int cd1 = getRemainingCD(playerSkill1CDEnd);int cd2 = getRemainingCD(playerSkill2CDEnd);cout << "技能: K-普攻 | J-螺旋丸";if (cd1 > 0) { setColor(8);cout << "(CD:" << cd1 << "s)"; } else { setColor(10);cout << "(就绪)"; }setColor(7);cout << " | I-九尾抓取";if (cd2 > 0) { setColor(8);cout << "(CD:" << cd2 << "s)"; } else { setColor(10);cout << "(就绪)"; }setColor(7);cout << " | O-尾兽玉(敌HP<=35)"; }
else if (playerCharacterType == 1) { int cd1 = getRemainingCD(playerSkill1CDEnd);int cd2 = getRemainingCD(playerSkill2CDEnd);cout << "技能: K-普攻 | J-万象天引";if (cd1 > 0) { setColor(8);cout << "(CD:" << cd1 << "s)"; } else { setColor(10);cout << "(就绪)"; }setColor(7);cout << " | I-神罗天征";if (playerShinraTenseiActive) { setColor(11);cout << "(激活中)"; } else if (cd2 > 0) { setColor(8);cout << "(CD:" << cd2 << "s)"; } else { setColor(10);cout << "(就绪)"; }setColor(7);cout << " | O-超神罗天征(敌HP<=50)"; }
else if (playerCharacterType == 2) { int cd1 = getRemainingCD(playerSkill1CDEnd);int cd2 = getRemainingCD(playerSkill2CDEnd);cout << "技能: K-普攻 | J-";if (playerObitoEnemyTrapped) { if (playerObitoFireActive) { cout << "火遁-火龙卷(已用)"; } else { cout << "火遁-火龙卷(可用)"; } } else { cout << "木遁-扦插"; }if (cd1 > 0) { setColor(8);cout << "(CD:" << cd1 << "s)"; } else { setColor(10);cout << "(就绪)"; }setColor(7);cout << " | I-";if (playerObitoKamuiSpaceActive) { cout << "神威空间";setColor(11);cout << "(空间中)"; } else if (playerObitoEnemyTrapped && !playerObitoWoodStormActive) { cout << "木遁-暴风乱舞(可用)"; } else if (playerObitoEnemyTrapped && playerObitoWoodStormActive) { cout << "暴风乱舞(已用)"; } else if (playerObitoKamuiActive) { cout << "神威-空间";setColor(11);cout << "(虚化中)"; } else { cout << "神威";if (cd2 > 0) { setColor(8);cout << "(CD:" << cd2 << "s)"; } else { setColor(10);cout << "(就绪)"; } }setColor(7);cout << " | O-十尾入侵(敌HP<=50)"; }
else if (playerCharacterType == 3) { if (playerBorutoKarmaActive) { auto now = chrono::steady_clock::now();int remaining = chrono::duration_cast<chrono::seconds>(playerBorutoKarmaEnd - now).count();if (remaining < 0)remaining = 0;int cd1 = getRemainingCD(playerSkill1CDEnd);int cd2 = getRemainingCD(playerSkill2CDEnd);cout << "技能: K-";if (playerBorutoFlying) { cout << "强化螺旋丸(" << 3 - playerBorutoEnhancedAttackCount << ")"; } else { cout << "普攻"; }cout << " | J-大筒木飞行";if (cd1 > 0) { setColor(8);cout << "(CD:" << cd1 << "s)"; } else { setColor(10);cout << "(就绪)"; }setColor(7);cout << " | I-超大玉螺旋丸";if (cd2 > 0) { setColor(8);cout << "(CD:" << cd2 << "s)"; } else { setColor(10);cout << "(就绪)"; }setColor(7);cout << " | 楔:" << remaining << "s"; } else { int cd1 = getRemainingCD(playerSkill1CDEnd);int cd2 = getRemainingCD(playerSkill2CDEnd);cout << "技能: K-普攻 | J-螺旋丸涡彦";if (cd1 > 0) { setColor(8);cout << "(CD:" << cd1 << "s)"; } else { setColor(10);cout << "(就绪)"; }setColor(7);cout << " | I-亚飞雷神";if (playerBorutoTeleported && playerBorutoTeleportBack) { setColor(10);cout << "(可返回)"; } else if (cd2 > 0) { setColor(8);cout << "(CD:" << cd2 << "s)"; } else { setColor(10);cout << "(就绪)"; }setColor(7);int ultimateCD = getRemainingCD(playerSkill3CDEnd);if (ultimateCD > 0) { cout << " | O-楔(CD:" << ultimateCD << "s)"; } else { cout << " | O-楔(可用)"; } } }
else if (playerCharacterType == 4) { int cd1 = getRemainingCD(playerSkill1CDEnd);int cd2 = getRemainingCD(playerSkill2CDEnd);cout << "技能: K-普攻 | J-";if (playerHashiramaEnemyTrapped && !playerHashiramaMyojinmonUsed) { cout << "明神门(可用)"; } else { cout << "木龙扦插之术"; }if (cd1 > 0) { setColor(8);cout << "(CD:" << cd1 << "s)"; } else { setColor(10);cout << "(就绪)"; }setColor(7);cout << " | I-木人之术";if (playerHashiramaWoodGolemActive) { cout << "(激活中";if (playerHashiramaWoodGolemAttackCount < 2) { cout << ",可按K攻击"; }cout << ")"; } else if (cd2 > 0) { setColor(8);cout << "(CD:" << cd2 << "s)"; } else { setColor(10);cout << "(就绪)"; }setColor(7);if (enemy.hp <= 80 && getRemainingCD(playerSkill3CDEnd) <= 0) { cout << " | O-千手观音(可用)"; } else { cout << " | O-千手观音(不可用)"; } }
else if (playerCharacterType == 5) { int cd1 = getRemainingCD(playerSkill1CDEnd);int cd2 = getRemainingCD(playerSkill2CDEnd);cout << "技能: K-普攻 | J-天照";if (cd1 > 0) { setColor(8);cout << "(CD:" << cd1 << "s)"; } else { setColor(10);cout << "(就绪)"; }setColor(7);cout << " | I-天手力";if (cd2 > 0) { setColor(8);cout << "(CD:" << cd2 << "s)"; } else { setColor(10);cout << "(就绪)"; }setColor(7);cout << " | U-须佐能乎";if (playerSasukeSusanooActive) { cout << "(开启中,可关闭)"; } else { int subCD = getRemainingCD(playerSasukeSubSkillCD);if (subCD > 0) { setColor(8);cout << "(CD:" << subCD << "s)"; } else { setColor(10);cout << "(可用)"; } }setColor(7);if (playerSasukeSusanooActive && enemy.hp <= 65) { cout << " | O-地爆天星斩(可用)"; } else { cout << " | O-地爆天星斩(不可用)"; } }
gotoxy(MAP_START_X, MAP_START_Y + MAP_HEIGHT + 3); cout << "移动: A-左移 D-右移";
}
int getShinraTenseiDamage(int stack) { int minDamage, maxDamage;switch (stack) { case 1:minDamage = 8;maxDamage = 12;break;case 2:minDamage = 9;maxDamage = 13;break;case 3:minDamage = 10;maxDamage = 14;break;case 4:minDamage = 11;maxDamage = 15;break;case 5:minDamage = 12;maxDamage = 15;break;default:minDamage = 8;maxDamage = 12;break; }return rand() % (maxDamage - minDamage + 1) + minDamage; }
void playerNarutoNormalAttack() { int distance = abs(player.x - enemy.x);int charY = MAP_START_Y + CHARACTER_ROW;if (player.x < enemy.x && distance >= 1 && distance <= 3) { int damage = rand() % 4 + 3;if (playerNarutoTailActive) { for (int i = 0;i < 3;i++) { if (playerNarutoTailX[i] > 0 && playerNarutoTailX[i] < MAP_WIDTH && playerNarutoTailX[i] != enemy.x) { gotoxy(MAP_START_X + playerNarutoTailX[i], charY);cout << " "; } } }playerNarutoTailActive = true;playerNarutoTailEnd = chrono::steady_clock::now() + chrono::milliseconds(1500);for (int i = 0;i < 3;i++) { playerNarutoTailX[i] = player.x + 1 + i;if (playerNarutoTailX[i] >= enemy.x) { playerNarutoTailX[i] = 0;break; } }enemy.hp -= damage;if (enemy.hp < 0)enemy.hp = 0;gotoxy(2, MAP_START_Y + MAP_HEIGHT + 4);cout << "玩家普攻造成 " << damage << " 点伤害! "; } else { gotoxy(2, MAP_START_Y + MAP_HEIGHT + 4);cout << (player.x >= enemy.x ? "无法向后攻击! " : "距离太远,无法攻击! "); } }
void playerNarutoSkill1() { if (skillInProgress || enemySkillInProgress)return;auto now = chrono::steady_clock::now();if (now < playerSkill1CDEnd) { gotoxy(2, MAP_START_Y + MAP_HEIGHT + 4);cout << "螺旋丸冷却中... ";return; }skillInProgress = true;int charY = MAP_START_Y + CHARACTER_ROW;int targetX = enemy.x - 1;if (targetX < player.x + 1)targetX = player.x + 1;while (player.x < targetX) { player.x++;if (player.x >= enemy.x) { player.x = enemy.x - 1;break; }drawBattleMap();this_thread::sleep_for(chrono::milliseconds(50)); }int spiralX = player.x + 1;if (spiralX < enemy.x && spiralX != enemy.x && spiralX != player.x) { gotoxy(MAP_START_X + spiralX, charY);setColor(14);cout << "O"; }this_thread::sleep_for(chrono::seconds(1));if (spiralX < enemy.x && spiralX != enemy.x && spiralX != player.x) { gotoxy(MAP_START_X + spiralX, charY);cout << " "; }int damage = rand() % 8 + 8;enemy.hp -= damage;if (enemy.hp < 0)enemy.hp = 0;gotoxy(2, MAP_START_Y + MAP_HEIGHT + 4);cout << "螺旋丸造成 " << damage << " 点伤害! ";playerSkill1CDEnd = now + chrono::seconds(8);skillInProgress = false; }
void playerNarutoSkill2() { if (skillInProgress || enemySkillInProgress)return;auto now = chrono::steady_clock::now();if (now < playerSkill2CDEnd) { gotoxy(2, MAP_START_Y + MAP_HEIGHT + 4);cout << "九尾抓取冷却中... ";return; }skillInProgress = true;int charY = MAP_START_Y + CHARACTER_ROW;bool caught = false;int tailLength = 20;for (int i = 0;i < tailLength;i++) { int checkX = player.x + 1 + i;if (checkX >= MAP_WIDTH || checkX >= enemy.x)break;if (checkX != enemy.x && checkX != player.x) { gotoxy(MAP_START_X + checkX, charY);setColor(14);cout << "-"; }if (checkX == enemy.x - 1) { caught = true;break; } }if (caught && enemy.x - 1 != player.x && enemy.x - 1 != enemy.x) { gotoxy(MAP_START_X + (enemy.x - 1), charY);setColor(14);cout << "O"; }this_thread::sleep_for(chrono::milliseconds(500));for (int i = 0;i < tailLength;i++) { int clearX = player.x + 1 + i;if (clearX >= MAP_WIDTH || clearX >= enemy.x)break;if (clearX != enemy.x && clearX != player.x) { gotoxy(MAP_START_X + clearX, charY);cout << " "; } }if (caught) { int damage = rand() % 6 + 20;enemy.hp -= damage;if (enemy.hp < 0)enemy.hp = 0;gotoxy(2, MAP_START_Y + MAP_HEIGHT + 4);cout << "九尾抓取造成 " << damage << " 点伤害! ";playerSkill2CDEnd = now + chrono::seconds(15); } else { gotoxy(2, MAP_START_Y + MAP_HEIGHT + 4);cout << "未抓取到敌人,CD减半 ";playerSkill2CDEnd = now + chrono::seconds(7); }skillInProgress = false; }
void playerNarutoUltimate() { if (skillInProgress || enemySkillInProgress)return;if (enemy.hp > 35) { gotoxy(2, MAP_START_Y + MAP_HEIGHT + 4);cout << "对方HP需低于或等于35才能释放! ";return; }skillInProgress = true;int charY = MAP_START_Y + CHARACTER_ROW;gotoxy(2, MAP_START_Y + MAP_HEIGHT + 4);cout << "尾兽玉蓄力中... ";int startX = player.x + 1;int endX = enemy.x - 1;int distance = endX - startX;int steps = 30;for (int i = 0;i <= steps;i++) { int currentX = startX + (distance * i / steps);if (currentX >= enemy.x)currentX = enemy.x - 1;if (i > 0) { int prevX = startX + (distance * (i - 1) / steps);if (prevX >= enemy.x)prevX = enemy.x - 1;if (prevX != enemy.x && prevX != player.x) { gotoxy(MAP_START_X + prevX, charY);cout << " "; } }if (currentX != enemy.x && currentX != player.x) { gotoxy(MAP_START_X + currentX, charY);setColor(14);cout << "0"; }this_thread::sleep_for(chrono::milliseconds(100)); }if (endX != enemy.x && endX != player.x) { gotoxy(MAP_START_X + endX, charY);cout << " "; }enemy.hp -= 35;if (enemy.hp < 0)enemy.hp = 0;gotoxy(2, MAP_START_Y + MAP_HEIGHT + 4);cout << "尾兽玉造成35点伤害! ";skillInProgress = false; }
void playerPainNormalAttack() { int charY = MAP_START_Y + CHARACTER_ROW;if (player.x >= enemy.x) { gotoxy(2, MAP_START_Y + MAP_HEIGHT + 4);cout << "无法向后攻击! ";return; }if (playerPainRodActive) { if (playerPainRodX > 0 && playerPainRodX < MAP_WIDTH && playerPainRodX != enemy.x && playerPainRodX != player.x) { gotoxy(MAP_START_X + playerPainRodX, charY);cout << " "; }playerPainRodActive = false;playerRodHitting = false; }int rodX = player.x + 3;if (rodX >= enemy.x)rodX = enemy.x - 1;if (rodX <= player.x) { gotoxy(2, MAP_START_Y + MAP_HEIGHT + 4);cout << "敌人太近,无法攻击! ";return; }if (rodX == enemy.x)rodX = enemy.x - 1;playerPainRodActive = true;playerPainRodX = rodX;playerPainRodEnd = chrono::steady_clock::now() + chrono::milliseconds(1500);int damage = rand() % 3 + 4;enemy.hp -= damage;if (enemy.hp < 0)enemy.hp = 0;if (rodX == enemy.x - 1) { playerRodHitting = true;playerRodHitEnd = playerPainRodEnd;gotoxy(2, MAP_START_Y + MAP_HEIGHT + 4);cout << "黑棒命中!钉住敌人1.5秒,造成 " << damage << " 点伤害! "; } else { playerRodHitting = false;gotoxy(2, MAP_START_Y + MAP_HEIGHT + 4);cout << "黑棒造成 " << damage << " 点伤害! "; } }
void playerPainSkill1() { if (skillInProgress || enemySkillInProgress)return;auto now = chrono::steady_clock::now();if (now < playerSkill1CDEnd) { gotoxy(2, MAP_START_Y + MAP_HEIGHT + 4);cout << "万象天引冷却中... ";return; }int targetX = player.x + 2;if (targetX >= MAP_WIDTH - 1)targetX = MAP_WIDTH - 2;enemySkillInProgress = true;while (enemy.x > targetX) { enemy.x--;if (enemy.x <= player.x) { enemy.x = player.x + 2;break; }drawBattleMap();this_thread::sleep_for(chrono::milliseconds(30)); }enemy.x = targetX;playerBlackRodLeftX = enemy.x - 1;playerBlackRodRightX = enemy.x + 1;playerBanshoTeninActive = true;playerBanshoTeninEnd = now + chrono::seconds(5);int damage = rand() % 4 + 10;enemy.hp -= damage;if (enemy.hp < 0)enemy.hp = 0;gotoxy(2, MAP_START_Y + MAP_HEIGHT + 4);cout << "万象天引造成 " << damage << " 点伤害! 敌人被控5秒 ";playerSkill1CDEnd = now + chrono::seconds(12);enemySkillInProgress = false; }
void finishPlayerShinraTensei() { int charY = MAP_START_Y + CHARACTER_ROW;for (int r = 1;r <= playerShinraTenseiRadius;r++) { int leftX = player.x - r;int rightX = player.x + r;if (leftX > 0 && leftX != enemy.x && leftX != player.x) { gotoxy(MAP_START_X + leftX, charY);cout << " "; }if (rightX < MAP_WIDTH && rightX != enemy.x && rightX != player.x) { gotoxy(MAP_START_X + rightX, charY);cout << " "; } }playerSkill2CDEnd = chrono::steady_clock::now() + chrono::seconds(playerShinraTenseiCurrentCD);gotoxy(2, MAP_START_Y + MAP_HEIGHT + 4);cout << "神罗天征结束,CD:" << playerShinraTenseiCurrentCD << "s ";playerShinraTenseiActive = false;playerShinraTenseiStack = 0;playerShinraTenseiRadius = 1;skillInProgress = false; }
void playerPainSkill2() { if (enemySkillInProgress)return;if (skillInProgress && !playerShinraTenseiActive)return;auto now = chrono::steady_clock::now();int charY = MAP_START_Y + CHARACTER_ROW;if (!playerShinraTenseiActive) { if (now < playerSkill2CDEnd) { gotoxy(2, MAP_START_Y + MAP_HEIGHT + 4);cout << "神罗天征冷却中... ";return; }playerShinraTenseiActive = true;playerShinraTenseiStack = 1;playerShinraTenseiRadius = 1;playerShinraTenseiStart = now;playerShinraTenseiCurrentCD = 15;skillInProgress = true;int damage = getShinraTenseiDamage(1);bool hitEnemy = false;int leftBound = player.x - playerShinraTenseiRadius;int rightBound = player.x + playerShinraTenseiRadius;if (enemy.x >= leftBound && enemy.x <= rightBound) { enemy.hp -= damage;if (enemy.hp < 0)enemy.hp = 0;hitEnemy = true; }for (int r = 1;r <= playerShinraTenseiRadius;r++) { int leftX = player.x - r;if (leftX > 0 && leftX != enemy.x && leftX != player.x) { gotoxy(MAP_START_X + leftX, charY);setColor(11);cout << "("; }int rightX = player.x + r;if (rightX < MAP_WIDTH && rightX != enemy.x && rightX != player.x) { gotoxy(MAP_START_X + rightX, charY);cout << ")"; } }gotoxy(2, MAP_START_Y + MAP_HEIGHT + 4);cout << (hitEnemy ? "神罗天征第1层造成 " + to_string(damage) + " 点伤害! " : "神罗天征激活! 再次按I叠加 ");this_thread::sleep_for(chrono::milliseconds(500)); } else { auto elapsed = chrono::duration_cast<chrono::seconds>(now - playerShinraTenseiStart).count();if (elapsed >= 3) { finishPlayerShinraTensei();return; }if (playerShinraTenseiStack < 5) { playerShinraTenseiStack++;playerShinraTenseiRadius++;playerShinraTenseiCurrentCD += 2;int damage = getShinraTenseiDamage(playerShinraTenseiStack);bool hitEnemy = false;int leftBound = player.x - playerShinraTenseiRadius;int rightBound = player.x + playerShinraTenseiRadius;if (enemy.x >= leftBound && enemy.x <= rightBound) { enemy.hp -= damage;if (enemy.hp < 0)enemy.hp = 0;hitEnemy = true; }for (int r = 1;r < playerShinraTenseiRadius;r++) { int leftX = player.x - r;int rightX = player.x + r;if (leftX > 0 && leftX != enemy.x && leftX != player.x) { gotoxy(MAP_START_X + leftX, charY);cout << " "; }if (rightX < MAP_WIDTH && rightX != enemy.x && rightX != player.x) { gotoxy(MAP_START_X + rightX, charY);cout << " "; } }for (int r = 1;r <= playerShinraTenseiRadius;r++) { int leftX = player.x - r;if (leftX > 0 && leftX != enemy.x && leftX != player.x) { gotoxy(MAP_START_X + leftX, charY);setColor(11);cout << "("; }int rightX = player.x + r;if (rightX < MAP_WIDTH && rightX != enemy.x && rightX != player.x) { gotoxy(MAP_START_X + rightX, charY);cout << ")"; } }gotoxy(2, MAP_START_Y + MAP_HEIGHT + 4);cout << (hitEnemy ? "神罗天征第" + to_string(playerShinraTenseiStack) + "层造成 " + to_string(damage) + " 点伤害! " : "神罗天征扩大到第" + to_string(playerShinraTenseiStack) + "层 "); }this_thread::sleep_for(chrono::milliseconds(500)); }auto checkNow = chrono::steady_clock::now();auto elapsed = chrono::duration_cast<chrono::seconds>(checkNow - playerShinraTenseiStart).count();if (elapsed >= 3 || playerShinraTenseiStack >= 5) { this_thread::sleep_for(chrono::milliseconds(500));finishPlayerShinraTensei(); } }
void playerPainUltimate() { if (skillInProgress || enemySkillInProgress)return;if (enemy.hp > 50) { gotoxy(2, MAP_START_Y + MAP_HEIGHT + 4);cout << "对方HP需低于50才能释放! ";return; }skillInProgress = true;int charY = MAP_START_Y + CHARACTER_ROW;int targetX = MAP_WIDTH / 2;while (player.x != targetX) { if (player.x < targetX)player.x++;else if (player.x > targetX)player.x--;drawBattleMap();this_thread::sleep_for(chrono::milliseconds(20)); }for (int second = 1;second <= 5;second++) { for (int r = 1;r <= second;r++) { int leftX = player.x - r;if (leftX > 1 && leftX != enemy.x && leftX != player.x) { gotoxy(MAP_START_X + leftX, charY);setColor(13);cout << "{"; }int rightX = player.x + r;if (rightX < MAP_WIDTH && rightX != enemy.x && rightX != player.x) { gotoxy(MAP_START_X + rightX, charY);cout << "}"; } }enemy.hp -= 10;if (enemy.hp < 0)enemy.hp = 0;gotoxy(2, MAP_START_Y + MAP_HEIGHT + 4);cout << "超神罗天征第" << second << "秒扩大,造成10点伤害! ";this_thread::sleep_for(chrono::seconds(1));if (enemy.hp <= 0)break; }for (int r = 1;r <= 5;r++) { int leftX = player.x - r;int rightX = player.x + r;if (leftX > 1 && leftX != enemy.x && leftX != player.x) { gotoxy(MAP_START_X + leftX, charY);cout << " "; }if (rightX < MAP_WIDTH && rightX != enemy.x && rightX != player.x) { gotoxy(MAP_START_X + rightX, charY);cout << " "; } }playerSkill1CDEnd = chrono::steady_clock::now();gotoxy(2, MAP_START_Y + MAP_HEIGHT + 5);cout << "万象天引CD已重置! ";skillInProgress = false; }
void playerObitoNormalAttack() { int charY = MAP_START_Y + CHARACTER_ROW;if (player.x >= enemy.x) { gotoxy(2, MAP_START_Y + MAP_HEIGHT + 4);cout << "无法向后攻击! ";return; }int distance = abs(player.x - enemy.x);if (distance < 1 || distance>2) { gotoxy(2, MAP_START_Y + MAP_HEIGHT + 4);cout << "距离不合适,无法攻击! ";return; }int kickX = player.x + 1;if (kickX >= enemy.x)kickX = enemy.x - 1;if (kickX <= player.x)return;playerObitoKickActive = true;playerObitoKickX = kickX;playerObitoKickEnd = chrono::steady_clock::now() + chrono::milliseconds(1000);int damage = rand() % 3 + 6;enemy.hp -= damage;if (enemy.hp < 0)enemy.hp = 0;gotoxy(2, MAP_START_Y + MAP_HEIGHT + 4);cout << "踢腿造成 " << damage << " 点伤害! "; }
void playerObitoSkill1() { if (skillInProgress || enemySkillInProgress)return;auto now = chrono::steady_clock::now();int charY = MAP_START_Y + CHARACTER_ROW;if (playerObitoEnemyTrapped && !playerObitoFireActive) { int savedX = player.x;int targetX = enemy.x - 3;if (targetX < 2)targetX = 2;if (targetX >= MAP_WIDTH - 2)targetX = MAP_WIDTH - 3;skillInProgress = true;playerObitoFireActive = true;player.x = targetX;drawBattleMap();this_thread::sleep_for(chrono::milliseconds(300));int fireX = player.x + 1;for (int i = 0;i < 8;i++) { int fx = fireX + i;if (fx < MAP_WIDTH && fx != enemy.x && fx != player.x) { gotoxy(MAP_START_X + fx, charY);setColor(6);cout << "~"; } }int damage = rand() % 5 + 14;enemy.hp -= damage;if (enemy.hp < 0)enemy.hp = 0;gotoxy(2, MAP_START_Y + MAP_HEIGHT + 4);cout << "火遁-火龙卷造成 " << damage << " 点伤害! ";this_thread::sleep_for(chrono::seconds(2));for (int i = 0;i < 8;i++) { int fx = fireX + i;if (fx < MAP_WIDTH && fx != enemy.x && fx != player.x) { gotoxy(MAP_START_X + fx, charY);cout << " "; } }player.x = savedX;playerObitoFireActive = false;skillInProgress = false;return; }if (now < playerSkill1CDEnd) { gotoxy(2, MAP_START_Y + MAP_HEIGHT + 4);cout << "木遁-扦插冷却中... ";return; }skillInProgress = true;playerObitoWoodSpikeX = player.x + 1;playerObitoWoodSpikeActive = true;playerObitoWoodSpikeEnd = now + chrono::milliseconds(500);bool hitEnemy = false;for (int i = 0;i < 30;i++) { int checkX = player.x + 1 + i;if (checkX >= MAP_WIDTH || checkX >= enemy.x)break;if (checkX != enemy.x && checkX != player.x) { gotoxy(MAP_START_X + checkX, charY);setColor(2);cout << "-"; }if (checkX == enemy.x - 1) { hitEnemy = true;break; }this_thread::sleep_for(chrono::milliseconds(20)); }if (hitEnemy) { playerObitoEnemyTrapped = true;playerObitoEnemyTrappedEnd = now + chrono::seconds(15);int damage = rand() % 5 + 12;enemy.hp -= damage;if (enemy.hp < 0)enemy.hp = 0;gotoxy(2, MAP_START_Y + MAP_HEIGHT + 4);cout << "木遁-扦插命中!造成 " << damage << " 点伤害! 钉住15秒"; } else { playerObitoWoodSpikeActive = false;gotoxy(2, MAP_START_Y + MAP_HEIGHT + 4);cout << "木遁-扦插未命中! "; }for (int i = 0;i < 30;i++) { int clearX = player.x + 1 + i;if (clearX >= MAP_WIDTH || clearX >= enemy.x)break;if (clearX != enemy.x && clearX != player.x) { gotoxy(MAP_START_X + clearX, charY);cout << " "; } }playerSkill1CDEnd = now + chrono::seconds(hitEnemy ? 20 : 10);skillInProgress = false; }
void playerObitoSkill2() { if (skillInProgress || enemySkillInProgress)return;auto now = chrono::steady_clock::now();int charY = MAP_START_Y + CHARACTER_ROW;if (playerObitoKamuiActive && !playerObitoKamuiSpaceActive) { playerObitoKamuiActive = false;playerObitoKamuiSpaceActive = true;playerObitoSavedX = player.x;int targetX = enemy.x - 1;if (targetX < 1)targetX = 1;if (targetX >= MAP_WIDTH - 2)targetX = MAP_WIDTH - 3;player.x = targetX;playerObitoEnemyInSpace = true;playerObitoKamuiSpaceEnd = now + chrono::seconds(3);gotoxy(2, MAP_START_Y + MAP_HEIGHT + 4);cout << "神威-空间!敌人被吸入3秒 ";drawBattleMap();this_thread::sleep_for(chrono::milliseconds(500));for (int sec = 0;sec < 3;sec++) { int damage = rand() % 3 + 8;enemy.hp -= damage;if (enemy.hp < 0)enemy.hp = 0;gotoxy(2, MAP_START_Y + MAP_HEIGHT + 4);cout << "神威空间第" << sec + 1 << "秒造成 " << damage << " 点伤害! ";this_thread::sleep_for(chrono::seconds(1));if (enemy.hp <= 0)break; }playerObitoEnemyInSpace = false;playerObitoKamuiSpaceActive = false;enemy.x = player.x + 3;if (enemy.x >= MAP_WIDTH - 2)enemy.x = MAP_WIDTH - 3;if (enemy.x < 1)enemy.x = 1;gotoxy(2, MAP_START_Y + MAP_HEIGHT + 4);cout << "敌人被吐出神威空间! ";playerSkill2CDEnd = now + chrono::seconds(10);this_thread::sleep_for(chrono::milliseconds(500));return; }if (playerObitoEnemyTrapped && !playerObitoWoodStormActive) { skillInProgress = true;playerObitoWoodStormActive = true;int savedX = player.x;int targetX = enemy.x - 5;if (targetX < 2)targetX = 2;if (targetX >= MAP_WIDTH - 2)targetX = MAP_WIDTH - 3;player.x = targetX;drawBattleMap();this_thread::sleep_for(chrono::milliseconds(300));for (int i = 0;i < 20;i++) { int branchX = player.x + 1 + i;if (branchX >= MAP_WIDTH || branchX >= enemy.x)break;if (branchX != enemy.x && branchX != player.x) { gotoxy(MAP_START_X + branchX, charY - 1);setColor(2);cout << "_";gotoxy(MAP_START_X + branchX, charY);setColor(2);cout << "-"; } }for (int sec = 0;sec < 6;sec++) { if (abs(player.x - enemy.x) <= 20) { enemy.hp -= 8;if (enemy.hp < 0)enemy.hp = 0; }gotoxy(2, MAP_START_Y + MAP_HEIGHT + 4);cout << "暴风乱舞第" << sec + 1 << "秒造成8点伤害! ";this_thread::sleep_for(chrono::seconds(1));if (enemy.hp <= 0)break; }for (int i = 0;i < 20;i++) { int branchX = player.x + 1 + i;if (branchX >= MAP_WIDTH)break;if (branchX != enemy.x && branchX != player.x) { gotoxy(MAP_START_X + branchX, charY - 1);cout << " ";gotoxy(MAP_START_X + branchX, charY);cout << " "; } }player.x = savedX;playerObitoWoodStormActive = false;skillInProgress = false;return; }if (now < playerSkill2CDEnd) { gotoxy(2, MAP_START_Y + MAP_HEIGHT + 4);cout << "神威冷却中... ";return; }playerObitoKamuiActive = true;playerObitoKamuiEnd = now + chrono::seconds(5);gotoxy(2, MAP_START_Y + MAP_HEIGHT + 4);cout << "神威激活!免疫伤害5秒,按I进入空间 "; }
void playerObitoUltimate() { if (skillInProgress || enemySkillInProgress)return;if (enemy.hp > 50) { gotoxy(2, MAP_START_Y + MAP_HEIGHT + 4);cout << "对方HP需低于等于50才能释放! ";return; }skillInProgress = true;playerObitoUltimateActive = true;int charY = MAP_START_Y + CHARACTER_ROW;gotoxy(2, MAP_START_Y + MAP_HEIGHT + 4);cout << "十尾入侵! ";int tenTailBaseY = charY - 5;for (int row = 0;row < 5;row++) { for (int col = 0;col < 10;col++) { int x = player.x - 5 + col;int y = tenTailBaseY - row;if (x > 0 && x < MAP_WIDTH && y>0) { gotoxy(MAP_START_X + x, MAP_START_Y + y);setColor(8);cout << "*"; } } }gotoxy(MAP_START_X + player.x, MAP_START_Y + tenTailBaseY - 5);setColor(10);cout << "@";this_thread::sleep_for(chrono::seconds(2));int ballX = player.x;for (int step = 0;step < 25;step++) { int ballY = tenTailBaseY - 5 + step;if (ballY >= charY)break;if (step > 0) { int prevY = tenTailBaseY - 5 + step - 1;if (prevY < charY && prevY>0) { gotoxy(MAP_START_X + ballX, MAP_START_Y + prevY);cout << " "; } }if (ballY > 0 && ballX != enemy.x) { gotoxy(MAP_START_X + ballX, MAP_START_Y + ballY);setColor(7);cout << "O"; }this_thread::sleep_for(chrono::milliseconds(150)); }gotoxy(MAP_START_X + ballX, MAP_START_Y + charY - 1);cout << " ";for (int row = 0;row < 5;row++) { for (int col = 0;col < 10;col++) { int x = player.x - 5 + col;int y = tenTailBaseY - row;if (x > 0 && x < MAP_WIDTH && y>0) { gotoxy(MAP_START_X + x, MAP_START_Y + y);cout << " "; } } }gotoxy(MAP_START_X + player.x, MAP_START_Y + tenTailBaseY - 5);cout << " ";enemy.hp -= 50;if (enemy.hp < 0)enemy.hp = 0;gotoxy(2, MAP_START_Y + MAP_HEIGHT + 4);cout << "十尾入侵造成50点伤害! ";playerObitoUltimateActive = false;skillInProgress = false; }
void playerBorutoNormalAttack() { int charY = MAP_START_Y + CHARACTER_ROW;if (player.x >= enemy.x) { gotoxy(2, MAP_START_Y + MAP_HEIGHT + 4);cout << "无法向后攻击! ";return; }int distance = abs(player.x - enemy.x);if (distance < 1 || distance>4) { gotoxy(2, MAP_START_Y + MAP_HEIGHT + 4);cout << "距离不合适,无法攻击! ";return; }if (enemyObitoKamuiActive && !enemyObitoKamuiSpaceActive) { gotoxy(2, MAP_START_Y + MAP_HEIGHT + 4);cout << "对方处于虚化状态,攻击无效! ";return; }playerBorutoSwordActive = true;playerBorutoSwordSlashing = true;playerBorutoSwordEnd = chrono::steady_clock::now() + chrono::milliseconds(2000);playerBorutoSwordX = player.x + 1;int damage1 = rand() % 3 + 7;enemy.hp -= damage1;if (enemy.hp < 0)enemy.hp = 0;gotoxy(2, MAP_START_Y + MAP_HEIGHT + 4);cout << "第一刀造成 " << damage1 << " 点伤害! ";this_thread::sleep_for(chrono::milliseconds(400));if (playerRodHitting || playerBanshoTeninActive || playerObitoEnemyTrapped || playerHashiramaEnemyTrapped || playerSasukeAmaterasuHit) { playerBorutoSwordActive = false;playerBorutoSwordSlashing = false;return; }int damage2 = rand() % 4 + 7;enemy.hp -= damage2;if (enemy.hp < 0)enemy.hp = 0;gotoxy(2, MAP_START_Y + MAP_HEIGHT + 4);cout << "第二刀造成 " << damage2 << " 点伤害! ";this_thread::sleep_for(chrono::milliseconds(400));if (playerRodHitting || playerBanshoTeninActive || playerObitoEnemyTrapped || playerHashiramaEnemyTrapped || playerSasukeAmaterasuHit) { playerBorutoSwordActive = false;playerBorutoSwordSlashing = false;return; }int damage3 = rand() % 5 + 8;enemy.hp -= damage3;if (enemy.hp < 0)enemy.hp = 0;gotoxy(2, MAP_START_Y + MAP_HEIGHT + 4);cout << "第三刀造成 " << damage3 << " 点伤害! ";playerBorutoSwordActive = false;playerBorutoSwordSlashing = false; }
void playerBorutoEnhancedAttack() { if (!playerBorutoFlying)return;if (playerBorutoEnhancedAttackCount >= 3)return;auto now = chrono::steady_clock::now();if (now < playerBorutoEnhancedAttackCD)return;playerBorutoEnhancedAttackActive = true;playerBorutoEnhancedAttackCount++;playerBorutoEnhancedAttackCD = now + chrono::milliseconds(2500);int charY = MAP_START_Y + CHARACTER_ROW;int startX = player.x + 1;int endX = enemy.x;int steps = 25;int lastX = 0;for (int i = 0;i <= steps;i++) { int currentX = startX + ((endX - startX) * i / steps);if (currentX >= enemy.x)break;if (i > 0) { int prevX = startX + ((endX - startX) * (i - 1) / steps);if (prevX != enemy.x && prevX != player.x) { gotoxy(MAP_START_X + prevX, charY);cout << " "; } }if (currentX != enemy.x && currentX != player.x) { gotoxy(MAP_START_X + currentX, charY);setColor(11);cout << "O"; }lastX = currentX;this_thread::sleep_for(chrono::milliseconds(100)); }int damage = rand() % 7 + 8;enemy.hp -= damage;if (enemy.hp < 0)enemy.hp = 0;gotoxy(2, MAP_START_Y + MAP_HEIGHT + 4);cout << "强化螺旋丸造成 " << damage << " 点伤害! ";playerBorutoEnhancedAttackActive = false;if (lastX != enemy.x && lastX != player.x) { gotoxy(MAP_START_X + lastX, charY);cout << " "; } }
void playerBorutoSkill1() { if (skillInProgress || enemySkillInProgress)return;auto now = chrono::steady_clock::now();int charY = MAP_START_Y + CHARACTER_ROW;if (playerBorutoKarmaActive) { if (playerBorutoFlying)return;if (now < playerSkill1CDEnd)return;playerBorutoFlying = true;playerBorutoFlyingEnd = now + chrono::seconds(10);playerBorutoEnhancedAttackCount = 0;playerSkill1CDEnd = now + chrono::seconds(6);gotoxy(2, MAP_START_Y + MAP_HEIGHT + 4);cout << "大筒木-飞行!向上移动2格 ";return; }if (now < playerSkill1CDEnd)return;skillInProgress = true;int targetX = enemy.x - 3;if (targetX < 2)targetX = 2;while (player.x > targetX) { player.x--;drawBattleMap();this_thread::sleep_for(chrono::milliseconds(30)); }while (player.x < targetX) { player.x++;drawBattleMap();this_thread::sleep_for(chrono::milliseconds(30)); }playerBorutoRasenganActive = true;playerBorutoRasenganEnd = now + chrono::seconds(3);playerBorutoRasenganHit = true;for (int sec = 0;sec < 3;sec++) { int damage = rand() % 5 + 8;enemy.hp -= damage;if (enemy.hp < 0)enemy.hp = 0;gotoxy(2, MAP_START_Y + MAP_HEIGHT + 4);cout << "螺旋丸涡彦第" << sec + 1 << "秒造成 " << damage << " 点伤害! ";this_thread::sleep_for(chrono::seconds(1));if (enemy.hp <= 0)break; }playerBorutoRasenganActive = false;targetX = enemy.x - 8;if (targetX < 1)targetX = 1;player.x = targetX;playerBorutoMarkActive = true;playerBorutoMarkX = enemy.x;playerBorutoMarkEnd = now + chrono::seconds(10);playerBorutoTeleported = false;playerBorutoTeleportBack = false;playerSkill1CDEnd = now + chrono::seconds(18);skillInProgress = false; }
void playerBorutoSkill2() { if (skillInProgress || enemySkillInProgress)return;auto now = chrono::steady_clock::now();int charY = MAP_START_Y + CHARACTER_ROW;if (playerBorutoKarmaActive) { if (playerBorutoFlying)return;if (now < playerSkill2CDEnd)return;skillInProgress = true;playerBorutoBigRasenganBallActive = true;int ballX = player.x + 1;for (int step = 0;step < 20;step++) { int currentX = ballX + step;if (currentX >= enemy.x)break;if (step > 0) { gotoxy(MAP_START_X + currentX - 1, charY);cout << " "; }if (currentX != enemy.x && currentX != player.x) { gotoxy(MAP_START_X + currentX, charY);setColor(11);cout << "O"; }this_thread::sleep_for(chrono::milliseconds(50)); }int damage = rand() % 6 + 15;enemy.hp -= damage;if (enemy.hp < 0)enemy.hp = 0;playerBorutoBigRasenganHit = true;playerBorutoBigRasenganDotEnd = now + chrono::seconds(5);gotoxy(2, MAP_START_Y + MAP_HEIGHT + 4);cout << "超大玉螺旋丸造成 " << damage << " 点伤害! ";gotoxy(MAP_START_X + enemy.x - 1, charY);cout << " ";playerBorutoBigRasenganBallActive = false;playerSkill2CDEnd = now + chrono::seconds(15);skillInProgress = false;return; }if (playerBorutoMarkActive && !playerBorutoTeleported) { playerBorutoTeleportSavedX = player.x;player.x = enemy.x - 3;if (player.x < 1)player.x = 1;playerBorutoTeleported = true;playerBorutoTeleportTime = now;int damage = rand() % 9 + 10;enemy.hp -= damage;if (enemy.hp < 0)enemy.hp = 0;gotoxy(2, MAP_START_Y + MAP_HEIGHT + 4);cout << "飞雷神·草薙剑造成 " << damage << " 点伤害! ";playerBorutoTeleportBack = true;return; }if (playerBorutoTeleported && playerBorutoTeleportBack) { auto timeSinceTeleport = chrono::duration_cast<chrono::seconds>(now - playerBorutoTeleportTime).count();if (timeSinceTeleport <= 5) { player.x = playerBorutoTeleportSavedX;playerBorutoTeleported = false;playerBorutoTeleportBack = false;playerSkill2CDEnd = now + chrono::seconds(8);gotoxy(2, MAP_START_Y + MAP_HEIGHT + 4);cout << "飞雷神返回! ";return; } else { playerBorutoTeleportBack = false; } }if (now < playerSkill2CDEnd)return; }
void playerBorutoUltimate() { if (skillInProgress || enemySkillInProgress)return;if (playerBorutoKarmaActive)return;auto now = chrono::steady_clock::now();if (now < playerSkill3CDEnd)return;skillInProgress = true;playerBorutoKarmaActive = true;playerBorutoKarmaEnd = now + chrono::seconds(60);playerSkill3CDEnd = now + chrono::seconds(45);gotoxy(2, MAP_START_Y + MAP_HEIGHT + 4);cout << "楔激活!持续60秒,技能强化中... ";skillInProgress = false; }
void playerHashiramaNormalAttack() { int charY = MAP_START_Y + CHARACTER_ROW;if (player.x >= enemy.x) { gotoxy(2, MAP_START_Y + MAP_HEIGHT + 4);cout << "无法向后攻击! ";return; }int distance = abs(player.x - enemy.x);if (distance < 1 || distance>5) { gotoxy(2, MAP_START_Y + MAP_HEIGHT + 4);cout << "距离不合适,无法攻击! ";return; }playerHashiramaStompActive = true;playerHashiramaStompX = player.x + 1;playerHashiramaStompEnd = chrono::steady_clock::now() + chrono::milliseconds(800);int damage = rand() % 3 + 8;enemy.hp -= damage;if (enemy.hp < 0)enemy.hp = 0;gotoxy(2, MAP_START_Y + MAP_HEIGHT + 4);cout << "跺脚造成 " << damage << " 点伤害! "; }
void playerHashiramaWoodGolemAttack() { if (!playerHashiramaWoodGolemActive)return;if (playerHashiramaWoodGolemAttackCount >= 2)return;auto now = chrono::steady_clock::now();if (now < playerHashiramaWoodGolemAttackCD)return;playerHashiramaWoodGolemAttackCount++;playerHashiramaWoodGolemAttackCD = now + chrono::milliseconds(2000);int charY = MAP_START_Y + CHARACTER_ROW;int startX = player.x + 1;for (int i = 0;i < 15;i++) { int dx = startX + i;if (dx >= MAP_WIDTH || dx >= enemy.x)break;if (dx != enemy.x && dx != player.x) { gotoxy(MAP_START_X + dx, charY);setColor(2);cout << "~"; }this_thread::sleep_for(chrono::milliseconds(30)); }int damage = rand() % 14 + 22;enemy.hp -= damage;if (enemy.hp < 0)enemy.hp = 0;gotoxy(2, MAP_START_Y + MAP_HEIGHT + 4);cout << "化龙造成 " << damage << " 点伤害! ";for (int i = 0;i < 15;i++) { int dx = startX + i;if (dx >= MAP_WIDTH || dx >= enemy.x)break;if (dx != enemy.x && dx != player.x) { gotoxy(MAP_START_X + dx, charY);cout << " "; } } }
void playerHashiramaSkill1() { if (skillInProgress || enemySkillInProgress)return;auto now = chrono::steady_clock::now();int charY = MAP_START_Y + CHARACTER_ROW;if (playerHashiramaEnemyTrapped && !playerHashiramaMyojinmonUsed) { skillInProgress = true;playerHashiramaMyojinmonActive = true;playerHashiramaMyojinmonUsed = true;int damage = rand() % 16 + 20;enemy.hp -= damage;if (enemy.hp < 0)enemy.hp = 0;gotoxy(2, MAP_START_Y + MAP_HEIGHT + 4);cout << "明神门造成 " << damage << " 点伤害! ";this_thread::sleep_for(chrono::seconds(2));playerHashiramaMyojinmonActive = false;playerHashiramaEnemyTrapped = false;playerHashiramaWoodDragonActive = false;skillInProgress = false;return; }if (now < playerSkill1CDEnd)return;skillInProgress = true;playerHashiramaWoodDragonActive = true;playerHashiramaWoodDragonEnd = now + chrono::milliseconds(1000);int startX = player.x + 1;bool hit = false;for (int i = 0;i < 20;i++) { int dx = startX + i;if (dx >= MAP_WIDTH || dx >= enemy.x)break;if (dx != enemy.x && dx != player.x) { gotoxy(MAP_START_X + dx, charY);setColor(2);cout << "~"; }if (dx == enemy.x - 1) { hit = true;break; }this_thread::sleep_for(chrono::milliseconds(30)); }if (hit) { playerHashiramaEnemyTrapped = true;playerHashiramaWoodDragonTrapEnd = now + chrono::seconds(8);playerHashiramaMyojinmonUsed = false;int damage = rand() % 6 + 15;enemy.hp -= damage;if (enemy.hp < 0)enemy.hp = 0;gotoxy(2, MAP_START_Y + MAP_HEIGHT + 4);cout << "木龙扦插命中!造成 " << damage << " 点伤害! 钉住8秒"; } else { playerHashiramaWoodDragonActive = false;gotoxy(2, MAP_START_Y + MAP_HEIGHT + 4);cout << "木龙未命中! "; }playerSkill1CDEnd = now + chrono::seconds(15);skillInProgress = false; }
void playerHashiramaSkill2() { if (skillInProgress || enemySkillInProgress)return;auto now = chrono::steady_clock::now();if (now < playerSkill2CDEnd)return;if (playerHashiramaWoodGolemActive)return;skillInProgress = true;playerHashiramaWoodGolemActive = true;playerHashiramaWoodGolemEnd = now + chrono::seconds(5);playerHashiramaWoodGolemAttackCount = 0;playerHashiramaWoodGolemAttackCD = now;playerSkill2CDEnd = now + chrono::seconds(18);gotoxy(2, MAP_START_Y + MAP_HEIGHT + 4);cout << "木人之术!持续5秒,可按K攻击2次 ";skillInProgress = false; }
void playerHashiramaUltimate() { if (skillInProgress || enemySkillInProgress)return;if (enemy.hp > 80) { gotoxy(2, MAP_START_Y + MAP_HEIGHT + 4);cout << "对方HP需低于等于80才能释放! ";return; }skillInProgress = true;playerHashiramaUltimateActive = true;int targetX = 15;while (player.x > targetX) { player.x--;drawBattleMap();this_thread::sleep_for(chrono::milliseconds(20)); }int charY = MAP_START_Y + CHARACTER_ROW;for (int row = 0;row < 3;row++) { for (int col = 0;col < 4;col++) { int gx = player.x - 1 + col;int gy = charY - 3 - row;if (gx > 0 && gx < MAP_WIDTH && gy>0) { gotoxy(MAP_START_X + gx, MAP_START_Y + gy);setColor(6);cout << "¥"; } } }for (int i = 0;i < 10;i++) { int armX = player.x + 4 + i;if (armX < MAP_WIDTH && armX != enemy.x) { gotoxy(MAP_START_X + armX, charY);setColor(6);cout << "\\"; }this_thread::sleep_for(chrono::milliseconds(100)); }enemy.hp -= 80;if (enemy.hp < 0)enemy.hp = 0;gotoxy(2, MAP_START_Y + MAP_HEIGHT + 4);cout << "千手观音造成80点伤害! ";this_thread::sleep_for(chrono::seconds(2));for (int i = 0;i < 10;i++) { int armX = player.x + 4 + i;if (armX < MAP_WIDTH) { gotoxy(MAP_START_X + armX, charY);cout << " "; } }for (int row = 0;row < 3;row++) { for (int col = 0;col < 4;col++) { int gx = player.x - 1 + col;int gy = charY - 3 - row;if (gx > 0 && gx < MAP_WIDTH && gy>0) { gotoxy(MAP_START_X + gx, MAP_START_Y + gy);cout << " "; } } }playerHashiramaUltimateActive = false;skillInProgress = false; }
void playerSasukeNormalAttack() { int charY = MAP_START_Y + CHARACTER_ROW;if (player.x >= enemy.x) { gotoxy(2, MAP_START_Y + MAP_HEIGHT + 4);cout << "无法向后攻击! ";return; }int distance = abs(player.x - enemy.x);if (distance < 1 || distance>10) { gotoxy(2, MAP_START_Y + MAP_HEIGHT + 4);cout << "距离不合适,无法攻击! ";return; }auto now = chrono::steady_clock::now();if (now < playerSasukeSlashCD)return;if (playerSasukeSusanooActive && playerSasukeSusanooSlashCount < 3) { playerSasukeSusanooSlashActive = true;playerSasukeSusanooSlashEnd = now + chrono::milliseconds(1500);playerSasukeSusanooSlashCount++;int startX = player.x + 3;for (int i = 0;i <= distance;i++) { int currentX = startX + i;if (currentX >= enemy.x)break;if (i > 0) { int prevX = startX + (i - 1);for (int row = 0;row < 8;row++) { int sy = charY - 2 - row;if (sy > 0) { gotoxy(MAP_START_X + prevX, MAP_START_Y + sy);cout << " "; } } }for (int row = 0;row < 8;row++) { int sy = charY - 2 - row;if (sy > 0 && currentX != enemy.x && currentX != player.x) { gotoxy(MAP_START_X + currentX, MAP_START_Y + sy);setColor(13);cout << "}"; } }this_thread::sleep_for(chrono::milliseconds(80)); }int lastX = startX + distance;if (lastX >= enemy.x)lastX = enemy.x - 1;for (int row = 0;row < 8;row++) { int sy = charY - 2 - row;if (sy > 0) { gotoxy(MAP_START_X + lastX, MAP_START_Y + sy);cout << " "; } }int damage = rand() % 6 + 25;enemy.hp -= damage;if (enemy.hp < 0)enemy.hp = 0;gotoxy(2, MAP_START_Y + MAP_HEIGHT + 4);cout << "须佐能乎斩造成 " << damage << " 点伤害! ";if (playerSasukeSusanooSlashCount >= 3) { playerSasukeSusanooActive = false;playerSasukeSusanooSlashCount = 0; }return; }playerSasukeSlashActive = true;playerSasukeSlashEnd = now + chrono::milliseconds(500);playerSasukeSlashCD = now + chrono::milliseconds(1500);int startX = player.x + 1;for (int i = 0;i <= distance;i++) { int currentX = startX + i;if (currentX >= enemy.x)break;if (i > 0) { int prevX = startX + (i - 1);if (prevX != enemy.x && prevX != player.x) { gotoxy(MAP_START_X + prevX, charY);cout << " "; } }if (currentX != enemy.x && currentX != player.x) { gotoxy(MAP_START_X + currentX, charY);setColor(13);cout << ")"; }this_thread::sleep_for(chrono::milliseconds(30)); }int lastX = startX + distance;if (lastX >= enemy.x)lastX = enemy.x - 1;if (lastX != enemy.x && lastX != player.x) { gotoxy(MAP_START_X + lastX, charY);cout << " "; }int damage = rand() % 3 + 8;enemy.hp -= damage;if (enemy.hp < 0)enemy.hp = 0;gotoxy(2, MAP_START_Y + MAP_HEIGHT + 4);cout << "剑气造成 " << damage << " 点伤害! "; }
void playerSasukeSkill1() { if (skillInProgress || enemySkillInProgress)return;auto now = chrono::steady_clock::now();if (now < playerSkill1CDEnd)return;int distance = abs(player.x - enemy.x);if (distance > 8)return;skillInProgress = true;playerSasukeAmaterasuActive = true;playerSasukeAmaterasuEnd = now + chrono::seconds(5);playerSasukeAmaterasuTick = now + chrono::milliseconds(500);playerSasukeAmaterasuHit = true;playerSkill1CDEnd = now + chrono::seconds(10);gotoxy(2, MAP_START_Y + MAP_HEIGHT + 4);cout << "天照!每0.5秒造成5点伤害,持续5秒 ";skillInProgress = false; }
void playerSasukeSkill2() { if (skillInProgress || enemySkillInProgress)return;auto now = chrono::steady_clock::now();if (now < playerSkill2CDEnd)return;skillInProgress = true;int targetX = enemy.x - 5;if (targetX < 1)targetX = 1;player.x = targetX;int damage = rand() % 7 + 12;enemy.hp -= damage;if (enemy.hp < 0)enemy.hp = 0;gotoxy(2, MAP_START_Y + MAP_HEIGHT + 4);cout << "天手力造成 " << damage << " 点伤害! ";playerSkill2CDEnd = now + chrono::seconds(8);skillInProgress = false; }
void playerSasukeSubSkill() { if (skillInProgress || enemySkillInProgress)return;auto now = chrono::steady_clock::now();if (now < playerSasukeSubSkillCD)return;if (playerSasukeSusanooActive) { playerSasukeSusanooActive = false;playerSasukeSusanooSlashCount = 0;playerSasukeUltimateActive = false;gotoxy(2, MAP_START_Y + MAP_HEIGHT + 4);cout << "须佐能乎关闭! ";return; }playerSasukeSusanooActive = true;playerSasukeSusanooEnd = now + chrono::seconds(45);playerSasukeSusanooSlashCount = 0;playerSasukeSubSkillCD = now + chrono::seconds(15);gotoxy(2, MAP_START_Y + MAP_HEIGHT + 4);cout << "完全体须佐能乎!持续45秒 "; }
void playerSasukeUltimate() { if (skillInProgress || enemySkillInProgress)return;if (!playerSasukeSusanooActive)return;if (enemy.hp > 65) { gotoxy(2, MAP_START_Y + MAP_HEIGHT + 4);cout << "对方HP需低于等于65才能释放! ";return; }skillInProgress = true;playerSasukeUltimateActive = true;int charY = MAP_START_Y + CHARACTER_ROW;int targetX = 5;while (player.x > targetX) { player.x--;drawBattleMap();this_thread::sleep_for(chrono::milliseconds(20)); }int dmg1 = rand() % 16 + 20;enemy.hp -= dmg1;if (enemy.hp < 0)enemy.hp = 0;for (int row = 0;row < 5;row++) { for (int col = 0;col < 5;col++) { int bx = enemy.x - 2 + col;int by = charY - 4 - row;if (bx > 0 && bx < MAP_WIDTH && by>0) { gotoxy(MAP_START_X + bx, MAP_START_Y + by);setColor(8);cout << "*"; } } }this_thread::sleep_for(chrono::seconds(1));for (int row = 0;row < 8;row++) { int sx = player.x + 3;int sy = charY - 2 - row;if (sx > 0 && sx < MAP_WIDTH && sy>0) { gotoxy(MAP_START_X + sx, MAP_START_Y + sy);setColor(13);cout << "}"; } }enemy.hp -= 45;if (enemy.hp < 0)enemy.hp = 0;gotoxy(2, MAP_START_Y + MAP_HEIGHT + 4);cout << "地爆天星斩造成 " << dmg1 + 45 << " 点伤害! ";this_thread::sleep_for(chrono::seconds(2));for (int row = 0;row < 5;row++) { for (int col = 0;col < 5;col++) { int bx = enemy.x - 2 + col;int by = charY - 4 - row;if (bx > 0 && bx < MAP_WIDTH && by>0) { gotoxy(MAP_START_X + bx, MAP_START_Y + by);cout << " "; } } }for (int row = 0;row < 8;row++) { int sx = player.x + 3;int sy = charY - 2 - row;if (sx > 0 && sx < MAP_WIDTH && sy>0) { gotoxy(MAP_START_X + sx, MAP_START_Y + sy);cout << " "; } }playerSasukeUltimateActive = false;playerSasukeSusanooActive = false;playerSasukeSusanooSlashCount = 0;skillInProgress = false; }
void playerNormalAttack() { if (playerCharacterType == 0)playerNarutoNormalAttack();else if (playerCharacterType == 1)playerPainNormalAttack();else if (playerCharacterType == 2)playerObitoNormalAttack();else if (playerCharacterType == 3) { if (playerBorutoKarmaActive && playerBorutoFlying)playerBorutoEnhancedAttack();else playerBorutoNormalAttack(); } else if (playerCharacterType == 4) { if (playerHashiramaWoodGolemActive)playerHashiramaWoodGolemAttack();else playerHashiramaNormalAttack(); } else if (playerCharacterType == 5)playerSasukeNormalAttack(); }
void playerSkill1() { if (playerCharacterType == 0)playerNarutoSkill1();else if (playerCharacterType == 1)playerPainSkill1();else if (playerCharacterType == 2)playerObitoSkill1();else if (playerCharacterType == 3)playerBorutoSkill1();else if (playerCharacterType == 4)playerHashiramaSkill1();else if (playerCharacterType == 5)playerSasukeSkill1(); }
void playerSkill2() { if (playerCharacterType == 0)playerNarutoSkill2();else if (playerCharacterType == 1)playerPainSkill2();else if (playerCharacterType == 2)playerObitoSkill2();else if (playerCharacterType == 3)playerBorutoSkill2();else if (playerCharacterType == 4)playerHashiramaSkill2();else if (playerCharacterType == 5)playerSasukeSkill2(); }
void playerUltimate() { if (playerCharacterType == 0)playerNarutoUltimate();else if (playerCharacterType == 1)playerPainUltimate();else if (playerCharacterType == 2)playerObitoUltimate();else if (playerCharacterType == 3)playerBorutoUltimate();else if (playerCharacterType == 4)playerHashiramaUltimate();else if (playerCharacterType == 5)playerSasukeUltimate(); }
void enemyNarutoNormalAttack() { int distance = abs(player.x - enemy.x);if (enemy.x > player.x && distance >= 1 && distance <= 3) { int damage = rand() % 4 + 3;enemyNarutoTailActive = true;enemyNarutoTailEnd = chrono::steady_clock::now() + chrono::milliseconds(1500);for (int i = 0;i < 3;i++) { enemyNarutoTailX[i] = enemy.x - 1 - i;if (enemyNarutoTailX[i] <= player.x) { enemyNarutoTailX[i] = 0;break; } }player.hp -= damage;if (player.hp < 0)player.hp = 0;enemyNormalAttackCount++; } }
void enemyNarutoSkill1() { if (enemySkillInProgress || skillInProgress)return;auto now = chrono::steady_clock::now();if (now < enemySkill1CDEnd)return;enemySkillInProgress = true;int targetX = player.x + 1;while (enemy.x > targetX) { enemy.x--;if (enemy.x <= player.x) { enemy.x = player.x + 1;break; }this_thread::sleep_for(chrono::milliseconds(50)); }int damage = rand() % 8 + 8;player.hp -= damage;if (player.hp < 0)player.hp = 0;enemySkill1CDEnd = now + chrono::seconds(8);enemySkillInProgress = false; }
void enemyNarutoSkill2() { if (enemySkillInProgress || skillInProgress)return;auto now = chrono::steady_clock::now();if (now < enemySkill2CDEnd)return;enemySkillInProgress = true;bool caught = false;for (int i = 0;i < 20;i++) { int checkX = enemy.x - 1 - i;if (checkX <= 0 || checkX <= player.x)break;if (checkX == player.x + 1) { caught = true;break; } }this_thread::sleep_for(chrono::milliseconds(500));if (caught) { int damage = rand() % 6 + 20;player.hp -= damage;if (player.hp < 0)player.hp = 0;enemySkill2CDEnd = now + chrono::seconds(15); } else { enemySkill2CDEnd = now + chrono::seconds(7); }enemySkillInProgress = false; }
void enemyNarutoUltimate() { if (enemySkillInProgress || skillInProgress)return;if (player.hp > 35)return;enemySkillInProgress = true;player.hp -= 35;if (player.hp < 0)player.hp = 0;this_thread::sleep_for(chrono::seconds(3));enemySkillInProgress = false; }
void enemyPainNormalAttack() { if (enemy.x <= player.x)return;int charY = MAP_START_Y + CHARACTER_ROW;if (enemyPainRodActive) { if (enemyPainRodX > 0 && enemyPainRodX < MAP_WIDTH && enemyPainRodX != player.x && enemyPainRodX != enemy.x) { gotoxy(MAP_START_X + enemyPainRodX, charY);cout << " "; }enemyPainRodActive = false;enemyRodHitting = false; }int rodX = enemy.x - 3;if (rodX <= player.x)rodX = player.x + 1;if (rodX >= enemy.x)return;if (rodX == player.x)rodX = player.x + 1;enemyPainRodActive = true;enemyPainRodX = rodX;enemyPainRodEnd = chrono::steady_clock::now() + chrono::milliseconds(1500);int damage = rand() % 3 + 4;player.hp -= damage;if (player.hp < 0)player.hp = 0;if (rodX == player.x + 1) { enemyRodHitting = true;enemyRodHitEnd = enemyPainRodEnd; } else { enemyRodHitting = false; }enemyNormalAttackCount++; }
void enemyPainSkill1() { if (enemySkillInProgress || skillInProgress)return;auto now = chrono::steady_clock::now();if (now < enemySkill1CDEnd)return;skillInProgress = true;enemySkillInProgress = true;int targetX = enemy.x - 2;while (player.x < targetX) { player.x++;if (player.x >= enemy.x) { player.x = enemy.x - 2;break; }this_thread::sleep_for(chrono::milliseconds(30)); }player.x = targetX;enemyBanshoTeninActive = true;enemyBanshoTeninEnd = now + chrono::seconds(5);int damage = rand() % 4 + 10;player.hp -= damage;if (player.hp < 0)player.hp = 0;enemySkill1CDEnd = now + chrono::seconds(12);enemySkillInProgress = false;skillInProgress = false; }
void enemyPainSkill2() { if (enemySkillInProgress || skillInProgress)return;auto now = chrono::steady_clock::now();if (now < enemySkill2CDEnd)return;enemySkillInProgress = true;int damage = rand() % 5 + 8;if (abs(player.x - enemy.x) <= 1) { player.hp -= damage;if (player.hp < 0)player.hp = 0; }this_thread::sleep_for(chrono::seconds(1));enemySkill2CDEnd = now + chrono::seconds(15);enemySkillInProgress = false; }
void enemyPainUltimate() { if (enemySkillInProgress || skillInProgress)return;if (player.hp > 50)return;enemySkillInProgress = true;int targetX = MAP_WIDTH / 2;while (enemy.x != targetX) { if (enemy.x < targetX)enemy.x++;else if (enemy.x > targetX)enemy.x--;this_thread::sleep_for(chrono::milliseconds(20)); }for (int second = 1;second <= 5;second++) { player.hp -= 10;if (player.hp < 0)player.hp = 0;this_thread::sleep_for(chrono::seconds(1));if (player.hp <= 0)break; }enemySkillInProgress = false; }
void enemyObitoNormalAttack() { int charY = MAP_START_Y + CHARACTER_ROW;if (enemy.x <= player.x)return;int distance = abs(player.x - enemy.x);if (distance < 1 || distance>2)return;int kickX = enemy.x - 1;if (kickX <= player.x)kickX = player.x + 1;if (kickX >= enemy.x)return;enemyObitoKickActive = true;enemyObitoKickX = kickX;enemyObitoKickEnd = chrono::steady_clock::now() + chrono::milliseconds(1000);int damage = rand() % 3 + 6;player.hp -= damage;if (player.hp < 0)player.hp = 0;enemyNormalAttackCount++; }
void enemyObitoSkill1() { if (enemySkillInProgress || skillInProgress)return;auto now = chrono::steady_clock::now();int charY = MAP_START_Y + CHARACTER_ROW;if (enemyObitoEnemyTrapped && !enemyObitoFireActive) { int savedX = enemy.x;int targetX = player.x + 3;if (targetX >= MAP_WIDTH - 2)targetX = MAP_WIDTH - 3;if (targetX < 1)targetX = 1;enemySkillInProgress = true;enemyObitoFireActive = true;enemy.x = targetX;drawBattleMap();this_thread::sleep_for(chrono::milliseconds(300));int fireX = enemy.x - 1;for (int i = 0;i < 8;i++) { int fx = fireX - i;if (fx > 0 && fx != player.x && fx != enemy.x) { gotoxy(MAP_START_X + fx, charY);setColor(6);cout << "~"; } }int damage = rand() % 5 + 14;player.hp -= damage;if (player.hp < 0)player.hp = 0;this_thread::sleep_for(chrono::seconds(2));for (int i = 0;i < 8;i++) { int fx = fireX - i;if (fx > 0 && fx != player.x && fx != enemy.x) { gotoxy(MAP_START_X + fx, charY);cout << " "; } }enemy.x = savedX;enemyObitoFireActive = false;enemySkillInProgress = false;return; }if (now < enemySkill1CDEnd)return;enemySkillInProgress = true;enemyObitoWoodSpikeX = enemy.x - 1;enemyObitoWoodSpikeActive = true;enemyObitoWoodSpikeEnd = now + chrono::milliseconds(500);bool hitEnemy = false;for (int i = 0;i < 30;i++) { int checkX = enemy.x - 1 - i;if (checkX <= 0 || checkX <= player.x)break;if (checkX != player.x && checkX != enemy.x) { gotoxy(MAP_START_X + checkX, charY);setColor(2);cout << "-"; }if (checkX == player.x + 1) { hitEnemy = true;break; }this_thread::sleep_for(chrono::milliseconds(20)); }if (hitEnemy) { enemyObitoEnemyTrapped = true;enemyObitoEnemyTrappedEnd = now + chrono::seconds(15);int damage = rand() % 5 + 12;player.hp -= damage;if (player.hp < 0)player.hp = 0; } else { enemyObitoWoodSpikeActive = false; }for (int i = 0;i < 30;i++) { int clearX = enemy.x - 1 - i;if (clearX <= 0 || clearX <= player.x)break;if (clearX != player.x && clearX != enemy.x) { gotoxy(MAP_START_X + clearX, charY);cout << " "; } }enemySkill1CDEnd = now + chrono::seconds(hitEnemy ? 20 : 10);enemySkillInProgress = false; }
void enemyObitoSkill2() { if (enemySkillInProgress || skillInProgress)return;auto now = chrono::steady_clock::now();int charY = MAP_START_Y + CHARACTER_ROW;if (enemyObitoKamuiActive && !enemyObitoKamuiSpaceActive) { enemyObitoKamuiActive = false;enemyObitoKamuiSpaceActive = true;enemyObitoSavedX = enemy.x;int targetX = player.x + 1;if (targetX >= MAP_WIDTH - 2)targetX = MAP_WIDTH - 3;if (targetX < 1)targetX = 1;enemy.x = targetX;enemyObitoPlayerInSpace = true;enemyObitoKamuiSpaceEnd = now + chrono::seconds(3);drawBattleMap();this_thread::sleep_for(chrono::milliseconds(500));for (int sec = 0;sec < 3;sec++) { int damage = rand() % 3 + 8;player.hp -= damage;if (player.hp < 0)player.hp = 0;this_thread::sleep_for(chrono::seconds(1));if (player.hp <= 0)break; }enemyObitoPlayerInSpace = false;enemyObitoKamuiSpaceActive = false;player.x = enemy.x - 3;if (player.x < 1)player.x = 1;if (player.x >= MAP_WIDTH - 2)player.x = MAP_WIDTH - 3;enemySkill2CDEnd = now + chrono::seconds(10);return; }if (enemyObitoEnemyTrapped && !enemyObitoWoodStormActive) { enemySkillInProgress = true;enemyObitoWoodStormActive = true;int savedX = enemy.x;int targetX = player.x - 5;if (targetX < 2)targetX = 2;if (targetX >= MAP_WIDTH - 2)targetX = MAP_WIDTH - 3;enemy.x = targetX;drawBattleMap();this_thread::sleep_for(chrono::milliseconds(300));for (int i = 0;i < 20;i++) { int branchX = enemy.x + 1 + i;if (branchX >= MAP_WIDTH || branchX >= player.x)break;if (branchX != player.x && branchX != enemy.x) { gotoxy(MAP_START_X + branchX, charY - 1);setColor(2);cout << "_";gotoxy(MAP_START_X + branchX, charY);setColor(2);cout << "-"; } }for (int sec = 0;sec < 6;sec++) { if (abs(enemy.x - player.x) <= 20) { player.hp -= 8;if (player.hp < 0)player.hp = 0; }this_thread::sleep_for(chrono::seconds(1));if (player.hp <= 0)break; }for (int i = 0;i < 20;i++) { int branchX = enemy.x + 1 + i;if (branchX >= MAP_WIDTH)break;if (branchX != player.x && branchX != enemy.x) { gotoxy(MAP_START_X + branchX, charY - 1);cout << " ";gotoxy(MAP_START_X + branchX, charY);cout << " "; } }enemy.x = savedX;enemyObitoWoodStormActive = false;enemySkillInProgress = false;return; }if (now < enemySkill2CDEnd)return;enemyObitoKamuiActive = true;enemyObitoKamuiEnd = now + chrono::seconds(5); }
void enemyObitoUltimate() { if (enemySkillInProgress || skillInProgress)return;if (player.hp > 50)return;enemySkillInProgress = true;enemyObitoUltimateActive = true;int charY = MAP_START_Y + CHARACTER_ROW;int tenTailBaseY = charY - 5;for (int row = 0;row < 5;row++) { for (int col = 0;col < 10;col++) { int x = enemy.x - 5 + col;int y = tenTailBaseY - row;if (x > 0 && x < MAP_WIDTH && y>0) { gotoxy(MAP_START_X + x, MAP_START_Y + y);setColor(8);cout << "*"; } } }gotoxy(MAP_START_X + enemy.x, MAP_START_Y + tenTailBaseY - 5);setColor(12);cout << "&";this_thread::sleep_for(chrono::seconds(2));player.hp -= 50;if (player.hp < 0)player.hp = 0;for (int row = 0;row < 5;row++) { for (int col = 0;col < 10;col++) { int x = enemy.x - 5 + col;int y = tenTailBaseY - row;if (x > 0 && x < MAP_WIDTH && y>0) { gotoxy(MAP_START_X + x, MAP_START_Y + y);cout << " "; } } }gotoxy(MAP_START_X + enemy.x, MAP_START_Y + tenTailBaseY - 5);cout << " ";enemyObitoUltimateActive = false;enemySkillInProgress = false; }
void enemyBorutoNormalAttack() { int charY = MAP_START_Y + CHARACTER_ROW;if (enemy.x <= player.x)return;int distance = abs(player.x - enemy.x);if (distance < 1 || distance>4)return;if (playerObitoKamuiActive && !playerObitoKamuiSpaceActive)return;enemyBorutoSwordActive = true;enemyBorutoSwordSlashing = true;enemyBorutoSwordEnd = chrono::steady_clock::now() + chrono::milliseconds(2000);enemyBorutoSwordX = enemy.x - 1;int damage1 = rand() % 3 + 7;player.hp -= damage1;if (player.hp < 0)player.hp = 0;this_thread::sleep_for(chrono::milliseconds(400));if (enemyRodHitting || enemyBanshoTeninActive || enemyObitoEnemyTrapped || enemyHashiramaEnemyTrapped || enemySasukeAmaterasuHit) { enemyBorutoSwordActive = false;enemyBorutoSwordSlashing = false;return; }int damage2 = rand() % 4 + 7;player.hp -= damage2;if (player.hp < 0)player.hp = 0;this_thread::sleep_for(chrono::milliseconds(400));if (enemyRodHitting || enemyBanshoTeninActive || enemyObitoEnemyTrapped || enemyHashiramaEnemyTrapped || enemySasukeAmaterasuHit) { enemyBorutoSwordActive = false;enemyBorutoSwordSlashing = false;return; }int damage3 = rand() % 5 + 8;player.hp -= damage3;if (player.hp < 0)player.hp = 0;enemyBorutoSwordActive = false;enemyBorutoSwordSlashing = false;enemyNormalAttackCount++; }
void enemyBorutoSkill1() { if (enemySkillInProgress || skillInProgress)return;auto now = chrono::steady_clock::now();if (enemyBorutoKarmaActive) { if (enemyBorutoFlying)return;if (now < enemySkill1CDEnd)return;enemyBorutoFlying = true;enemyBorutoFlyingEnd = now + chrono::seconds(10);enemyBorutoEnhancedAttackCount = 0;enemySkill1CDEnd = now + chrono::seconds(6);return; }if (now < enemySkill1CDEnd)return;enemySkillInProgress = true;int targetX = player.x + 3;if (targetX >= MAP_WIDTH - 2)targetX = MAP_WIDTH - 3;while (enemy.x < targetX) { enemy.x++;drawBattleMap();this_thread::sleep_for(chrono::milliseconds(30)); }while (enemy.x > targetX) { enemy.x--;drawBattleMap();this_thread::sleep_for(chrono::milliseconds(30)); }enemyBorutoRasenganActive = true;enemyBorutoRasenganEnd = now + chrono::seconds(3);enemyBorutoRasenganHit = true;for (int sec = 0;sec < 3;sec++) { int damage = rand() % 5 + 8;player.hp -= damage;if (player.hp < 0)player.hp = 0;this_thread::sleep_for(chrono::seconds(1));if (player.hp <= 0)break; }enemyBorutoRasenganActive = false;targetX = player.x + 8;if (targetX >= MAP_WIDTH - 2)targetX = MAP_WIDTH - 3;enemy.x = targetX;enemyBorutoMarkActive = true;enemyBorutoMarkX = player.x;enemyBorutoMarkEnd = now + chrono::seconds(10);enemyBorutoTeleported = false;enemyBorutoTeleportBack = false;enemySkill1CDEnd = now + chrono::seconds(18);enemySkillInProgress = false; }
void enemyBorutoSkill2() { if (enemySkillInProgress || skillInProgress)return;auto now = chrono::steady_clock::now();if (enemyBorutoKarmaActive) { if (enemyBorutoFlying)return;if (now < enemySkill2CDEnd)return;enemySkillInProgress = true;int ballX = enemy.x - 1;int charY = MAP_START_Y + CHARACTER_ROW;for (int step = 0;step < 20;step++) { int currentX = ballX - step;if (currentX <= player.x)break;if (step > 0) { gotoxy(MAP_START_X + currentX + 1, charY);cout << " "; }if (currentX != player.x && currentX != enemy.x) { gotoxy(MAP_START_X + currentX, charY);setColor(11);cout << "O"; }this_thread::sleep_for(chrono::milliseconds(50)); }int damage = rand() % 6 + 15;player.hp -= damage;if (player.hp < 0)player.hp = 0;gotoxy(MAP_START_X + player.x + 1, charY);cout << " ";enemySkill2CDEnd = now + chrono::seconds(15);enemySkillInProgress = false;return; }if (enemyBorutoMarkActive && !enemyBorutoTeleported) { enemyBorutoTeleportSavedX = enemy.x;enemy.x = player.x + 3;if (enemy.x >= MAP_WIDTH - 2)enemy.x = MAP_WIDTH - 3;enemyBorutoTeleported = true;enemyBorutoTeleportTime = now;int damage = rand() % 9 + 10;player.hp -= damage;if (player.hp < 0)player.hp = 0;enemyBorutoTeleportBack = true;return; }if (enemyBorutoTeleported && enemyBorutoTeleportBack) { auto timeSinceTeleport = chrono::duration_cast<chrono::seconds>(now - enemyBorutoTeleportTime).count();if (timeSinceTeleport <= 5) { enemy.x = enemyBorutoTeleportSavedX;enemyBorutoTeleported = false;enemyBorutoTeleportBack = false;enemySkill2CDEnd = now + chrono::seconds(8);return; } else { enemyBorutoTeleportBack = false; } }if (now < enemySkill2CDEnd)return; }
void enemyBorutoUltimate() { if (enemySkillInProgress || skillInProgress)return;if (enemyBorutoKarmaActive)return;auto now = chrono::steady_clock::now();if (now < enemySkill3CDEnd)return;enemySkillInProgress = true;enemyBorutoKarmaActive = true;enemyBorutoKarmaEnd = now + chrono::seconds(60);enemySkill3CDEnd = now + chrono::seconds(45);enemySkillInProgress = false; }
void enemyHashiramaNormalAttack() { if (enemy.x <= player.x)return;int distance = abs(player.x - enemy.x);if (distance < 1 || distance>5)return;enemyHashiramaStompActive = true;enemyHashiramaStompX = enemy.x - 1;enemyHashiramaStompEnd = chrono::steady_clock::now() + chrono::milliseconds(800);int damage = rand() % 3 + 8;player.hp -= damage;if (player.hp < 0)player.hp = 0;enemyNormalAttackCount++; }
void enemyHashiramaSkill1() { if (enemySkillInProgress || skillInProgress)return;auto now = chrono::steady_clock::now();if (enemyHashiramaEnemyTrapped && !enemyHashiramaMyojinmonUsed) { enemySkillInProgress = true;enemyHashiramaMyojinmonActive = true;enemyHashiramaMyojinmonUsed = true;int damage = rand() % 16 + 20;player.hp -= damage;if (player.hp < 0)player.hp = 0;this_thread::sleep_for(chrono::seconds(2));enemyHashiramaMyojinmonActive = false;enemyHashiramaEnemyTrapped = false;enemyHashiramaWoodDragonActive = false;enemySkillInProgress = false;return; }if (now < enemySkill1CDEnd)return;enemySkillInProgress = true;enemyHashiramaWoodDragonActive = true;enemyHashiramaWoodDragonEnd = now + chrono::milliseconds(1000);int startX = enemy.x - 1;bool hit = false;int charY = MAP_START_Y + CHARACTER_ROW;for (int i = 0;i < 20;i++) { int dx = startX - i;if (dx <= 0 || dx <= player.x)break;if (dx != player.x && dx != enemy.x) { gotoxy(MAP_START_X + dx, charY);setColor(2);cout << "~"; }if (dx == player.x + 1) { hit = true;break; }this_thread::sleep_for(chrono::milliseconds(30)); }if (hit) { enemyHashiramaEnemyTrapped = true;enemyHashiramaWoodDragonTrapEnd = now + chrono::seconds(8);enemyHashiramaMyojinmonUsed = false;int damage = rand() % 6 + 15;player.hp -= damage;if (player.hp < 0)player.hp = 0; } else { enemyHashiramaWoodDragonActive = false; }enemySkill1CDEnd = now + chrono::seconds(15);enemySkillInProgress = false; }
void enemyHashiramaSkill2() { if (enemySkillInProgress || skillInProgress)return;auto now = chrono::steady_clock::now();if (now < enemySkill2CDEnd)return;if (enemyHashiramaWoodGolemActive)return;enemySkillInProgress = true;enemyHashiramaWoodGolemActive = true;enemyHashiramaWoodGolemEnd = now + chrono::seconds(5);enemyHashiramaWoodGolemAttackCount = 0;enemySkill2CDEnd = now + chrono::seconds(18);enemySkillInProgress = false; }
void enemyHashiramaUltimate() { if (enemySkillInProgress || skillInProgress)return;if (player.hp > 80)return;enemySkillInProgress = true;enemyHashiramaUltimateActive = true;int targetX = MAP_WIDTH - 15;while (enemy.x < targetX) { enemy.x++;drawBattleMap();this_thread::sleep_for(chrono::milliseconds(20)); }int charY = MAP_START_Y + CHARACTER_ROW;for (int row = 0;row < 3;row++) { for (int col = 0;col < 4;col++) { int gx = enemy.x - 1 + col;int gy = charY - 3 - row;if (gx > 0 && gx < MAP_WIDTH && gy>0) { gotoxy(MAP_START_X + gx, MAP_START_Y + gy);setColor(6);cout << "¥"; } } }for (int i = 0;i < 10;i++) { int armX = enemy.x - 4 - i;if (armX > 0 && armX != player.x) { gotoxy(MAP_START_X + armX, charY);setColor(6);cout << "\\"; }this_thread::sleep_for(chrono::milliseconds(100)); }player.hp -= 80;if (player.hp < 0)player.hp = 0;this_thread::sleep_for(chrono::seconds(2));for (int i = 0;i < 10;i++) { int armX = enemy.x - 4 - i;if (armX > 0) { gotoxy(MAP_START_X + armX, charY);cout << " "; } }for (int row = 0;row < 3;row++) { for (int col = 0;col < 4;col++) { int gx = enemy.x - 1 + col;int gy = charY - 3 - row;if (gx > 0 && gx < MAP_WIDTH && gy>0) { gotoxy(MAP_START_X + gx, MAP_START_Y + gy);cout << " "; } } }enemyHashiramaUltimateActive = false;enemySkillInProgress = false; }
void enemySasukeNormalAttack() { int charY = MAP_START_Y + CHARACTER_ROW;if (enemy.x <= player.x)return;int distance = abs(player.x - enemy.x);if (distance < 1 || distance>10)return;auto now = chrono::steady_clock::now();if (now < enemySasukeSlashCD)return;if (enemySasukeSusanooActive && enemySasukeSusanooSlashCount < 3) { enemySasukeSusanooSlashActive = true;enemySasukeSusanooSlashEnd = now + chrono::milliseconds(1500);enemySasukeSusanooSlashCount++;int startX = enemy.x - 3;for (int i = 0;i <= distance;i++) { int currentX = startX - i;if (currentX <= player.x)break;if (i > 0) { int prevX = startX - (i - 1);for (int row = 0;row < 8;row++) { int sy = charY - 2 - row;if (sy > 0) { gotoxy(MAP_START_X + prevX, MAP_START_Y + sy);cout << " "; } } }for (int row = 0;row < 8;row++) { int sy = charY - 2 - row;if (sy > 0 && currentX != player.x && currentX != enemy.x) { gotoxy(MAP_START_X + currentX, MAP_START_Y + sy);setColor(13);cout << "}"; } }this_thread::sleep_for(chrono::milliseconds(80)); }int lastX = startX - distance;if (lastX <= player.x)lastX = player.x + 1;for (int row = 0;row < 8;row++) { int sy = charY - 2 - row;if (sy > 0) { gotoxy(MAP_START_X + lastX, MAP_START_Y + sy);cout << " "; } }int damage = rand() % 6 + 25;player.hp -= damage;if (player.hp < 0)player.hp = 0;if (enemySasukeSusanooSlashCount >= 3) { enemySasukeSusanooActive = false;enemySasukeSusanooSlashCount = 0; }enemyNormalAttackCount++;return; }enemySasukeSlashActive = true;enemySasukeSlashEnd = now + chrono::milliseconds(500);enemySasukeSlashCD = now + chrono::milliseconds(1500);int startX = enemy.x - 1;for (int i = 0;i <= distance;i++) { int currentX = startX - i;if (currentX <= player.x)break;if (i > 0) { int prevX = startX - (i - 1);if (prevX != player.x && prevX != enemy.x) { gotoxy(MAP_START_X + prevX, charY);cout << " "; } }if (currentX != player.x && currentX != enemy.x) { gotoxy(MAP_START_X + currentX, charY);setColor(13);cout << ")"; }this_thread::sleep_for(chrono::milliseconds(30)); }int lastX = startX - distance;if (lastX <= player.x)lastX = player.x + 1;if (lastX != player.x && lastX != enemy.x) { gotoxy(MAP_START_X + lastX, charY);cout << " "; }int damage = rand() % 3 + 8;player.hp -= damage;if (player.hp < 0)player.hp = 0;enemyNormalAttackCount++; }
void enemySasukeSkill1() { if (enemySkillInProgress || skillInProgress)return;auto now = chrono::steady_clock::now();if (now < enemySkill1CDEnd)return;int distance = abs(player.x - enemy.x);if (distance > 8)return;enemySkillInProgress = true;enemySasukeAmaterasuActive = true;enemySasukeAmaterasuEnd = now + chrono::seconds(5);enemySasukeAmaterasuTick = now + chrono::milliseconds(500);enemySasukeAmaterasuHit = true;enemySkill1CDEnd = now + chrono::seconds(10);enemySkillInProgress = false; }
void enemySasukeSkill2() { if (enemySkillInProgress || skillInProgress)return;auto now = chrono::steady_clock::now();if (now < enemySkill2CDEnd)return;enemySkillInProgress = true;int targetX = player.x + 5;if (targetX >= MAP_WIDTH - 2)targetX = MAP_WIDTH - 3;enemy.x = targetX;int damage = rand() % 7 + 12;player.hp -= damage;if (player.hp < 0)player.hp = 0;enemySkill2CDEnd = now + chrono::seconds(8);enemySkillInProgress = false; }
void enemySasukeSubSkill() { if (enemySkillInProgress || skillInProgress)return;auto now = chrono::steady_clock::now();if (now < enemySasukeSubSkillCD)return;if (enemySasukeSusanooActive) { enemySasukeSusanooActive = false;enemySasukeSusanooSlashCount = 0;enemySasukeUltimateActive = false;return; }enemySasukeSusanooActive = true;enemySasukeSusanooEnd = now + chrono::seconds(45);enemySasukeSusanooSlashCount = 0;enemySasukeSubSkillCD = now + chrono::seconds(15); }
void enemySasukeUltimate() { if (enemySkillInProgress || skillInProgress)return;if (!enemySasukeSusanooActive)return;if (player.hp > 65)return;enemySkillInProgress = true;enemySasukeUltimateActive = true;int charY = MAP_START_Y + CHARACTER_ROW;int targetX = MAP_WIDTH - 5;while (enemy.x < targetX) { enemy.x++;drawBattleMap();this_thread::sleep_for(chrono::milliseconds(20)); }int dmg1 = rand() % 16 + 20;player.hp -= dmg1;if (player.hp < 0)player.hp = 0;this_thread::sleep_for(chrono::seconds(2));player.hp -= 45;if (player.hp < 0)player.hp = 0;enemySasukeUltimateActive = false;enemySasukeSusanooActive = false;enemySasukeSusanooSlashCount = 0;enemySkillInProgress = false; }
void enemyNormalAttack() { if (enemyCharacterType == 0)enemyNarutoNormalAttack();else if (enemyCharacterType == 1)enemyPainNormalAttack();else if (enemyCharacterType == 2)enemyObitoNormalAttack();else if (enemyCharacterType == 3)enemyBorutoNormalAttack();else if (enemyCharacterType == 4)enemyHashiramaNormalAttack();else if (enemyCharacterType == 5)enemySasukeNormalAttack(); }
void enemySkill1() { if (enemyCharacterType == 0)enemyNarutoSkill1();else if (enemyCharacterType == 1)enemyPainSkill1();else if (enemyCharacterType == 2)enemyObitoSkill1();else if (enemyCharacterType == 3)enemyBorutoSkill1();else if (enemyCharacterType == 4)enemyHashiramaSkill1();else if (enemyCharacterType == 5)enemySasukeSkill1(); }
void enemySkill2() { if (enemyCharacterType == 0)enemyNarutoSkill2();else if (enemyCharacterType == 1)enemyPainSkill2();else if (enemyCharacterType == 2)enemyObitoSkill2();else if (enemyCharacterType == 3)enemyBorutoSkill2();else if (enemyCharacterType == 4)enemyHashiramaSkill2();else if (enemyCharacterType == 5)enemySasukeSkill2(); }
void enemyUltimate() { if (enemyCharacterType == 0)enemyNarutoUltimate();else if (enemyCharacterType == 1)enemyPainUltimate();else if (enemyCharacterType == 2)enemyObitoUltimate();else if (enemyCharacterType == 3)enemyBorutoUltimate();else if (enemyCharacterType == 4)enemyHashiramaUltimate();else if (enemyCharacterType == 5)enemySasukeUltimate(); }
void enemyAI() { if (playerRodHitting) { auto now = chrono::steady_clock::now();if (now < playerRodHitEnd)return;else playerRodHitting = false; }if (playerBanshoTeninActive) { auto now = chrono::steady_clock::now();if (now < playerBanshoTeninEnd)return;else playerBanshoTeninActive = false; }if (playerObitoEnemyTrapped) { auto now = chrono::steady_clock::now();if (now < playerObitoEnemyTrappedEnd)return;else playerObitoEnemyTrapped = false; }if (playerHashiramaEnemyTrapped) { auto now = chrono::steady_clock::now();if (now < playerHashiramaWoodDragonTrapEnd)return;else playerHashiramaEnemyTrapped = false; }if (playerSasukeAmaterasuHit) { auto now = chrono::steady_clock::now();if (now < playerSasukeAmaterasuEnd)return;else playerSasukeAmaterasuHit = false; }if (playerObitoEnemyInSpace)return;if (enemyObitoPlayerInSpace)return;if (enemyObitoEnemyTrapped) { auto now = chrono::steady_clock::now();if (now < enemyObitoEnemyTrappedEnd)return;else enemyObitoEnemyTrapped = false; }if (enemyHashiramaEnemyTrapped) { auto now = chrono::steady_clock::now();if (now < enemyHashiramaWoodDragonTrapEnd)return;else enemyHashiramaEnemyTrapped = false; }if (enemySasukeAmaterasuHit) { auto now = chrono::steady_clock::now();if (now < enemySasukeAmaterasuEnd)return;else enemySasukeAmaterasuHit = false; }if (playerBorutoRasenganHit) { auto now = chrono::steady_clock::now();if (now < playerBorutoRasenganEnd)return; }if (enemySkillInProgress || skillInProgress)return;if (playerShinraTenseiActive || enemyShinraTenseiActive)return;if (playerObitoKamuiActive && !playerObitoKamuiSpaceActive)return;auto now = chrono::steady_clock::now();int distance = abs(player.x - enemy.x);double hpRatio = (double)enemy.hp / enemy.maxHp;if (hpRatio > 0.7)enemyAIMood = 0;else if (hpRatio > 0.35)enemyAIMood = 1;else enemyAIMood = 2;bool canUseUltimate = (enemyCharacterType == 0 && player.hp <= 35) || (enemyCharacterType == 1 && player.hp <= 50) || (enemyCharacterType == 2 && player.hp <= 50) || (enemyCharacterType == 3 && player.hp <= 50) || (enemyCharacterType == 4 && player.hp <= 80) || (enemyCharacterType == 5 && enemySasukeSusanooActive && player.hp <= 65);if (canUseUltimate && !enemyUltimateReady)enemyUltimateReady = true;if (enemyUltimateReady) { if (enemyAIMood == 2 || (enemyAIMood == 1 && hpRatio < 0.5) || (enemyAIMood == 0 && hpRatio < 0.3)) { enemyUltimate();enemyUltimateReady = false;enemyLastActionType = 4;enemyConsecutiveSkills = 0;return; } }bool skill1Ready = (now >= enemySkill1CDEnd);bool skill2Ready = (now >= enemySkill2CDEnd);auto timeSinceLastSkill = chrono::duration_cast<chrono::milliseconds>(now - enemyLastSkillTime).count();bool canUseSkill = (timeSinceLastSkill > 2000 || enemyConsecutiveSkills < 2);if (enemyCharacterType == 5 && !enemySasukeSusanooActive) { auto subCD = chrono::duration_cast<chrono::seconds>(enemySasukeSubSkillCD - now).count();if (subCD <= 0 && rand() % 100 < 30) { enemySasukeSubSkill();enemyLastActionType = 5;enemyConsecutiveSkills = 0;return; } }if (enemyCharacterType == 5 && enemySasukeSusanooActive && enemySasukeSusanooSlashCount < 3 && distance <= 10) { if (rand() % 100 < 50) { enemyNormalAttack();enemyLastActionType = 1;enemyConsecutiveSkills = 0;return; } }if (enemyCharacterType == 2 && skill2Ready && enemyAIMood == 0 && distance <= 3 && !enemyObitoKamuiActive && !enemyObitoKamuiSpaceActive) { if (rand() % 100 < 25) { enemySkill2();enemyLastActionType = 3;enemyLastSkillTime = now;enemyConsecutiveSkills++;return; } }if (enemyCharacterType == 2 && enemyObitoEnemyTrapped) { if (!enemyObitoFireActive && skill1Ready) { enemySkill1();enemyLastActionType = 2;enemyLastSkillTime = now;enemyConsecutiveSkills++;return; }if (!enemyObitoWoodStormActive && skill2Ready) { enemySkill2();enemyLastActionType = 3;enemyLastSkillTime = now;enemyConsecutiveSkills++;return; } }if (enemyCharacterType == 4 && enemyHashiramaEnemyTrapped) { if (!enemyHashiramaMyojinmonUsed && skill1Ready) { enemySkill1();enemyLastActionType = 2;enemyLastSkillTime = now;enemyConsecutiveSkills++;return; } }if (enemyCharacterType == 4 && skill2Ready && enemyAIMood <= 1 && distance <= 5 && !enemyHashiramaWoodGolemActive) { enemySkill2();enemyLastActionType = 3;enemyLastSkillTime = now;enemyConsecutiveSkills++;return; }if (enemyCharacterType == 4 && enemyHashiramaWoodGolemActive && enemyHashiramaWoodGolemAttackCount < 2) { enemyNormalAttack();enemyLastActionType = 1;enemyConsecutiveSkills = 0;return; }if (enemyCharacterType == 3 && enemyBorutoKarmaActive && enemyBorutoFlying && enemyBorutoEnhancedAttackCount < 3) { if (rand() % 100 < 40) { enemyNormalAttack();enemyLastActionType = 1;enemyConsecutiveSkills = 0;return; } }int actionRoll = rand() % 100;if (distance <= 3) { if (canUseSkill && skill1Ready && actionRoll < 20 + enemyAIMood * 15) { enemySkill1();enemyLastActionType = 2;enemyLastSkillTime = now;enemyConsecutiveSkills++; } else if (canUseSkill && skill2Ready && actionRoll < 40 + enemyAIMood * 20) { enemySkill2();enemyLastActionType = 3;enemyLastSkillTime = now;enemyConsecutiveSkills++; } else if (actionRoll < 70) { if (enemyLastActionType != 1 || enemyConsecutiveSkills < 4) { enemyNormalAttack();enemyLastActionType = 1;enemyConsecutiveSkills = 0; } else { if (enemy.x < MAP_WIDTH - 3 && rand() % 2 == 0)enemy.x++;else enemy.x--;enemyLastActionType = 0;enemyConsecutiveSkills = 0;enemyJustMoved = true; } } else { if (enemyAIMood == 0 && enemy.x < MAP_WIDTH - 3) { enemy.x++; } else if (enemyAIMood == 2 && enemy.x > player.x + 1) { enemy.x--; } else { if (rand() % 2 == 0 && enemy.x < MAP_WIDTH - 3)enemy.x++;else if (enemy.x > player.x + 2)enemy.x--; }enemyLastActionType = 0;enemyConsecutiveSkills = 0;enemyJustMoved = true; } } else if (distance <= 6) { if (canUseSkill && skill1Ready && (enemyCharacterType == 0 || enemyCharacterType == 2 || enemyCharacterType == 4 || enemyCharacterType == 5) && actionRoll < 35) { enemySkill1();enemyLastActionType = 2;enemyLastSkillTime = now;enemyConsecutiveSkills++; } else if (canUseSkill && skill2Ready && actionRoll < 25) { enemySkill2();enemyLastActionType = 3;enemyLastSkillTime = now;enemyConsecutiveSkills++; } else if (actionRoll < 60) { if (enemy.x > player.x + 2) { enemy.x--;enemyLastActionType = 0;enemyJustMoved = true; }enemyConsecutiveSkills = 0; } else { if (enemyAIMood == 0) { if (enemy.x < MAP_WIDTH - 3)enemy.x++; } else { if (enemy.x > player.x + 2)enemy.x--; }enemyLastActionType = 0;enemyConsecutiveSkills = 0; } } else { if (enemy.x > player.x + 3) { enemy.x--;enemyConsecutiveSkills = 0;enemyLastActionType = 0; } else { if (enemyAIMood == 0 && enemy.x < MAP_WIDTH - 3)enemy.x++;else if (enemy.x > player.x + 2)enemy.x--; }enemyLastActionType = 0;enemyConsecutiveSkills = 0; }if (enemyLastActionType == 0 && !enemyJustMoved)enemyStuckCounter++;else enemyStuckCounter = 0;if (enemyStuckCounter > 3) { if (enemy.x > 3)enemy.x--;else if (enemy.x < MAP_WIDTH - 3)enemy.x++;enemyStuckCounter = 0; }enemyJustMoved = false; }
bool battleLoop() { player.x = 10;enemy.x = MAP_WIDTH - 10;gameRunning = true;skillInProgress = false;enemySkillInProgress = false;playerShinraTenseiActive = false;playerShinraTenseiStack = 0;playerBanshoTeninActive = false;enemyShinraTenseiActive = false;enemyBanshoTeninActive = false;playerNarutoTailActive = false;enemyNarutoTailActive = false;playerPainRodActive = false;enemyPainRodActive = false;playerRodHitting = false;enemyRodHitting = false;playerObitoKickActive = false;playerObitoWoodSpikeActive = false;playerObitoEnemyTrapped = false;playerObitoKamuiActive = false;playerObitoKamuiSpaceActive = false;playerObitoEnemyInSpace = false;playerObitoFireActive = false;playerObitoWoodStormActive = false;playerObitoUltimateActive = false;enemyObitoKickActive = false;enemyObitoWoodSpikeActive = false;enemyObitoEnemyTrapped = false;enemyObitoKamuiActive = false;enemyObitoKamuiSpaceActive = false;enemyObitoPlayerInSpace = false;enemyObitoFireActive = false;enemyObitoWoodStormActive = false;enemyObitoUltimateActive = false;playerBorutoSwordActive = false;playerBorutoRasenganActive = false;playerBorutoMarkActive = false;playerBorutoTeleported = false;playerBorutoTeleportBack = false;playerBorutoKarmaActive = false;playerBorutoFlying = false;playerBorutoBigRasenganActive = false;playerBorutoBigRasenganHit = false;playerBorutoEnhancedAttackActive = false;playerBorutoEnhancedAttackCount = 0;playerBorutoBigRasenganBallActive = false;enemyBorutoSwordActive = false;enemyBorutoRasenganActive = false;enemyBorutoMarkActive = false;enemyBorutoTeleported = false;enemyBorutoTeleportBack = false;enemyBorutoKarmaActive = false;enemyBorutoFlying = false;enemyBorutoEnhancedAttackCount = 0;playerHashiramaStompActive = false;playerHashiramaWoodDragonActive = false;playerHashiramaWoodDragonHit = false;playerHashiramaEnemyTrapped = false;playerHashiramaMyojinmonActive = false;playerHashiramaMyojinmonUsed = false;playerHashiramaWoodGolemActive = false;playerHashiramaWoodGolemAttackCount = 0;playerHashiramaUltimateActive = false;enemyHashiramaStompActive = false;enemyHashiramaWoodDragonActive = false;enemyHashiramaWoodDragonHit = false;enemyHashiramaEnemyTrapped = false;enemyHashiramaMyojinmonActive = false;enemyHashiramaMyojinmonUsed = false;enemyHashiramaWoodGolemActive = false;enemyHashiramaWoodGolemAttackCount = 0;enemyHashiramaUltimateActive = false;playerSasukeSlashActive = false;playerSasukeAmaterasuActive = false;playerSasukeAmaterasuHit = false;playerSasukeSusanooActive = false;playerSasukeSusanooSlashCount = 0;playerSasukeSusanooSlashActive = false;playerSasukeUltimateActive = false;enemySasukeSlashActive = false;enemySasukeAmaterasuActive = false;enemySasukeAmaterasuHit = false;enemySasukeSusanooActive = false;enemySasukeSusanooSlashCount = 0;enemySasukeSusanooSlashActive = false;enemySasukeUltimateActive = false;enemyPhase = 0;enemyNormalAttackCount = 0;enemyUltimateReady = false;enemyAIMood = 0;enemyConsecutiveSkills = 0;enemyStuckCounter = 0;enemyLastActionType = -1;enemyJustMoved = false;auto now = chrono::steady_clock::now();playerSkill1CDEnd = now;playerSkill2CDEnd = now;playerSkill3CDEnd = now;enemySkill1CDEnd = now;enemySkill2CDEnd = now;enemySkill3CDEnd = now;lastEnemyAction = now;enemyLastSkillTime = now;playerBorutoEnhancedAttackCD = now;enemyBorutoEnhancedAttackCD = now;playerHashiramaWoodGolemAttackCD = now;enemyHashiramaWoodGolemAttackCD = now;playerSasukeSlashCD = now;playerSasukeSubSkillCD = now;enemySasukeSlashCD = now;enemySasukeSubSkillCD = now;while (gameRunning) { drawBattleMap();if (_kbhit()) { char key = _getch();key = tolower(key);bool enemyRodControl = false;if (enemyRodHitting) { auto nowCheck = chrono::steady_clock::now();if (nowCheck < enemyRodHitEnd)enemyRodControl = true;else enemyRodHitting = false; }bool enemyBanshoControl = false;if (enemyBanshoTeninActive) { auto nowCheck = chrono::steady_clock::now();if (nowCheck < enemyBanshoTeninEnd)enemyBanshoControl = true;else enemyBanshoTeninActive = false; }bool enemyObitoRodControl = false;if (enemyObitoEnemyTrapped) { auto nowCheck = chrono::steady_clock::now();if (nowCheck < enemyObitoEnemyTrappedEnd)enemyObitoRodControl = true;else enemyObitoEnemyTrapped = false; }bool enemyHashiramaRodControl = false;if (enemyHashiramaEnemyTrapped) { auto nowCheck = chrono::steady_clock::now();if (nowCheck < enemyHashiramaWoodDragonTrapEnd)enemyHashiramaRodControl = true;else enemyHashiramaEnemyTrapped = false; }bool enemySasukeRodControl = false;if (enemySasukeAmaterasuHit) { auto nowCheck = chrono::steady_clock::now();if (nowCheck < enemySasukeAmaterasuEnd)enemySasukeRodControl = true;else enemySasukeAmaterasuHit = false; }bool canMove = !skillInProgress && !playerShinraTenseiActive && !enemySkillInProgress && !enemyRodControl && !enemyBanshoControl && !enemyObitoRodControl && !enemyHashiramaRodControl && !enemySasukeRodControl;bool canMoveInSpace = playerObitoKamuiSpaceActive;bool canAct = (!skillInProgress && !enemySkillInProgress && !enemyRodControl && !enemyObitoRodControl && !enemyHashiramaRodControl && !enemySasukeRodControl && !playerObitoKamuiSpaceActive) || playerBanshoTeninActive;if (canAct || canMoveInSpace || (playerShinraTenseiActive && key == 'i') || (playerObitoKamuiActive && key == 'i')) { switch (key) { case 'a':if ((canMove || canMoveInSpace) && player.x > 2 && player.x < enemy.x)player.x--;break;case 'd':if ((canMove || canMoveInSpace) && player.x < MAP_WIDTH - 2 && player.x < enemy.x - 1)player.x++;break;case 'k':if (!playerShinraTenseiActive && !playerObitoKamuiActive && !playerObitoKamuiSpaceActive)playerNormalAttack();break;case 'j':if (!playerShinraTenseiActive && !playerObitoKamuiSpaceActive)playerSkill1();break;case 'i':if (!playerObitoKamuiSpaceActive)playerSkill2();break;case 'o':if (!playerShinraTenseiActive && !playerObitoKamuiSpaceActive)playerUltimate();break;case 'u':if (!playerShinraTenseiActive && !playerObitoKamuiSpaceActive && playerCharacterType == 5)playerSasukeSubSkill();break; } }if (enemy.hp <= 0) { gameRunning = false;clearScreen();gotoxy(35, 10);setColor(10);cout << "胜利!按任意键返回...";_getch();return true; }if (player.hp <= 0) { gameRunning = false;clearScreen();gotoxy(35, 10);setColor(12);cout << "失败!按任意键返回...";_getch();return false; } }auto currentTime = chrono::steady_clock::now();if (chrono::duration_cast<chrono::milliseconds>(currentTime - lastEnemyAction).count() >= 1500) { enemyAI();lastEnemyAction = currentTime;if (player.hp <= 0) { gameRunning = false;clearScreen();gotoxy(35, 10);setColor(12);cout << "失败!按任意键返回...";_getch();return false; } }this_thread::sleep_for(chrono::milliseconds(30)); }return false; }
void selectCharacter() { vector<Character> chars = getAllCharacters();int selectedIndex = 0;bool selecting = true;while (selecting) { drawSelectScreen(selectedIndex);char key = _getch();key = tolower(key);switch (key) { case 'w':if (selectedIndex >= 5)selectedIndex -= 5;break;case 's':if (selectedIndex + 5 < chars.size())selectedIndex += 5;break;case 'a':if (selectedIndex > 0)selectedIndex--;break;case 'd':if (selectedIndex < chars.size() - 1)selectedIndex++;break;case 13:if (chars[selectedIndex].available) { player = chars[selectedIndex];player.maxHp = 300;player.hp = 300;playerCharacterType = player.characterType;vector<int> availableIndices;for (int i = 0;i < chars.size();i++) { if (chars[i].available)availableIndices.push_back(i); }int enemyIndex;do { enemyIndex = availableIndices[rand() % availableIndices.size()]; } while (enemyIndex == selectedIndex && availableIndices.size() > 1);enemy = chars[enemyIndex];enemy.maxHp = 300;enemy.hp = 300;enemyCharacterType = enemy.characterType;selecting = false;battleLoop(); } else { gotoxy(35, 32);setColor(12);cout << "该角色不可用!";this_thread::sleep_for(chrono::seconds(1)); }break; } } }
void launchScreen() { int selectedIndex = 0;bool launching = true;while (launching) { drawLaunchScreen(selectedIndex);char key = _getch();key = tolower(key);switch (key) { case 'w':if (selectedIndex > 0)selectedIndex--;break;case 's':if (selectedIndex < 3)selectedIndex++;break;case 13:switch (selectedIndex) { case 0:launching = false;selectCharacter();break;case 1:clearScreen();gotoxy(35, 12);setColor(14);cout << "该模式暂未开启!";gotoxy(30, 14);setColor(7);cout << "按任意键返回...";_getch();break;case 2:system("start https://blog.csdn.net/zhaozirui8290?spm=1000.2115.3001.5343");break;case 3:clearScreen();gotoxy(40, 12);setColor(12);cout << "感谢游玩!";gotoxy(35, 14);setColor(7);cout << "按任意键退出...";_getch();exit(0);break; }break; } } }
int main() { srand(time(nullptr));hideCursor();system("mode con cols=120 lines=36");system("title 火影忍者");while (true) { drawStartScreen();while (true) { if (_kbhit()) { char key = _getch();if (key == 13) { launchScreen();break; } } } }return 0; }