Hola, pues he seguido con mi proyecto del motor físico en bash, así que les dejo la siguiente actualización, (aunque no la ultima), en esta versión ya se corrigieron algunos bugs y se implementaron cosas.
Bugs reparados:
Implementaciones:
Por ahora eso es todo, todavía tiene muchos bugs, pero va mejorando poco a poco, sin más les dejo el codigo:
#!/bin/bash
#################
##Proyecto MFG1##
#################
#By GilgamesH Co#
#######2010######
#################
py=2
px=2
mov(){
tput cup $1 $2
}
key(){
read -t 0.2 -n 1 $1
}
ox=4
oy=8
lim=( "4 2" "4 3" "4 4" "4 5" "4 6" "4 7" "7 11" "7 12" "7 13" "9 0" "9 1" "9 2" "9 3" "9 4" "9 5" "9 6" "9 7" "9 8" "9 9" "9 10" "9 11" "9 12" "9 13" "9 14" "11 5" "11 6" "11 7" "11 8" "11 9" "11 10" "11 11" "11 12" "11 13" "11 14" "11 15" "11 16" "11 17" "13 0" "13 1" "13 2" "13 3" "15 0" "15 1" "15 2" "15 3" "18 0" "18 1" "18 2" "18 3" "18 4" "18 5" "18 6" "18 7" "18 8" "18 9" "18 10" "18 11" "18 12" "18 13" "18 14" "18 15" "18 17" "18 18")
llen=19
llen1="${#lim[@]}"
salto=3
while [ 1 = 1 ]
do
clear
echo
echo
echo
echo
echo " XXXXXX"
echo
echo
echo " XXX"
echo
echo "XXXXXXXXXXXXXXX"
echo
echo " XXXXXXXXXXXXX"
echo
echo "XXXX"
echo
echo "XXXX"
echo
echo
echo "XXXXXXXXXXXXXXXXXX"
mov $py $px
echo -n "M"
mov $oy $ox
echo -n "N"
mov 0 0
key err
py=$(($py+1))
oy=$((oy+1))
if [ $err = d ]
then
px=$(($px+1))
fi
if [ $err = w ]
then
if [ $salto = 0 ]
then
py=$(($py-3))
salto=99999
fi
fi
if [ $err = a ]
then
px=$(($px-1))
fi
while [ $px -lt 0 ]
do
px=$(($px+1))
done
while [ $px -ge $(($llen-1)) ]
do
px=$(($px-1))
done
for i in `seq 0 $llen1`
do
if [ "$py $px" = "${lim[$i]}" ]
then
py=$(($py-1))
salto=0
fi
done
for i in `seq 0 $llen1`
do
if [ "$oy $ox" = "${lim[$i]}" ]
then
oy=$(($oy-1))
fi
done
if [ $salto != 0 ]
then
salto=$((salto-1))
fi
if [ $ox -lt 0 ]
then
ox=0
fi
if [ $ox = $llen ]
then
ox=$((ox-1))
fi
if [ "$px $py" = "$ox $oy" ]
then
if [ $lx -lt $ox ]
then
ox=$((ox+1))
if [ $px = $ox ]
then
px=$((px+1))
fi
fi
if [ $lx -gt $ox ]
then
ox=$((ox-1))
if [ $px = $ox ]
then
px=$((px-1))
fi
fi
if [ $ly -lt $oy ]
then
py=$((py-1))
fi
fi
lx=$px
ly=$py
done
El funcionamiento es el mismo que el anterior, solo se le agrego una comparación para ver si el personaje esta en el suelo o no, para evitar los saltos en el aire; y también se le aplico la misma física (si se le puede decir así) a la caja, (la "N"), asi que la pueden empujar por los bordes, pero no fuera de los limites (o si ¬¬|| XD).
Les pido que si ven que tiene algún bug, por favor me lo reporten para corregirlo.
Saludos
Pruebalo asi, alli ya hay un ejemplo, pero si quieres algo distinto dime y lo hago.
Saludos.