Beautifl - Flash Gallery

Thumbnail : 17Poker
17Poker
178ep3 2010-01-22 MIT License

再生するにはFlash Playerが必要です。デスクトップのブラウザでご覧ください。

//17ポーカー
//コードが汚いけどとりあえずアップ。

package
{
	import caurina.transitions.Tweener;
	
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.text.TextField;
	import flash.text.TextFieldAutoSize;
	import flash.text.TextFormat;
	
	[SWF(backgroundColor=0x009900, frameRate=30)]
	public class Poker17 extends Sprite
	{
		private var _kindList:Array = ["Spade","Clover","Dia","Heart"];
		private var _numList:Array = [1,11,12,13];
		
		private var _patternName:Array = ["5 card","Royal straight Flash","4 card","full house","straight","3 card","2 pair","1 pair"];
		private var _dealerPattern:String;
		private var _myPattern:String;
		
		private var _cardList:Array = [];
		private var _myCard:Array = [];
		private var _dealerCard:Array = [];
		
		private var _cardStg:Sprite;
		private var _dealerStg:Sprite;
		private var _changeBtn:SampleBtn;
		
		private var _jTf:TextField;
		private var _caver:Sprite;
		
		private var _coin:int=100;
		private var _floatCoin:uint=0;
		private var _coinTf:TextField;
		
		public function Poker17()
		{
			if(stage)setup();
			else addEventListener(Event.ADDED_TO_STAGE,setup);
		}
		
		private function setup(e:Event=null):void
		{
			removeEventListener(Event.ADDED_TO_STAGE,init);
			
			_coinTf = addChild(new TextField())as TextField;
			_coinTf.y = 442;
			_coinTf.defaultTextFormat = new TextFormat("_ゴシック",12,0xffffff);
			_coinTf.autoSize = TextFieldAutoSize.LEFT;
			_coinTf.selectable = false;
			_coinTf.text = "POINT : " +_coin.toString();
			init();
		}
		
		private function init(e:Event=null):void
		{
			var i:uint = 0;
			var q:uint = 0;
			for(q=0; q<4; q++)
			{
				for(i=0; i<4; i++)
				{
					var card:Card = new Card(_kindList[q],_numList[i]);
					card.x = (320-card.width)*0.5;
					card.y = (465-card.height)*0.5;
					_cardList.push(card);
				}
			}
			var joker:Card = new Card("joker",0);
			joker.x = (320-joker.width)*0.5;
			joker.y = (465-joker.height)*0.5;
			_cardList.push(joker);
			
			for(i=0; i<50; i++)
			{
				var sc:Card = _cardList.shift();
				_cardList.splice(Math.random()*17,0,sc);
			}
			
			for(i=0; i<5; i++)
			{
				var mc:Card = _cardList.shift();
				_myCard.push(mc);
				var dc:Card = _cardList.shift();
				dc.offCard();
				_dealerCard.push(dc);
			}
			
			_cardStg = addChild(new Sprite())as Sprite;
			_dealerStg = addChild(new Sprite())as Sprite;
			
			_caver = addChild(new Sprite())as Sprite;
			_caver.graphics.beginFill(0,0);
			_caver.graphics.drawRect(0,0,320,100);
			_caver.graphics.endFill();
			
			_changeBtn = addChild(new SampleBtn("change"))as SampleBtn;
			_changeBtn.x = 160 - _changeBtn.width*0.5;
			_changeBtn.y = 233 - _changeBtn.height*0.5;
			_changeBtn.addEventListener(MouseEvent.CLICK,changeCard);
			_changeBtn.buttonMode = true;
			
			_coinTf.text = "POINT : " +_coin.toString();
			
			addCard();
		}
		
		private function changeCard(e:MouseEvent):void
		{
			_changeBtn.visible = false;
			AI.DealerSelect(_dealerCard);
			var i:uint = 0;
			for(i=0; i<5; i++)
			{
				if(_myCard[i].select)
				{
					_myCard[i].clear();
					Tweener.addTween(_myCard[i],{time:0.2,y:500,transition:"linear"});
					_myCard[i] = _cardList.shift();
				}
				
				if(_dealerCard[i].select)
				{
					_dealerCard[i].clear();
					if(_cardList.length>0)
					{
						Tweener.addTween(_dealerCard[i],{time:0.2,y:-100,transition:"linear"});
						_dealerCard[i] = _cardList.shift();
					}
				}
			}
			Tweener.addTween(this,{time:0.2,onComplete:next});
			
			function next():void
			{
				addCard();
				_myPattern = AI.judge(_myCard);
				_dealerPattern = AI.judge(_dealerCard);
				Tweener.addTween(this,{time:0.7,onComplete:win});
			}
		}
		
		private function addCard():void
		{
			var i:uint;
			if(_cardStg.numChildren>0)
			{
				for(i=0; i<5; i++)
				{
					_cardStg.removeChildAt(0);
					_dealerStg.removeChildAt(0);
				}
			}
			
			for(i=0; i<5; i++)
			{
				_cardStg.addChildAt(_myCard[i],0);
				Tweener.addTween(_myCard[i],{delay:0.1*i,time:0.2,x:60*i+10,y:355,transition:"linear"});
				
				_dealerStg.addChildAt(_dealerCard[i],0);
				_dealerCard[i].offCard();
				Tweener.addTween(_dealerCard[i],{delay:0.1*i,time:0.2,x:60*i+10,y:10,transition:"linear"});
			}
		}
		
		private function win():void
		{
			var i:uint;
			for(i=0; i<5; i++)
			{
				var ca:Card = _dealerStg.getChildAt(i)as Card;
				ca.onCard();
			}
			
			var my:uint = _patternName.indexOf(_myPattern);
			var de:uint = _patternName.indexOf(_dealerPattern);
			var winner:String = (my<de)? "YOU WIN" : "YOU LOSE";
			if(_myPattern==_dealerPattern)winner = "DRAW";
			
			if(winner=="YOU WIN")
			{
				_coin += (10+_floatCoin);
				_floatCoin = 0;
			}
			else if(winner=="YOU LOSE")
			{
				_coin-=10;
				_floatCoin=0;
			}
			else
			{
				_coin-=10;
				_floatCoin += 20;
			}
			
			_jTf = addChild(new TextField())as TextField;
			_jTf.selectable = false;
			_jTf.defaultTextFormat = new TextFormat("_ゴシック",20);
			_jTf.autoSize = TextFieldAutoSize.LEFT;
			_jTf.text = "Dealer : " + _dealerPattern + "\n" + 
						"YOU : " + _myPattern + "\n" + winner;
			_jTf.defaultTextFormat = new TextFormat("_ゴシック",12,0xff0000);
			_jTf.appendText("\nclick to restart!");
			_jTf.x = 160 - _jTf.width*0.5;
			_jTf.y = 233 - _jTf.height*0.5;
			
			if(_coin>0)_jTf.addEventListener(MouseEvent.CLICK,reset);
			else _jTf.text = "GAME OVER...";
		}
		
		private function reset(e:MouseEvent):void
		{
			removeChild(_jTf);
			removeChild(_cardStg);
			removeChild(_dealerStg);
			_dealerStg = null;
			_cardStg = null;
			_jTf = null;
			_myCard = [];
			_dealerCard = [];
			_myPattern = "";
			_dealerPattern = "";
			_cardList = [];
			
			init();
		}
	}
}

	import flash.display.Sprite;
	import flash.events.MouseEvent;
	import flash.text.TextField;
	import flash.text.TextFieldAutoSize;
	import flash.text.TextFormat;

