Esse desafio é baseado em uma proposta do grupo usenet rec.games.roguelike.development há alguns anos. Não consigo encontrar a postagem original do grupo de notícias, mas você pode conferir o repositório de soluções do Github . Foi jogado apenas em alguns idiomas e eu adoraria ver mais!
Objetivo
O objetivo é criar um programa que apresente uma visão de cima para baixo de uma masmorra usando caracteres ascii. Haverá um @
sinal representando o jogador que pode ser movido através do espaço livre na masmorra (representado por ), embora ele não possa passar através das paredes (representado por
#
).
O mapa da masmorra deve ficar assim:
#### ####
# # # #
# #### #
# #
## ##
# #
# #
## ##
# #
# #### #
# # # #
#### ####
O jogador deve começar no local {2,2}, onde {0,0} é o canto superior esquerdo.
Interface
O usuário precisa ser capaz de mover o player nas quatro direções principais usando as teclas de seta do teclado.
É necessário que haja alguma maneira de o usuário sair do programa. Ele não precisa ser uma saída normal (por exemplo, não importa se uma exceção é impressa).
O mapa e o jogador precisam ser desenhados antes que qualquer entrada seja recebida, e o jogador precisa ser atualizado após cada entrada.
Bibliotecas
Sinta-se livre para usar bibliotecas estabelecidas para entrada ou saída do console, como Maldições. Apenas mencione na sua resposta o que você está usando.
Pontuação
Este é o código de golfe, o código mais curto vence!
Respostas:
C,
257253 222220Usa em
system("cls")
vez de maldições (usesystem("clear")
para sistemas Linux) e um algoritmo inteligente para ajustar o mapa em um número de 8 dígitos. Teclas não estendidas encerram o programa, por exemplo, escape.EDIT: Agora também mostra seu herói abaixo do mapa usando em
a<230
vez dea<132
:Código:
fonte
putch
existe oputchar
que faz o mesmo, mas eu não sei como substituirgetch
- também existegetchar
, mas não funciona para mim - parece que não reconhece as teclas do cursor.Ruby 1.9 + Maldições (248)
fonte
Python
332319317A biblioteca de maldições python é oficialmente suportada apenas no linux. Existem outros não oficiais disponíveis para o Windows, mas não posso garantir que isso funcione com ele.
Para salvar alguns caracteres, codifiquei os códigos de teclas para cima, baixo, esquerda e direita. Isso pode causar problemas para algumas pessoas. Se isso não funcionar para ninguém, posso postar uma versão que deveria.
Use ctrl + c para sair. Você provavelmente precisará redefinir seu terminal após sair, mas o desafio disse especificamente que a saída não precisava ser agradável.
fonte
QBasic,
314313 bytesEsse tipo de problema simplesmente implora por uma solução QBasic.
Esse é o QBasic, que será expandido significativamente pelo formador automático. Mas, se você digitar esse código exato no IDE e pressionar F5, ele deverá ser executado. Testado em QB64 .
Explicação:
O mapa é codificado em linha como os bits dos números inteiros na
DATA
instrução (1 para espaço, 0 para parede). OFOR
loop aninhado os descompacta, armazenando valores verdadeiros na matriz 2Dw
e imprimindo#
ou deacordo. (Observe que é verdade no QBasic
-1
, por isso, adicionamos 35 ao invés de subtrair!) O player começa com 3,3 porque a maioria das coisas é indexada 1 no QBasic.Em seguida, inserimos um
GOTO
loop: imprima@
, obtenha entrada do teclado, converta em código de caracteres estendido e modifiquex
e comy
base em se o usuário pressionou L / U / R / D. Sew(x,y)
é verdade, então é um espaço e podemos nos mudar para lá; caso contrário, fique parado. Finalmente, a maneira mais curta que encontrei para sair é pressionando a tecla Tab (ASCII9
). Qualquer outra entrada nos leva de volta à primeiraLOCATE
instrução.Devo dizer que estou muito agradado por ter vencido o Python com uma resposta QBasic.
fonte