Entrar
Últimos assuntos
Enquete
FreeBasic - Código completo Snake
2 participantes
Página 1 de 1
FreeBasic - Código completo Snake
Código do Jogo Snake para estudo
Nível: Entrando no intermediario
Bem pessoal, para os estudiosos de plantão eu venho trazendo o meu código do jogo Snake na versão 1.03 final.
Permito que usam para estudar, mas não inventem de copiar e por seu nome, OK? (Quem dera que respeitassem...)
Controles:
setas direcionais;
tecla CTRL tem a função de ativar a grade;
São dois arquivos, um com o jogo e outro com as fazes:
main.bas
- Código:
'========================================================================================
'========================================================================================
'-------------- Desenvolvido por Tiago Bezerra ------------
'-------------- Pode ser usado para estudo, mais jamais poderá copia-lo ------------
'-------------- ------------
'-------------- http://www.xcreator.com.br/site/ ------------
'-------------- ------------
'-------------- Pixilinga Studio - 2010 ------------
'========================================================================================
'========================================================================================
#Include "fbgfx.bi"
#Include "niveis.bas"
Using FB
Randomize Timer
Screenres 640, 480, 32, 2
Screenset(0, 1)
Windowtitle ("Snake")
Color (Rgb(3, 14, 100), Rgb(115, 178, 237))
'-----------------------------------------------------
'------------ inicia variaveis -------------
'-----------------------------------------------------
Dim Shared tabuleiro(29, 29) As Byte
ReDim Shared serpente(1 To 25, 1 To 4) As Byte
Dim Shared alimento_pos(1 To 2) As Byte
Dim Shared random_pos(1 To 2) As Byte
Dim Shared alimento As Byte = 2
Dim Shared fim As Byte = 0
Dim Shared iniciado As Byte = 0
Dim Shared fase As Byte = 1
Dim Shared nivel As Byte = 1
Dim Shared vidas As Byte = 10
Dim Shared pontos As LongInt = 0
Dim Shared grade As Byte = 0
Dim Shared ctrl_ctrl As Byte = 0
Dim Shared key_loop_ctrl As Byte = 0
Dim Shared speed As Byte = 1
Dim Shared loop_count As Byte = 0
Dim Shared colidio As Byte = 0 'não inclue o alimento
Dim Shared comprimento As Byte = 10 'comprimento da serpente - maximo 25, minimo 2 (2 pedaços já são para a cabeças e a primeira parte do corpo)
random_pos(1) = Rnd*29
random_pos(2) = Rnd*29
alimento_pos(1) = random_pos(1)
alimento_pos(2) = random_pos(2)
'serpente(n, 1) = x posição
'serpente(n, 2) = y posição
'serpente(n, 3) = direção
'serpente(n, 4) = ativado
serpente(1, 1) = 8
serpente(1, 2) = 14
serpente(1, 3) = 0
serpente(1, 4) = 1
serpente(2, 1) = 7
serpente(2, 2) = 14
serpente(2, 3) = 0
serpente(2, 4) = 1
For i As Byte = 3 To 25
serpente(i, 1) = 5 + i
serpente(i, 2) = 14
serpente(i, 3) = 2
serpente(i, 4) = 0
Next
For i As Byte = 0 To 29
For j As Byte = 0 To 29
tabuleiro(i, j) = 0
Next
Next
'-----------------------------------------------------
'--------------- inicia funções ---------------
'-----------------------------------------------------
Sub render() 'função responsavel por desenhar na tela
Cls()
Color (Rgb(100, 100, 100), Rgb(115, 178, 237))
Draw String (200, 210), "SNAKE"
Color (Rgb(3, 14, 100), Rgb(115, 178, 237))
For i As Byte = 0 To 29
For j As Byte = 0 To 29
If tabuleiro(i, j) = 0 And grade = 1 Then Line(i*16, j*16)-(i*16+16, j*16+16), Rgb(80, 161, 235), B 'renderiza grade
If grade = 1 Then Line(alimento_pos(1)*16, j*16)-(alimento_pos(1)*16+16, j*16+16), Rgb(80, 161, 235), BF 'renderiza grade
If grade = 1 Then Line(i*16, alimento_pos(2)*16)-(i*16+16, alimento_pos(2)*16+16), Rgb(80, 161, 235), BF 'renderiza grade
Next
Next
For i As Byte = 0 To 29
For j As Byte = 0 To 29
If tabuleiro(i, j) = 2 And iniciado = 1 Then Line(i*16, j*16)-(i*16+16, j*16+16), Rgb(125, 62, 0), BF 'renderiza alimento
If tabuleiro(i, j) = 1 Then Line(i*16, j*16)-(i*16+16, j*16+16), Rgb(69, 11, 18), BF 'renderiza paredes
If tabuleiro(i, j) = 3 Then Line(i*16, j*16)-(i*16+16, j*16+16), Rgb(7, 60, 5), BF 'renderiza serpente
Next
Next
Line(serpente(1, 1)*16, serpente(1, 2)*16)-(serpente(1, 1)*16+16, serpente(1, 2)*16+16), Rgb(200, 60, 5), BF
Line(480, 0)-(480, 480), Rgb(69, 11, 18)
Draw String (500, 20), "FRUTAS: " & (alimento - 2) & " de " & (comprimento - 2)
Draw String (500, 35), "NIVEL: " & nivel
Draw String (500, 50), "VIDAS: " & vidas
Draw String (500, 65), "PONTOS: " & pontos
Draw String (500, 460), "Pixilinga STUDIO"
Screencopy()
End Sub
Sub controle() 'função responsavel pela resposta ao teclado
If iniciado = 0 Then Sleep
iniciado = 1
If (Multikey(SC_CONTROL) And ctrl_ctrl = 0) Then
ctrl_ctrl = 1
Select Case grade
Case 1
grade = 0
Case 0
grade = 1
End Select
End If
If Not Multikey(SC_CONTROL) Then ctrl_ctrl = 0
If (Multikey(SC_LEFT) And serpente(1, 3) <> 0 And key_loop_ctrl = 0) Then
serpente(1, 3) = 2
key_loop_ctrl = 1
End If
If (Multikey(SC_RIGHT) And serpente(1, 3) <> 2 And key_loop_ctrl = 0) Then
serpente(1, 3) = 0
key_loop_ctrl = 1
End If
If (Multikey(SC_UP) And serpente(1, 3) <> 3 And key_loop_ctrl = 0) Then
serpente(1, 3) = 1
key_loop_ctrl = 1
End If
If (Multikey(SC_DOWN) And serpente(1, 3) <> 1 And key_loop_ctrl = 0) Then
serpente(1, 3) = 3
key_loop_ctrl = 1
End If
If loop_count = 0 Then
key_loop_ctrl = 0
For i As Byte = 1 To 25
Select Case serpente(i, 3)
Case 1
serpente(i, 2) -= 1
Case 2
serpente(i, 1) -= 1
Case 3
serpente(i, 2) += 1
Case 0
serpente(i, 1) += 1
End Select
Next
For i As Byte = 25 To 2 Step -1
serpente(i, 3) = serpente(i-1, 3)
Next
For i As Byte = 1 To 25
If serpente(i, 1) < 0 Then serpente(i, 1) = 29
If serpente(i, 1) > 29 Then serpente(i, 1) = 0
If serpente(i, 2) < 0 Then serpente(i, 2) = 29
If serpente(i, 2) > 29 Then serpente(i, 2) = 0
Next
End If
End Sub
Sub gen_tabuleiro () 'função esponsavel por posionar as peças no tabuleiro (tilemap)
For i As Byte = 0 To 29
For j As Byte = 0 To 29
tabuleiro(i, j) = niveis(fase, j, i)
Next
Next
For i As Byte = 1 To 25
If serpente(i, 4) = 1 Then tabuleiro(serpente(i, 1), serpente(i, 2)) = 3
Next
tabuleiro(alimento_pos(1), alimento_pos(2)) = 2
End Sub
Sub proximo_nivel() 'função responsavel por preparar o proximo nivel
If nivel <= 15 Then
nivel += 1
fase += 1
End If
serpente(1, 1) = 8
serpente(1, 2) = 14
serpente(1, 3) = 0
serpente(1, 4) = 1
serpente(2, 1) = 7
serpente(2, 2) = 14
serpente(2, 3) = 0
serpente(2, 4) = 1
For i As Byte = 3 To 25
serpente(i, 1) = 5 + i
serpente(i, 2) = 14
serpente(i, 3) = 2
serpente(i, 4) = 0
Next
gen_tabuleiro ()
alimento = 2
iniciado = 0
End Sub
Sub colisao() 'função para checagem de colisões
If loop_count = 0 Then
For i As Byte = 0 To 29
For j As Byte = 0 To 29
If (serpente(1, 1) = i And serpente(1, 2) = j And tabuleiro(i, j) = 1) Or (serpente(1, 1) = i And serpente(1, 2) = j And tabuleiro(i, j) = 3) Then colidio = 1
Next
Next
If (serpente(1, 1) = alimento_pos(1) And serpente(1, 2) = alimento_pos(2) And alimento < comprimento) Then
pontos += 10
alimento += 1
serpente(alimento, 4) = 1
random_pos(1) = Rnd*29
random_pos(2) = Rnd*29
End If
End If
End Sub
Sub gen_loop () 'gerencia velocidade
loop_count -= 1
If loop_count = -1 Then
loop_count = 4 - speed
End If
End Sub
Sub gen_alimento () 'cria alimento
If loop_count = 0 Then
While (tabuleiro(random_pos(1), random_pos(2)) = 1 Or tabuleiro(random_pos(1), random_pos(2)) = 3)
random_pos(1) = Rnd*29
random_pos(2) = Rnd*29
Wend
alimento_pos(1) = random_pos(1)
alimento_pos(2) = random_pos(2)
End If
End Sub
'=====================================================
'--------- Loop do Jogo -----------
'=====================================================
While (Not Multikey(SC_ESCAPE) And Inkey$ <> Chr(255) + "k")
gen_tabuleiro ()
gen_alimento ()
render()
controle()
colisao()
gen_loop()
Sleep(30, 1)
If loop_count = 0 Then
If colidio = 1 Then
colidio = 0
nivel -= 1
fase -= 1
vidas -= 1
proximo_nivel()
End If
If alimento = comprimento And nivel = 15 Then
Cls()
Draw String (280, 200), "Tu Venceu!!!"
Screencopy()
Sleep
Sleep
Exit While
End If
If alimento = comprimento Then
proximo_nivel()
If nivel = 6 Then
fase = 1
speed += 1
End If
If nivel = 11 Then
fase = 1
speed += 1
End If
End If
If vidas = 0 Then
Cls()
Draw String (280, 200), "Tu morreu..."
Screencopy()
Sleep
Exit While
End If
End If
Wend
End
niveis.bas
- Código:
' Os níveis do jogo estão representados em array de 3 dimensões
' onde a primeira dimensão armazena o nivel, a segunda a coluna
' e a terceira a linha
' 0 representa espaço vazio
' 1 representa parede
Dim Shared niveis(1 To 5, 29, 29) As Byte = _
{ _
/'nivel 1'/ _
{ _
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, _
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, _
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, _
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, _
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, _
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, _
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, _
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, _
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, _
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, _
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, _
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, _
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, _
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, _
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, _
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, _
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, _
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, _
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, _
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, _
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, _
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, _
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, _
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, _
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, _
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, _
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, _
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, _
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, _
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} _
},_
/'nivel 2'/ _
{ _
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},_
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},_
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},_
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},_
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},_
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},_
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},_
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},_
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},_
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},_
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},_
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},_
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},_
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},_
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},_
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},_
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},_
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},_
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},_
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},_
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},_
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},_
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},_
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},_
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},_
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},_
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},_
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},_
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},_
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }_
},_
/'nivel 3'/ _
{ _
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},_
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},_
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},_
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},_
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},_
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},_
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},_
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},_
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},_
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},_
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},_
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},_
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},_
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},_
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},_
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},_
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},_
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},_
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},_
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},_
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},_
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},_
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},_
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},_
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},_
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},_
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},_
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},_
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},_
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}_
} ,_
/'nivel 4'/ _
{ _
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, _
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, _
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, _
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, _
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, _
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, _
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, _
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, _
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, _
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, _
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, _
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, _
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, _
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, _
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, _
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, _
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, _
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, _
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, _
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, _
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, _
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, _
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, _
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, _
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, _
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, _
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, _
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, _
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, _
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} _
},_
/'nivel 5'/ _
{ _
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},_
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},_
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},_
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},_
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},_
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},_
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},_
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},_
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},_
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},_
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1},_
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},_
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},_
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},_
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},_
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},_
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},_
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},_
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},_
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},_
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},_
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},_
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},_
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},_
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},_
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},_
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},_
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},_
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},_
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}_
} _
}
Está ai, bons estudos!
>> Download Scripts e EXE <<
Última edição por tblima123 em Dom 12 Dez 2010, 21:25, editado 5 vez(es)
tblima123- Ocasional
- Mensagens : 54
Data de inscrição : 06/11/2009
Re: FreeBasic - Código completo Snake
Aqui o bug ocorreu na 5° ou 6° fruta do nível 3, realmente estranho.
Olhando assim não consegui identificar nada de errado, mas tmb não sou o cara mais indicado pra isso =P... vamos esperar o mestre vinians dar seu parecer.
Agora, uma coisa que me incomodou bastante no jogo foi a contagem progressiva de pontos em função do tempo... pude ficar indo de lá pra cá numa boa sem nem me preocupar com as frutas e ainda acumular uma ótima pontuação!
Num jogo desses eu acho que cabe mais somar pontos ao coletar as frutas apenas, e talvez um tempo regressivo pra impedir que o jogador possa ficar rodando e rodando sem objetivo =]
flw
Olhando assim não consegui identificar nada de errado, mas tmb não sou o cara mais indicado pra isso =P... vamos esperar o mestre vinians dar seu parecer.
Agora, uma coisa que me incomodou bastante no jogo foi a contagem progressiva de pontos em função do tempo... pude ficar indo de lá pra cá numa boa sem nem me preocupar com as frutas e ainda acumular uma ótima pontuação!
Num jogo desses eu acho que cabe mais somar pontos ao coletar as frutas apenas, e talvez um tempo regressivo pra impedir que o jogador possa ficar rodando e rodando sem objetivo =]
flw
Convidad- Convidado
Re: FreeBasic - Código completo Snake
Pois é, é super estranho, só o vinians pra poder dizer o que é mesmo, acho que vai ser alguma em daqueles arrays, mais nem imagino o que, isso vai ser erro de lógica creio...
Suas dicas foram "anotadas" e estarei implementando assim que o vinians ajudar na parada das frutinhas
Suas dicas foram "anotadas" e estarei implementando assim que o vinians ajudar na parada das frutinhas
tblima123- Ocasional
- Mensagens : 54
Data de inscrição : 06/11/2009
Re: FreeBasic - Código completo Snake
E ae amigão tudo blz ?
Vejo que você está fera no Free Basic. Parabéns pelos estudos. Achei muito legal seu método de programação, bem organizado e um bom uso de vetores.
Sobre o erro eu creio que descobri. Veja essa função:
Voce estava colocando -1 na variavel random_pos o que estava causando um estouro de vetor levando a um memory leach. Coloquei 25 (valor arbitrário) e nao mais travou aqui. Mas é isso ai se travar novamente avisa pra nóis
Vejo que você está fera no Free Basic. Parabéns pelos estudos. Achei muito legal seu método de programação, bem organizado e um bom uso de vetores.
Sobre o erro eu creio que descobri. Veja essa função:
- Código:
Sub gen_alimento () 'cria alimento
If loop_count = 0 Then
If (tabuleiro(random_pos(1), random_pos(2)) = 1 Or tabuleiro(random_pos(1), random_pos(2)) = 3) Then
random_pos(1) = 25
random_pos(2) = 25
EndIf
alimento_pos(1) = random_pos(1)
alimento_pos(2) = random_pos(2)
End If
End Sub
Voce estava colocando -1 na variavel random_pos o que estava causando um estouro de vetor levando a um memory leach. Coloquei 25 (valor arbitrário) e nao mais travou aqui. Mas é isso ai se travar novamente avisa pra nóis
Re: FreeBasic - Código completo Snake
Vinians, tu é o bicho!!!
Cara, como eu que deichei acontecer uma cagada desse meu!!!
Bem, tá resolvido o problema, não dá mais aquele, pode checar.
Eu coloquei as ideias do fabio, alem deque agora quando você passa da quinta fase ele volta pra primeira, só que mais rápado, no total são 5 fases e 15 níveis.
Cara, como eu que deichei acontecer uma cagada desse meu!!!
Bem, tá resolvido o problema, não dá mais aquele, pode checar.
Eu coloquei as ideias do fabio, alem deque agora quando você passa da quinta fase ele volta pra primeira, só que mais rápado, no total são 5 fases e 15 níveis.
tblima123- Ocasional
- Mensagens : 54
Data de inscrição : 06/11/2009
Re: FreeBasic - Código completo Snake
Vou deixar uma outra dica... add uma versão já compilada do jogo pra download pro caso de alguém que não tem o compilador ou não está com ele disponível (meu caso nesse momento) possa conferir o resultado.
flw
flw
Convidad- Convidado
Re: FreeBasic - Código completo Snake
Mal pelo post duplo =[
Vale desenvolver "skins" pro jogo?... fiz uma ao estilo clássico dos Brick Games 999 in 1 XD
(clique pra ampliar)
Off: A snake ficou parecendo uma peça de tetris na screen mas é só coincidência =P
t+
Vale desenvolver "skins" pro jogo?... fiz uma ao estilo clássico dos Brick Games 999 in 1 XD
(clique pra ampliar)
- Código:
'========================================================================================
'========================================================================================
'-------------- Desenvolvido por Tiago Bezerra ------------
'-------------- Pode ser usado para estudo, mais jamais poderá copia-lo ------------
'-------------- ------------
'-------------- http://www.xcreator.com.br/site/ ------------
'-------------- ------------
'-------------- Pixilinga Studio - 2010 ------------
'========================================================================================
'========================================================================================
#Include "fbgfx.bi"
#Include "niveis.bas"
Using FB
Randomize Timer
Screenres 640, 480, 32, 2
Screenset(0, 1)
Windowtitle ("Snake")
Color (Rgb(0, 0, 0), Rgb(147, 168, 160))
'-----------------------------------------------------
'------------ inicia variaveis -------------
'-----------------------------------------------------
Dim Shared tabuleiro(29, 29) As Byte
ReDim Shared serpente(1 To 25, 1 To 4) As Byte
Dim Shared alimento_pos(1 To 2) As Byte
Dim Shared random_pos(1 To 2) As Byte
Dim Shared alimento As Byte = 2
Dim Shared fim As Byte = 0
Dim Shared iniciado As Byte = 0
Dim Shared fase As Byte = 1
Dim Shared nivel As Byte = 1
Dim Shared vidas As Byte = 10
Dim Shared pontos As LongInt = 0
Dim Shared grade As Byte = 0
Dim Shared ctrl_ctrl As Byte = 0
Dim Shared key_loop_ctrl As Byte = 0
Dim Shared speed As Byte = 1
Dim Shared loop_count As Byte = 0
Dim Shared colidio As Byte = 0 'não inclue o alimento
Dim Shared comprimento As Byte = 10 'comprimento da serpente - maximo 25, minimo 2 (2 pedaços já são para a cabeças e a primeira parte do corpo)
random_pos(1) = Rnd*29
random_pos(2) = Rnd*29
alimento_pos(1) = random_pos(1)
alimento_pos(2) = random_pos(2)
'serpente(n, 1) = x posição
'serpente(n, 2) = y posição
'serpente(n, 3) = direção
'serpente(n, 4) = ativado
serpente(1, 1) = 8
serpente(1, 2) = 14
serpente(1, 3) = 0
serpente(1, 4) = 1
serpente(2, 1) = 7
serpente(2, 2) = 14
serpente(2, 3) = 0
serpente(2, 4) = 1
For i As Byte = 3 To 25
serpente(i, 1) = 5 + i
serpente(i, 2) = 14
serpente(i, 3) = 2
serpente(i, 4) = 0
Next
For i As Byte = 0 To 29
For j As Byte = 0 To 29
tabuleiro(i, j) = 0
Next
Next
'-----------------------------------------------------
'--------------- inicia funções ---------------
'-----------------------------------------------------
Sub render() 'função responsavel por desenhar na tela
Cls()
For i As Byte = 0 To 29
For j As Byte = 0 To 29
If tabuleiro(i, j) = 0 Then Line(i*16+1, j*16+1)-(i*16+15, j*16+15), Rgb(136, 156, 149), BF 'renderiza grade (parte 1)
If tabuleiro(i, j) = 0 Then Line(i*16+3, j*16+3)-(i*16+13, j*16+13), Rgb(147, 168, 160), BF 'renderiza grade (parte 2)
If tabuleiro(i, j) = 0 Then Line(i*16+5, j*16+5)-(i*16+11, j*16+11), Rgb(136, 156, 149), BF 'renderiza grade (parte 3)
If tabuleiro(i, j) = 2 And iniciado = 1 Then Line(i*16+1, j*16+1)-(i*16+15, j*16+15), Rgb(0, 0, 0), BF Else Line(i*16+1, j*16+1)-(i*16+15, j*16+15), Rgb(136, 156, 149), BF 'renderiza alimento (parte 1)
If tabuleiro(i, j) = 2 And iniciado = 1 Then Line(i*16+3, j*16+3)-(i*16+13, j*16+13), Rgb(147, 168, 160), BF Else Line(i*16+3, j*16+3)-(i*16+13, j*16+13), Rgb(147, 168, 160), BF 'renderiza alimento (parte 2)
If tabuleiro(i, j) = 2 And iniciado = 1 Then Line(i*16+5, j*16+5)-(i*16+11, j*16+11), Rgb(0, 0, 0), BF Else Line(i*16+5, j*16+5)-(i*16+11, j*16+11), Rgb(136, 156, 149), BF 'renderiza alimento (parte 3)
If tabuleiro(i, j) = 1 Then Line(i*16+1, j*16+1)-(i*16+15, j*16+15), Rgb(0, 0, 0), BF 'renderiza paredes (parte 1)
If tabuleiro(i, j) = 1 Then Line(i*16+3, j*16+3)-(i*16+13, j*16+13), Rgb(147, 168, 160), BF 'renderiza paredes (parte 2)
If tabuleiro(i, j) = 1 Then Line(i*16+5, j*16+5)-(i*16+11, j*16+11), Rgb(0, 0, 0), BF 'renderiza paredes (parte 3)
If tabuleiro(i, j) = 3 Then Line(i*16+1, j*16+1)-(i*16+15, j*16+15), Rgb(0, 0, 0), BF 'renderiza serpente (parte 1)
If tabuleiro(i, j) = 3 Then Line(i*16+3, j*16+3)-(i*16+13, j*16+13), Rgb(147, 168, 160), BF 'renderiza serpente (parte 2)
If tabuleiro(i, j) = 3 Then Line(i*16+5, j*16+5)-(i*16+11, j*16+11), Rgb(0, 0, 0), BF 'renderiza serpente (parte 3)
Next
Next
Draw String (212, 229), "SNAKE"
Line(serpente(1, 1)*16+1, serpente(1, 2)*16+1)-(serpente(1, 1)*16+15, serpente(1, 2)*16+15), Rgb(0, 0, 0), BF 'renderiza cabeça serpente (parte 1)
Line(serpente(1, 1)*16+3, serpente(1, 2)*16+3)-(serpente(1, 1)*16+13, serpente(1, 2)*16+13), Rgb(147, 168, 160), BF 'renderiza cabeça serpente (parte 2)
Line(serpente(1, 1)*16+5, serpente(1, 2)*16+5)-(serpente(1, 1)*16+11, serpente(1, 2)*16+11), Rgb(0, 0, 0), BF 'renderiza cabeça serpente (parte 3)
Line(482, 0)-(482, 480), Rgb(0, 0, 0)
Draw String (500, 20), "FRUTAS: " & (alimento - 2) & " de " & (comprimento - 2)
Draw String (500, 35), "NIVEL: " & nivel
Draw String (500, 50), "VIDAS: " & vidas
Draw String (500, 65), "PONTOS: " & pontos
Draw String (500, 460), "Pixilinga STUDIO"
Screencopy()
End Sub
Sub controle() 'função responsavel pela resposta ao teclado
If iniciado = 0 Then Sleep
iniciado = 1
If (Multikey(SC_CONTROL) And ctrl_ctrl = 0) Then
ctrl_ctrl = 1
Select Case grade
Case 1
grade = 0
Case 0
grade = 1
End Select
End If
If Not Multikey(SC_CONTROL) Then ctrl_ctrl = 0
If (Multikey(SC_LEFT) And serpente(1, 3) <> 0 And key_loop_ctrl = 0) Then
serpente(1, 3) = 2
key_loop_ctrl = 1
End If
If (Multikey(SC_RIGHT) And serpente(1, 3) <> 2 And key_loop_ctrl = 0) Then
serpente(1, 3) = 0
key_loop_ctrl = 1
End If
If (Multikey(SC_UP) And serpente(1, 3) <> 3 And key_loop_ctrl = 0) Then
serpente(1, 3) = 1
key_loop_ctrl = 1
End If
If (Multikey(SC_DOWN) And serpente(1, 3) <> 1 And key_loop_ctrl = 0) Then
serpente(1, 3) = 3
key_loop_ctrl = 1
End If
If loop_count = 0 Then
key_loop_ctrl = 0
For i As Byte = 1 To 25
Select Case serpente(i, 3)
Case 1
serpente(i, 2) -= 1
Case 2
serpente(i, 1) -= 1
Case 3
serpente(i, 2) += 1
Case 0
serpente(i, 1) += 1
End Select
Next
For i As Byte = 25 To 2 Step -1
serpente(i, 3) = serpente(i-1, 3)
Next
For i As Byte = 1 To 25
If serpente(i, 1) < 0 Then serpente(i, 1) = 29
If serpente(i, 1) > 29 Then serpente(i, 1) = 0
If serpente(i, 2) < 0 Then serpente(i, 2) = 29
If serpente(i, 2) > 29 Then serpente(i, 2) = 0
Next
End If
End Sub
Sub gen_tabuleiro () 'função esponsavel por posionar as peças no tabuleiro (tilemap)
For i As Byte = 0 To 29
For j As Byte = 0 To 29
tabuleiro(i, j) = niveis(fase, j, i)
Next
Next
For i As Byte = 1 To 25
If serpente(i, 4) = 1 Then tabuleiro(serpente(i, 1), serpente(i, 2)) = 3
Next
tabuleiro(alimento_pos(1), alimento_pos(2)) = 2
End Sub
Sub proximo_nivel() 'função responsavel por preparar o proximo nivel
If nivel <= 15 Then
nivel += 1
fase += 1
End If
serpente(1, 1) = 8
serpente(1, 2) = 14
serpente(1, 3) = 0
serpente(1, 4) = 1
serpente(2, 1) = 7
serpente(2, 2) = 14
serpente(2, 3) = 0
serpente(2, 4) = 1
For i As Byte = 3 To 25
serpente(i, 1) = 5 + i
serpente(i, 2) = 14
serpente(i, 3) = 2
serpente(i, 4) = 0
Next
gen_tabuleiro ()
alimento = 2
iniciado = 0
End Sub
Sub colisao() 'função para checagem de colisões
If loop_count = 0 Then
For i As Byte = 0 To 29
For j As Byte = 0 To 29
If (serpente(1, 1) = i And serpente(1, 2) = j And tabuleiro(i, j) = 1) Or (serpente(1, 1) = i And serpente(1, 2) = j And tabuleiro(i, j) = 3) Then colidio = 1
Next
Next
If (serpente(1, 1) = alimento_pos(1) And serpente(1, 2) = alimento_pos(2) And alimento < comprimento) Then
pontos += 10
alimento += 1
serpente(alimento, 4) = 1
random_pos(1) = Rnd*29
random_pos(2) = Rnd*29
End If
End If
End Sub
Sub gen_loop () 'gerencia velocidade
loop_count -= 1
If loop_count = -1 Then
loop_count = 4 - speed
End If
End Sub
Sub gen_alimento () 'cria alimento
If loop_count = 0 Then
While (tabuleiro(random_pos(1), random_pos(2)) = 1 Or tabuleiro(random_pos(1), random_pos(2)) = 3)
random_pos(1) = Rnd*29
random_pos(2) = Rnd*29
Wend
alimento_pos(1) = random_pos(1)
alimento_pos(2) = random_pos(2)
End If
End Sub
'=====================================================
'--------- Loop do Jogo -----------
'=====================================================
While (Not Multikey(SC_ESCAPE) And Inkey$ <> Chr(255) + "k")
gen_tabuleiro ()
gen_alimento ()
render()
controle()
colisao()
gen_loop()
Sleep(30, 1)
If loop_count = 0 Then
If colidio = 1 Then
colidio = 0
nivel -= 1
fase -= 1
vidas -= 1
proximo_nivel()
End If
If alimento = comprimento And nivel = 15 Then
Cls()
Draw String (280, 200), "Tu Venceu!!!"
Screencopy()
Sleep
Sleep
Exit While
End If
If alimento = comprimento Then
proximo_nivel()
If nivel = 6 Then
fase = 1
speed += 1
End If
If nivel = 11 Then
fase = 1
speed += 1
End If
End If
If vidas = 0 Then
Cls()
Draw String (280, 200), "Tu morreu..."
Screencopy()
Sleep
Exit While
End If
End If
Wend
End
Off: A snake ficou parecendo uma peça de tetris na screen mas é só coincidência =P
t+
Convidad- Convidado
Re: FreeBasic - Código completo Snake
Gostei das suas modificações, esse design retrô no estilo de um mini-game muito ficou show!!!
Quanto as mudança, vale tudo homi, desde que você saiba o que está fazendo, e você eu já pude ver que sabe...
Quanto as mudança, vale tudo homi, desde que você saiba o que está fazendo, e você eu já pude ver que sabe...
tblima123- Ocasional
- Mensagens : 54
Data de inscrição : 06/11/2009
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos
|
|
Qua 16 Mar 2011, 08:49 por vinians
» C++? ajuda
Qui 17 Fev 2011, 16:42 por Henrique_GJ
» dúvida em centralizar arma e player
Dom 30 Jan 2011, 17:08 por AndersonXD
» GO linguagem de programação da Google !!
Qui 27 Jan 2011, 21:04 por vinians
» [Duvida]esqueci o código pra mudar o tamanho da room
Qui 13 Jan 2011, 15:12 por mystery_boy_maker
» show_message_ext duvida
Qua 22 Dez 2010, 21:36 por mystery_boy_maker
» Testes com C & Allegro
Seg 13 Dez 2010, 14:31 por vinians
» FreeBasic - Código completo Snake
Seg 13 Dez 2010, 11:13 por tblima123
» Me apresentando...
Sáb 11 Dez 2010, 22:26 por vinians
» URL Reverse
Sáb 11 Dez 2010, 22:23 por vinians