class AI
{
	public function AI(){}
	
	public static function DealerSelect(list:Array):void
	{
		var change:Array = [true,true,true,true,true];
		var i:uint = 0;
		for(i=0; i<5; i++)
		{
			if(list[i].num==0)
			{
				change[i] = false;
				break;
			}
		}
		var useList:Array = list.slice();
		var len:uint = list.length;
		useList.sortOn("num",Array.NUMERIC);
		var iq:Array=[];
		var count:uint=0;
		for(i=0;i<len-1;i++)
		{
			if(useList[i].num == useList[i+1].num)iq.push(i);
		}
		count = iq.length;
		
		for(i=0; i<count; i++)
		{
			var se:uint = list.indexOf(useList[iq[i]]);
			change[se] = false;
			var se2:uint = list.indexOf(useList[iq[i]+1]);
			change[se2] = false;
		}
		for(i=0; i<5; i++)
		{
			if(change[i])list[i].select = true;
		}
	}
	
	public static function judge(list:Array):String
	{
		var pattern:String="";
		var i:uint = 0;
		var j:Boolean = false;
		for(i=0; i<5; i++)
		{
			if(list[i].num==0)
			{
				list.splice(i,1);
				j=true;
				break;
			}
		}
		var len:uint = list.length;
		list.sortOn("num",Array.NUMERIC);
		var iq:Array=[];
		var count:uint=0;
		for(i=0;i<len-1;i++)
		{
			if(list[i].num == list[i+1].num)iq.push(i);
		}
		count = iq.length;
		if(count==1)pattern = "1 pair";
		else if(count==2 && iq[0]+1!=iq[1])pattern = "2 pair";
		else if(count==2)pattern = "3 card";
		else if(count==3 && (iq[0]+2 == iq[2]))pattern = "4 card";
		else if(count==3)pattern = "full house";
		else if(j)
		{
			if(list[0].kind == list[1].kind == list[2].kind == list[3].kind)pattern="Royal straight Flash";
			else pattern="straight";
		}
		if(j && pattern != "Royal straight Flash")
		{
			if(pattern=="1 pair")pattern = "3 card";
			else if(pattern=="2 pair")pattern = "full house";
			else if(pattern=="3 card")pattern = "4 card";
			else if(pattern=="4 card")pattern = "5 card";
			else if(pattern=="")pattern = "1 pair";
		}
		
		return pattern;
	}	
}

