RosettaCodeData/Task/Snake/FreeBASIC/snake.basic

116 lines
3.3 KiB
Text
Raw Permalink Normal View History

2023-07-01 11:58:00 -04:00
REM Snake
#define EXTCHAR Chr(255)
Dim Shared As Integer puntos, contar, longitud, posX, posY, oldhi = 0
Dim Shared As Integer x(500), y(500)
For contar = 1 To 500
x(contar) = 0 : y(contar) = 0
Next contar
Dim Shared As Byte fruitX, fruitY, convida
Dim Shared As Single delay
Dim Shared As String direccion, usuario
Sub Intro
Cls
Color 15, 0
Print " _ _ _ _ "
Print " / \ / \ / \ / \ "
Print " ___________/ _\/ _\/ _\/ _\____________ "
Print " __________/ /_/ /_/ /_/ /______________ "
Print " | /\ /\ /\ / \ \___ "
Print " |/ \_/ \_/ \_/ \ "+Chr(248)+"\ "
Print " \___/--< "
Color 14, 0
Locate 10, 28: Print "---SNAKE---"
Locate 12, 4: Print "Para jugar, usa las teclas de flecha para moverte."
Locate 13, 4: Print "Pulsa <1-3> para velocidad, o <Esc> para salir."
If puntos > oldhi Then oldhi = puntos
Locate 14, 4: Print "M xima puntuaci¢n: "; oldhi
usuario = ""
While usuario = ""
usuario = Inkey
Wend
If usuario = Chr(27) Then End 'ESC
delay = .14
If usuario = "1" Then delay = .26
If usuario = "3" Then delay = .08
Cls
longitud = 9
puntos = 0
posX = 40 : posY = 10
direccion = "derecha"
convida = true
fruitX = Int(Rnd * 79) + 1
fruitY = Int(Rnd * 20) + 1
Locate 22, 1
For contar = 1 To 80
Print Chr(196); ''"-";
Next contar
End Sub
Sub MenuPrincipal
Dim As Integer num, oldX, oldY
Dim As Single tm, tm2
Color 10
Locate 23, 2: Print "SNAKE - <Esc> salir - Puntos: "; puntos
If posX = fruitX And posY = fruitY Then
longitud += 1
puntos += 1
fruitX = Int(Rnd * 79) + 1
fruitY = Int(Rnd * 21) + 1
End If
Locate fruitY, fruitX : Color 12: Print Chr(01) : Color 10'"@"
x(0) = posX : y(0) = posY
For contar = 1 To 499
num = 500 - contar
x(num) = x(num - 1)
y(num) = y(num - 1)
Next contar
oldX = x(longitud) : oldY = y(longitud)
If oldX > 0 And oldY > 0 Then Locate oldY, oldX : Print " "
Locate posY, posX: Print Chr(219) '"Û"
tm = Timer
tm2 = tm + delay
While tm < tm2
tm = Timer
usuario = Inkey
If usuario = EXTCHAR & "H" Then direccion = "arriba"
If usuario = EXTCHAR & "P" Then direccion = "abajo"
If usuario = EXTCHAR & "K" Then direccion = "izquierda"
If usuario = EXTCHAR & "M" Then direccion = "derecha"
If usuario = Chr(27) Then Intro
Wend
If direccion = "derecha" Then posX += 1
If posX > 80 Then convida = false
If direccion = "izquierda" Then posX -= 1
If posX < 1 Then convida = false
If direccion = "arriba" Then posY -= 1
If posY < 1 Then convida = false
If direccion = "abajo" Then posY += 1
If posY > 21 Then convida = false
For contar = 0 To longitud
If posX = x(contar) And posY = y(contar) Then convida = false
Next contar
If convida = false Then
Cls : Locate 11, 19: Print "Pulsa <space>..."
Locate 10, 18: Print "Has muerto! Con"; puntos; " puntos." : Sleep
While Inkey = "": Wend
Intro
End If
MenuPrincipal
End Sub
'--- Programa Principal ---
Randomize Timer
Intro
MenuPrincipal
End
'--------------------------