玩游戏的过程中,玩家决策的每一项行动,花的不只是角色的时间,更是游戏者自己的时间。
如果不考虑现实时间限制的话。你可以通过无限钓鱼大量赚钱。但代价是你要忍受枯燥的重复并花远超正常游戏时间完成操作。

考虑现实时间的情况

  • 在以前代码的基础上,添加了动物系统
  • 添加了现实时间变量,可以计算整个方案对应的实际游戏时间
!####全局参数####;
sets:
DATE/1..163/:animalTimes, wateringTimes, fishingTimes, pickingTimes, costTime, costEnergy, money, timeOfAnimal, timeOfPlants, timeOfDrop, timeOfFishing, energyOfAnimal, energyOfPlants, energyOfDrop, energyOfFishing, realTimeOfAnimal, realTimeOfPlants, realTimeOfDrop, realTimeOfFishing, moneyOfAnimal, moneyOfPlants, moneyOfDrop, moneyOfFishing, realTime;
endsets

data:
timePerWatering, energyPerWatering, realTimePerWatering, timePerFishing, energyPerFishing, realTimePerFishing, timePerPicking, energyPerPicking, realTimePerPicking, realTimePerCaring = @OLE('E:\lingo\牧场物语_3.xlsx', 'timePerWatering', 'energyPerWatering', 'realTimePerWatering', 'timePerFishing', 'energyPerFishing', 'realTimePerFishing', 'timePerPicking', 'energyPerPicking', 'realTimePerPicking', 'realTimePerCaring');
dailyElasticTime, dailyTimeLimit, dailyEnergyLimit, landLimit = @OLE('E:\lingo\牧场物语_3.xlsx', 'dailyElasticTime', 'dailyTimeLimit', 'dailyEnergyLimit', 'landLimit');
enddata


!####动物系统####;
sets:
ANIMALS/1..3/:animalCost, animalProfit, animalMatureDays, caringTime, caringEnergy;
DA(DATE,ANIMALS): isCaring;
PENDING/1..18/;
GAINING/1..145/;
endsets

data:
animalCost,animalProfit,animalMatureDays = @OLE('E:\lingo\牧场物语_3.xlsx', 'animalCost', 'animalProfit', 'animalMatureDays');
@OLE('E:\lingo\牧场物语_3.xlsx', 'isCaring') = isCaring;
enddata

!@for(DA(i,j):@bin(isCaring(i,j)));
@for(PENDING(i):@for(ANIMALS(j):isCaring(i,j)=0));
@for(GAINING(i):@for(ANIMALS(j):isCaring(i+18,j)=1));
@for(DATE(i):animalTimes(i)=@sum(ANIMALS(j):isCaring(i,j)));
@for(DATE(i):timeOfAnimal(i)=@sum(ANIMALS(j):isCaring(i,j)*caringTime(j)));
@for(DATE(i):energyOfAnimal(i)=@sum(ANIMALS(j):isCaring(i,j)*caringEnergy(j)));
@for(DATE(i):realTimeOfAnimal(i)=animalTimes(i)*realTimePerCaring);
@for(DATE(i):moneyOfAnimal(i)=@sum(ANIMALS(j):isCaring(i,j)*animalProfit(j)));


!####作物系统####;
sets:
PLANTS/1..5/:plantCost, plantPrice, plantMatureDays, plantProfit;
PP(DATE,PLANTS):plantWateringTimes;
endsets

data:
plantCost,plantPrice,plantMatureDays = @OLE('E:\lingo\牧场物语_3.xlsx', 'plantCost', 'plantPrice', 'plantMatureDays');
@OLE('E:\lingo\牧场物语_3.xlsx', 'plantWateringTimes') = plantWateringTimes;
enddata

@for(PP(i,j):@gin(plantWateringTimes(i,j)));
@for(DATE(i):wateringTimes(i)=@sum(PLANTS(j):plantWateringTimes(i, j)));
@for(DATE(i):wateringTimes(i)<landLimit);
@for(PLANTS(j):plantProfit(j)=(plantPrice(j) - plantCost(j)) / (1 + plantMatureDays(j)));
@for(DATE(i):moneyOfPlants(i)=@sum(PLANTS(j):plantProfit(j)*plantWateringTimes(i,j)));
@for(DATE(i):timeOfPlants(i)=wateringTimes(i)*timePerWatering);
@for(DATE(i):realTimeOfPlants(i)=wateringTimes(i)*realTimePerWatering);
@for(DATE(i):energyOfPlants(i)=wateringTimes(i)*energyPerWatering);


!####掉落系统####;
sets:
PLACE/1..68/;
DP(DATE,PLACE):isPick, itemValue;
endsets

