|
发表于 2013-11-21 11:22:06
|
显示全部楼层
等待编译到手机上的时间(5分钟)给你算了下第一天的结果,假如我每次都升级最低等级的技能,那么第一天:
总获得体力:32090
当前体力:5/200
技能等级状况:
[技能0] 等级:26 经验:100/5200
[技能1] 等级:26 经验:100/5200
[技能2] 等级:26 经验:100/5200
[技能3] 等级:26 经验:100/5200
[技能4] 等级:26 经验:100/5200
[技能5] 等级:26 经验:100/5200
[技能6] 等级:26 经验:100/5200
[技能7] 等级:26 经验:100/5200
[技能8] 等级:25 经验:4800/5000
[技能9] 等级:25 经验:100/5000
思路Delphi版
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
Const
SkillCount = 10;
CostStaminaPerTime = 5; //干1次-5体力
RestoreStaminaPerMin = 1; //每分钟恢复1
type
TSkill = record
lv:Integer; //当前技能等级
exp ongInt; //当前技能经验
need:LongInt; //升级所需经验
end;
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
Stamina:Integer; //当前体力
StaminaMax:Integer; //最大体力
Skill:Array[0..SkillCount-1]of TSkill; //10个技能
CurMin:Integer; //当前分钟
StaminaGain:LongInt; //获得的总体力
function GetMinLvSkillIndex:Integer; //获得最低等级武功的下标
procedure InitGuy; //初始化一个新角色
procedure DoSomeThing; //据说这叫动作
procedure TextToList; //打出来
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function GetNeedByLv(lv:Integer):Integer;
begin
result:=lv*200; //升级需要经验
end;
procedure TForm1.TextToList;
var
i:integer;
begin
memo1.Lines.Clear;
memo1.Lines.Add('总获得体力:'+IntToStr(StaminaGain));
memo1.Lines.Add('当前体力:'+IntToStr(Stamina)+'/'+IntToStr(StaminaMax));
memo1.Lines.Add('技能等级状况:');
for i:=0 to SkillCount-1 do
begin
memo1.Lines.Add('[技能'+IntToStr(i)+'] 等级:'+IntToStr(Skill[i].lv)+' 经验:'+IntToStr(Skill[i].exp)+'/'+IntToStr(Skill[i].need));
end;
end;
function TForm1.GetMinLvSkillIndex:Integer;
var
i,minLv,curIndex:Integer;
begin
minLv:=-1;
result:=0;
for i := 0 to SkillCount-1 do
if (minLv<0) or (Skill[i].lv < minLv) then
begin
minLv:= Skill[i].lv;
result:=i;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
const
CalculateTime = 1440; //1天1440分钟
var
getStamina:Integer;
begin
while CalculateTime > CurMin do
begin
//体力足够就狂点最低的技能去升级
while Stamina>=CostStaminaPerTime do
begin
DoSomeThing;
end;
//不足就待机
CurMin:=CurMin+1;
if (Stamina+RestoreStaminaPerMin>StaminaMax) then
begin
//恢复后体力超上限
getStamina:=StaminaMax-Stamina;
Stamina:=StaminaMax;
end else begin
//正常恢复
Stamina:=Stamina+RestoreStaminaPerMin;
getStamina:= RestoreStaminaPerMin;
end;
StaminaGain:=StaminaGain+getStamina;
end;
TextToList;
CurMin:=0; //如果你还想算上第二天的再点我
end;
procedure TForm1.DoSomeThing;
var
addExpToSkillIndex:Integer;
begin
if Stamina >= CostStaminaPerTime then
begin
Stamina:=Stamina-CostStaminaPerTime;
addExpToSkillIndex:= GetMinLvSkillIndex;
Skill[addExpToSkillIndex].exp := Skill[addExpToSkillIndex].exp + 100; //说好的1次100。
if Skill[addExpToSkillIndex].exp > Skill[addExpToSkillIndex].need then
begin
//升级
StaminaGain:=StaminaGain+StaminaMax-Stamina; //获得体力
Stamina:=StaminaMax; //体力满
Skill[addExpToSkillIndex].lv := Skill[addExpToSkillIndex].lv+1; //升级
Skill[addExpToSkillIndex].exp := Skill[addExpToSkillIndex].exp - Skill[addExpToSkillIndex].need; //当前经验下降。
Skill[addExpToSkillIndex].need := GetNeedByLv(Skill[addExpToSkillIndex].lv); //重算需要经验。
end;
end;
end;
procedure TForm1.InitGuy;
var
i:Integer;
begin
Stamina:=200;
StaminaMax:=200;
for i := 0 to SkillCount-1 do
begin
Skill[i].lv := 1;
Skill[i].exp := 0;
Skill[i].need := GetNeedByLv(Skill[i].lv);
end;
CurMin:=0;
StaminaGain:=0;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
InitGuy;
end;
end. |
|