class Card extends Sprite
{
	private var _tf:TextField;
	private var _kind:String;
	private var _num:uint;
	private var _select:Boolean = false;
	
	public function Card(kind:String,num:uint)
	{
		_kind = kind;
		_num = num;
		
		this.graphics.beginFill(0xffffff);
		this.graphics.lineStyle(1);
		this.graphics.drawRect(0,0,50,80);
		this.graphics.endFill();
		this.mouseChildren = false;
		
		var color:uint = 0;
		if(_kind=="Dia" || _kind=="Heart")color=0xff0000;
		
		_tf = addChild(new TextField())as TextField;
		_tf.defaultTextFormat = new TextFormat("_ゴシック",12,color);
		_tf.autoSize = TextFieldAutoSize.CENTER;
		_tf.selectable = false;
		
		if(_kind=="joker")_tf.text = _kind;
		_tf.defaultTextFormat =  new TextFormat("_ゴシック",30,color);
		if(_kind=="Spade") _tf.text = "♠ \n";
		else if(_kind=="Clover") _tf.text = "♣ \n";
		else if(_kind=="Dia") _tf.text = "♦ \n";
		else if(_kind=="Heart")_tf.text = "♥ \n";
		_tf.defaultTextFormat =  new TextFormat("_ゴシック",12,color);
		if(_num==1) _tf.appendText("A");
		else if(_num==11) _tf.appendText("XI");
		else if(_num==12) _tf.appendText("XⅡ");
		else if(_num==13) _tf.appendText("XⅢ");
		
		_tf.x = 25 - _tf.width*0.5;
		_tf.y = 40 - _tf.height*0.5;
		
		this.addEventListener(MouseEvent.CLICK,click);
		this.buttonMode = true;
	}
	
	private function click(e:MouseEvent):void
	{
		_select = !_select;
		this.graphics.clear();
		if(_select)this.graphics.beginFill(0x888888);
		else this.graphics.beginFill(0xffffff);
		this.graphics.lineStyle(1);
		this.graphics.drawRect(0,0,50,80);
		this.graphics.endFill();
	}
	
	public function onCard():void
	{
		_tf.visible = true;
	}
	
	public function offCard():void
	{
		_tf.visible = false;
	}
	
	public function get kind():String
	{
		return _kind;
	}
	
	public function get num():uint
	{
		return _num;
	}
	
	public function get select():Boolean
	{
		return _select;
	}
	
	public function set select(value:Boolean):void
	{
		_select = value;
	}
	
	public function clear():void
	{
		this.graphics.clear();
		this.graphics.beginFill(0xffffff);
		this.graphics.lineStyle(1);
		this.graphics.drawRect(0,0,50,80);
		this.graphics.endFill();
	}
}

class SampleBtn extends Sprite
{
	private var _tf:TextField;
		
	public function SampleBtn(value:String="")
	{
		_tf = addChild(new TextField())as TextField;
		_tf.autoSize = TextFieldAutoSize.LEFT;
		_tf.selectable = false;
		_tf.text = value;
		_tf.x = _tf.y = 5;
			
		this.graphics.lineStyle(1);
		this.graphics.beginFill(0xffffff);
		this.graphics.drawRect(0,0,_tf.width+10 , _tf.height+10);
		this.graphics.endFill();
		this.mouseChildren = false;
	}	
}