Jump to content
neves92

Duvida de como programar a parte de arrebentar linhas do tetris

Recommended Posts

neves92

O que se passa é o seguinte eu estou a fazer o jogo do tétris para a minha prova de final de curso (12º ano). Mas encontrei um problema quando faz linha e a linha deve arrebentar (isso já faz) e devia mover todas as linhas que estão a cima para baixo e não tou a conseguir...

Ai esta o meu projecto se alguém me poder ajudar agradecia imenso.

http://www.megaupload.com/?d=IQPBZ7WX

Obrigado

Share this post


Link to post
Share on other sites
neves92

ja tinha visto isso mas ele usou uma forma bastante complicada cujo a matéria que eu recebi e o tempo que tenho nao me permite estar a estudar aquilo tudo.

Share this post


Link to post
Share on other sites
xtrm0

Tens de fazer algo tipo assim:

Quando uma linha estiver completa:

1-Fazer o timer(motor de jogo) parar;

2-Fazer as peças dessa linha desaparecerem;

3-Para cada quadrado que esteja acima da posição da linha (a começar na linha acima da que rebentou, e a acabar no topo):

  1-Posição(y) += 1;

4-Recomeçar o timer(motor de jogo);


<Signature goes here>

Share this post


Link to post
Share on other sites
xtrm0

Não peças ajuda por msg privada, mete como um post, para que toda a gente possa saber as respostas.

Muda o sub arrebenta_linhas para:

    Sub arrebenta_linhas()
        conta = 0
        For i = linhas - 1 To 0 Step -1
            For y = 0 To colunas - 1
                If matriz(i, y) <> 0 Then
                    conta += 1
                End If
                If conta = colunas Then
                    For w = 0 To colunas - 1
                        matriz(i, w) = 0
                        tabuleiro(i, w).BackColor = Color.Black
                    Next
                    For a = i To 0 Step -1
                        For w = 0 To (colunas - 1)
                            matriz(a, w) = matriz(a - 1, w)
                            tabuleiro(a, w).BackColor = tabuleiro(a - 1, w).BackColor
                        Next
                    Next
                End If
            Next
            Me.Text = conta
            conta = 0
        Next
    End Sub


<Signature goes here>

Share this post


Link to post
Share on other sites
xtrm0

Mas esse não é o teu unico erro no código.

Devias meter tudo em animações usando timers, e usares threads, para poderes pausar a aplicação.

Alem disso, às vezes os blocos param de descer antes de chegarem ao fim.

Cria tambem graficos melhores. Em vez de usares backcolor usa imagens de blocos.

Falta-te um bloco (T):

...

'

Boa noite.


<Signature goes here>

Share this post


Link to post
Share on other sites
neves92

obrigado por me estarem a ajudar...

agora se me pudessem dizer como meto mais que uma musica ao mesmo tempo e como posso melhor então o design dos blocos agradecia imenso. Mas desde já o meu muito obrigado!

Share this post


Link to post
Share on other sites
xtrm0

Para melhorares o design, em vez de usares backcolor nos blocos, usa backgroundimage e mete imagens de blocos no projecto.

Para a musica só tenho tempo de te dizer no proximo fim-de-semana. Vou ter teste de ciencias e tenho de estudar.


<Signature goes here>

Share this post


Link to post
Share on other sites
neves92

vou fazer isso espero conseguir apagar as imagens secalhar vou deixar estar o fundo em backcolor e uso imagem só para as peças

Share this post


Link to post
Share on other sites
xtrm0

Ok. Aconselhe-te tambem a se mudares o fundo para alguma cor, pores a opacidade das casas pretas(sem nada) em 0%, de modo a se ver sempre a cor do fundo.


<Signature goes here>

Share this post


Link to post
Share on other sites
neves92

Estou com dois problemas que é quando se faz mais que uma linha só a primeira linha é que aparece a imagem da explosão o outro problema é que durante o jogo tenho a musica do tetris a tocar e quando explode queria uma musica de uma explosão mas a musica do tetris não devia parar mas para... Alguém me pode ajudar em algum destes problemas?

    Sub arrebenta_linhas()
        conta = 0
        Dim arrebentou As Integer = 0
        For i = linhas - 1 To 0 Step -1
            For e = 0 To colunas - 1
                If matriz(i, e) <> 0 Then
                    conta += 1
                End If
                If conta = colunas Then
                    arrebentou += 1
                    For w = 0 To colunas - 1
                        matriz(i, w) = 0
                        tabuleiro(i, w).BackgroundImage = explosao
                        'tabuleiro(i, w).Update()
                        tabuleiro(i, w).Refresh()
                        Sound.Play()
                    Next
                    If arrebentou <> 0 Then
                        score += 30 * arrebentou
                        lbscore.Text = score
                    End If
                    System.Threading.Thread.Sleep(400)
                    SomGeral.Load()
                    For a = i To 0 Step -1
                        For w = 0 To (colunas - 1)
                            matriz(a, w) = matriz(a - 1, w)
                            tabuleiro(a, w).BackgroundImage = tabuleiro(a - 1, w).BackgroundImage
                        Next
                        If a = 1 Then
                            arrebenta_linhas()
                        End If
                    Next
                End If
            Next
            Me.Text = conta
            conta = 0
        Next
        Linha = 1
        posx = 0
        posy = Int(colunas / 2)
        SomGeral.Load()
    End Sub

