2
2
First time? Check out the tutorial game:
3
3
https://sprig.hackclub.com/gallery/getting_started
4
4
5
- @title : Flappy Bird with Gravity and Sound
5
+ @title : Flappy Bird with Animated Bird, Gravity and Sound
6
6
@tags : []
7
7
@author : Yug Khandelwal
8
- @addedOn : 2024-12-30
8
+ @addedOn : 2025-1-19
9
9
*/
10
10
11
- const player = "p" ;
11
+ const flapUp = "u" ;
12
+ const flapDown = "d"
12
13
const obstacle = "o" ;
13
14
const background = "b" ;
14
15
const gameOverMelody = tune `
@@ -47,41 +48,61 @@ const gameOverMelody = tune`
47
48
const keyTune = tune `
48
49
500: G4-500,
49
50
15500` ;
51
+
52
+ const bird = ( ) => getFirst ( "u" ) || getFirst ( "d" ) ;
53
+
50
54
setLegend (
51
- [ player , bitmap `
52
- ................
55
+ [ flapUp , bitmap `
53
56
................
54
57
................
55
- .....00000......
56
- ...00666600.....
57
- 000206666060....
58
- 0222206660250...
59
- 0666606660250...
60
- .0660666600000..
61
- ..0006660999990.
58
+ 00..............
59
+ 220..00000......
60
+ 62200666600.....
61
+ 062206666060....
62
+ 0662206660250...
63
+ .066606660250...
64
+ ..060666600000..
65
+ ...006660999990.
62
66
....0666099990..
63
67
.....006600000..
64
68
.......000......
65
69
................
66
70
................
71
+ ................` ] ,
72
+ [ flapDown , bitmap `
73
+ ................
74
+ ................
75
+ ................
76
+ ....00000.......
77
+ ..00666600......
78
+ .0206666060.....
79
+ 022206660250....
80
+ 026606660250....
81
+ 2260666600000...
82
+ 26606660999990..
83
+ 6000666099990...
84
+ 60..006600000...
85
+ 0.....000.......
86
+ ................
87
+ ................
67
88
................` ] ,
68
89
[ obstacle , bitmap `
69
90
LLLLLLLLLLLLLLLL
91
+ L333L333333L333L
92
+ L333L333333L333L
93
+ L333L333333L333L
70
94
LLLLLLLLLLLLLLLL
95
+ L3333333L333333L
96
+ L3333333L333333L
97
+ L3333333L333333L
71
98
LLLLLLLLLLLLLLLL
99
+ L333L333333L333L
100
+ L333L333333L333L
101
+ L333L333333L333L
72
102
LLLLLLLLLLLLLLLL
73
- LLLLLLLLLLLLLLLL
74
- LLLLLLLLLLLLLLLL
75
- LLLLLLLLLLLLLLLL
76
- LLLLLLLLLLLLLLLL
77
- LLLLLLLLLLLLLLLL
78
- LLLLLLLLLLLLLLLL
79
- LLLLLLLLLLLLLLLL
80
- LLLLLLLLLLLLLLLL
81
- LLLLLLLLLLLLLLLL
82
- LLLLLLLLLLLLLLLL
83
- LLLLLLLLLLLLLLLL
84
- LLLLLLLLLLLLLLLL` ] ,
103
+ L3333333L333333L
104
+ L3333333L333333L
105
+ L3333333L333333L` ] ,
85
106
[ background , bitmap `
86
107
7777777777777777
87
108
7777777777777777
@@ -107,7 +128,7 @@ const levels = [
107
128
.......o..
108
129
.......o..
109
130
.......o..
110
- p .........
131
+ u .........
111
132
.......o..
112
133
.......o..
113
134
.......o..`
@@ -116,24 +137,26 @@ p.........
116
137
setMap ( levels [ level ] ) ;
117
138
setBackground ( background ) ;
118
139
setPushables ( {
119
- [ player ] : [ ]
140
+ [ flapUp ] : [ ] ,
141
+ [ flapDown ] : [ ] ,
120
142
} ) ;
121
143
var isGameOver = false ;
122
144
var speed = 250 ;
123
145
var gap = 4 ;
124
146
var count = 0 ;
125
147
var score = 0 ;
126
148
onInput ( "s" , ( ) => {
149
+ const bird = ( ) => getFirst ( "u" ) || getFirst ( "d" ) ;
127
150
if ( ! isGameOver ) {
128
151
playTune ( keyTune ) ;
129
- getFirst ( player ) . y += 1 ;
152
+ bird ( ) . y += 1 ;
130
153
}
131
154
} ) ;
132
-
133
155
onInput ( "w" , ( ) => {
156
+ const bird = ( ) => getFirst ( "u" ) || getFirst ( "d" ) ;
134
157
if ( ! isGameOver ) {
135
158
playTune ( keyTune ) ;
136
- getFirst ( player ) . y -= 1 ;
159
+ bird ( ) . y -= 1 ;
137
160
}
138
161
} ) ;
139
162
@@ -149,12 +172,11 @@ function generateObstacle() {
149
172
150
173
function gameLoop ( ) {
151
174
addText ( `Score: ${ score } ` , { x : 10 , y : 1 , color : color `2` } )
175
+
152
176
if ( count % 4 == 0 ) {
153
- getAll ( player ) . forEach ( ( p ) => {
154
- if ( p . y == 8 ) { } else {
155
- p . y += 1 ;
156
- } ;
157
- } ) ;
177
+ if ( bird ( ) . y == 8 ) { } else {
178
+ bird ( ) . y += 1 ;
179
+ } ;
158
180
}
159
181
getAll ( obstacle ) . forEach ( ( o ) => {
160
182
if ( o . x == 0 ) {
@@ -166,10 +188,13 @@ function gameLoop() {
166
188
if ( getAll ( obstacle ) . length == 0 ) {
167
189
generateObstacle ( ) ;
168
190
}
169
- if ( getFirst ( obstacle ) . x == getFirst ( player ) . x && getFirst ( player ) . y != gap ) {
191
+ bird ( ) . type = [ flapUp , flapDown ] [ count % 2 ] ;
192
+ if ( getFirst ( obstacle ) . x == bird ( ) . x && bird ( ) . y != gap ) {
170
193
gameOver ( ) ;
171
194
}
172
195
count += 1 ;
196
+
197
+
173
198
speed -= ( 250 - speed ) ;
174
199
if ( ! isGameOver ) {
175
200
setTimeout ( gameLoop , speed ) ;
0 commit comments