Word Play contest prototype, four days to make something decent out of it
- September 14, 2009 by Emanuele Feronato
- Filed under Actionscript 3, Box2D, Contests, Flash, Game design | 2 Comments
The final deadline for “Word Play” Flash Game Contest ran by MochiMedia is September 18 and if you did not submit any entry, here it is a prototype you can use to make something better out of it.
The concept is based upon How to use an embedded text file in Flash and some concepts from SamePhysics.
Letters are falling (very quickly in this example), click on them to make a word, click on a previously clicked letter to submit a word and make letters disappear, or click outside to reset the word.
If a letter falls outside the stage, then it’s game over.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 | package { import flash.display.Sprite; import flash.events.MouseEvent; import flash.events.Event; import flash.utils.Timer; import flash.events.TimerEvent; import Box2D.Dynamics.*; import Box2D.Collision.*; import Box2D.Collision.Shapes.*; import Box2D.Common.Math.*; public class HelloWorld extends Sprite { public var words:embedded_text = new embedded_text(); public var m_world:b2World; public var m_iterations:int=10; public var m_timeStep:Number=1.0/30.0; public var body:b2Body; public var bodyDef:b2BodyDef; public var boxDef:b2PolygonDef; public var word:String=""; public var letters:String="ABCDEFGHIJKLMNOPQRSTUVWXYZ"; public var words_array:Array = new Array(); public var remove:Boolean=false; public var release_letters:Boolean=false; public var game_over:Boolean=false; public function HelloWorld() { words_array=words.toString().split(","); var worldAABB:b2AABB = new b2AABB(); worldAABB.lowerBound.Set(-100.0, -100.0); worldAABB.upperBound.Set(100.0, 100.0); var gravity:b2Vec2=new b2Vec2(0.0,10.0); var doSleep:Boolean=true; m_world=new b2World(worldAABB,gravity,doSleep); add_walls(); var time_count:Timer=new Timer(1000); time_count.start(); time_count.addEventListener(TimerEvent.TIMER, on_time); addEventListener(Event.ENTER_FRAME, Update, false, 0, true); stage.addEventListener(MouseEvent.MOUSE_DOWN, on_mouse_down); } public function add_walls() { bodyDef = new b2BodyDef(); bodyDef.position.Set(10.5, 15.75); boxDef = new b2PolygonDef(); boxDef.SetAsBox(10.5, 0.25); boxDef.friction=0.3; boxDef.density=0; body=m_world.CreateBody(bodyDef); body.CreateShape(boxDef); body.SetMassFromShapes(); bodyDef = new b2BodyDef(); bodyDef.position.Set(0.25, 12); boxDef = new b2PolygonDef(); boxDef.SetAsBox(0.25, 4); boxDef.friction=0.3; boxDef.density=0; body=m_world.CreateBody(bodyDef); body.CreateShape(boxDef); body.SetMassFromShapes(); bodyDef = new b2BodyDef(); bodyDef.position.Set(20.75, 12); boxDef = new b2PolygonDef(); boxDef.SetAsBox(0.25, 4); boxDef.friction=0.3; boxDef.density=0; body=m_world.CreateBody(bodyDef); body.CreateShape(boxDef); body.SetMassFromShapes(); var the_walls:walls=new walls(); addChild(the_walls); } public function on_time(event:TimerEvent) { if (! game_over) { var lett=letters.charAt(Math.floor(Math.random()*26)); bodyDef = new b2BodyDef(); bodyDef.position.x=Math.random()*19+1; bodyDef.position.y=-2; boxDef = new b2PolygonDef(); boxDef.SetAsBox(0.75,0.75); boxDef.density=1.0; boxDef.friction=0.5; boxDef.restitution=0.2; bodyDef.userData = new letter(); bodyDef.userData.lettertext.text=lett; bodyDef.userData.width=1.5*30; bodyDef.userData.height=1.5*30; body=m_world.CreateBody(bodyDef); body.CreateShape(boxDef); body.SetMassFromShapes(); addChild(bodyDef.userData); bodyDef.userData.x=bodyDef.position.x*30; bodyDef.userData.y=bodyDef.position.y*30; } } public function on_mouse_down(evt:MouseEvent):void { remove=false; if (! game_over) { var body:b2Body=GetBodyAtMouse(); var position:int; if (body) { if (body.m_userData.alpha==1) { body.m_userData.alpha=0.5; word+=body.m_userData.lettertext.text.toLowerCase(); } else { position=words_array.indexOf(word); if (position>-1) { word=""; remove=true; } } } else { word=""; release_letters=true; } } } public function GetBodyAtMouse(includeStatic:Boolean=false):b2Body { var real_x_mouse = (stage.mouseX)/30; var real_y_mouse = (stage.mouseY)/30; var mousePVec:b2Vec2 = new b2Vec2(); mousePVec.Set(real_x_mouse, real_y_mouse); var aabb:b2AABB = new b2AABB(); aabb.lowerBound.Set(real_x_mouse - 0.001, real_y_mouse - 0.001); aabb.upperBound.Set(real_x_mouse + 0.001, real_y_mouse + 0.001); var k_maxCount:int=10; var shapes:Array = new Array(); var count:int=m_world.Query(aabb,shapes,k_maxCount); var body:b2Body=null; for (var i:int = 0; i <count; ++i) { if (shapes[i].m_body.IsStatic()==false||includeStatic) { var tShape:b2Shape=shapes[i] as b2Shape; var inside:Boolean=tShape.TestPoint(tShape.m_body.GetXForm(),mousePVec); if (inside) { body=tShape.m_body; break; } } } return body; } public function Update(e:Event):void { m_world.Step(m_timeStep, m_iterations); for (var bb:b2Body = m_world.m_bodyList; bb; bb = bb.m_next) { if (bb.m_userData is Sprite) { bb.m_userData.x=bb.GetPosition().x*30; bb.m_userData.y=bb.GetPosition().y*30; if (bb.m_userData.y>500) { game_over=true; } bb.m_userData.rotation = bb.GetAngle() * (180/Math.PI); if (remove&&bb.m_userData.alpha==0.5) { removeChild(bb.m_userData); bb.m_userData=null; m_world.DestroyBody(bb); } if (release_letters&&bb.m_userData.alpha==0.5) { bb.m_userData.alpha=1; } } } release_letters=false; } } } |
where embedded_text.as is coded as follows:
1 2 3 4 5 6 7 8 | package { import flash.utils.ByteArray; [Embed(source="words.txt",mimeType="application/octet-stream")] public class embedded_text extends ByteArray { public function embedded_text() { } } } |
And this is the result… (a bit shrinked to make it fit in the blog)
Download the source code… four days left…
They can be easily customized to meet the unique requirements of your project.
2 Responses
Leave a Reply
- Una guida completa al gioco del poker online e una selezione dei migliori casino online.
- casino online
- migliori casino online
- BlackJack online
- casinò online
- Giochi casino

(7 votes, average: 4.00 out of 5)



I like it, but it should have more vowels since there are too many consonants
You could use the scrabble ratio of tiles to make sure there are enough vowels.