2017-07-20 22:16:35 +00:00
|
|
|
// [FOR DEBUGGING]
|
|
|
|
|
2017-07-19 22:49:53 +00:00
|
|
|
// One-off with noise
|
2017-07-12 21:24:26 +00:00
|
|
|
SLIDES.push({
|
|
|
|
id: "noise",
|
2017-07-19 22:49:53 +00:00
|
|
|
onstart: function(self){
|
|
|
|
|
|
|
|
var o = self.objects;
|
|
|
|
|
|
|
|
// Iterated Simulation
|
|
|
|
self.add({id:"iterated", type:"Iterated", x:130, y:133});
|
|
|
|
self.objects.iterated.dehighlightPayoff();
|
|
|
|
|
|
|
|
// Words on top & bottom
|
|
|
|
self.add({
|
|
|
|
id:"topWords", type:"TextBox", text_id:"noise_1",
|
|
|
|
x:130, y:35, width:700, height:100, align:"center"
|
|
|
|
});
|
|
|
|
self.add({
|
|
|
|
id:"btmWords", type:"TextBox", text_id:"noise_1_end",
|
|
|
|
x:130, y:410, width:700, height:100, align:"center"
|
|
|
|
});
|
|
|
|
|
|
|
|
// STAGES
|
|
|
|
var STAGES = [
|
|
|
|
{button:"cooperate", message:"cooperate"},
|
2017-07-20 22:16:35 +00:00
|
|
|
{button:"cooperate", message:"TRIP"},
|
2017-07-19 22:49:53 +00:00
|
|
|
{button:"cooperate", message:"cooperate"},
|
|
|
|
{button:"cheat", message:"cheat"}
|
|
|
|
];
|
|
|
|
var STAGE_INDEX = 0;
|
|
|
|
|
|
|
|
// ONE Button
|
|
|
|
self.add({
|
|
|
|
id:"button", type:"Button",
|
|
|
|
x:383, y:463, text_id:"label_cooperate", uppercase:true,
|
|
|
|
onclick: function(){
|
|
|
|
|
|
|
|
// Make sim go
|
|
|
|
var s = STAGES[STAGE_INDEX];
|
|
|
|
publish("iterated/"+s.message);
|
|
|
|
o.button.deactivate();
|
|
|
|
|
|
|
|
// Hide words
|
|
|
|
_hide(o.topWords);
|
|
|
|
_hide(o.btmWords);
|
|
|
|
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
// Re-activate...
|
|
|
|
var _foreverWar = false;
|
|
|
|
var _foreverMove = "cheat";
|
|
|
|
listen(self, "iterated/round/end", function(){
|
|
|
|
|
|
|
|
if(_foreverWar){
|
|
|
|
publish("iterated/"+_foreverMove);
|
|
|
|
if(_foreverMove=="cheat") _foreverMove="cooperate";
|
|
|
|
else if(_foreverMove=="cooperate") _foreverMove="cheat";
|
|
|
|
}else{
|
|
|
|
|
|
|
|
STAGE_INDEX++;
|
|
|
|
|
|
|
|
// New words
|
|
|
|
o.topWords.setTextID("noise_"+(STAGE_INDEX+1));
|
|
|
|
o.btmWords.setTextID("noise_"+(STAGE_INDEX+1)+"_end");
|
|
|
|
_fadeIn(o.topWords, 100);
|
|
|
|
_fadeIn(o.btmWords, 300);
|
|
|
|
|
|
|
|
// Next stage
|
|
|
|
if(STAGE_INDEX>=STAGES.length){
|
|
|
|
|
|
|
|
publish("iterated/cooperate");
|
|
|
|
_foreverWar = true;
|
|
|
|
|
|
|
|
// The FINAL buttons... remove the button & put it back in.
|
|
|
|
self.remove("button");
|
|
|
|
self.add({
|
|
|
|
id:"button", type:"Button",
|
|
|
|
x:304, y:463, text_id:"noise_5_btn", size:"long",
|
|
|
|
message: "slideshow/scratch"
|
|
|
|
});
|
|
|
|
|
|
|
|
}else{
|
|
|
|
|
|
|
|
// Reactivate buttons
|
|
|
|
var s = STAGES[STAGE_INDEX];
|
|
|
|
o.button.setText("label_"+s.button);
|
|
|
|
o.button.activate();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
},
|
|
|
|
onend: function(self){
|
|
|
|
unlisten(self);
|
|
|
|
self.clear();
|
2017-07-12 21:24:26 +00:00
|
|
|
}
|
2017-07-12 21:46:38 +00:00
|
|
|
});
|
|
|
|
|
|
|
|
// New characters
|
2017-07-19 22:49:53 +00:00
|
|
|
SLIDES.push({
|
|
|
|
|
|
|
|
onstart: function(self){
|
|
|
|
|
|
|
|
// WORDS
|
|
|
|
self.add({
|
|
|
|
id:"score1", type:"TextBox",
|
|
|
|
x:160, y:20, width:640,
|
|
|
|
text_id:"noise_characters"
|
|
|
|
});
|
|
|
|
|
|
|
|
// CHARS
|
|
|
|
self.add({
|
|
|
|
id:"char_tf2t", type:"CharacterTextBox",
|
|
|
|
x:160, y:70, width:640,
|
|
|
|
character: "tf2t"
|
|
|
|
});
|
|
|
|
self.add({
|
|
|
|
id:"char_pavlov", type:"CharacterTextBox",
|
|
|
|
x:160, y:190, width:640,
|
|
|
|
character: "pavlov"
|
|
|
|
});
|
|
|
|
self.add({
|
|
|
|
id:"char_random", type:"CharacterTextBox",
|
|
|
|
x:160, y:320, width:640,
|
|
|
|
character: "random"
|
|
|
|
});
|
|
|
|
|
|
|
|
// Next...
|
|
|
|
self.add({
|
|
|
|
id:"next", type:"TextBox",
|
|
|
|
x:160, y:420, width:640, align:"right",
|
|
|
|
text_id: "noise_characters_end"
|
|
|
|
});
|
|
|
|
|
|
|
|
// Next Button!
|
|
|
|
self.add({
|
|
|
|
id:"next_button", type:"Button", x:460, y:460, size:"long",
|
|
|
|
text_id:"noise_characters_btn",
|
|
|
|
message:"slideshow/scratch"
|
|
|
|
});
|
|
|
|
|
|
|
|
},
|
|
|
|
onend: function(self){
|
|
|
|
self.clear();
|
|
|
|
}
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
// Tournament: simpleton wins
|
|
|
|
SLIDES.push({
|
2017-07-20 22:16:35 +00:00
|
|
|
//id:"noise",// [FOR DEBUGGING]
|
2017-07-19 22:49:53 +00:00
|
|
|
onstart: function(self){
|
|
|
|
|
|
|
|
var o = self.objects;
|
|
|
|
|
|
|
|
// Tournament
|
|
|
|
Tournament.resetGlobalVariables();
|
|
|
|
Tournament.INITIAL_AGENTS = [
|
|
|
|
{strategy:"tf2t", count:3},
|
|
|
|
{strategy:"pavlov", count:3},
|
|
|
|
{strategy:"random", count:3},
|
|
|
|
{strategy:"tft", count:3},
|
|
|
|
{strategy:"all_c", count:13}
|
|
|
|
];
|
|
|
|
PD.NOISE = 0.05;
|
|
|
|
self.add({id:"tournament", type:"Tournament", x:-20, y:20});
|
|
|
|
|
|
|
|
// Words to the side
|
|
|
|
self.add({
|
|
|
|
id:"text", type:"TextBox",
|
|
|
|
x:510, y:30, width:450, height:500,
|
|
|
|
text_id:"noise_evo_1"
|
|
|
|
});
|
|
|
|
|
|
|
|
// BETS
|
|
|
|
var _addButton = function(character, x, y){
|
|
|
|
(function(character, x, y){
|
|
|
|
self.add({
|
|
|
|
id:"bet_"+character, type:"Button", x:x, y:y,
|
|
|
|
text_id: "icon_"+character,
|
|
|
|
onclick:function(){
|
|
|
|
_.answer = character;
|
|
|
|
publish("slideshow/next");
|
|
|
|
}
|
|
|
|
});
|
|
|
|
})(character, x, y);
|
|
|
|
};
|
|
|
|
var x = 510;
|
|
|
|
var y = 295;
|
|
|
|
var dx = 200;
|
|
|
|
var dy = 70;
|
|
|
|
_addButton("tf2t", x, y); _addButton("pavlov", x+dx, y);
|
|
|
|
_addButton("random", x, y+dy); _addButton("tft", x+dx, y+dy);
|
|
|
|
_addButton("all_c", x, y+dy*2);
|
|
|
|
|
|
|
|
},
|
|
|
|
onend: function(self){
|
|
|
|
self.remove("bet_all_c");
|
|
|
|
self.remove("bet_tft");
|
|
|
|
self.remove("bet_tf2t");
|
|
|
|
self.remove("bet_pavlov");
|
|
|
|
self.remove("bet_random");
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
SLIDES.push({
|
|
|
|
onstart: function(self){
|
|
|
|
|
|
|
|
var o = self.objects;
|
2017-07-12 21:46:38 +00:00
|
|
|
|
2017-07-19 22:49:53 +00:00
|
|
|
// Words
|
|
|
|
o.text.setTextID("noise_evo_2");
|
|
|
|
_hide(o.text); _fadeIn(o.text, 100);
|
2017-07-12 21:46:38 +00:00
|
|
|
|
2017-07-19 22:49:53 +00:00
|
|
|
/////////////////////////////////////////
|
|
|
|
// BUTTONS for playing //////////////////
|
|
|
|
/////////////////////////////////////////
|
2017-07-12 21:46:38 +00:00
|
|
|
|
2017-07-20 22:16:35 +00:00
|
|
|
var x = 172;
|
2017-07-19 22:49:53 +00:00
|
|
|
var y = 175;
|
|
|
|
var dy = 70;
|
|
|
|
self.add({
|
2017-07-20 22:16:35 +00:00
|
|
|
id:"playButton", type:"Button", size:"short",
|
2017-07-19 22:49:53 +00:00
|
|
|
x:x, y:y, text_id:"label_start",
|
|
|
|
onclick: function(){
|
|
|
|
if(o.tournament.isAutoPlaying){
|
|
|
|
publish("tournament/autoplay/stop");
|
|
|
|
}else{
|
|
|
|
publish("tournament/autoplay/start");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
listen(_, "tournament/autoplay/stop",function(){
|
|
|
|
o.playButton.setText("label_start");
|
|
|
|
});
|
|
|
|
listen(_, "tournament/autoplay/start",function(){
|
|
|
|
o.playButton.setText("label_stop");
|
|
|
|
});
|
|
|
|
self.add({
|
2017-07-20 22:16:35 +00:00
|
|
|
id:"stepButton", type:"Button", size:"short",
|
2017-07-19 22:49:53 +00:00
|
|
|
x:x, y:y+dy, text_id:"label_step", message:"tournament/step"
|
|
|
|
});
|
|
|
|
self.add({
|
2017-07-20 22:16:35 +00:00
|
|
|
id:"resetButton", type:"Button", size:"short",
|
2017-07-19 22:49:53 +00:00
|
|
|
x:x, y:y+dy*2, text_id:"label_reset", message:"tournament/reset"
|
|
|
|
});
|
2017-07-12 21:46:38 +00:00
|
|
|
|
2017-07-19 22:49:53 +00:00
|
|
|
/////////////////////////////////////////
|
|
|
|
// SHOW THE NEXT WORDS, and a NEXT
|
|
|
|
|
|
|
|
// NEXT
|
|
|
|
var reproduceSteps = 0;
|
|
|
|
_.misc = {};
|
|
|
|
listen(_.misc, "tournament/step/completed", function(step){
|
|
|
|
if(step=="reproduce"){
|
|
|
|
reproduceSteps++;
|
|
|
|
if(reproduceSteps==6){
|
|
|
|
publish("slideshow/next");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
},
|
|
|
|
onend: function(self){
|
|
|
|
unlisten(_.misc);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
SLIDES.push({
|
|
|
|
onstart: function(self){
|
|
|
|
|
|
|
|
var o = self.objects;
|
|
|
|
|
|
|
|
// Words
|
|
|
|
o.text.setTextID("noise_evo_3");
|
|
|
|
_hide(o.text); _fadeIn(o.text, 100);
|
|
|
|
|
|
|
|
// Tournament
|
|
|
|
Tournament.resetGlobalVariables();
|
|
|
|
Tournament.INITIAL_AGENTS = [
|
|
|
|
{strategy:"tf2t", count:3},
|
|
|
|
{strategy:"pavlov", count:3},
|
|
|
|
{strategy:"random", count:3},
|
|
|
|
{strategy:"tft", count:3},
|
|
|
|
{strategy:"all_d", count:13}
|
|
|
|
];
|
|
|
|
PD.NOISE = 0.05;
|
|
|
|
o.tournament.reset();
|
|
|
|
|
|
|
|
// HIDE PLAYER
|
|
|
|
_hide(o.playButton); o.playButton.deactivate();
|
|
|
|
_hide(o.stepButton); o.stepButton.deactivate();
|
|
|
|
_hide(o.resetButton); o.resetButton.deactivate();
|
|
|
|
|
|
|
|
// BETS
|
|
|
|
var _addButton = function(character, x, y){
|
|
|
|
(function(character, x, y){
|
|
|
|
self.add({
|
|
|
|
id:"bet_"+character, type:"Button", x:x, y:y,
|
|
|
|
text_id: "icon_"+character,
|
|
|
|
onclick:function(){
|
|
|
|
_.answer = character;
|
|
|
|
publish("slideshow/next");
|
|
|
|
}
|
|
|
|
});
|
|
|
|
})(character, x, y);
|
|
|
|
};
|
|
|
|
var x = 510;
|
|
|
|
var y = 295;
|
|
|
|
var dx = 200;
|
|
|
|
var dy = 70;
|
|
|
|
_addButton("tf2t", x, y); _addButton("pavlov", x+dx, y);
|
|
|
|
_addButton("random", x, y+dy); _addButton("tft", x+dx, y+dy);
|
|
|
|
_addButton("all_c", x, y+dy*2);
|
|
|
|
|
|
|
|
},
|
|
|
|
onend: function(self){
|
|
|
|
self.remove("bet_all_c");
|
|
|
|
self.remove("bet_tft");
|
|
|
|
self.remove("bet_tf2t");
|
|
|
|
self.remove("bet_pavlov");
|
|
|
|
self.remove("bet_random");
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
SLIDES.push({
|
|
|
|
onstart: function(self){
|
|
|
|
|
|
|
|
var o = self.objects;
|
|
|
|
|
|
|
|
// SHOW PLAYER
|
|
|
|
_fadeIn(o.playButton,1); o.playButton.activate();
|
|
|
|
_fadeIn(o.stepButton,1); o.stepButton.activate();
|
|
|
|
_fadeIn(o.resetButton,1); o.resetButton.activate();
|
|
|
|
o.playButton.setText("label_start");
|
|
|
|
|
|
|
|
// Words
|
|
|
|
o.text.setTextID("noise_evo_4");
|
|
|
|
_hide(o.text); _fadeIn(o.text, 100);
|
|
|
|
|
|
|
|
/////////////////////////////////////////
|
|
|
|
// SHOW THE NEXT WORDS, and a NEXT
|
|
|
|
|
|
|
|
// NEXT
|
|
|
|
var reproduceSteps = 0;
|
|
|
|
_.misc = {};
|
|
|
|
listen(_.misc, "tournament/step/completed", function(step){
|
|
|
|
if(step=="reproduce"){
|
|
|
|
reproduceSteps++;
|
|
|
|
if(reproduceSteps==8){
|
|
|
|
publish("slideshow/next");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
},
|
|
|
|
onend: function(self){
|
|
|
|
unlisten(_.misc);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
SLIDES.push({
|
|
|
|
onstart: function(self){
|
|
|
|
|
|
|
|
var o = self.objects;
|
|
|
|
|
|
|
|
// Words
|
|
|
|
o.text.setTextID("noise_evo_5");
|
|
|
|
_hide(o.text); _fadeIn(o.text, 100);
|
|
|
|
|
|
|
|
// Tournament
|
|
|
|
o.tournament.reset();
|
|
|
|
|
|
|
|
// Slider!
|
|
|
|
var x = 510;
|
|
|
|
var y = 100;
|
|
|
|
self.add({
|
|
|
|
id:"noiseLabel", type:"TextBox",
|
|
|
|
x:x, y:y, width:450, noSelect:true
|
|
|
|
});
|
|
|
|
self.add({
|
|
|
|
id:"noiseSlider", type:"Slider",
|
|
|
|
x:x, y:y+55, width:450,
|
|
|
|
min:0.00, max:0.50, step:0.01,
|
|
|
|
message: "rules/noise"
|
|
|
|
});
|
|
|
|
_.misc = {};
|
|
|
|
var _updateLabel = function(value){
|
|
|
|
value = Math.round(value*100);
|
|
|
|
var words = Words.get("sandbox_rules_3");
|
|
|
|
words = words.replace(/\[N\]/g, value+""); // replace [N] with the number value
|
|
|
|
o.noiseLabel.setText(words);
|
|
|
|
};
|
|
|
|
listen(_.misc, "rules/noise", function(value){
|
|
|
|
_updateLabel(value);
|
|
|
|
o.tournament.reset();
|
|
|
|
});
|
|
|
|
o.noiseSlider.setValue(0.05);
|
|
|
|
_updateLabel(0.05);
|
|
|
|
|
|
|
|
// Continue whenever you want to...
|
|
|
|
var x = 510;
|
|
|
|
var y = 300;
|
|
|
|
self.add({
|
|
|
|
id:"continueLabel", type:"TextBox",
|
|
|
|
x:x, y:y+5, width:200, height:50,
|
|
|
|
align:"right", color:"#aaa", size:17,
|
|
|
|
text_id:"noise_evo_6_continue"
|
|
|
|
});
|
|
|
|
self.add({
|
|
|
|
id:"continueButton", type:"Button",
|
|
|
|
x:x+215, y:y, size:"short",
|
|
|
|
text_id:"label_continue",
|
|
|
|
message: "slideshow/next"
|
|
|
|
});
|
|
|
|
|
|
|
|
},
|
|
|
|
onend: function(self){
|
|
|
|
unlisten(_.misc);
|
|
|
|
self.remove("noiseLabel");
|
|
|
|
self.remove("noiseSlider");
|
|
|
|
self.remove("continueLabel");
|
|
|
|
self.remove("continueButton");
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
SLIDES.push({
|
|
|
|
onstart: function(self){
|
|
|
|
|
|
|
|
var o = self.objects;
|
|
|
|
|
|
|
|
// Words
|
|
|
|
o.text.setTextID("noise_evo_6");
|
|
|
|
_hide(o.text); _fadeIn(o.text, 100);
|
|
|
|
|
|
|
|
// Next button
|
|
|
|
self.add({
|
|
|
|
id:"button", type:"Button", x:510, y:466,
|
|
|
|
text_id:"noise_evo_6_btn", size:"long",
|
|
|
|
message:"slideshow/scratch"
|
|
|
|
});
|
|
|
|
|
|
|
|
},
|
|
|
|
onend: function(self){
|
|
|
|
self.clear();
|
|
|
|
unlisten(self);
|
|
|
|
unlisten(_);
|
|
|
|
unlisten(_.misc);
|
|
|
|
}
|
|
|
|
});
|