Share this post


Link to post
Share on other sites
neves92

Estou com dois problemas que é quando se faz mais que uma linha só a primeira linha é que aparece a imagem da explosão o outro problema é que durante o jogo tenho a musica do tetris a tocar e quando explode queria uma musica de uma explosão mas a musica do tetris não devia parar mas para... Alguém me pode ajudar em algum destes problemas?

    Sub arrebenta_linhas()
        conta = 0
        Dim arrebentou As Integer = 0
        For i = linhas - 1 To 0 Step -1
            For e = 0 To colunas - 1
                If matriz(i, e) <> 0 Then
                    conta += 1
                End If
                If conta = colunas Then
                    arrebentou += 1
                    For w = 0 To colunas - 1
                        matriz(i, w) = 0
                        tabuleiro(i, w).BackgroundImage = explosao
                        'tabuleiro(i, w).Update()
                        tabuleiro(i, w).Refresh()
                        Sound.Play()
                    Next
                    If arrebentou <> 0 Then
                        score += 30 * arrebentou
                        lbscore.Text = score
                    End If
                    System.Threading.Thread.Sleep(400)
                    SomGeral.Load()
                    For a = i To 0 Step -1
                        For w = 0 To (colunas - 1)
                            matriz(a, w) = matriz(a - 1, w)
                            tabuleiro(a, w).BackgroundImage = tabuleiro(a - 1, w).BackgroundImage
                        Next
                        If a = 1 Then
                            arrebenta_linhas()
                        End If
                    Next
                End If
            Next
            Me.Text = conta
            conta = 0
        Next
        Linha = 1
        posx = 0
        posy = Int(colunas / 2)
        SomGeral.Load()
    End Sub

alguém me sabe ajudar nisto please ?

Share this post


Link to post
Share on other sites
neves92

YA. acabo este ano o 12 ano do curso de gestão e programação de sistemas informáticos e tinha que fazer uma prova de aptidão profissional (PAP). E escolhi fazer o bomberman mas o stor disse que era preciso muitas horas e mudei para o 4 em linha mas em dezembro ja tinha quase feito e ele desafiou me a fazer o tetris e aqui ando eu.

Share this post


Link to post
Share on other sites
xtrm0

Esta nova versão do código não dá para testar.

O que é preciso fazer para começar o jogo?


<Signature goes here>

Share this post


Link to post
Share on other sites
xtrm0

Não aparece o jogo. Só aparece o rectangulo preto sem nada


<Signature goes here>

Share this post


Link to post
Share on other sites
xtrm0

Para a parte de arrebentar as linhas só tens de mudar:

                If conta = colunas Then
                    arrebentou += 1
                    For w = 0 To colunas - 1
                        matriz(i, w) = 0
                        tabuleiro(i, w).BackgroundImage = explosao
                        tabuleiro(i, e).Refresh()
                    Next
                    System.Threading.Thread.Sleep(400)

para

                If conta = colunas Then
                    arrebentou += 1
                    For w = 0 To colunas - 1
                        matriz(i, w) = 0
                        tabuleiro(i, w).BackgroundImage = explosao
                        tabuleiro(i, w).Refresh()
                    Next
                    System.Threading.Thread.Sleep(400)


<Signature goes here>

Share this post


Link to post
Share on other sites
xtrm0

Nao. Vai ao forum msdn dos E.U.A. e pergunta. Eles respondem-te para aí em dois dias. Se  não te responderem mete aqui um post que eu tento resolver.


<Signature goes here>

Share this post


Link to post
Share on other sites
jviana

Nao. Vai ao forum msdn dos E.U.A. e pergunta. Eles respondem-te para aí em dois dias. Se  não te responderem mete aqui um post que eu tento resolver.

Acho que quiseste dizer App (Aplicação), podes postar aqui uns Screenshot's?

Cumps. J.Viana


Learning

  • VB.Net
  • HTML
  • C/C++

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.