Precisso de ajuda pra criar um game em shell script [RESOLVIDO]

1. Precisso de ajuda pra criar um game em shell script [RESOLVIDO]

Ermesson
Satan_666

(usa Kali)

Enviado em 02/02/2022 - 16:03h

Entao

eu tô querendo fazer um jogo em shell script / bash, um jogo bem simples só pra aprendizado e diversão
eu já fiz quase tudo, só falta eu conseguir fazer o personagem se movimentar no terminal do usuário

tipo:

A > personagem vai para a esquerda
D > personagem vai para a direita

Mas eu não sei como posso fazer isso
e se eu tentar o personagem no maximo fica virando pro lado e pro outro kkkkkkk
mas eu quero que ele meio que caminhe no terminal

Alguém por favor, sabe como eu posso fazer isso?






  


2. Re: Precisso de ajuda pra criar um game em shell script

Samuel Leonardo
SamL

(usa XUbuntu)

Enviado em 02/02/2022 - 17:10h

É bem fácil fazer isso, mas precisaria saber como é esse personagem no terminal:
1-é apenas um caractere?
2-ou é mais de um caratere?
3-ou é uma imagem estilo aquele jogo do super mario em shell script?

Pro caso 1 e 2, basta você fazer um loop infinito e então ler a tecla pra mover a cada iteração do loop.
[não sei shell scrip mas sei o algoritmo]
É assim:
while (1)
imprima na tela o jogo
leia a tecla
fimwhile


Pro caso 3 é preciso, além do loop infinito, também um modo de esperar alguns segundos antes de voltar desenhar na tela:
while (1)
imprima na tela o jogo
espere 33 milissegundos antes de reiniciar o loop
fimwhile


Esse é o mais básico conceito de jogos e engine design.


3. Precisso de ajuda pra criar um game em shell script

Ermesson
Satan_666

(usa Kali)

Enviado em 02/02/2022 - 21:36h

Eu quero que o personagem esteja em uma variavel
tipo:

personagem="
(*-*)
"

mas toda a vez que eu tento usar o comando while ele imprime o personagem em outra linha

e eu quero que ele ande no terminal
(*-*) (*-*)

tipo pra ele se movimentar na tela

mas quando eu uso eu tento fazer

assim:
while ((1)) ; do
read -n1 _tecla
case "$_tecla" in
d)
echo "_Herry"
sleep 0.33
;;

a)
echo -en "$Herryc"
sleep 0.33
;;

esac
done

ele imprime o personagem em uma outra linha


4. Re: Precisso de ajuda pra criar um game em shell script [RESOLVIDO]

José Lucas
NidoBr

(usa Manjaro Linux)

Enviado em 02/02/2022 - 23:20h


Seria isso que você quer?
#!/bin/bash

personagem="(*-*)"


while ((1)); do
read -s -n 1 _tecla
case $_tecla in
d)
printf "$personagem"
sleep 0.33
;;
a)
printf "$personagem"
sleep 0.33
;;
esac
done


Tenho algumas dicas:
A opção "-s" do read serve para ele não exibir o que esta sendo digitado e a variável
personagem="
(*-*)
"
vai exibir em outra linha mesmo, já que é exibido tudo o que esta entre as aspas, inclusive a quebra de linha, use personagem="(*-*)" no lugar.

Já usar o "printf" no lugar do "echo" é pelas suas opções de formatação. recomendo que pesquise a fundo o funcionamento dele, tem muitas opção de formatação que acredito que serão de grande ajuda para o que você quer fazer.


5. Re: Precisso de ajuda pra criar um game em shell script

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 03/02/2022 - 03:26h

Satan_666 escreveu:

Eu quero que o personagem esteja em uma variavel
tipo:

personagem="
(*-*)
"

mas toda a vez que eu tento usar o comando while ele imprime o personagem em outra linha

e eu quero que ele ande no terminal
(*-*) (*-*)

tipo pra ele se movimentar na tela

mas quando eu uso eu tento fazer

