Seu programa precisa usar uma sequência de linhas múltiplas, assim:
#############
# #
# p #
# #
#############
p
é o jogador e #
é um bloco.
Agora abaixo disso, no terminal, deve haver uma linha de entrada dizendo:
How do you want to move?
Se o jogador digitar que l
ele terá que andar para a esquerda quando não houver um bloco, caso contrário, quando houver um bloco, ele não poderá passar e não se moverá, é claro, agora a saída no terminal deve ser atualizada ( e a saída anterior limpa / substituída):
#############
# #
# p #
# #
#############
Ele pode digitar l
para esquerda, r
para direita, u
para cima e d
para baixo.
A entrada sempre será multilinha, mas nem sempre será preenchida com espaços em um retângulo perfeito. Além disso, os hashes podem estar em qualquer lugar da string e nem sempre serão conectados um ao outro. Por exemplo:
## ##
# #
## p
#
é uma masmorra válida. (observe a falta de espaços à direita em cada linha)
Se o jogador sair da corda, ele não precisa ser exibido. Mas se ele voltar mais tarde, ele deve ser exibido novamente.
E os limites de "fora" da corda são a length(longest_line)
pelo number_of_lines
retângulo, por isso mesmo se uma linha não é preenchido com espaços à direita, esse local não é considerado fora dos limites. Exemplo usando o calabouço anterior:
## ##
# #p
##
#
A segunda linha não tinha um espaço onde o p está agora, mas isso não importa.
Finalmente, seu programa deve fazer um loop para sempre, recebendo informações.
Casos de teste
Caso de teste 1:
####
# p#
#
####
How do you want to move?
d
####
# #
# p
####
Caso de teste 2:
####
p#
#
####
How do you want to move?
l
####
p #
#
####
How do you want to move?
d
####
#
p #
####
How do you want to move?
l
####
#
p #
####
How do you want to move?
l
####
#
#
####
How do you want to move?
r
####
#
p #
####
Claro, estes não estão completos. Seu código deve repetir para sempre e limpar a tela entre cada saída .
Sua saída pode solicitar entrada como How do you want to move?\n<input>
ou How do you want to move?<input>
( ou seja, você não precisa da entrada em uma linha em branco) e não precisa de uma linha vazia entre a linha final da masmorra e a solicitação. (eles não podem estar na mesma linha)
As brechas padrão não são permitidas! Isso é código-golfe, então o código mais curto em bytes vence!
l
,r
,u
oud
) pode ser qualquer coisa, e não apenas "Como você deseja mover"? Realmente não afeta as respostas, exceto no campo de golfe.Respostas:
MATLAB,
268247246 bytesProvavelmente não é competitivo, mas foi divertido. Versão Golfed:
Versão legível:
Os
try
blocos são para impedir que a função falhe em erros fora dos limites. Tenho certeza de que dois deles são um exagero, mas não posso jogar melhor do que isso.Vale a pena notar que o MATLAB expandirá a matriz para baixo e para a direita, mas o jogador desaparecerá quando se mudar para uma área 'inexplorada' pela primeira vez. Por exemplo, se você sair dos limites atuais da masmorra para a direita em um espaço, desaparecerá, mas no próximo turno o MATLAB expandirá a matriz para incluir a nova coluna (ou linha, se você estiver se movendo para baixo).
'#'==d(y,x)
economiza um byte comparado ad(y,x)=='#'
, já que você não precisa de um espaço entreif
e'#'
fonte
Script de café: 580 bytes
Eu espremi tudo que pude desse algoritmo em particular e do meu cérebro cansado. Eu preciso de ferias.
fonte