data:
itemValue = @OLE('E:\lingo\牧场物语_3.xlsx', 'itemValue');
@OLE('E:\lingo\牧场物语_3.xlsx', 'isPick') = isPick;
enddata

@for(DP(i,j):@bin(isPick(i,j)));
@for(DATE(i):pickingTimes(i)=@sum(PLACE(j):isPick(i,j)));
@for(DATE(i):moneyOfDrop(i)=@sum(PLACE(j):isPick(i,j)*itemValue(i,j)));
@for(DATE(i):timeOfDrop(i)=pickingTimes(i)*timePerPicking);
@for(DATE(i):realTimeOfDrop(i)=pickingTimes(i)*realTimePerPicking);
@for(DATE(i):energyOfDrop(i)=pickingTimes(i)*energyPerPicking);


!####钓鱼系统####;
sets:
FISH /1..3/: fishPrice, successRate;
DF(DATE,FISH):fishTimes;
endsets

data:
fishPrice,successRate = @OLE('E:\lingo\牧场物语_3.xlsx', 'fishPrice', 'successRate');
@OLE('E:\lingo\牧场物语_3.xlsx', 'fishTimes') = fishTimes;
enddata

@for(DF(i,j):@gin(fishTimes(i,j)));
@for(DATE(i):fishingTimes(i)=@sum(FISH(j):fishTimes(i,j)));
@for(DATE(i):moneyOfFishing(i)=@sum(FISH(j):fishPrice(j)*fishTimes(i,j)*successRate(j)));
@for(DATE(i):timeOfFishing(i)=fishingTimes(i)*timePerFishing);
@for(DATE(i):realTimeOfFishing(i)=fishingTimes(i)*realTimePerFishing);
@for(DATE(i):energyOfFishing(i)=fishingTimes(i)*energyPerFishing);


!####主程序####;
data:
@OLE('E:\lingo\牧场物语_3.xlsx', 'animalTimes', 'wateringTimes', 'fishingTimes', 'pickingTimes', 'costTime', 'costEnergy', 'realTime', 'money') = animalTimes, wateringTimes, fishingTimes, pickingTimes, costTime, costEnergy, realTime, money;
enddata

@for(DATE(i):costTime(i)=timeOfAnimal(i) + timeOfPlants(i) + timeOfDrop(i) + timeOfFishing(i));
@for(DATE(i):costEnergy(i)=energyOfAnimal(i) + energyOfPlants(i) + energyOfDrop(i) + energyOfFishing(i));
@for(DATE(i):money(i)=moneyOfAnimal(i) + moneyOfPlants(i) + moneyOfDrop(i) + moneyOfFishing(i));
@for(DATE(i):realTime(i)=realTimeOfAnimal(i) + realTimeOfPlants(i) + realTimeOfDrop(i) + realTimeOfFishing(i) + dailyElasticTime / 300);

@for(DATE(i):costTime(i)<dailyTimeLimit);
@for(DATE(i):costEnergy(i)<dailyEnergyLimit);

MAX = @sum(DATE(i):money(i));
运行结果

相应的数据表

速通方案

游戏系统,考虑进现实时间。自然而然就会让人想到速通方案。在我达成通关目标的前提下,如何以尽可能少的游戏时间完成任务?

说到这里不得不提一下之前假设的预留时间。将每一天角色所有活动的移动时间独立出来,预留 4 小时保证每日跑图消耗以及睡前时间资源的弹性(10 点 20 睡可以,10 点 40 也可以,避免每次总是掐到 11 点再睡觉)。

游戏里的时间与现实时间大概是 300 : 1,也就是说在这个假设下,每天至少预留 45s。下面的通关时间都是基于这个假设计算的。

根据上篇文章 提到的惩罚系数。先在将系数设为 -1,看看跑出什么结果

MAX = @sum(DATE(i):money(i));
!改为;
MAX = @sum(DATE(i):money(i)) - @sum(DATE(i):realTime(i));
运行结果

8.7 小时通关,比之前的一半还少,而赚的钱只少了 20%。可以看出效果还是十分显著的

日均收入按最低的算,大约是 500 元。通关目标 3w,可以推算出游戏第 60 天完成任务。合计 3.2 小时左右。

也就是说,如果我游戏前 60 天按方案执行,后 120 天醒来就睡。这个方案可以在 3 个半小时内达成通关。而根据前面每天45s 的预留假设,实际可能比理论时间还快

从玩家角度讲,个人认为这才是真正高效的赚钱攻略。毕竟游戏里的数值是人制定的,与其一味迁就策划不断耗时间刷刷刷,还不如找一个高性价比的方案,用最省时的方法,拿最多的收益。