Word Play contest prototype, four days to make something decent out of it

Read all posts about "" game

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.

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 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:

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…

Get the most popular Phaser 3 book

Through 202 pages, 32 source code examples and an Android Studio project you will learn how to build cross platform HTML5 games and create a complete game along the way.

Get the book

215 GAME PROTOTYPES EXPLAINED WITH SOURCE CODE
// 1+2=3
// 100 rounds
// 10000000
// 2 Cars
// 2048
// A Blocky Christmas
// A Jumping Block
// A Life of Logic
// Angry Birds
// Angry Birds Space
// Artillery
// Astro-PANIC!
// Avoider
// Back to Square One
// Ball Game
// Ball vs Ball
// Ball: Revamped
// Balloon Invasion
// BallPusher
// Ballz
// Bar Balance
// Bejeweled
// Biggification
// Block it
// Blockage
// Bloons
// Boids
// Bombuzal
// Boom Dots
// Bouncing Ball
// Bouncing Ball 2
// Bouncy Light
// BoxHead
// Breakout
// Bricks
// Bubble Chaos
// Bubbles 2
// Card Game
// Castle Ramble
// Chronotron
// Circle Chain
// Circle Path
// Circle Race
// Circular endless runner
// Cirplosion
// CLOCKS - The Game
// Color Hit
// Color Jump
// ColorFill
// Columns
// Concentration
// Crossy Road
// Crush the Castle
// Cube Jump
// CubesOut
// Dash N Blast
// Dashy Panda
// Deflection
// Diamond Digger Saga
// Don't touch the spikes
// Dots
// Down The Mountain
// Drag and Match
// Draw Game
// Drop Wizard
// DROP'd
// Dudeski
// Dungeon Raid
// Educational Game
// Elasticity
// Endless Runner
// Erase Box
// Eskiv
// Farm Heroes Saga
// Filler
// Flappy Bird
// Fling
// Flipping Legend
// Floaty Light
// Fuse Ballz
// GearTaker
// Gem Sweeper
// Globe
// Goat Rider
// Gold Miner
// Grindstone
// GuessNext
// Helicopter
// Hero Emblems
// Hero Slide
// Hexagonal Tiles
// HookPod
// Hop Hop Hop Underwater
// Horizontal Endless Runner
// Hundreds
// Hungry Hero
// Hurry it's Christmas
// InkTd
// Iromeku
// Jet Set Willy
// Jigsaw Game
// Knife Hit
// Knightfall
// Legends of Runeterra
// Lep's World
// Line Rider
// Lumines
// Magick
// MagOrMin
// Mass Attack
// Math Game
// Maze
// Meeblings
// Memdot
// Metro Siberia Underground
// Mike Dangers
// Mikey Hooks
// Nano War
// Nodes
// o:anquan
// One Button Game
// One Tap RPG
// Ononmin
// Pacco
// Perfect Square!
// Perfectionism
// Phyballs
// Pixel Purge
// PixelField
// Planet Revenge
// Plants Vs Zombies
// Platform
// Platform game
// Plus+Plus
// Pocket Snap
// Poker
// Pool
// Pop the Lock
// Pop to Save
// Poux
// Pudi
// Pumpkin Story
// Puppet Bird
// Pyramids of Ra
// qomp
// Quick Switch
// Racing
// Radical
// Rebuild Chile
// Renju
// Rise Above
// Risky Road
// Roguelike
// Roly Poly
// Run Around
// Rush Hour
// SameGame
// SamePhysics
// Save the Totem
// Security
// Serious Scramblers
// Shrink it
// Sling
// Slingy
// Snowflakes
// Sokoban
// Space Checkers
// Space is Key
// Spellfall
// Spinny Gun
// Splitter
// Spring Ninja
// Sproing
// Stabilize!
// Stack
// Stairs
// Stick Hero
// String Avoider
// Stringy
// Sudoku
// Super Mario Bros
// Surfingers
// Survival Horror
// Talesworth Adventure
// Tetris
// The Impossible Line
// The Moops - Combos of Joy
// The Next Arrow
// Threes
// Tic Tac Toe
// Timberman
// Tiny Wings
// Tipsy Tower
// Toony
// Totem Destroyer
// Tower Defense
// Trick Shot
// Tunnelball
// Turn
// Turnellio
// TwinSpin
// vvvvvv
// Warp Shift
// Way of an Idea
// Whack a Creep
// Wheel of Fortune
// Where's my Water
// Wish Upon a Star
// Word Game
// Wordle
// Worms
// Yanga
// Yeah Bunny
// Zhed
// zNumbers