Create a Flash game like Gold Miner
Today I received an email from a reader asking me to make a tutorial of a game like Gold Miner.
It’s a Flash demo of a downloadable game, and I think its gameplay is interesting enough to deserve a tutorial.
The main actor in this game is the hook (in the original game, a claw).
The hook can have three states, that I defined this way:
rotate: that’s when the hook is rotating from left to right at the top of the screen. If the player presses the mouse the state turns to…
shoot: the hook moves in a fixed direction (the one it had when the player pressed the mouse) until it hits a gem or flies off the screen. Then the state turns again to…
rewind: the hook returns, in a straight path, to its initial position and changes the state to rotate, allowing the player to shoot again.
Rewind speed is the same as shoot speed if the hook did not take any boulder, while if the hook has a boulder attached, there will be a slowdown according to boulder size
Let’s see the commented code… remember that the hook is linked as pod while the gem as boulder
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 | // number of boulders in the game
boulders = 20;
for (x=1; x<=boulders; x++) {
// creating the boulders
bould = _root.attachMovie("boulder", "boulder_"+_root.getNextHighestDepth(), _root.getNextHighestDepth());
// placing them in random positions and with random dimensions
bould._x = Math.floor(Math.random()*400)+50;
bould._y = Math.floor(Math.random()*200)+150;
bould._width = Math.floor(Math.random()*30)+20;
bould._height = bould._width;
// setting picked attribute as false
// picked = false => the boulder has not been picked by the hook
// picked = true => the boulder has been picked
bould.picked = false;
// function to be executed at every frame for the boulder
bould.onEnterFrame = function() {
// if it's not been picked...
if (!this.picked) {
// check if the hook is in shoot mode and touched the boulder
// you'll see later what do hot_spot_x and hot_spot_y mean
if (pod_status == "shoot" and this.hitTest(hot_spot_x, hot_spot_y, true)) {
// set the hook on rewind mode
pod_status = "rewind";
// mark this boulder as picked
this.picked = true;
// determining the slowdown according to boulder size
slowdown = Math.floor(this._width/5);
}
}
else {
// the boulder has been picked, so move it as the hook moves
this._x = hot_spot_x;
this._y = hot_spot_y;
// if the hook status changed to rotate
// (this means: if the hook took a boulder and pulled it out to surface...
if (pod_status == "rotate") {
// remove the boulder
this.removeMovieClip();
}
}
};
}
// placing the hook on stage
_root.attachMovie("pod","pod",_root.getNextHighestDepth(),{_x:250});
// creating an empty movie clip to draw the rope
_root.createEmptyMovieClip("rod",_root.getNextHighestDepth());
// this is the rotation direction and speed
rotation_dir = 2;
// hook initial status
pod_status = "rotate";
// slowdown malus
slowdown = 0;
// function the hook will execute at every frame
pod.onEnterFrame = function() {
// getting pod status
switch (pod_status) {
case "rotate" :
// if the status is rotate, just rotate the hook according to rotation_dir
this._rotation += rotation_dir;
if (this._rotation == 80 or this._rotation == -80) {
// invert rotation_dir if the hook reaches its minimum (or maximum) rotation allowed
rotation_dir *= -1;
}
break;
case "shoot" :
// the hook has ben shoot
// (re)set slowdown malus to zero
slowdown = 0;
// moving the hook using trigonometry
this._x += 10*Math.cos(dir);
this._y += 10*Math.sin(dir);
// determining the hot spot of the hook
// the hot spot is the lowest corner of the hook (that acts like an harpoon in this case)
hot_spot_x = this._x+40*Math.cos(dir);
hot_spot_y = this._y+40*Math.sin(dir);
// if the hot spot goes off the stage
if (hot_spot_y>400 or hot_spot_x<0 or hot_spot_x>500) {
// then rewind the hook
pod_status = "rewind";
}
// draw a line from the hook starting position to its actual position
// this will simulate the rope
rod.clear();
rod.lineStyle(1,0x000000);
rod.moveTo(250,0);
rod.lineTo(this._x,this._y);
break;
case "rewind" :
// rewinding the hook...
// it may seem a nonsense determining the hot spot now, but I need id
// to move the boulder (if I have any boulder attached to the hook)
hot_spot_x = this._x+40*Math.cos(dir);
hot_spot_y = this._y+40*Math.sin(dir);
// moving the hook with slowdown malus (if any)
this._x -= (10-slowdown)*Math.cos(dir);
this._y -= (10-slowdown)*Math.sin(dir);
// if the hook returns in its initial position...
if (this._y<0) {
// then reset its position and set its status to rotate
this._y = 0;
this._x = 250;
pod_status = "rotate";
}
// drawing a line as seen in shoot status
rod.clear();
rod.lineStyle(1,0x000000);
rod.moveTo(250,0);
rod.lineTo(this._x,this._y);
break;
}
};
// when the mouse is clicked...
_root.onMouseDown = function() {
// if the status is rotate...
if (pod_status == "rotate") {
// save hook heading and convert it to radians
dir = (pod._rotation+90)*0.0174532925;
// set pod status to shoot
pod_status = "shoot";
}
}; |
And this is the result
As you can see, the basics have been reproduced.
They can be easily customized to meet the unique requirements of your project.
19 Responses to “Create a Flash game like Gold Miner”
Leave a Reply
Trackbacks
-
Create a Flash game like Gold Miner - step 2 : Emanuele Feronato on
October 10th, 2008 4:02 pm
[...] received a lot of emails asking me to add left-right movement to my Gold Miner clone and requiring more information about manually placing the [...]
-
Triqui’s Picks #5 : Emanuele Feronato on
November 16th, 2009 1:43 pm
[...] difficulty: see something similar here. [...]
-
Ononmin Flash prototype : Emanuele Feronato - italian geek and PROgrammer on
December 22nd, 2009 6:20 pm
[...] To change the game a bit, in this version you can move the “mushroom” along the x axis with the mouse, and the launchable ball will move from left to right just like in Create a Flash game like Gold Miner. [...]
- Get up to $100,000 for your next Flash game with Mochi GAME Developer Fund
- Create a dynamic content animated footer ad for your site in just 9 jQuery lines – 17 lines version
- Sell sitelocked version of your Flash games and even .fla sources to Free Online Games
- Protect your work from ActionScript code theft with SWF Protector
- Create a dynamic content animated footer ad for your site in just 9 jQuery lines
- Understanding Box2D’s one-way platforms, aka CLOUDS
- Triqui MochiAds Arcade plugin for WordPress upgraded to 1.2
- Box2D Flash game creation tutorial – part 2
- 11 Flash isometric engines you can use in your games
- Monetize your Flash games with GamesChart
- Create a Lightbox effect only with CSS - no javascript needed
- Flash game creation tutorial - part 1
- Create a Flash Racing Game Tutorial
- Flash game creation tutorial - part 2
- Make a Flash game like Flash Element Tower Defense - Part 2
- Flash game creation tutorial - part 3
- Make a Flash game like Flash Element Tower Defense - Part 1
- Create a flash draw game like Line Rider or others - part 1
- Triqui MochiAds Arcade plugin for WordPress official page
- Create a flash artillery game - step 1
- Flash game creation tutorial – part 5.2 (4.88/5)
- Create a flash artillery game – step 1 (4.79/5)
- Create a Flash Racing Game Tutorial (4.76/5)
- Create a flash artillery game – step 2 (4.74/5)
- Create a survival horror game in Flash tutorial – part 1 (4.73/5)
- Creation of a Flash arcade site using WordPress – step 2 (4.73/5)
- Flash game creation tutorial – part 2 (4.71/5)
- Flash game creation tutorial – part 1 (4.70/5)
- Create a flash draw game like Line Rider or others – part 1 (4.69/5)
- Creation of a platform game with Flash – step 2 (4.68/5)


