Zum Inhalt springen

Shell - Problem mit Schleife


Kadaj

Empfohlene Beiträge

Hallo, ich hab ein Problem mit meinem Shell-Script.

Ich habe damit begonnen Vier gewinnt mit einem Shell-Script zu schreiben.

Es ist erst zur Hälfte fertig, man kann es aber schon ausführen.

Die Eingabe der Felder und die Anzeige der Steine kann man bereits sehen, aber meine Überprüfung für die erste Reihe (hat ein Spieler bereits 4 Steine in einer Reihe) läuft nicht so richtig. Ich habe den Bereich mit #Anfang Schleife und #Ende Schleife markiert. Wenn Spieler 1 einen Stein reinwirft, dann geht der noch in die erste Schleife, aber bei allen anderen Würfen geht er nicht mehr in die Schleife (die innere Schleife) Um mir die Fehlerursache etwas genauer angeben zu lassen, habe ich vor in in der Schleife eine Variable an der jeweiligen Stelle umändern lassen, die ich beim nächsten durchlauf der äußeren Schleife dann anzeigen lasse. So habe ich schonmal herausgefunden, dass ein Spieler nicht gewinnt, wenn er in der unteren Reihe 4 Steine in einer Reihe hat, weil die innere Schleife nicht wieder durchläuft und somit der counter (xcombo und ocombo) nicht mehr hochzählt.

Ich habe jetzt schon eine Weile an dem Script gesessen und ohne Erfolg versucht herauszufinden wo mein Denkfehler ist, aber ich find es einfach nicht. Vielleicht sieht ja jemand von euch wo die Ursache dafür ist:(


#!/bin/bash

i=0

clear

until [ $i -eq 1 ]

do


echo "#########################################"

echo "# Herzlich Willkommen bei Vier gewinnt  #"

echo "#########################################"

echo ""

echo "* * * * * * * * M E N Ü * * * * * * * * *"

echo "                                         "

echo "*      (1) Spiel gegen den Computer     *"

echo "                                         "

echo "*       (2) Spieler gegen Spieler       *"

echo "                                         "

echo "*         (3) Highscore ansehen         *"

echo "                                         "

echo "*              (4) Credits              *"

echo "                                         "

echo "* * * * * * * * * * * * * * * * * * * * *"


sleep 0.5

clear


echo "#########################################"

echo "# Herzlich Willkommen bei Vier gewinnt  #"

echo "#########################################"

echo ""

echo " * * * * * * *  M E N Ü  * * * * * * * * "

echo "*                                       *"

echo "       (1) Spiel gegen den Computer      "

echo "*                                       *"

echo "        (2) Spieler gegen Spieler        "

echo "*                                       *"

echo "          (3) Highscore ansehen          "

echo "*                                       *"

echo "               (4) Credits               "

echo "*                                       *"

echo " * * * * * * * * * * * * * * * * * * * * "


sleep 0.5

clear


i=`expr $i + 1`


done



echo "#########################################"

echo "# Herzlich Willkommen bei Vier gewinnt  #"

echo "#########################################"

echo ""

echo "*************** M E N Ü *****************"

echo "*                                       *"

echo "*      (1) Spiel gegen den Computer     *"

echo "*                                       *"

echo "*       (2) Spieler gegen Spieler       *"

echo "*                                       *"

echo "*         (3) Highscore ansehen         *"

echo "*                                       *"

echo "*              (4) Credits              *"

echo "*                                       *"

echo "*****************************************"


read menue

case "$menue" in

1);;

2)

reihe1=(" " " " " " " " " " " " " " " ")

reihe2=(" " " " " " " " " " " " " " " ")

reihe3=(" " " " " " " " " " " " " " " ")

reihe4=(" " " " " " " " " " " " " " " ")

reihe5=(" " " " " " " " " " " " " " " ")

reihe6=(" " " " " " " " " " " " " " " ")


clear

echo "Bitte geben Sie den Name für Spieler 1 ein:"

read spieler1

echo "Bitte geben Sie den Name für Spieler 2 ein:"

read spieler2

clear


spaltencount=1

sieg=0

wurf=1

spieler=X

sieger="...Niemand, leider unentschieden"

count=1

xcombo=0

ocombo=0

test=0


until [ $sieg -eq 1 ]

do

clear


echo "||==========||==========||==========||==========||==========||==========||==========||"

echo "||          ||          ||          ||          ||          ||          ||          ||"

