// 世界BOSS讨伐系统
program WorldBossSystem;
const
MAX_PLAYERS = 50;
BOSS_MAX_HP = 5000000;
BOSS_REFRESH_HOUR = 20; // 晚上8点刷新
type
TPlayerDamage = record
PlayerName: string;
Damage: Int64;
ClassType: string;
end;
TBoss = record
Name: string;
CurrentHP: Int64;
MaxHP: Int64;
Level: Integer;
IsAlive: Boolean;
LastHitPlayer: string;
end;
var
Boss: TBoss;
DamageRanking: array[1..MAX_PLAYERS] of TPlayerDamage;
PlayerCount: Integer;
procedure InitBoss;
begin
Boss.Name := '暗黑魔龙王';
Boss.MaxHP := BOSS_MAX_HP;
Boss.CurrentHP := BOSS_MAX_HP;
Boss.Level := 100;
Boss.IsAlive := True;
Boss.LastHitPlayer := '';
Writeln('???? 世界BOSS「', Boss.Name, '」已刷新!');
Writeln(' HP: ', Boss.CurrentHP, ' / ', Boss.MaxHP);
Writeln(' 等级: ', Boss.Level);
Writeln(' 刷新时间: 每日 ', BOSS_REFRESH_HOUR, ':00');
end;
procedure PlayerAttack(PlayerName, ClassType: string; Damage: Int64);
var
i, InsertPos: Integer;
begin
if not Boss.IsAlive then
begin
Writeln('BOSS已被击败!等待下次刷新。');
Exit;
end;
// 记录伤害
InsertPos := 0;
for i := 1 to PlayerCount do
if DamageRanking[i].PlayerName = PlayerName then
begin
DamageRanking[i].Damage := DamageRanking[i].Damage + Damage;
InsertPos := i;
Break;
end;
if InsertPos = 0 then
begin
Inc(PlayerCount);
DamageRanking[PlayerCount].PlayerName := PlayerName;
DamageRanking[PlayerCount].Damage := Damage;
DamageRanking[PlayerCount].ClassType := ClassType;
InsertPos := PlayerCount;
end;
// 更新BOSS血量
Boss.CurrentHP := Boss.CurrentHP - Damage;
if Boss.CurrentHP <= 0 then
begin
Boss.CurrentHP := 0;
Boss.IsAlive := False;
Boss.LastHitPlayer := PlayerName;
end;
Writeln('?? ', PlayerName, '(', ClassType, ') 对BOSS造成 ', Damage, ' 伤害!');
Writeln(' BOSS剩余HP: ', Boss.CurrentHP, '/', Boss.MaxHP);
if not Boss.IsAlive then
Writeln('???? BOSS被击败!最后一击由「', Boss.LastHitPlayer, '」完成!');
end;
procedure ShowDamageRanking;
var
i, j: Integer;
Temp: TPlayerDamage;
begin
Writeln('');
Writeln('═══ 伤害排行榜 ═══');
// 冒泡排序
for i := 1 to PlayerCount - 1 do
for j := 1 to PlayerCount - i do
if DamageRanking[j].Damage < DamageRanking[j + 1].Damage then
begin
Temp := DamageRanking[j];
DamageRanking[j] := DamageRanking[j + 1];
DamageRanking[j + 1] := Temp;
end;
for i := 1 to PlayerCount do
if DamageRanking[i].PlayerName <> '' then
Writeln(' 第', i, '名: ', DamageRanking[i].PlayerName,
' (', DamageRanking[i].ClassType, ')',
' 伤害:', DamageRanking[i].Damage);
end;
procedure DistributeRewards;
var
i: Integer;
begin
Writeln('');
Writeln('???????????? 奖励发放 ????????????');
for i := 1 to PlayerCount do
if DamageRanking[i].PlayerName = '' then Break;
case i of
1: Writeln(' ???? ', DamageRanking[i].PlayerName,
' → 神器碎片×10 + 元宝×50000 + 最后一击额外奖励!');
2..3: Writeln(' ???? ', DamageRanking[i].PlayerName,
' → 神器碎片×5 + 元宝×20000');
4..10: Writeln(' ???? ', DamageRanking[i].PlayerName,
' → 高级装备箱×1 + 元宝×5000');
else Writeln(' ???? ', DamageRanking[i].PlayerName,
' → 参与奖:元宝×1000');
end;
end;
begin
PlayerCount := 0;
InitBoss;
// 模拟战斗
PlayerAttack('战天', '战士', 150000);
PlayerAttack('法神', '法师', 280000);
PlayerAttack('道尊', '道士', 120000);
PlayerAttack('法神', '法师', 350000);
PlayerAttack('刺客无名', '刺客', 200000);
PlayerAttack('战天', '战士', 180000);
PlayerAttack('冰封王座', '法师', 420000);
PlayerAttack('战天', '战士', 500000); // 最后一击
ShowDamageRanking;
DistributeRewards;
end.
功能说明:? 定时刷新世界BOSS,全服玩家可参与攻击,按伤害排名发放奖励,最后一击额外奖励。