Fórum PiR2
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Snake game em Python

2 participantes

Ir para baixo

Snake game em Python Empty Snake game em Python

Mensagem por Renan Phoenix Seg 27 Set 2021, 20:10

Olá. Como faço para desenvolver um programa que simule a movimentação de uma serpente em um tabuleiro, porém sem a utilização de listas, matrizes, "for" (basicamente só pode "while", "if", "else", "True", "False", "and" e "or"). As variáveis que são solicitadas ao jogador são a posição inicial da cabeça da serpente, o tamanho do seu corpo, os números de linhas e de colunas do tabuleiro, e a sequência que corresponde a movimentação da serpente. Como sou iniciante gostaria de ajuda de alguém por favor. Abaixo segue o código que desenvolvi até o momento, mas que não estou conseguindo avançar mais.


nlinhas = int(input("nlinhas: "))
ncolunas = int(input("ncolunas: "))
x = int(input("x: "))
y = int(input("y: "))
tam = int(input("tam: "))
mov = int(input("mov: "))

# Impressão do tabuleiro

memoria_col_1 = ncolunas  # Permite reutilizar o valor inicial do número de colunas
memoria_col_2 = ncolunas

# Impressão da borda do topo:

bordas = 2
while ncolunas + bordas > 0:
    print("X", end = " ")
    ncolunas -= 1
print()

# Impressão do centro do tabuleiro com suas bordas laterais:

x0 = x - 1

j = 0
while j < nlinhas:
    i = 0
    while i <= memoria_col_1 + bordas:
        if i == 0:
            print("X", end = " ")
            i += 1

        elif x == i - bordas and y == j:   # Define a posição da cabeça da cobra
            print("C", end = " ")

        elif x0 == i - bordas and y == j:  # Define a posição do ínicio do corpo da cobra
            print("O", end = " ")
                  
        elif i == memoria_col_1 + bordas:
            print("X", end = " ")
            i += 1
            
        else:
            print("L", end = " ")        
        i += 1
    print()
    j += 1

# Impressão da borda da base:

while memoria_col_2 + bordas > 0:
    print("X", end = " ")
    memoria_col_2 -= 1
print()
Renan Phoenix
Renan Phoenix
Recebeu o sabre de luz
Recebeu o sabre de luz

Mensagens : 137
Data de inscrição : 22/01/2015
Idade : 29
Localização : Brasil

Ir para o topo Ir para baixo

Snake game em Python Empty Re: Snake game em Python

Mensagem por tales amaral Ter 28 Set 2021, 12:32

Salve, chapa  lol!. Um jeito seria colocar esse trecho aí que printa o tabuleiro em um while e ir atualizando a posição da cabeça. Um exemplo:

Código:
mov = int(input())
while mov!=0:
 x+=mov
 """
 trecho muito epico que printa o tabuleiro
 baseado na posicao da cabeca
 """
 mov = int(input())




Se você puder elaborar mais como você quer mover a minhoca ajudaria bastante. Enfim, eis algumas dicas para reduzir teu código:


Os trechos abaixo podem ser reescritos:
Código:
# Impressão da borda do topo:

bordas = 2
while ncolunas + bordas > 0:
    print("X", end = " ")
    ncolunas -= 1
print()

Código:
# Impressão da borda da base:

while memoria_col_2 + bordas > 0:
    print("X", end = " ")
    memoria_col_2 -= 1
print()


Como:

Código:
# Impressão da borda do topo:

bordas = 2
print("X "*(ncolunas+bordas))

e

Código:
# Impressão da borda da base:

print("X "*(bordas+ncolunas))


Multiplicar uma string por um número n retorna a string repetida n vezes. Ex:

Código:
>>> a = "tales"
>>> a*3
'talestalestales'


Com as alterações acima, você pode jogar fora as variáveis memoria_col_1 e memoria_col_2.


Quanto ao seus 2 whiles, eu sugiro criar uma string que vai recebendo os caracteres invés de fazer vários prints. Um exemplo de como ficaria o trecho:

Código:
# Impressão do centro do tabuleiro com suas bordas laterais:

x0 = x - 1

j = 0
while j < nlinhas:
    i = 0
    while i <= ncolunas + bordas:
        if i == 0:
            print("X", end = " ")
            i += 1

        elif x == i - bordas and y == j:   # Define a posição da cabeça da cobra
            print("C", end = " ")

        elif x0 == i - bordas and y == j:  # Define a posição do ínicio do corpo da cobra
            print("O", end = " ")
                  
        elif i == ncolunas + bordas:
            print("X", end = " ")
            i += 1
            
        else:
            print("L", end = " ")        
        i += 1
    print()
    j += 1

Após a adição de uma string auxiliar:

Código:
# Impressão do centro do tabuleiro com suas bordas laterais:

x0 = x - 1

j = 0
while j < nlinhas:
    i = 0
    linha = "X" #String inicializada com caractere da borda esquerda
    while i < ncolunas:
        if i == x and j == y:   # Define a posição da cabeça da cobra
            linha+= " C"
        elif i == x0 and j == y:  # Define a posição do ínicio do corpo da cobra
            linha+= " O"
        else:
            linha+= " L"      
        i += 1
        
    linha+= " X" # adicionando borda da direita
    print(linha)
    j += 1


Continuando nos dois whiles: o código não tá levando em conta o tamanho da cobra, mudar esse if pode mudar isso:

Código:
elif i == x0 and j == y:  # Define a posição do ínicio do corpo da cobra
            linha+= " O"
tales amaral
tales amaral
Padawan
Padawan

Mensagens : 99
Data de inscrição : 02/05/2020
Idade : 17
Localização : ES

Ir para o topo Ir para baixo

Ir para o topo


 
Permissões neste fórum
Você não pode responder aos tópicos