echo "||    ${reihe6[1]}     ||    ${reihe6[2]}     ||    ${reihe6[3]}     ||    ${reihe6[4]}     ||    ${reihe6[5]}     ||    ${reihe6[6]}     ||    ${reihe6[7]}     ||"

echo "||          ||          ||          ||          ||          ||          ||          ||"

echo "||==========||==========||==========||==========||==========||==========||==========||"

echo "||          ||          ||          ||          ||          ||          ||          ||"

echo "||    ${reihe5[1]}     ||    ${reihe5[2]}     ||    ${reihe5[3]}     ||    ${reihe5[4]}     ||    ${reihe5[5]}     ||    ${reihe5[6]}     ||    ${reihe5[7]}     ||"

echo "||          ||          ||          ||          ||          ||          ||          ||"

echo "||==========||==========||==========||==========||==========||==========||==========||"

echo "||          ||          ||          ||          ||          ||          ||          ||"

echo "||    ${reihe4[1]}     ||    ${reihe4[2]}     ||    ${reihe4[3]}     ||    ${reihe4[4]}     ||    ${reihe4[5]}     ||    ${reihe4[6]}     ||    ${reihe4[7]}     ||"

echo "||          ||          ||          ||          ||          ||          ||          ||"

echo "||==========||==========||==========||==========||==========||==========||==========||"

echo "||          ||          ||          ||          ||          ||          ||          ||"

echo "||    ${reihe3[1]}     ||    ${reihe3[2]}     ||    ${reihe3[3]}     ||    ${reihe3[4]}     ||    ${reihe3[5]}     ||    ${reihe3[6]}     ||    ${reihe3[7]}     ||"

echo "||          ||          ||          ||          ||          ||          ||          ||"

echo "||==========||==========||==========||==========||==========||==========||==========||"

echo "||          ||          ||          ||          ||          ||          ||          ||"

echo "||    ${reihe2[1]}     ||    ${reihe2[2]}     ||    ${reihe2[3]}     ||    ${reihe2[4]}     ||    ${reihe2[5]}     ||    ${reihe2[6]}     ||    ${reihe2[7]}     ||"

echo "||          ||          ||          ||          ||          ||          ||          ||"

echo "||==========||==========||==========||==========||==========||==========||==========||"

echo "||          ||          ||          ||          ||          ||          ||          ||"

echo "||    ${reihe1[1]}     ||    ${reihe1[2]}     ||    ${reihe1[3]}     ||    ${reihe1[4]}     ||    ${reihe1[5]}     ||    ${reihe1[6]}     ||    ${reihe1[7]}     ||"

echo "||          ||          ||          ||          ||          ||          ||          ||"

echo "||==========||==========||==========||==========||==========||==========||==========||"

echo ""

echo "       1           2           3           4           5           6           7       "



if [ "$spieler" = "X" ]

then

echo "$spieler1 ist am Zug:"

else

echo "$spieler2 ist am Zug:"

fi


echo $xcombo

echo $ocombo

echo $count

echo $test

echo $schleife

echo $count


read wurf


if [ "${reihe1[$wurf]}" = " " ]

then

reihe1[$wurf]=$spieler


elif [ "${reihe2[$wurf]}" = " " ]

then

reihe2[$wurf]=$spieler


elif [ "${reihe3[$wurf]}" = " " ]

then

reihe3[$wurf]=$spieler


elif [ "${reihe4[$wurf]}" = " " ]

then

reihe4[$wurf]=$spieler


elif [ "${reihe5[$wurf]}" = " " ]

then

reihe5[$wurf]=$spieler


elif [ "${reihe6[$wurf]}" = " " ]

then

reihe6[$wurf]=$spieler

fi


if [ "$spieler" = "X" ]

then

spieler=O

else

spieler=X

fi


schleife="nein"


#Anfang Schleife



until [ $count -eq 8 ]

do

schleife="nur anfang"

if [ "${reihe1[$count]}" = "X" ]


then

xcombo=`expr $xcombo + 1`

count=`expr $count + 1`

test=`expr $test + 1`

schleife="ja"

elif [ "${reihe1[$count]}" = "O" ]

then

schleife="elif"

ocombo=`expr $ocombo + 1`

count=`expr $count +1`

else

schleife="else"

count=`expr $count + 1`

xcombo=0

ocombo=0

fi


if [ $xcombo -eq 4 ]

then

sieger=$spieler1

sieg=1


elif [ $ocombo -eq 4 ]

then

sieger=$spieler2

sieg=1


fi

done



#Ende Schleife


done


echo "Der Gewinner ist: $sieger"


;;

3);;

4);;

esac

Bearbeitet von Kadaj
Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...