random support

This commit is contained in:
oc 2018-05-05 19:24:02 +08:00
parent bf9a9675ed
commit 920fc35769
7 changed files with 78 additions and 3 deletions

View File

@ -1690,6 +1690,7 @@ actions.prototype.clickSyncSave = function (x,y) {
core.download(core.firstData.name+"_"+core.formatDate2(new Date())+".h5route", JSON.stringify({
'name': core.firstData.name,
'hard': core.status.hard,
'seed': core.getFlag('seed'),
'route': core.encodeRoute(core.status.route)
}));
break;
@ -1922,8 +1923,11 @@ actions.prototype.clickReplay = function (x, y) {
{
core.ui.closePanel();
var hard=core.status.hard, route=core.clone(core.status.route);
var seed = core.getFlag('seed');
core.resetStatus(core.firstData.hero, hard, core.firstData.floorId, null, core.initStatus.maps);
core.events.setInitData(hard);
core.setFlag('seed', seed);
core.setFlag('rand', seed);
core.changeFloor(core.status.floorId, null, core.firstData.hero.loc, null, function() {
core.startReplay(route);
}, true);

View File

@ -1845,8 +1845,11 @@ control.prototype.doSL = function (id, type) {
// core.drawTip("存档版本不匹配");
if (confirm("存档版本不匹配!\n你想回放此存档的录像吗")) {
core.dom.startPanel.style.display = 'none';
var seed = data.hero.flags.seed;
core.resetStatus(core.firstData.hero, data.hard, core.firstData.floorId, null, core.initStatus.maps);
core.events.setInitData(data.hard);
core.setFlag('seed', seed);
core.setFlag('rand', seed);
core.changeFloor(core.status.floorId, null, core.firstData.hero.loc, null, function() {
core.startReplay(core.decodeRoute(data.route));
}, true);
@ -1878,7 +1881,7 @@ control.prototype.doSL = function (id, type) {
return;
}
var route = core.subarray(core.status.route, core.decodeRoute(data.route));
if (!core.isset(route)) {
if (!core.isset(route) || data.hero.flags.seed!=core.getFlag('seed')) {
core.drawTip("无法从此存档回放录像");
return;
}

View File

@ -1085,6 +1085,16 @@ core.prototype.subarray = function (a, b) {
return core.utils.subarray(a, b);
}
////// 生成随机数seed方法 //////
core.prototype.rand = function (num) {
return core.utils.rand(num);
}
////// 生成随机数(录像方法) //////
core.prototype.rand2 = function (num) {
return core.utils.rand2(num);
}
////// 读取一个本地文件内容 //////
core.prototype.readFile = function (success, error, readType) {
core.utils.readFile(success, error, readType);

View File

@ -88,16 +88,19 @@ events.prototype.startGame = function (hard) {
core.flags.battleAnimate = true;
core.setLocalStorage('battleAnimate', true);
core.startGame(hard);
core.utils.__init_seed();
core.events.setInitData(hard);
}, function () {
core.flags.battleAnimate = false;
core.setLocalStorage('battleAnimate', false);
core.startGame(hard);
core.utils.__init_seed();
core.events.setInitData(hard);
});
}
else {
core.startGame(hard);
core.utils.__init_seed();
core.events.setInitData(hard);
}
});
@ -141,6 +144,7 @@ events.prototype.gameOver = function (ending, fromReplay) {
'name': core.firstData.name,
'version': core.firstData.version,
'hard': core.status.hard,
'seed': core.getFlag('seed'),
'route': core.encodeRoute(core.status.route)
}
core.download(core.firstData.name+"_"+core.formatDate2(new Date())+".h5route", JSON.stringify(obj));
@ -181,6 +185,7 @@ events.prototype.gameOver = function (ending, fromReplay) {
formData.append('money', core.status.hero.money);
formData.append('experience', core.status.hero.experience);
formData.append('steps', core.status.hero.steps);
formData.append('seed', core.getFlag('seed'));
formData.append('route', core.encodeRoute(core.status.route));
core.http("POST", "/games/upload.php", formData);

View File

@ -241,8 +241,10 @@ utils.prototype.encodeRoute = function (route) {
ans+='N';
else if (t.indexOf('move:')==0)
ans+="M"+t.substring(5);
else if (t=='key:')
else if (t.indexOf('key:')==0)
ans+='K'+t.substring(4);
else if (t.indexOf('random:')==0)
ans+='X'+t.substring(7);
}
});
if (cnt>0) {
@ -295,6 +297,7 @@ utils.prototype.decodeRoute = function (route) {
case "N": ans.push("no"); break;
case "M": ++index; ans.push("move:"+nxt+":"+getNumber()); break;
case "K": ans.push("key:"+nxt); break;
case "X": ans.push("random:"+nxt); break;
}
}
return ans;
@ -319,6 +322,54 @@ utils.prototype.subarray = function (a, b) {
return na;
}
utils.prototype.__init_seed = function () {
var rand = new Date().getTime()%34834795 + 3534;
rand = this.__next_rand(rand);
rand = this.__next_rand(rand);
rand = this.__next_rand(rand);
core.setFlag('seed', rand);
core.setFlag('rand', rand);
}
utils.prototype.__next_rand = function (_rand) {
_rand=(_rand%127773)*16807-~~(_rand/127773)*2836;
_rand+=_rand<0?2147483647:0;
return _rand;
}
utils.prototype.rand = function (num) {
var rand = core.getFlag('rand');
rand = this.__next_rand(rand);
core.setFlag('rand', rand);
var ans = rand/2147483647;
if (core.isset(num) && num>0)
return Math.floor(ans*num);
return ans;
}
////// 生成随机数(录像方法) //////
utils.prototype.rand2 = function (num) {
num = num||2147483648;
var value;
if (core.status.replay.replaying) {
var action = core.status.replay.toReplay.shift();
if (action.indexOf("input:")==0 ) {
value=parseInt(action.substring(6));
}
else {
core.stopReplay();
core.drawTip("录像文件出错");
return;
}
}
else {
value = Math.floor(Math.random()*num);
}
core.status.route.push("random:"+value);
return value;
}
////// 读取一个本地文件内容 //////
utils.prototype.readFile = function (success, error, readType) {

View File

@ -487,6 +487,8 @@ main.dom.replayGame.onclick = function () {
core.dom.startPanel.style.display = 'none';
core.resetStatus(core.firstData.hero, obj.hard, core.firstData.floorId, null, core.initStatus.maps);
core.events.setInitData(obj.hard);
core.setFlag('seed', obj.seed);
core.setFlag('rand', obj.seed);
core.changeFloor(core.status.floorId, null, core.firstData.hero.loc, null, function() {
core.startReplay(core.decodeRoute(obj.route));
}, true);

View File

@ -7,7 +7,7 @@
等待用户点击事件 √
图片移动事件
事件设置BGM音量 √
提供core.random函数提供随机数
提供core.rand()和core.rand2()两个随机数函数 √
作弊处理
状态栏绘制
六倍速播放 √