Ring Documentation, Release 1.5.2
# The Ring Standard Library
# Game Engine for 2D Games
# 2016, Mahmoud Fayed <msfclipper@yahoo.com>
oGameState = NULL
load "gameengine.ring"
func main
oGame = New Game
while true
oGameState = new GameState
oGame {
title = "Stars Fighter!"
sprite
{
file = "images/menu1.jpg"
x = 0 y=0 width=800 height = 600 scaled = true animate = false
keypress = func ogame,oself,nKey {
if nkey = key_esc or nKey = GE_AC_BACK
ogame.shutdown()
but nKey = key_space
oGameState.startplay=true
ogame.shutdown=true
ok
}
mouse = func ogame,oself,nType,aMouseList {
if nType = GE_MOUSE_UP
oGameState.startplay=true
ogame.shutdown=true
ok
}
}
text {
animate = false
size = 35
file = "fonts/pirulen.ttf"
text = "Stars Fighter"
x = 10 y=50
}
text {
animate = false
size = 25
file = "fonts/pirulen.ttf"
text = "Version 1.0"
x = 80 y=100
}
text {
animate = false
size = 16
file = "fonts/pirulen.ttf"
text = "(C) 2016, Mahmoud Fayed"
x = 45 y=140
}
52.27. Stars Fighter Game 465
Ring Documentation, Release 1.5.2
text {
animate = false
size = 25
file = "fonts/pirulen.ttf"
text = "Press Space to start"
x = 190 y=470
}
text {
animate = false
size = 20
file = "fonts/pirulen.ttf"
text = "Press Esc to Exit"
x = 260 y=510
}
Sound {
file = "sound/music1.wav"
}
}
if oGameState.startplay
oGame.refresh()
playstart(oGame)
oGame.refresh()
ok
end
func playstart oGame
oSound = New Sound {
file = "sound/music2.wav"
}
while true
play(oGame)
if ogame.shutdown = true and oGameState.value = 0
exit
ok
ogame.refresh()
end
oSound.Delete()
func play oGame
oGame
{
FPS = 60
FixedFPS = 120
title = "Stars Fighter!"
sprite
{
file = "images/stars.jpg"
x = 0
y = 0
point = -370
direction = ge_direction_dec
type = ge_type_background
52.27. Stars Fighter Game 466
Ring Documentation, Release 1.5.2
state = func ogame,oself {
oself {
if x < -350
direction = ge_direction_inc
point = 370
but x = 0 and direction = ge_direction_inc
direction = ge_direction_dec
point = -370
ok
}
}
}
sprite
{
file = "images/player.png"
transparent = true
type = ge_type_player
x = 400 y =400 width=100 height=100
animate=false move=true Scaled=true
mouse = func ogame,oself,nType,aMouseList {
if not ( aMouseList[GE_MOUSE_X] >= oSelf.x and
aMouseList[GE_MOUSE_X] <= oSelf.x+oSelf.width and
aMouseList[GE_MOUSE_Y] >= oself.y and
aMouseList[GE_MOUSE_Y] <= oSelf.y+oSelf.height )
if nType = GE_MOUSE_DOWN
if aMouseList[1] < oSelf.X # left
oSelf.X -= 100
else
oSelf.X += 100
ok
if aMouseList[2] < oSelf.Y # up
oSelf.Y -= 100
else
oSelf.Y += 100
ok
ok
else
if nType = GE_MOUSE_UP
cFunc = oself.keypress
call cFunc(oGame,oSelf,Key_Space)
ok
ok
}
keypress = func oGame,oself,nkey {
if nkey = key_space
ogame {
sprite {
type = ge_type_fire
file = "images/rocket.png"
transparent = true
x = oself.x + 30
y = oself.y - 30
width = 30
height = 30
point = -30
52.27. Stars Fighter Game 467
Ring Documentation, Release 1.5.2
nstep = 20
direction = ge_direction_decvertical
state = func oGame,oSelf {
for x in oGame.aObjects
if x.type = ge_type_enemy
if oself.x >= x.x and oself.y >= x.y and
oself.x <= x.x + x.width and
oself.y <= x.y + x.height
showfire(oGame,x.x+40,x.y+40)
ogame.remove(x.nindex)
oGameState.score+=10
oGameState.enemies--
checkwin(oGame)
exit
ok
ok
next
}
}
}
but nkey = key_esc or nKey = GE_AC_BACK ogame.shutdown()
ok
}
state = func oGame,oSelf {
oself {
if x < 0 x = 0 ok
if y < 0 y = 0 ok
if x > ogame.screen_w-width x= ogame.screen_w - width ok
if y > ogame.screen_h-height y=ogame.screen_h-height ok
}
}
}
for g = 1 to oGameState.enemies
sprite
{
type = ge_type_enemy
file = "images/enemy.png"
transparent = true
x = g*random(50) y =g width=100 height=100
animate=true Scaled=true
direction = ge_direction_random
state = func oGame,oSelf {
oself {
if x < 0 x = 0 ok
if y < 0 y = 0 ok
if x > ogame.screen_w-width x= ogame.screen_w - width ok
if y > ogame.screen_h-height y=ogame.screen_h-height ok
}
if random(100) = 1
ogame {
sprite {
type = ge_type_fire
file = "images/rocket2.png"
transparent = true
x = oself.x + 30
y = oself.y + oself.height+ 30
width = 30
height = 30
52.27. Stars Fighter Game 468
Ring Documentation, Release 1.5.2
point = ogame.screen_h+30
nstep = 10
direction = ge_direction_incvertical
state = func oGame,oSelf {
x = oGame.aObjects[oGameState.playerindex]
if oself.x >= x.x and oself.y >= x.y and
oself.x <= x.x + x.width and
oself.y <= x.y + x.height
if oGameState.value > 0
oGameState.value-=10
ok
ogame.remove(oself.nindex)
checkgameover(oGame)
ok
}
}
}
ok
}
}
next
text {
size = 30
file = "fonts/pirulen.ttf"
text = "Destroy All Enemies!"
nstep = 3
color = GE_COLOR_GREEN
x = 100 y=50
direction = ge_direction_incvertical
point = 500
}
text {
animate = false
point = 400
size = 30
file = "fonts/pirulen.ttf"
text = "Score : " + oGameState.score
x = 500 y=10
state = func oGame,oSelf { oSelf { text = "Score : " + oGameState.score } }
}
text {
animate = false
point = 400
size = 30
file = "fonts/pirulen.ttf"
text = "Energy : " + oGameState.value
x = 500 y=50
state = func oGame,oSelf { oSelf { text = "Energy : " + oGameState.value } }
}
text {
animate = false
point = 400
size = 30
file = "fonts/pirulen.ttf"
text = "Level : " + oGameState.level
x = 500 y=90
}
}
52.27. Stars Fighter Game 469
Ring Documentation, Release 1.5.2
func checkwin ogame
if oGameState.gameresult return ok
if oGameState.enemies = 0
oGameState.gameresult = true
oGame {
if oGameState.level < 30
text {
point = 400
size = 30
file = "fonts/pirulen.ttf"
text = "Level Completed!"
nStep = 3
x = 500 y=10
state = func ogame,oself {
if oself.y >= 400
ogame.shutdown = true
oGameState.level++
oGameState.enemies = oGameState.level
oGameState.gameresult = false
ok
}
}
else
text {
point = 400
size = 30
nStep = 3
file = "fonts/pirulen.ttf"
text = "You Win !!!"
x = 500 y=10
state = func ogame,oself {
if oself.y >= 400
ogame.shutdown = true
oGameState.value = 0
ok
}
}
ok
}
ok
func checkgameover ogame
if oGameState.gameresult return ok
if oGameState.value <= 0
oGameState.gameresult = true
oGame {
text {
point = 400
size = 30
nStep = 3
file = "fonts/pirulen.ttf"
text = "Game Over !!!"
x = 500 y=10
state = func ogame,oself {
if oself.y >= 400
ogame.shutdown = true
ok
52.27. Stars Fighter Game 470
Ring Documentation, Release 1.5.2
}
}
}
showfire(oGame,oGame.aObjects[oGameState.PlayerIndex].x+40,
oGame.aObjects[oGameState.PlayerIndex].y+40)
oGame.aObjects[oGameState.PlayerIndex].enabled = false
oGame.remove(oGameState.PlayerIndex)
ok
func showfire oGame,nX,nY
oGame {
animate {
file = "images/fire.png"
x = nX
y = nY
framewidth = 40
height = 42
nStep = 3
transparent = true
state = func oGame,oSelf {
oSelf {
nStep--
if nStep = 0
nStep = 3
if frame < 13
frame++
else
frame=1
oGame.remove(oself.nIndex)
ok
ok
}
}
}
}
class gamestate
score = 0
level = 1
enemies = 1
value = 100
playerindex = 2
gameresult = false
startplay=false
Screen Shot:
52.27. Stars Fighter Game 471
Ring Documentation, Release 1.5.2
52.28 Flappy Bird 3000 Game
The Flappy Bird 3000 Game source code
# The Ring Standard Library
# Game Engine for 2D Games
# 2016, Mahmoud Fayed <msfclipper@yahoo.com>
oGameState = NULL
Load "gameengine.ring"
func main
oGame = New Game
while true
oGameState = New GameState
oGame {
52.28. Flappy Bird 3000 Game 472
Ring Documentation, Release 1.5.2
title = "Flappy Bird 3000"
sprite
{
file = "images/fbback.png"
x = 0 y=0 width=800 height = 600 scaled = true animate = false
keypress = func ogame,oself,nKey {
if nkey = key_esc or nKey = GE_AC_BACK
ogame.shutdown()
but nKey = key_space
oGameState.startplay=true
ogame.shutdown=true
ok
}
mouse = func ogame,oself,nType,aMouseList {
if nType = GE_MOUSE_UP
cFunc = oself.keypress
call cFunc(oGame,oSelf,Key_Space)
ok
}
}
text {
animate = false
size = 35
file = "fonts/pirulen.ttf"
text = "Flappy Bird 3000"
x = 150 y=50
}
text {
animate = false
size = 25
file = "fonts/pirulen.ttf"
text = "Version 1.0"
x = 280 y=100
}
text {
animate = false
size = 16
file = "fonts/pirulen.ttf"
text = "(C) 2016, Mahmoud Fayed"
x = 245 y=140
}
text {
animate = false
size = 25
file = "fonts/pirulen.ttf"
text = "To Win Get Score = 3000"
x = 150 y=270
}
text {
animate = false
size = 25
file = "fonts/pirulen.ttf"
text = "Press Space to start"
x = 190 y=470
}
text {
52.28. Flappy Bird 3000 Game 473
Ring Documentation, Release 1.5.2
animate = false
size = 20
file = "fonts/pirulen.ttf"
text = "Press Esc to Exit"
x = 260 y=510
}
animate {
file = "images/fbbird.png"
x = 200
y = 200
framewidth = 20
scaled = true
height = 50
width = 50
nStep = 3
transparent = true
animate = true
direction = ge_direction_random
state = func oGame,oSelf {
oSelf {
nStep--
if nStep = 0
nStep = 3
if frame < 3
frame++
else
frame=1
ok
ok
if x <= 0 x=0 ok
if y <= 0 y=0 ok
if x >= 750 x= 750 ok
if y > 550 y=550 ok
}
}
}
Sound {
file = "sound/music2.wav"
}
}
if oGameState.startplay
oGame.refresh()
playstart(oGame)
oGame.refresh()
ok
end
func playstart oGame
oGame {
FPS = 60
FixedFPS = 120
Title = "Flappy Bird 3000"
Sprite {
52.28. Flappy Bird 3000 Game 474

More Related Content

PDF
The Ring programming language version 1.6 book - Part 53 of 189
PDF
The Ring programming language version 1.8 book - Part 57 of 202
PDF
The Ring programming language version 1.5.4 book - Part 51 of 185
PDF
The Ring programming language version 1.5.1 book - Part 49 of 180
PDF
The Ring programming language version 1.4 book - Part 15 of 30
PDF
The Ring programming language version 1.2 book - Part 38 of 84
PDF
The Ring programming language version 1.4.1 book - Part 15 of 31
PDF
The Ring programming language version 1.5.2 book - Part 51 of 181
The Ring programming language version 1.6 book - Part 53 of 189
The Ring programming language version 1.8 book - Part 57 of 202
The Ring programming language version 1.5.4 book - Part 51 of 185
The Ring programming language version 1.5.1 book - Part 49 of 180
The Ring programming language version 1.4 book - Part 15 of 30
The Ring programming language version 1.2 book - Part 38 of 84
The Ring programming language version 1.4.1 book - Part 15 of 31
The Ring programming language version 1.5.2 book - Part 51 of 181

What's hot (20)

PDF
The Ring programming language version 1.6 book - Part 54 of 189
PDF
The Ring programming language version 1.5.4 book - Part 52 of 185
PDF
The Ring programming language version 1.7 book - Part 55 of 196
PDF
The Ring programming language version 1.9 book - Part 61 of 210
PDF
The Ring programming language version 1.9 book - Part 62 of 210
PDF
The Ring programming language version 1.3 book - Part 42 of 88
PDF
The Ring programming language version 1.10 book - Part 62 of 212
PDF
The Ring programming language version 1.5.3 book - Part 61 of 184
PDF
The Ring programming language version 1.3 book - Part 41 of 88
PDF
The Ring programming language version 1.7 book - Part 56 of 196
PDF
The Ring programming language version 1.5.3 book - Part 62 of 184
PDF
The Ring programming language version 1.5 book - Part 9 of 31
PDF
The Ring programming language version 1.10 book - Part 63 of 212
PDF
The Ring programming language version 1.8 book - Part 58 of 202
PDF
The Ring programming language version 1.2 book - Part 40 of 84
PDF
The Ring programming language version 1.5.1 book - Part 50 of 180
PDF
The Ring programming language version 1.2 book - Part 39 of 84
PDF
The Ring programming language version 1.9 book - Part 60 of 210
PDF
The Ring programming language version 1.3 book - Part 40 of 88
PDF
The Ring programming language version 1.7 book - Part 57 of 196
The Ring programming language version 1.6 book - Part 54 of 189
The Ring programming language version 1.5.4 book - Part 52 of 185
The Ring programming language version 1.7 book - Part 55 of 196
The Ring programming language version 1.9 book - Part 61 of 210
The Ring programming language version 1.9 book - Part 62 of 210
The Ring programming language version 1.3 book - Part 42 of 88
The Ring programming language version 1.10 book - Part 62 of 212
The Ring programming language version 1.5.3 book - Part 61 of 184
The Ring programming language version 1.3 book - Part 41 of 88
The Ring programming language version 1.7 book - Part 56 of 196
The Ring programming language version 1.5.3 book - Part 62 of 184
The Ring programming language version 1.5 book - Part 9 of 31
The Ring programming language version 1.10 book - Part 63 of 212
The Ring programming language version 1.8 book - Part 58 of 202
The Ring programming language version 1.2 book - Part 40 of 84
The Ring programming language version 1.5.1 book - Part 50 of 180
The Ring programming language version 1.2 book - Part 39 of 84
The Ring programming language version 1.9 book - Part 60 of 210
The Ring programming language version 1.3 book - Part 40 of 88
The Ring programming language version 1.7 book - Part 57 of 196

Similar to The Ring programming language version 1.5.2 book - Part 50 of 181 (16)

PDF
The Ring programming language version 1.5.3 book - Part 60 of 184
PDF
The Ring programming language version 1.5.3 book - Part 50 of 184
PDF
The Ring programming language version 1.5.4 book - Part 50 of 185
PDF
The Ring programming language version 1.10 book - Part 61 of 212
PDF
The Ring programming language version 1.7 book - Part 54 of 196
PDF
The Ring programming language version 1.2 book - Part 37 of 84
PDF
The Ring programming language version 1.3 book - Part 39 of 88
PDF
The Ring programming language version 1.8 book - Part 56 of 202
PDF
The Ring programming language version 1.5.3 book - Part 59 of 184
PDF
The Ring programming language version 1.5.3 book - Part 49 of 184
PDF
The Ring programming language version 1.5.1 book - Part 48 of 180
PDF
The Ring programming language version 1.10 book - Part 60 of 212
PDF
The Ring programming language version 1.6 book - Part 51 of 189
PDF
The Ring programming language version 1.5.2 book - Part 48 of 181
PDF
The Ring programming language version 1.9 book - Part 59 of 210
PDF
The Ring programming language version 1.5.4 book - Part 49 of 185
The Ring programming language version 1.5.3 book - Part 60 of 184
The Ring programming language version 1.5.3 book - Part 50 of 184
The Ring programming language version 1.5.4 book - Part 50 of 185
The Ring programming language version 1.10 book - Part 61 of 212
The Ring programming language version 1.7 book - Part 54 of 196
The Ring programming language version 1.2 book - Part 37 of 84
The Ring programming language version 1.3 book - Part 39 of 88
The Ring programming language version 1.8 book - Part 56 of 202
The Ring programming language version 1.5.3 book - Part 59 of 184
The Ring programming language version 1.5.3 book - Part 49 of 184
The Ring programming language version 1.5.1 book - Part 48 of 180
The Ring programming language version 1.10 book - Part 60 of 212
The Ring programming language version 1.6 book - Part 51 of 189
The Ring programming language version 1.5.2 book - Part 48 of 181
The Ring programming language version 1.9 book - Part 59 of 210
The Ring programming language version 1.5.4 book - Part 49 of 185

More from Mahmoud Samir Fayed (20)

PDF
The Ring programming language version 1.10 book - Part 212 of 212
PDF
The Ring programming language version 1.10 book - Part 211 of 212
PDF
The Ring programming language version 1.10 book - Part 210 of 212
PDF
The Ring programming language version 1.10 book - Part 208 of 212
PDF
The Ring programming language version 1.10 book - Part 207 of 212
PDF
The Ring programming language version 1.10 book - Part 205 of 212
PDF
The Ring programming language version 1.10 book - Part 206 of 212
PDF
The Ring programming language version 1.10 book - Part 204 of 212
PDF
The Ring programming language version 1.10 book - Part 203 of 212
PDF
The Ring programming language version 1.10 book - Part 202 of 212
PDF
The Ring programming language version 1.10 book - Part 201 of 212
PDF
The Ring programming language version 1.10 book - Part 200 of 212
PDF
The Ring programming language version 1.10 book - Part 199 of 212
PDF
The Ring programming language version 1.10 book - Part 198 of 212
PDF
The Ring programming language version 1.10 book - Part 197 of 212
PDF
The Ring programming language version 1.10 book - Part 196 of 212
PDF
The Ring programming language version 1.10 book - Part 195 of 212
PDF
The Ring programming language version 1.10 book - Part 194 of 212
PDF
The Ring programming language version 1.10 book - Part 193 of 212
PDF
The Ring programming language version 1.10 book - Part 192 of 212
The Ring programming language version 1.10 book - Part 212 of 212
The Ring programming language version 1.10 book - Part 211 of 212
The Ring programming language version 1.10 book - Part 210 of 212
The Ring programming language version 1.10 book - Part 208 of 212
The Ring programming language version 1.10 book - Part 207 of 212
The Ring programming language version 1.10 book - Part 205 of 212
The Ring programming language version 1.10 book - Part 206 of 212
The Ring programming language version 1.10 book - Part 204 of 212
The Ring programming language version 1.10 book - Part 203 of 212
The Ring programming language version 1.10 book - Part 202 of 212
The Ring programming language version 1.10 book - Part 201 of 212
The Ring programming language version 1.10 book - Part 200 of 212
The Ring programming language version 1.10 book - Part 199 of 212
The Ring programming language version 1.10 book - Part 198 of 212
The Ring programming language version 1.10 book - Part 197 of 212
The Ring programming language version 1.10 book - Part 196 of 212
The Ring programming language version 1.10 book - Part 195 of 212
The Ring programming language version 1.10 book - Part 194 of 212
The Ring programming language version 1.10 book - Part 193 of 212
The Ring programming language version 1.10 book - Part 192 of 212

Recently uploaded (20)

PDF
NewMind AI Weekly Chronicles – August ’25 Week IV
PDF
CCUS-as-the-Missing-Link-to-Net-Zero_AksCurious.pdf
PPTX
AI-driven Assurance Across Your End-to-end Network With ThousandEyes
PDF
A hybrid framework for wild animal classification using fine-tuned DenseNet12...
PDF
Transform-Your-Factory-with-AI-Driven-Quality-Engineering.pdf
PDF
CEH Module 2 Footprinting CEH V13, concepts
PPTX
Presentation - Principles of Instructional Design.pptx
PDF
ment.tech-Siri Delay Opens AI Startup Opportunity in 2025.pdf
PDF
Human Computer Interaction Miterm Lesson
PPTX
Report in SIP_Distance_Learning_Technology_Impact.pptx
PPTX
How to use fields_get method in Odoo 18
PDF
IT-ITes Industry bjjbnkmkhkhknbmhkhmjhjkhj
PDF
SaaS reusability assessment using machine learning techniques
PDF
Decision Optimization - From Theory to Practice
PDF
The-2025-Engineering-Revolution-AI-Quality-and-DevOps-Convergence.pdf
PDF
Build Real-Time ML Apps with Python, Feast & NoSQL
PDF
CXOs-Are-you-still-doing-manual-DevOps-in-the-age-of-AI.pdf
PDF
Examining Bias in AI Generated News Content.pdf
PDF
Rapid Prototyping: A lecture on prototyping techniques for interface design
PPTX
Build automations faster and more reliably with UiPath ScreenPlay
NewMind AI Weekly Chronicles – August ’25 Week IV
CCUS-as-the-Missing-Link-to-Net-Zero_AksCurious.pdf
AI-driven Assurance Across Your End-to-end Network With ThousandEyes
A hybrid framework for wild animal classification using fine-tuned DenseNet12...
Transform-Your-Factory-with-AI-Driven-Quality-Engineering.pdf
CEH Module 2 Footprinting CEH V13, concepts
Presentation - Principles of Instructional Design.pptx
ment.tech-Siri Delay Opens AI Startup Opportunity in 2025.pdf
Human Computer Interaction Miterm Lesson
Report in SIP_Distance_Learning_Technology_Impact.pptx
How to use fields_get method in Odoo 18
IT-ITes Industry bjjbnkmkhkhknbmhkhmjhjkhj
SaaS reusability assessment using machine learning techniques
Decision Optimization - From Theory to Practice
The-2025-Engineering-Revolution-AI-Quality-and-DevOps-Convergence.pdf
Build Real-Time ML Apps with Python, Feast & NoSQL
CXOs-Are-you-still-doing-manual-DevOps-in-the-age-of-AI.pdf
Examining Bias in AI Generated News Content.pdf
Rapid Prototyping: A lecture on prototyping techniques for interface design
Build automations faster and more reliably with UiPath ScreenPlay

The Ring programming language version 1.5.2 book - Part 50 of 181

  • 1. Ring Documentation, Release 1.5.2 # The Ring Standard Library # Game Engine for 2D Games # 2016, Mahmoud Fayed <[email protected]> oGameState = NULL load "gameengine.ring" func main oGame = New Game while true oGameState = new GameState oGame { title = "Stars Fighter!" sprite { file = "images/menu1.jpg" x = 0 y=0 width=800 height = 600 scaled = true animate = false keypress = func ogame,oself,nKey { if nkey = key_esc or nKey = GE_AC_BACK ogame.shutdown() but nKey = key_space oGameState.startplay=true ogame.shutdown=true ok } mouse = func ogame,oself,nType,aMouseList { if nType = GE_MOUSE_UP oGameState.startplay=true ogame.shutdown=true ok } } text { animate = false size = 35 file = "fonts/pirulen.ttf" text = "Stars Fighter" x = 10 y=50 } text { animate = false size = 25 file = "fonts/pirulen.ttf" text = "Version 1.0" x = 80 y=100 } text { animate = false size = 16 file = "fonts/pirulen.ttf" text = "(C) 2016, Mahmoud Fayed" x = 45 y=140 } 52.27. Stars Fighter Game 465
  • 2. Ring Documentation, Release 1.5.2 text { animate = false size = 25 file = "fonts/pirulen.ttf" text = "Press Space to start" x = 190 y=470 } text { animate = false size = 20 file = "fonts/pirulen.ttf" text = "Press Esc to Exit" x = 260 y=510 } Sound { file = "sound/music1.wav" } } if oGameState.startplay oGame.refresh() playstart(oGame) oGame.refresh() ok end func playstart oGame oSound = New Sound { file = "sound/music2.wav" } while true play(oGame) if ogame.shutdown = true and oGameState.value = 0 exit ok ogame.refresh() end oSound.Delete() func play oGame oGame { FPS = 60 FixedFPS = 120 title = "Stars Fighter!" sprite { file = "images/stars.jpg" x = 0 y = 0 point = -370 direction = ge_direction_dec type = ge_type_background 52.27. Stars Fighter Game 466
  • 3. Ring Documentation, Release 1.5.2 state = func ogame,oself { oself { if x < -350 direction = ge_direction_inc point = 370 but x = 0 and direction = ge_direction_inc direction = ge_direction_dec point = -370 ok } } } sprite { file = "images/player.png" transparent = true type = ge_type_player x = 400 y =400 width=100 height=100 animate=false move=true Scaled=true mouse = func ogame,oself,nType,aMouseList { if not ( aMouseList[GE_MOUSE_X] >= oSelf.x and aMouseList[GE_MOUSE_X] <= oSelf.x+oSelf.width and aMouseList[GE_MOUSE_Y] >= oself.y and aMouseList[GE_MOUSE_Y] <= oSelf.y+oSelf.height ) if nType = GE_MOUSE_DOWN if aMouseList[1] < oSelf.X # left oSelf.X -= 100 else oSelf.X += 100 ok if aMouseList[2] < oSelf.Y # up oSelf.Y -= 100 else oSelf.Y += 100 ok ok else if nType = GE_MOUSE_UP cFunc = oself.keypress call cFunc(oGame,oSelf,Key_Space) ok ok } keypress = func oGame,oself,nkey { if nkey = key_space ogame { sprite { type = ge_type_fire file = "images/rocket.png" transparent = true x = oself.x + 30 y = oself.y - 30 width = 30 height = 30 point = -30 52.27. Stars Fighter Game 467
  • 4. Ring Documentation, Release 1.5.2 nstep = 20 direction = ge_direction_decvertical state = func oGame,oSelf { for x in oGame.aObjects if x.type = ge_type_enemy if oself.x >= x.x and oself.y >= x.y and oself.x <= x.x + x.width and oself.y <= x.y + x.height showfire(oGame,x.x+40,x.y+40) ogame.remove(x.nindex) oGameState.score+=10 oGameState.enemies-- checkwin(oGame) exit ok ok next } } } but nkey = key_esc or nKey = GE_AC_BACK ogame.shutdown() ok } state = func oGame,oSelf { oself { if x < 0 x = 0 ok if y < 0 y = 0 ok if x > ogame.screen_w-width x= ogame.screen_w - width ok if y > ogame.screen_h-height y=ogame.screen_h-height ok } } } for g = 1 to oGameState.enemies sprite { type = ge_type_enemy file = "images/enemy.png" transparent = true x = g*random(50) y =g width=100 height=100 animate=true Scaled=true direction = ge_direction_random state = func oGame,oSelf { oself { if x < 0 x = 0 ok if y < 0 y = 0 ok if x > ogame.screen_w-width x= ogame.screen_w - width ok if y > ogame.screen_h-height y=ogame.screen_h-height ok } if random(100) = 1 ogame { sprite { type = ge_type_fire file = "images/rocket2.png" transparent = true x = oself.x + 30 y = oself.y + oself.height+ 30 width = 30 height = 30 52.27. Stars Fighter Game 468
  • 5. Ring Documentation, Release 1.5.2 point = ogame.screen_h+30 nstep = 10 direction = ge_direction_incvertical state = func oGame,oSelf { x = oGame.aObjects[oGameState.playerindex] if oself.x >= x.x and oself.y >= x.y and oself.x <= x.x + x.width and oself.y <= x.y + x.height if oGameState.value > 0 oGameState.value-=10 ok ogame.remove(oself.nindex) checkgameover(oGame) ok } } } ok } } next text { size = 30 file = "fonts/pirulen.ttf" text = "Destroy All Enemies!" nstep = 3 color = GE_COLOR_GREEN x = 100 y=50 direction = ge_direction_incvertical point = 500 } text { animate = false point = 400 size = 30 file = "fonts/pirulen.ttf" text = "Score : " + oGameState.score x = 500 y=10 state = func oGame,oSelf { oSelf { text = "Score : " + oGameState.score } } } text { animate = false point = 400 size = 30 file = "fonts/pirulen.ttf" text = "Energy : " + oGameState.value x = 500 y=50 state = func oGame,oSelf { oSelf { text = "Energy : " + oGameState.value } } } text { animate = false point = 400 size = 30 file = "fonts/pirulen.ttf" text = "Level : " + oGameState.level x = 500 y=90 } } 52.27. Stars Fighter Game 469
  • 6. Ring Documentation, Release 1.5.2 func checkwin ogame if oGameState.gameresult return ok if oGameState.enemies = 0 oGameState.gameresult = true oGame { if oGameState.level < 30 text { point = 400 size = 30 file = "fonts/pirulen.ttf" text = "Level Completed!" nStep = 3 x = 500 y=10 state = func ogame,oself { if oself.y >= 400 ogame.shutdown = true oGameState.level++ oGameState.enemies = oGameState.level oGameState.gameresult = false ok } } else text { point = 400 size = 30 nStep = 3 file = "fonts/pirulen.ttf" text = "You Win !!!" x = 500 y=10 state = func ogame,oself { if oself.y >= 400 ogame.shutdown = true oGameState.value = 0 ok } } ok } ok func checkgameover ogame if oGameState.gameresult return ok if oGameState.value <= 0 oGameState.gameresult = true oGame { text { point = 400 size = 30 nStep = 3 file = "fonts/pirulen.ttf" text = "Game Over !!!" x = 500 y=10 state = func ogame,oself { if oself.y >= 400 ogame.shutdown = true ok 52.27. Stars Fighter Game 470
  • 7. Ring Documentation, Release 1.5.2 } } } showfire(oGame,oGame.aObjects[oGameState.PlayerIndex].x+40, oGame.aObjects[oGameState.PlayerIndex].y+40) oGame.aObjects[oGameState.PlayerIndex].enabled = false oGame.remove(oGameState.PlayerIndex) ok func showfire oGame,nX,nY oGame { animate { file = "images/fire.png" x = nX y = nY framewidth = 40 height = 42 nStep = 3 transparent = true state = func oGame,oSelf { oSelf { nStep-- if nStep = 0 nStep = 3 if frame < 13 frame++ else frame=1 oGame.remove(oself.nIndex) ok ok } } } } class gamestate score = 0 level = 1 enemies = 1 value = 100 playerindex = 2 gameresult = false startplay=false Screen Shot: 52.27. Stars Fighter Game 471
  • 8. Ring Documentation, Release 1.5.2 52.28 Flappy Bird 3000 Game The Flappy Bird 3000 Game source code # The Ring Standard Library # Game Engine for 2D Games # 2016, Mahmoud Fayed <[email protected]> oGameState = NULL Load "gameengine.ring" func main oGame = New Game while true oGameState = New GameState oGame { 52.28. Flappy Bird 3000 Game 472
  • 9. Ring Documentation, Release 1.5.2 title = "Flappy Bird 3000" sprite { file = "images/fbback.png" x = 0 y=0 width=800 height = 600 scaled = true animate = false keypress = func ogame,oself,nKey { if nkey = key_esc or nKey = GE_AC_BACK ogame.shutdown() but nKey = key_space oGameState.startplay=true ogame.shutdown=true ok } mouse = func ogame,oself,nType,aMouseList { if nType = GE_MOUSE_UP cFunc = oself.keypress call cFunc(oGame,oSelf,Key_Space) ok } } text { animate = false size = 35 file = "fonts/pirulen.ttf" text = "Flappy Bird 3000" x = 150 y=50 } text { animate = false size = 25 file = "fonts/pirulen.ttf" text = "Version 1.0" x = 280 y=100 } text { animate = false size = 16 file = "fonts/pirulen.ttf" text = "(C) 2016, Mahmoud Fayed" x = 245 y=140 } text { animate = false size = 25 file = "fonts/pirulen.ttf" text = "To Win Get Score = 3000" x = 150 y=270 } text { animate = false size = 25 file = "fonts/pirulen.ttf" text = "Press Space to start" x = 190 y=470 } text { 52.28. Flappy Bird 3000 Game 473
  • 10. Ring Documentation, Release 1.5.2 animate = false size = 20 file = "fonts/pirulen.ttf" text = "Press Esc to Exit" x = 260 y=510 } animate { file = "images/fbbird.png" x = 200 y = 200 framewidth = 20 scaled = true height = 50 width = 50 nStep = 3 transparent = true animate = true direction = ge_direction_random state = func oGame,oSelf { oSelf { nStep-- if nStep = 0 nStep = 3 if frame < 3 frame++ else frame=1 ok ok if x <= 0 x=0 ok if y <= 0 y=0 ok if x >= 750 x= 750 ok if y > 550 y=550 ok } } } Sound { file = "sound/music2.wav" } } if oGameState.startplay oGame.refresh() playstart(oGame) oGame.refresh() ok end func playstart oGame oGame { FPS = 60 FixedFPS = 120 Title = "Flappy Bird 3000" Sprite { 52.28. Flappy Bird 3000 Game 474