I was going through some old drives and noticed that I have a tendency to concentrate on "old" games... Cannot figure out why... lol
I found an old text-based Moon Lander from the late 70's... and got to thinking... (Ok. Stop laughing...) I have seen "many" versions of this game for most machines that I have owned in the past... For nostalgia, I was thinking of trying my hand at an N7 version... Which got me to thinking again... (Really. Still laughing? *sigh*)
I am pretty clear on the game elements... except for one... Collision...
Oh. I know how to do simple AABB and Circular collisions but, when it comes to colliding with the "landscape", I am at a loss as to finding an efficient method of detection.
Most of my "programming" has been using Basic. Unless the "Basic" has a sprite collision system built in - detecting collision has been either by AABB, Circular or Colour detection. The latter would work for the "landscape" but it is SO inefficient... I cannot use AABB or Circular as the landscape is irregularly shaped... Oh. text was SO much easier... lol
I have always enjoyed the "old stuff"... It is probably because of the way I think... (Nope. I am not going to say it...)
Any suggestions, or constructive criticisms, are always appreciated.
J
(PS: I hope that everyone will have a great and safe Easter break...)
Question
Case 1 : I think ... [for...next] is not the best way to read text file
Case 2 : I think this is the best way, but [do..until frln(f) = "unset"] gives unexpectedly output
Please advice me what is the best way to read the whole text file ?
Thank you.
Code:
set window "readfile",400,400
f = openfile("story.txt")
'Case 1
'correctly read file
for i = 0 to 21
wln frln(f)
i = i + 1
next
'Case 2
'uncorrectly read file
do
wln frln(f)
until frln(f)="unset"
'-----------------------------------
' TINY GOLF
' =========
' Help Mario to make a hole-in-one
' and achieve The World Record
' of The Tiny Golf
'
' Made with N7_240310
'
' Controls :
' 1. LEFT click and drag from O to aim
' 2. ENTER to swing the golf club
' 3. ESC to continue / quit
'
' Acknowledgements :
' - polygon, polyline.n7, sfx.n7 by Marcus
' - some sound effects are copied from the "Pool" game by Kevin
' hit_ball_sound
' oh_no_sound
' - draggable point on a polyline by Kevin
' https://naalaa.com/forum/thread-90-post-493.html#pid493
' - sprite https://www.spriters-resource.com/game_boy_gbc/mariogolf/sheet/12294/
'----------------------------------
'-----------------
' INITIALIZATION
'-----------------
#win32
include "assets/sound_effect.n7"
include "polyline.n7"
set window "TINY GOLF",250,180,false,3
set redraw off
'color definition
visible black_alpha = [0,0,0,24]
visible black = [0,0,0]
visible white = [255,255,255]
visible gray = [150,150,150]
visible green_ = [0,80,0]
visible green = [51,153,10,24]
visible yellow = [200,200,0]
'cartesian coordinates
visible ox = 50,oy = 165 'origin point
axy = 360-45 'angle between x and y-axis
length = 150 'length of axis
'------------
' MAIN LOOP
'------------
while not keydown(KEY_ESCAPE,true)
'----------------------
' title screen
'----------------------
if title=true then Action(4,0,0)
'----------------------
' screen layout
'----------------------
'1. golf course
set color green; draw poly grass,1
set color white; draw poly grass
set caret ox,oy;wln "O"
set color black; draw ellipse holex,holey,3,2,1
set color white; draw ellipse holex,holey,3,2
'supporting lines
'set color yellow; draw line 0,70,width(primary),70
'set color yellow; draw line 144,0,144,height(primary)
'set color yellow; draw line 224,0,224,height(primary)
'set color yellow; draw line ox,oy,holex,holey
'set color yellow; draw line 117,0,117,height(primary)
'3. Score
set color white; set caret 10,40; wln "Timer"; wln round(score)
if round(score) >= 1 then
score = score - 0.05
else
free distance
hit = false
Say("TIME OUT..ESC")
redraw
play sound oh_no_sound
do;wait 1;until keydown(KEY_ESCAPE,true)
ResetPoints()
score = 50
endif
'----------
' Control
'----------
'Left click mouse
if mousebutton(0) then
points[1][0] = mousex()
points[1][1] = mousey()
'set how high your golf ball
set color black_alpha; cls 'clear screen
if drawline = true or stay then
set color yellow
draw line points[0][0],points[0][1],points[1][0],points[1][1]
draw rect points[1][0] - 8, points[1][1] - 8,16,16
Say("ENTER to shoot")
stay = true
else
Say("Drag point from O")
endif
' 2. ENTER to move ball along the PolyLine path
if keydown(KEY_RETURN,true) then
Action(3,0,2)
play sound hit_ball_sound
hit = not hit 'toggle on/off
stay = false
endif
if hit then
points[0]=[ox,oy]
points[1]=[p10,p11]
points[2]=[p20,p21]
'points[2] coordinate
p20 = p10*2
'p21 is on a line between (ox,oy) and (holex,holey)
'the equation of the line is y = -0.71x + 200.45
p21 = -0.71*p20 + 200.45
set caret width(primary)/2, height(primary) - 25
set color white;draw image Player.swing,Player.x,Player.y,2 'stay at the position during the shoot
'stop the ball and clear the remaining path's distance
if round(distance) > 0.95*path.GetLength()then
free distance
hit = false
Say("Drag square from O")
endif
'collision detection between the ball and the hole
'1.distance between the center of the ball and the center of the hole
cbh = sqr(pow(holex-pos[0],2)+pow(holey-pos[1],2))
if cbh<(2+3) then
Say("Hole-in-one")
PlayTune(1)
free distance
redraw
hit = false
do;wait 1;until keydown(KEY_RETURN,true) 'pause
endif
endif
'-------------------------------
' Standy by
'-------------------------------
if hit=false then Action(0,0,1)
redraw
fwait 30
wend
'-----------
' FUNCTIONS
'-----------
function Action(type,cell1,cell2)
set color white
select type
case 0 'stand by position
Player.standby = loadimage("assets/standby.png",2,1)
timer.Duration = (clock() - timer.Start)/1000
if round(timer.Duration)%2 = 0 then
i=cell2
else
i=cell1
endif
draw image Player.standby, Player.x, Player.y, i
case 1 'Mario's face animation
Player.face = loadimage("assets/say.png",3,1)
draw image Player.face, 20,5,j
timer.Duration = (clock() - timer.Start)/1000
if round(timer.Duration)%2 = 0 then
if j <= 1 then
j = j+1
endif
else
j = 0
endif
case 3 'swing the golf club
for k = cell1 to cell2
set color black
draw rect Player.x,Player.y,width(Player.standby),height(Player.standby),1
set color white
Player.swing = loadimage("assets/swing.png",3,1)
draw image Player.swing, Player.x, Player.y,k
redraw
wait 250
next
set color black; draw rect Player.x,Player.y,width(Player.standby),height(Player.standby),1
redraw
case 4'title screen
title = false
set color white
set caret width(primary)/2,0
center "---------"
center "Tiny Golf"
center "---------"
center
center "Help Mario"
center "to make a hole-in-one"
center "and achieve"
center "The World Record"
center "of The Tiny Golf"
center
center "Press ESC to continue"
redraw
PlayTune(1)
do; wait 1; until keydown(KEY_ESCAPE,true)
endsel
endfunc
function Say(message)
set color green_; draw rect 0,0,width(primary),35,1 '1 = filled rectangle
set color white; set caret width(primary)/2,15; center message
'Mario's face
Action(1,0,2)
draw line 0,35,width(primary),35
endfunc
I share with you a simplified version of arkanoid, to move use the arrows and to pause the "p" key. There are three levels and in each level the ball will move faster.
There is one thing that I have not been able to add and I was looking for how to do it but I did not find anything, I wanted to be able to control the movement of the ball, when the ball collides with the left or the right part of the edge of the player's racket I wanted the ball to If he moved in that direction with spin, like when a soccer player hits the ball with spin, I think it would have been more fun.
I put the missing file here because it won't let me put more than 5 at a time.
To start press the enter key and to start moving the ball press the space key.
This is not meant as "self promotion" or promotion for the company at which I work. I just thought someone might be interested in a game like this.
I started working at a really small game company back in ... 2006, I think. The first game I was involved with was called Fairy Treasure. I did all the programming, made all the graphics (yes, it's programmer art) and designed many of the levels. Last autumn we decided to port it to a more modern engine (SDL) and release it on Steam. And now it's on sale:
I had planned to release this build, mostly a bug fix, last weekend. But I was in Stockholm, and then I got a really nasty cold which prevented my brain from functioning. If your programs have been crashing while you were trying to use 'draw image xform' or 'draw poly image', this should solve it.
Some years ago, on the old forum that went kabooom, I posted an extended version of the n6 Simple3D library. The posted version let you create and display some primitive 3d shapes (spheres, cubes, cylinders etc) and even load models in the off file format.
Does anyone have a copy of the library I posted? Lots of code there that I don't want to rewrite for my new experiments ...
I will be "off the air" from Saturday morning until Monday afternoon. Off on our annual camping break... yah... (not a fan of camping lol) Forecast temperatures for Saturday 39C, Sunday and Monday 38C... The "big three" camping issues... Flies; mosquitoes and Sunburn... I suppose it would be worse if it was hot...
This is not a full game, just a player that you can control and some asteroids that fly around. But there are lots of transformed image drawing going on, including the spinning and zooming background image. I'm curious about the fps on your machines? I have a solid 250fps here, but maybe this craptop is a laptop after all.