(29 votes, average: 4.62 out of 5)





Cool! I loved this game when I first played it :D
Very cool game idea!
hey really cool game…played it for 30mins+ and this is rare for me ;)
A million thanks Emanuele!
I’ll show you once I finish the game now.
Erv
Altho I was wondering how is it possible to add the Boulders manually and being able to move the base of the rope left n right.
this is awesome!!
This reminds me of Double Wire without the swinging. (DW)was AWESOME! but this is cool too.
This is great!
could you show how to also make lead boulders, like there are in the game?
I keep trying but it stuffs up.
thanks
I made a game based on this, but i have a problem… the boulders aren’t removed on the next frame (they tay tehre?!?!?) how to remove them?
@lolek,if you doing with frames you probably use bould_n.removeMovieClip();
Create some loop like
for (x=1; x<=boulders; x++)
{
[“bould_”+x}.removeMovieClip();
}
to clear stage or something…
or boulders may be in own “layer” then will be
boulders_ly.removeMovieClip()….
so many ways to do it, read help and this blog:)
Again, thanks for this great tutorial. I’m a newbie, so don’t consider this as criticising, I am merely trying to understand the code:
Wouldn’t it be better to determine the hotspot somewhere outside the switch, so it doesn’t have to be determined over and over?
hello.
can you send c# source code of this game to me?
fine thanks.
hello.
can you send c# code for this game to me?
fine thanks.
gr8 indeed……….
I wanted to ask what I needed to get and where I could get it in order to make games like these. Should I know about any specific programming languages in order to do this? Thanks for the help.
what about the stones? how you define them and make the hook go slower?