Breakout 2000 or Arkanoid with WAVES
Monkey Forums/Monkey Programming/Breakout 2000 or Arkanoid with WAVES
| ||
| Because of Paul - "Taiphoz"'s Power Up Discussion for his Hexanoid type game I was inspired to hack together some code for an idea I had. Originally written in Blitz Basic many moons ago I have resurrected some of it in Monkey. There are no graphics to import or anything just copy / paste / execute. Admittedly the waves are more of a gimmick but I wanted to test it to see if I could breath new life into the genre. Ideas not implemented are capsules that rise the lava level, temporary freeze the lava, make the the lava nearly flat and calm etc.. Other ideas would be you are at the bottom of a volcano shaft and you have to bust your way up through all the time the lava is slowly rising and as it rises so do you. If you hit the ceiling - instant death. As you rise through the shaft more bricks / obstacles appear. Kind of and endless runner game but in breakout form. Shafts could branch out depending which shaft you break through first. Plus maybe the paddle could tilt based on the lava beneath it. That code is ugly / buggy but and not terribly complicated to implement but may inspire someone. If anybody feels like rewriting <grin> and adding features I would love to see it. Could be a community project even (???) Most of all, tell me what you think of the concept of a moving liquid floor. Initially I was going for the whole Temptest 2000 / Llamatron treatment. Try it out in HTML5 This one has an actual graphic image for the lava. ![]()
Strict
Import mojo
Class MyApp Extends App
Field mx:Int , my:Int
Field wave:Int[640]
Field ballx:Float
Field bally:Float
Field ballspeedx:Float
Field ballspeedy:Float
Field balldirx:Int
Field balldiry:Int
Field fireball:Int
Field timer:Int
Field toggle:Int = 1
Field freq:float
Field ht:Int
Field st:Float
Field volume:Int
Field speed:Int
Method OnCreate:Int()
st = 0
ht = 32
freq = 0.1
volume = 445
speed = 2
ballx = 100
bally = 100
balldirx = 1
balldiry = 1
ballspeedx = 2
ballspeedy = 2
fireball = 0
timer = 0
For Local i:Int = 0 To 639
wave[i] = volume
Next
SetUpdateRate(60)
Return(0)
End
Method OnUpdate:Int()
If fireball
timer = timer -1
If timer = 0
fireball = 0
End if
End If
ballx += ((ballspeedx+fireball)*balldirx)
bally += ((ballspeedy+fireball)*balldiry)
If ballx >= 638
ballx = 638
balldirx = -1
End If
If ballx <= 1
ballx = 1
balldirx = 1
End If
If bally >= wave[ballx]
bally = wave[ballx]-2
fireball += 2
If fireball > 6
fireball = 6
End if
timer = 180
balldiry = -1
End If
If balldiry > 0
If bally >= wave[mx]-32 And bally <= wave[mx]-24 And ballx > mx - 32 And ballx < mx + 32
balldiry = -balldiry
If ballx > mx - 32 And ballx < mx - 24 Then ballspeedx = 4
If ballx >= mx - 24 And ballx < mx - 16 Then ballspeedx = 3
If ballx >= mx - 16 And ballx < mx - 8 Then ballspeedx = 2
If ballx >= mx - 8 And ballx <= mx + 8 Then ballspeedx = 1
If ballx >= mx + 24 And ballx < mx + 32 Then ballspeedx = 4
If ballx >= mx + 16 And ballx < mx + 24 Then ballspeedx = 3
If ballx >= mx + 8 And ballx < mx + 16 Then ballspeedx = 2
End If
End If
If bally <= 0 Then balldiry = 1
mx = MouseX()
If KeyHit(KEY_UP) Then ht += 1
If KeyHit(KEY_DOWN) Then ht -= 1
If KeyHit(KEY_LEFT) Then freq -= .1
If KeyHit(KEY_RIGHT) Then freq += .1
If KeyHit(KEY_MINUS) Then volume += 1
If KeyHit(KEY_EQUALS) Then volume -= 1
If KeyHit(KEY_Q) Then speed -= 1
If KeyHit(KEY_W) Then speed += 1
If KeyHit(KEY_SPACE) Then toggle = 1 - toggle
If KeyHit(KEY_1)
st = 0
ht = 32
freq = 0.1
volume = 445
speed = 2
End If
If KeyHit(KEY_2)
st = 0
ht = 115
freq = .09
volume = 300
speed = 7
End If
If KeyHit(KEY_3)
st = 0
ht = 73
freq = .09
volume = 405
speed = 2
End If
If KeyHit(KEY_4)
st = 0
ht = 60
freq = .4
volume = 417
speed = 3
End If
If KeyHit(KEY_5)
st = 0
ht = 44
freq = 0.3
volume = 375
speed = 3
End If
If KeyHit(KEY_6)
st = 0
ht = 1
freq = 0
volume = 469
speed = 1
End If
If speed = 0 Then speed = 1
For Local j:Int = 1 To speed
st = st + freq
wave[639] = Sin(st)*ht + volume
For Local i:Int = 0 To 638
wave[i] = wave[i+1]
Next
Next
Return(0)
End
Method OnRender:Int()
Cls(0,0,0)
SetColor(127+Rnd(64),0,0)
For Local i:Int = 0 To 639
DrawLine(i,wave[i],i,480)
next
SetColor(127,127,127)
DrawLine(0,volume,639,volume)
DrawRect(635,Sin(90)*ht + volume - 2,4,4)
DrawRect(635,Sin(-90)*ht + volume - 2,4,4)
SetColor(255,255,255)
If toggle
DrawText("Mouse X: "+mx,0,0)
DrawText("Wave Height: "+ht,0,13)
DrawText("Wave Frequency: "+freq,0,26)
DrawText("Liquid Volume: "+volume,0,39)
DrawText("Wave Speed: "+speed,0,51)
DrawText("Presets Press 1 - 6",300,0)
DrawText("Space Bar to toggle text",300,13)
DrawText("Press UP / DOWN to Increase / Decrease wave height",0,78)
DrawText("Press LEFT / RIGHT to Decrease / Increase wave frequency",0,91)
DrawText("Press - / + to Lower / Raise the liquid volume",0,104)
DrawText("Wave Speed Q / W to Decrease / Increase speed",0,117)
DrawText("Ball X Speed: "+ballspeedx,300,26)
DrawText("Ball Y Speed: "+ballspeedy,300,39)
End if
SetColor(127,127,127)
DrawRect(mx-32,wave[mx]-32,8,16)
DrawRect(mx+24,wave[mx]-32,8,16)
SetColor(159,159,159)
DrawRect(mx-24,wave[mx]-32,8,16)
DrawRect(mx+16,wave[mx]-32,8,16)
SetColor(191,191,191)
DrawRect(mx-16,wave[mx]-32,8,16)
DrawRect(mx+8,wave[mx]-32,8,16)
SetColor(255,255,255)
DrawRect(mx-8,wave[mx]-32,16,16)
If fireball
SetColor(255,0,0)
Else
SetColor(127,127,255)
End If
DrawRect(ballx-2,bally-2,4,4)
Return(0)
End
End Class
Function Main:Int()
New MyApp
Return(0)
End Function
|
| ||
| yeah it was a really good suggestion and it gave me a load of ideas, which I now have in motion. really good seeing an example of it, you should throw that into the code section as well I am sure it would be handy for some one at some stage in the future. |
| ||
| That's cool. I can't wait to play / buy the finished product. I copied the code to the other forum, I guess that would have been a better place for it. ;) |
| ||
| Pretty cool and those are some good ideas for a game. |
| ||
| aye its really good laddie |
| ||
| I had thought of doing something like this with a dynamic sand dune floor that would be built up somehow over time, maybe by falling fragments that you missed catching. |