assim:
while ((1)) ; do
read -n1 _tecla
case "$_tecla" in
d)
echo "_Herry"
sleep 0.33
;;

a)
echo -en "$Herryc"
sleep 0.33
;;

esac
done

ele imprime o personagem em uma outra linha

Bom dia,
sugestão de como usar o printf:
printf "\e[6;12f %s" "(*-*)" 

Imprime na linha 6 => \e[6
Deixa 12 colunas de margem => ;12f
É só definir a linha é a coluna, aceita variáveis.....
----------------------------------------------------------------------------------------------------------------
Caminhando:
for ((i=0;i<=60;i++)) { printf "\e[2;${i}f %s" "(*-*)";sleep 0.0625;};echo
______________________________________________________________________
Importante:
lynx --dump https://www.vivaolinux.com.br/termos-de-uso/ | sed -nr '/^[ ]+Se/,/dou.$/p'
______________________________________________________________________
Nota de esclarecimento:
O comando: ACIMA, faz parte da minha assinatura.
Att.: Marcelo Oliver
______________________________________________________________________



6. Re: Precisso de ajuda pra criar um game em shell script [RESOLVIDO]

Samuel Leonardo
SamL

(usa XUbuntu)

Enviado em 03/02/2022 - 10:26h


msoliver escreveu:

Satan_666 escreveu:

Eu quero que o personagem esteja em uma variavel
tipo:

personagem="
(*-*)
"

mas toda a vez que eu tento usar o comando while ele imprime o personagem em outra linha

e eu quero que ele ande no terminal
(*-*) (*-*)

tipo pra ele se movimentar na tela

mas quando eu uso eu tento fazer

assim:
while ((1)) ; do
read -n1 _tecla
case "$_tecla" in
d)
echo "_Herry"
sleep 0.33
;;

a)
echo -en "$Herryc"
sleep 0.33
;;

esac
done

ele imprime o personagem em uma outra linha

Bom dia,
sugestão de como usar o printf:
printf "\e[6;12f %s" "(*-*)" 

Imprime na linha 6 => \e[6
Deixa 12 colunas de margem => ;12f
É só definir a linha é a coluna, aceita variáveis.....
----------------------------------------------------------------------------------------------------------------
Caminhando:
for ((i=0;i<=60;i++)) { printf "\e[2;${i}f %s" "(*-*)";sleep 0.0625;};echo
______________________________________________________________________

Isso ai que o marcelo indicou é pra mover o personagem pelo terminal.
Usando a mesma lógica, tu deve ter duas variáveis no mínimo pra mover o personagem:
uma para a posição horizontal e outra para a posição vertical
Sendo assim, quando for pra desenhar o personagem, tu precisa pegar o printf ali do marcelo e adaptar para conter as duas variáveis de posição.

Aqui tem um exemplo:
https://stackoverflow.com/questions/67307353/write-a-shell-script-to-display-any-string-at-given-x-y...[*****]
Só trocar o "20:10" pela variável de posição horizontal e vertical.


7. Re: Precisso de ajuda pra criar um game em shell script

Ermesson
Satan_666

(usa Kali)

Enviado em 04/02/2022 - 12:40h

Boa tarde, já fiz todas as variaveis que definem a posição do personagem e funcionou,
mas com o personagem pequeno, assim:

Personagem=(*-*)

mas eu quero que funcione com o personagem tipo assim:

personagem="
[\_/]
(*-*)
/ \
------
"
obs: não esse que está aí acima, isso foi só um exemplo
mas quando eu vou imprimir o personagem na tela ele não se move e só se move quando eu defino o personagem
bem pequeno

meu codigo aqui

personagem="
[\_/]
(*-*)
/ \
------
"

posicion_y=10
posicion_x=50
velocity=5

while ((1)) ; do
read -s -n1 _tecla
case "$_tecla" in
d|D)
clear
soma=$(echo $(($posicion_y + $velocity)))
velocity=$soma
printf "\e[${posicion_x};${soma}f %s" "$personagem"

