Skip to content

Commit f0224b7

Browse files
init
1 parent 8b6120d commit f0224b7

12 files changed

+429
-0
lines changed

package.json

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{
2+
"name": "application-name"
3+
, "version": "0.0.1"
4+
, "private": true
5+
, "dependencies": {
6+
"express": "2.5.8"
7+
, "jade": ">= 0.0.1"
8+
}
9+
}

public/click_flat.png

1.44 KB
Loading

public/flappyBids.html

+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<!DOCTYPE HTML>
2+
<html>
3+
<head>
4+
<title>Flappy Bids!</title>
5+
<style>
6+
body {
7+
margin: 0;
8+
padding: 0;
9+
background-color: #000000;
10+
}
11+
</style>
12+
<script src="phaser.min.js"></script>
13+
</head>
14+
<body>
15+
<script src="flappyBids.js"></script>
16+
</script>
17+
</body>
18+
</html>

public/flappyBids.js

+329
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,329 @@
1+
var game = new Phaser.Game(
2+
320 * 1.2,
3+
568 * 1.2,
4+
Phaser.AUTO,
5+
'',
6+
{ preload: preload,
7+
create: create,
8+
update: update
9+
});
10+
11+
var marvin;
12+
var chart;
13+
var gateGroup;
14+
var gateHeight = 130;
15+
var numLines = 5;
16+
var gaps = game.height/(numLines+1);
17+
var gateOffset = gateHeight*2;
18+
var speed = 180;
19+
var ground;
20+
//var startOffset = game.width*2;
21+
var startOffset = game.width*1.5;
22+
var gateFrequency = game.width/4*3;
23+
var gatePairs = [];
24+
var wallColliderWidth = 5;
25+
var downLineGFX ;
26+
var lineStartX = 40;
27+
var DEBUG = false;
28+
var climbStartOffset = gateFrequency/10;
29+
var leftMask;
30+
var scoreCounter;
31+
var score = 0;
32+
var justPassedWall = null;
33+
var passOffset = 10;
34+
35+
var startInfoText;
36+
37+
var dead = false;
38+
var started = false;
39+
40+
var root = "file://localhost/Users/eralpkaraduman/Documents/FlappyBids";
41+
42+
function preload() {
43+
game.load.image('marvin_gfx','marvin.png');
44+
game.load.image('click','click_flat.png');
45+
game.load.image('logo','logo.png');
46+
}
47+
48+
function create() {
49+
50+
game.world.setBounds(0, 0, game.width*3, game.height);
51+
game.stage.backgroundColor = '#FCFCFC';
52+
53+
downLineGFX = game.add.graphics(0,0);
54+
upLineGFX = game.add.graphics(0,0);
55+
56+
leftMask = game.add.graphics(0,0);
57+
leftMask.beginFill(0xFCFCFC);
58+
leftMask.drawRect(0,0,lineStartX,game.height);
59+
leftMask.endFill();
60+
61+
//lines
62+
var i=1;
63+
var lineGFX = game.add.graphics(0,0);
64+
lineGFX.lineStyle(1, 0xdddddd, 1);
65+
for(;i<=numLines;i++){
66+
67+
lineGFX.moveTo(lineStartX,gaps*i);
68+
lineGFX.lineTo(game.width, gaps*i);
69+
70+
var l_text = -(0.5*i)+2.5;
71+
if(l_text%1==0)l_text+=".0"
72+
var style = { font: "14px Arial", fill: "#dddddd", align: "center" };
73+
74+
var t = game.add.text(10, gaps*i, l_text, style);
75+
t.anchor.setTo(0, 0.5);
76+
77+
}
78+
79+
lineGFX.endFill();
80+
81+
//walls
82+
gateGroup = game.add.group();
83+
84+
85+
86+
// marvin
87+
marvin = game.add.sprite(0,0,"marvin_gfx");
88+
marvin.anchor.setTo(0.5,0.5);
89+
90+
marvin.y = game.height/2;
91+
marvin.x = game.width*0.25;
92+
marvin.name = "marvin";
93+
94+
ground = game.add.sprite(0,game.height-gaps,"ground");
95+
ground.width = game.width;
96+
ground.height = gaps;
97+
ground.body.immovable = true;
98+
if(DEBUG==false){
99+
ground.alpha = 0;
100+
}
101+
102+
game.input.onDown.add(onTap, this);
103+
104+
//start info
105+
106+
startInfoText = game.add.sprite(0,game.height-gaps,"click");
107+
startInfoText.anchor.setTo(0, 0.5);
108+
startInfoText.x = game.width/2;
109+
startInfoText.y = game.height/2;
110+
111+
var title_logo = game.add.sprite(gaps/2+45,gaps/2,"logo");
112+
title_logo.anchor.setTo(0.5,0.5);
113+
114+
var titleStyle = { font: "24px Arial", fill: "#686B7A", align: "left" };
115+
var title_text = game.add.text(100+45,gaps/2,"FLAPPY BIDS",titleStyle);
116+
title_text.anchor.setTo(0,0.5);
117+
118+
var scoreCounterStyle = { font: "42px Arial", fill: "#00CFB5", align: "center" };
119+
scoreCounter = game.add.text(100+45,gaps/2,"0",scoreCounterStyle);
120+
scoreCounter.x = game.width/2;
121+
scoreCounter.anchor.setTo(0.5,0.5);
122+
scoreCounter.y = 150;
123+
124+
resetGame();
125+
126+
}
127+
128+
function generateWalls(){
129+
130+
var oldPairs = gatePairs;
131+
gatePairs = [];
132+
for (var i = 0; i < 3; i++)
133+
{
134+
var gateY = randomGateY();
135+
136+
var pair;
137+
138+
if(oldPairs){
139+
var oldPair = oldPairs[i];
140+
if(oldPair!=null)pair = oldPair;
141+
}
142+
143+
if(oldPair!=null){
144+
pair = oldPair;
145+
146+
pair.up.x = startOffset+gateFrequency*i;
147+
pair.up.y = gateY.up;
148+
149+
pair.down.x = startOffset+gateFrequency*i;
150+
pair.down.y = gateY.down;
151+
152+
}else{
153+
pair = {};
154+
pair.up = gateGroup.create(startOffset+gateFrequency*i,gateY.up, 'gate');
155+
pair.down = gateGroup.create(startOffset+gateFrequency*i,gateY.down, 'gate');
156+
}
157+
158+
pair.up.anchor.setTo(0.5,1);
159+
pair.down.anchor.setTo(0.5,0);
160+
if(DEBUG==false){
161+
pair.up.alpha = 0;
162+
pair.down.alpha = 0;
163+
}
164+
pair.up.height = pair.down.height = game.height;
165+
pair.up.width = pair.down.width = wallColliderWidth;
166+
gatePairs.push(pair);
167+
}
168+
}
169+
170+
function onTap(){
171+
172+
if(started==false){
173+
startGame();
174+
jump();
175+
return;
176+
}
177+
178+
if(dead){
179+
180+
resetGame();
181+
182+
started = false;
183+
return;
184+
}
185+
186+
jump();
187+
188+
}
189+
190+
function resetGame(){
191+
generateWalls();
192+
resetMarvin();
193+
startInfoText.alpha = 1;
194+
setScore(0);
195+
scoreCounter.alpha = 0;
196+
197+
justPassedWall = null;
198+
}
199+
200+
function setScore(_score){
201+
score = _score;
202+
scoreCounter.setText(score);
203+
}
204+
205+
function resetMarvin(){
206+
marvin.y = game.height/2;
207+
marvin.x = game.width*0.25;
208+
marvin.body.velocity.y = 0;
209+
marvin.body.gravity.y = 0;
210+
}
211+
212+
function jump(){
213+
marvin.body.velocity.y = -400;
214+
}
215+
216+
function startGame(){
217+
218+
scoreCounter.alpha = 1;
219+
220+
startInfoText.alpha = 0;
221+
222+
marvin.body.gravity.y = 1350;
223+
224+
started = true;
225+
dead = false;
226+
}
227+
228+
function randomGateY(){
229+
230+
var minY = -game.height/5;
231+
var maxY = game.height/5;
232+
var rand = Math.random()*(maxY-minY)+minY;
233+
234+
var origin = game.height/2 + rand;
235+
236+
return {up:origin - gateHeight/2,
237+
down:origin + gateHeight/2};
238+
}
239+
240+
function update () {
241+
// collide?
242+
game.physics.collide(marvin,ground,hitWall,null,this);
243+
game.physics.overlap(marvin, gateGroup, hitWall, null, this);
244+
245+
// move gates
246+
if(!dead && started){
247+
gateGroup.forEach(updateGaps);
248+
}
249+
250+
if(gatePairs.length<=0)return;
251+
252+
var frontPairX = gatePairs[0].up.x;
253+
254+
if(frontPairX+passOffset<marvin.x && gatePairs[0].up != justPassedWall){
255+
justPassedWall = gatePairs[0].up;
256+
setScore(++score);
257+
}
258+
259+
var i=0;
260+
if((frontPairX - wallColliderWidth+climbStartOffset) < 0){
261+
262+
var newGatePairs = [];
263+
i=1;
264+
for(;i<gatePairs.length;i++){
265+
newGatePairs.push(gatePairs[i]);
266+
}
267+
var tailPairX = gatePairs[gatePairs.length-1].up.x;
268+
gatePairs[0].up.x = gatePairs[0].down.x = tailPairX+gateFrequency;
269+
var gateY = randomGateY();
270+
gatePairs[0].up.y = gateY.up;
271+
gatePairs[0].down.y = gateY.down;
272+
newGatePairs.push(gatePairs[0]);
273+
274+
gatePairs = newGatePairs;
275+
}
276+
277+
//draw lines
278+
downLineGFX.clear();
279+
downLineGFX.lineStyle(1, 0x00cfb5, 1);
280+
downLineGFX.moveTo(-10,game.height-gaps);
281+
282+
upLineGFX.clear();
283+
upLineGFX.lineStyle(1, 0x00cfb5, 1);
284+
upLineGFX.moveTo(-10,gaps);
285+
286+
i=0;
287+
for(;i<gatePairs.length;i++){
288+
var pair = gatePairs[i];
289+
290+
downLineGFX.lineTo(pair.down.x-climbStartOffset,game.height-gaps);
291+
downLineGFX.lineTo(pair.down.x,pair.down.y);
292+
downLineGFX.lineTo(pair.down.x+climbStartOffset,game.height-gaps);
293+
294+
upLineGFX.lineTo(pair.up.x-climbStartOffset,gaps);
295+
upLineGFX.lineTo(pair.up.x,pair.up.y);
296+
upLineGFX.lineTo(pair.up.x+climbStartOffset,gaps);
297+
298+
}
299+
downLineGFX.endFill();
300+
301+
i=0;
302+
for(;i<gatePairs.length;i++){
303+
var pair = gatePairs[i];
304+
downLineGFX.beginFill(0x00cfb5);
305+
downLineGFX.drawCircle(pair.down.x,pair.down.y,5);
306+
downLineGFX.drawCircle(pair.up.x,pair.up.y,5);
307+
downLineGFX.endFill();
308+
}
309+
310+
311+
312+
313+
}
314+
315+
function hitWall(){
316+
if(!started)return;
317+
if(dead)return;
318+
dead = true;
319+
320+
321+
322+
//console.log('hit');
323+
}
324+
325+
function updateGaps(gap){
326+
327+
gap.x -= (speed*game.time.elapsed/1000);
328+
329+
}

public/logo.png

66 KB
Loading

public/marvin.png

2.57 KB
Loading

public/phaser.min.js

+13
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

public/stylesheets/style.css

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
body {
2+
padding: 50px;
3+
font: 14px "Lucida Grande", Helvetica, Arial, sans-serif;
4+
}
5+
6+
a {
7+
color: #00B7FF;
8+
}

routes/index.js

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
2+
/*
3+
* GET home page.
4+
*/
5+
6+
exports.index = function(req, res){
7+
res.render('index', { title: 'Express' })
8+
};

0 commit comments

Comments
 (0)