random support
This commit is contained in:
parent
bf9a9675ed
commit
920fc35769
@ -1690,6 +1690,7 @@ actions.prototype.clickSyncSave = function (x,y) {
|
|||||||
core.download(core.firstData.name+"_"+core.formatDate2(new Date())+".h5route", JSON.stringify({
|
core.download(core.firstData.name+"_"+core.formatDate2(new Date())+".h5route", JSON.stringify({
|
||||||
'name': core.firstData.name,
|
'name': core.firstData.name,
|
||||||
'hard': core.status.hard,
|
'hard': core.status.hard,
|
||||||
|
'seed': core.getFlag('seed'),
|
||||||
'route': core.encodeRoute(core.status.route)
|
'route': core.encodeRoute(core.status.route)
|
||||||
}));
|
}));
|
||||||
break;
|
break;
|
||||||
@ -1922,8 +1923,11 @@ actions.prototype.clickReplay = function (x, y) {
|
|||||||
{
|
{
|
||||||
core.ui.closePanel();
|
core.ui.closePanel();
|
||||||
var hard=core.status.hard, route=core.clone(core.status.route);
|
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.resetStatus(core.firstData.hero, hard, core.firstData.floorId, null, core.initStatus.maps);
|
||||||
core.events.setInitData(hard);
|
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.changeFloor(core.status.floorId, null, core.firstData.hero.loc, null, function() {
|
||||||
core.startReplay(route);
|
core.startReplay(route);
|
||||||
}, true);
|
}, true);
|
||||||
|
|||||||
@ -1845,8 +1845,11 @@ control.prototype.doSL = function (id, type) {
|
|||||||
// core.drawTip("存档版本不匹配");
|
// core.drawTip("存档版本不匹配");
|
||||||
if (confirm("存档版本不匹配!\n你想回放此存档的录像吗?")) {
|
if (confirm("存档版本不匹配!\n你想回放此存档的录像吗?")) {
|
||||||
core.dom.startPanel.style.display = 'none';
|
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.resetStatus(core.firstData.hero, data.hard, core.firstData.floorId, null, core.initStatus.maps);
|
||||||
core.events.setInitData(data.hard);
|
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.changeFloor(core.status.floorId, null, core.firstData.hero.loc, null, function() {
|
||||||
core.startReplay(core.decodeRoute(data.route));
|
core.startReplay(core.decodeRoute(data.route));
|
||||||
}, true);
|
}, true);
|
||||||
@ -1878,7 +1881,7 @@ control.prototype.doSL = function (id, type) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var route = core.subarray(core.status.route, core.decodeRoute(data.route));
|
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("无法从此存档回放录像");
|
core.drawTip("无法从此存档回放录像");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
10
libs/core.js
10
libs/core.js
@ -1085,6 +1085,16 @@ core.prototype.subarray = function (a, b) {
|
|||||||
return core.utils.subarray(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.prototype.readFile = function (success, error, readType) {
|
||||||
core.utils.readFile(success, error, readType);
|
core.utils.readFile(success, error, readType);
|
||||||
|
|||||||
@ -88,16 +88,19 @@ events.prototype.startGame = function (hard) {
|
|||||||
core.flags.battleAnimate = true;
|
core.flags.battleAnimate = true;
|
||||||
core.setLocalStorage('battleAnimate', true);
|
core.setLocalStorage('battleAnimate', true);
|
||||||
core.startGame(hard);
|
core.startGame(hard);
|
||||||
|
core.utils.__init_seed();
|
||||||
core.events.setInitData(hard);
|
core.events.setInitData(hard);
|
||||||
}, function () {
|
}, function () {
|
||||||
core.flags.battleAnimate = false;
|
core.flags.battleAnimate = false;
|
||||||
core.setLocalStorage('battleAnimate', false);
|
core.setLocalStorage('battleAnimate', false);
|
||||||
core.startGame(hard);
|
core.startGame(hard);
|
||||||
|
core.utils.__init_seed();
|
||||||
core.events.setInitData(hard);
|
core.events.setInitData(hard);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
core.startGame(hard);
|
core.startGame(hard);
|
||||||
|
core.utils.__init_seed();
|
||||||
core.events.setInitData(hard);
|
core.events.setInitData(hard);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -141,6 +144,7 @@ events.prototype.gameOver = function (ending, fromReplay) {
|
|||||||
'name': core.firstData.name,
|
'name': core.firstData.name,
|
||||||
'version': core.firstData.version,
|
'version': core.firstData.version,
|
||||||
'hard': core.status.hard,
|
'hard': core.status.hard,
|
||||||
|
'seed': core.getFlag('seed'),
|
||||||
'route': core.encodeRoute(core.status.route)
|
'route': core.encodeRoute(core.status.route)
|
||||||
}
|
}
|
||||||
core.download(core.firstData.name+"_"+core.formatDate2(new Date())+".h5route", JSON.stringify(obj));
|
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('money', core.status.hero.money);
|
||||||
formData.append('experience', core.status.hero.experience);
|
formData.append('experience', core.status.hero.experience);
|
||||||
formData.append('steps', core.status.hero.steps);
|
formData.append('steps', core.status.hero.steps);
|
||||||
|
formData.append('seed', core.getFlag('seed'));
|
||||||
formData.append('route', core.encodeRoute(core.status.route));
|
formData.append('route', core.encodeRoute(core.status.route));
|
||||||
|
|
||||||
core.http("POST", "/games/upload.php", formData);
|
core.http("POST", "/games/upload.php", formData);
|
||||||
|
|||||||
@ -241,8 +241,10 @@ utils.prototype.encodeRoute = function (route) {
|
|||||||
ans+='N';
|
ans+='N';
|
||||||
else if (t.indexOf('move:')==0)
|
else if (t.indexOf('move:')==0)
|
||||||
ans+="M"+t.substring(5);
|
ans+="M"+t.substring(5);
|
||||||
else if (t=='key:')
|
else if (t.indexOf('key:')==0)
|
||||||
ans+='K'+t.substring(4);
|
ans+='K'+t.substring(4);
|
||||||
|
else if (t.indexOf('random:')==0)
|
||||||
|
ans+='X'+t.substring(7);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
if (cnt>0) {
|
if (cnt>0) {
|
||||||
@ -295,6 +297,7 @@ utils.prototype.decodeRoute = function (route) {
|
|||||||
case "N": ans.push("no"); break;
|
case "N": ans.push("no"); break;
|
||||||
case "M": ++index; ans.push("move:"+nxt+":"+getNumber()); break;
|
case "M": ++index; ans.push("move:"+nxt+":"+getNumber()); break;
|
||||||
case "K": ans.push("key:"+nxt); break;
|
case "K": ans.push("key:"+nxt); break;
|
||||||
|
case "X": ans.push("random:"+nxt); break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return ans;
|
return ans;
|
||||||
@ -319,6 +322,54 @@ utils.prototype.subarray = function (a, b) {
|
|||||||
return na;
|
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) {
|
utils.prototype.readFile = function (success, error, readType) {
|
||||||
|
|
||||||
|
|||||||
2
main.js
2
main.js
@ -487,6 +487,8 @@ main.dom.replayGame.onclick = function () {
|
|||||||
core.dom.startPanel.style.display = 'none';
|
core.dom.startPanel.style.display = 'none';
|
||||||
core.resetStatus(core.firstData.hero, obj.hard, core.firstData.floorId, null, core.initStatus.maps);
|
core.resetStatus(core.firstData.hero, obj.hard, core.firstData.floorId, null, core.initStatus.maps);
|
||||||
core.events.setInitData(obj.hard);
|
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.changeFloor(core.status.floorId, null, core.firstData.hero.loc, null, function() {
|
||||||
core.startReplay(core.decodeRoute(obj.route));
|
core.startReplay(core.decodeRoute(obj.route));
|
||||||
}, true);
|
}, true);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user