phlashers2009-jopiruizen-textbased game

by jopiruizen
♥0 | Line 115 | Modified 2009-12-28 21:27:25 | MIT License
play

ActionScript3 source code

/**
 * Copyright jopiruizen ( http://wonderfl.net/user/jopiruizen )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/r0Tg
 */

package{
	import flash.display.Sprite;import flash.text.TextField;import flash.text.TextFormat;
 	public class TextTile extends Sprite{
		var w=470,h=470,chars,fhit=true,temp,targets,lvl=0,gameOver=false;
		var timeout=10,wait=3000,tCtr=0,ins="Type in to start";
		var area:Sprite,input:Sprite,fld:TextField,red:Sprite;
		public function TextTile() { loaderInfo.addEventListener("complete",init);}
		function draw(t,c,a,o) {
			t.graphics.beginFill(c,a);
			if(o.s=="c"){t.graphics.drawEllipse(0-(o.w/2),0 -(o.w/2),o.w,o.w);} 
			else if(o.s=="r"){t.graphics.drawRect(0,0,o.w,o.h);} 
			t.graphics.endFill();
		}
		function init(e:*){
	 		chars = "";targets=new Array();
			mouseChildren = false;
			draw(this,0x000000,1,{w:w,h:h,s:"r"});
			red=new Sprite();draw(red,0xFF0000,0.5,{w:w,h:2,s:"r"});addChild(red);uplvl();
			area=new Sprite(); draw(area,0,0,{w:w,h:h,s:"r"});
			addChild(area);
			input=new Sprite();
			draw(input,0xFF9900,1,{w:w-40,h:50,s:"r"});
			input.x=(w-(w-40))/2;
			input.y=h-50-10;
			addChild(input);
			fld=new TextField();input.addChild(fld);fld.border=true;fld.borderColor=0xFFFFFF;fld.width=w-40;fld.height=50;
			fld.selectable=false;fld.maxChars=12;
			var tf:TextFormat = new TextFormat("Comic Sans MS",30,0x000000,true);
			tf.align = "center";
			fld.defaultTextFormat = tf;
			fld.text=ins;
			addEventListener("keyDown",keyh);
			addEventListener("enterFrame",enfra);
		 	stage.focus=this;
			create();
		}
		function uplvl(){lvl++;red.y=(h-((lvl+1)*10))-50;}
		function hit(){return (h-((lvl+1)*10))-50}
		function keyh(e:*){
			if( fhit == true ){fhit=false; fld.text="";}
			var ccode = e.charCode;
			if( ccode == 8) {//backspace
				temp=chars.split("");
				temp.splice(temp.length-1,1);chars="";
				for(var i=0;i<temp.length;i++)chars+=temp[i];
			} else if(ccode==13||ccode==32){ //enter
				cmp();chars="";
			} else if((ccode>=65&&ccode<=90)||(ccode>=97&&ccode<=122)) {
				chars+=String.fromCharCode(ccode);
			}
			fld.text=chars;
		}
		function mod(dvn:*,dvsr:*){return((dvn%dvsr)== 0);}
		function ri(i) {return Math.floor( Math.random() * i);}
		function rr(i,j){return Math.round(Math.random()*(j-i))+i;}
		function crfld(w,h,s,c,t){
			var f=new TextField();
			f.width=w;f.height=h;
			var tf=new TextFormat("Tahoma",s,c,true);
		 	tf.align="center";f.defaultTextFormat=tf;f.text=t;
			return f;
		}
		function rt(){
			var l=rr(rr(3,5),rr(6,9)),s="";
			for( var i=1;i<=l;i++){
				var c=97+ri(25);
				s+=String.fromCharCode(c);
			}
			return s;
		}
		function cmp(){
			for(var i=0;i<targets.length;i++){
				var o=targets[i];
				if(o.txt.toUpperCase()==chars.toUpperCase()){ 
					area.removeChild(o.main);
					targets.splice(i,1);
				}
			}
		}
		function create(){
			var o={};
			o.main=new Sprite();
			draw(o.main,0xFFFFFF,0.2,{w:100,h:30,s:"r"});
			o.main.name ="target_" + ri(1000000) + "_" + targets.length;
			o.main.x=ri(470-100);
			o.main.y=-15;
			o.txt=rt();
			o.main.addChild(crfld(100,30,18,0xFF9900, o.txt));
			o.speed= rr(rr(1,2),rr(3,5))/rr(rr(2,4),5);
			targets.push(o);
			area.addChild(o.main);
			wait=(rr(rr(2,5),7))*300;
		 	return o;
		}
		function act(){
			for( var i=0;i<targets.length;i++){
				var o=targets[i];
				o.main.y += o.speed;
				if(o.main.height+o.main.y>hit() ){
					targets.splice(i,1);
					area.removeChild(o.main);
					uplvl();i--;	
				} 
			}
		}
		function enfra(e:*){
			if( mod(tCtr,wait) ){
				create();
			}
			act();
			tCtr+=timeout;
			if(tCtr>50000)tCtr=0;
		}
	}
}