;;

esac
done

ele só consegue exibir uma unica linha do personagem


8. Re: Precisso de ajuda pra criar um game em shell script

Samuel Leonardo
SamL

(usa XUbuntu)

Enviado em 04/02/2022 - 16:04h

Satan_666 escreveu:

Boa tarde, já fiz todas as variaveis que definem a posição do personagem e funcionou,
mas com o personagem pequeno, assim:

Personagem=(*-*)

mas eu quero que funcione com o personagem tipo assim:

personagem="
[\_/]
(*-*)
/ \
------
"
obs: não esse que está aí acima, isso foi só um exemplo
mas quando eu vou imprimir o personagem na tela ele não se move e só se move quando eu defino o personagem
bem pequeno

meu codigo aqui

personagem="
[\_/]
(*-*)
/ \
------
"

posicion_y=10
posicion_x=50
velocity=5

while ((1)) ; do
read -s -n1 _tecla
case "$_tecla" in
d|D)
clear
soma=$(echo $(($posicion_y + $velocity)))
velocity=$soma
printf "\e[${posicion_x};${soma}f %s" "$personagem"

;;

esac
done

ele só consegue exibir uma unica linha do personagem

Tem de rever essa "soma" ai, porque fazer posicao_y + velocity na verdade você está movendo no eixo Y, porém, essa soma NÃO é pra ser a nova velocidade.
posicao_y + velocity é pra ser colocado como a nova posicao_y, e velocity fica como está sem mudar.

Exemplo:
Quero mover o personagem pra baixo:
1-coloco velocity como igual a 5
2-então, no loop, faço posicao_y = posicao_y + velocity
Se quero parar de mover o personagem, apenas faço: velocity = 0;

Então, se quero mover apenas o personagem no eixo X ou Y? como fica?
Será preciso uma velocity para X e outra para Y.
Assim, basta criar uma variável para cada um dos eixos.
E se quiser mover pra direita sem mover em Y?
COm a nova variável de velocidade x, faça velocity_x = 5
Se quiser parara, faça: velocity_x = 0
Se quiser ir pra esquerda, faça: velocity_x = -5
E então, pra de fato mover, tem de somar posicao_x = posicao_x + velocity_x, todo tempo dentro do loop.


9. Re: Precisso de ajuda pra criar um game em shell script [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 04/02/2022 - 18:50h


Satan_666 escreveu:

Boa tarde, já fiz todas as variaveis que definem a posição do personagem e funcionou,
mas com o personagem pequeno, assim:

Personagem=(*-*)

mas eu quero que funcione com o personagem tipo assim:

personagem="
[\_/]
(*-*)
/ \
------
"
obs: não esse que está aí acima, isso foi só um exemplo
mas quando eu vou imprimir o personagem na tela ele não se move e só se move quando eu defino o personagem
bem pequeno

meu codigo aqui

personagem="
[\_/]
(*-*)
/ \
------
"

posicion_y=10
posicion_x=50
velocity=5

while ((1)) ; do
read -s -n1 _tecla
case "$_tecla" in
d|D)
clear
soma=$(echo $(($posicion_y + $velocity)))
velocity=$soma
printf "\e[${posicion_x};${soma}f %s" "$personagem"

;;

esac
done

ele só consegue exibir uma unica linha do personagem

Divida o personagem.
p1='[\_/]';p2='(*-*)';p3='/ \';p4='-----';
printf "\e[5;10f%s\e[6;10f%s\e[7;10f%s\e[8;10f%s\n" "$p1" "$p2" " $p3 " "$p4"



[\_/]
(*-*)
/ \
-----





______________________________________________________________________
Importante:
lynx --dump https://www.vivaolinux.com.br/termos-de-uso/ | sed -nr '/^[ ]+Se/,/dou.$/p'
______________________________________________________________________
Nota de esclarecimento:
O comando: ACIMA, faz parte da minha assinatura.
Att.: Marcelo Oliver
______________________________________________________________________







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts