Conectar-se

Esqueci minha senha

Últimos assuntos
» Novo endereço da XCreator
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...
Sab 11 Dez 2010, 22:26 por vinians

» URL Reverse
Sab 11 Dez 2010, 22:23 por vinians

Parceiros
Seja nosso parceiro, adicione nosso button em seu portal!


• • •

• • •

• • •
[parceiro 3]

FreeBasic - Código completo Snake

Ir em baixo

FreeBasic - Código completo Snake

Mensagem por tblima123 em Qui 09 Dez 2010, 17:02

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)
avatar
tblima123
Ocasional

Mensagens : 54
Data de inscrição : 06/11/2009

Voltar ao Topo Ir em baixo

Re: FreeBasic - Código completo Snake

Mensagem por Convidad em Sab 11 Dez 2010, 11:53

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

Convidad
Convidado


Voltar ao Topo Ir em baixo

Re: FreeBasic - Código completo Snake

Mensagem por tblima123 em Sab 11 Dez 2010, 15:15

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 Wink
avatar
tblima123
Ocasional

Mensagens : 54
Data de inscrição : 06/11/2009

Voltar ao Topo Ir em baixo

Re: FreeBasic - Código completo Snake

Mensagem por vinians em Sab 11 Dez 2010, 22:20

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:
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 Very Happy

_________________
we love to make games!
avatar
vinians
Editor

Masculino
Mensagens : 85
Data de inscrição : 24/08/2009
Localização : Rio de Janeiro

http://www.xcreator.com.br

Voltar ao Topo Ir em baixo

Re: FreeBasic - Código completo Snake

Mensagem por tblima123 em Dom 12 Dez 2010, 12:19

Vinians, tu é o bicho!!!

Cara, como eu que deichei acontecer uma cagada desse meu!!! Mad

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.
avatar
tblima123
Ocasional

Mensagens : 54
Data de inscrição : 06/11/2009

Voltar ao Topo Ir em baixo

Re: FreeBasic - Código completo Snake

Mensagem por Convidad em Dom 12 Dez 2010, 12:59

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

Convidad
Convidado


Voltar ao Topo Ir em baixo

Re: FreeBasic - Código completo Snake

Mensagem por Convidad em Seg 13 Dez 2010, 10:13

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)


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


Voltar ao Topo Ir em baixo

Re: FreeBasic - Código completo Snake

Mensagem por tblima123 em Seg 13 Dez 2010, 11:13

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...
avatar
tblima123
Ocasional

Mensagens : 54
Data de inscrição : 06/11/2009

Voltar ao Topo Ir em baixo

Re: FreeBasic - Código completo Snake

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum