flash on 2009-9-29
♥0 |
Line 96 |
Modified 2009-09-29 02:00:30 |
MIT License
archived:2017-03-20 11:56:00
ActionScript3 source code
/**
* Copyright nacookan ( http://wonderfl.net/user/nacookan )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/h9iY
*/
package {
import flash.display.*;
import flash.text.*;
import flash.events.*;
public class Janken extends Sprite {
public function Janken() {
var maxlevel:Number = 10;
var maxcount:Number = Math.pow(2, maxlevel);
var challengers:Array = [];
for(var i:Number = 0; i < maxcount; i++){
challengers.push(new Challenger(i, maxlevel * 10));
}
var winner:Challenger = tournament(challengers);
var label:TextField = new TextField();
label.autoSize = TextFieldAutoSize.LEFT;
addChild(label);
var s:Sprite = new Sprite();
s.graphics.beginFill(0xfafafa);
s.graphics.lineStyle(2, 0xa0a0a0);
s.graphics.drawRect(0, 0, 100, 50);
s.graphics.endFill();
s.x = 300;
s.y = 100;
addChild(s);
var t:TextField = new TextField();
t.text = winner.id;
t.autoSize = TextFieldAutoSize.LEFT;
t.mouseEnabled = false;
t.x = (s.width - t.width) / 2;
t.y = (s.height - t.height) / 2
s.addChild(t);
s.addEventListener(MouseEvent.CLICK, function(e:MouseEvent):void{
label.text += ['g', 'c', 'p'][winner.next()] + '\n';
});
}
private function tournament(challengers:Array):Challenger{
var winners:Array = [];
for(var i:Number = 0; i < challengers.length; i += 2){
var a:Challenger = challengers[i];
var b:Challenger = challengers[i + 1];
var draw:Number = 0;
while(true){
var result:Number = doJanken(a.next(), b.next());
if(result == -1){
winners.push(a);
break;
}else if(result == +1){
winners.push(b);
break;
}
if(draw++ == 200){
throw new Error('引き分け発生');
}
}
}
if(1 < winners.length){
return tournament(winners);
}else{
return winners[0];
}
}
private function doJanken(a:Number, b:Number):Number{
return (
(a == 0 && b == 0) ? 0 :
(a == 0 && b == 1) ? -1 :
(a == 0 && b == 2) ? +1 :
(a == 1 && b == 0) ? +1 :
(a == 1 && b == 1) ? 0 :
(a == 1 && b == 2) ? -1 :
(a == 2 && b == 0) ? -1 :
(a == 2 && b == 1) ? +1 :
(a == 2 && b == 2) ? 0 : 9
);
}
}
}
class Challenger {
private var _id:Number;
private var index:Number = 0;
private var stocks:Array = [];
public function Challenger(id:Number, capacity:Number){
_id = id;
for(var i:Number = 0; i < capacity; i++){
stocks.push(Math.floor(Math.random() * 3));
}
}
public function next():Number{
var res:Number = stocks[index];
index++;
if(stocks.length <= index) index = 0;
return res;
}
public function get id():String{
return _id.toString();
}
}