• [^] # Re: Le script, il sent fort de la bouche ?

    Posté par . En réponse au message Multi utilisateurs d'un script. Évalué à 1.

    Pour ceux que ca interresse
    Le code entier qui fonctionne (presqe)
    il faut lancer le script dans 2 sessions pour qu'il fonctionne

    #!/bin/bash
    # Othello 2005
    #
    # ordre du script:
    #
    # attente
    # suite
    # tir
    # tableau
    # joue
    # convertisseur
    # convere
    # suite
    # .
    # .
    # .
    #
    #
    #

    echo "**************************************"
    echo "** **"
    echo "** O T H E L L O **"
    echo "** **"
    echo "**************************************"
    echo ""
    echo ""
    echo "Appuyez sur pour continuer"
    read startttt
    echo ""
    echo ""
    # placement de "." dans les variables du "tableau"
    echo "." >A1;echo "." >A2;echo "." >A3;echo "." >A4;echo "." >A5;echo "." >A6;echo "." >A7;echo "." >A8;echo "." >B1;echo "." >B2;echo "." >B3;echo "." >B4;echo "." >B5;echo "." >B6;echo "." >B7;echo "." >B8;echo "." >C1;echo "." >C2;echo "." >C3;echo "." >C4;echo "." >C5;echo "." >C6;echo "." >C7;echo "." >C8;echo "." >D1;echo "." >D2;echo "." >D3;echo "." >D4;echo "." >D5;echo "." >D6;echo "." >D7;echo "." >D8;echo "." >E1;echo "." >E2;echo "." >E3;echo "." >E4;echo "." >E5;echo "." >E6;echo "." >E7;echo "." >E8;echo "." >F1;echo "." >F2;echo "." >F3;echo "." >F4;echo "." >F5;echo "." >F6;echo "." >F7;echo "." >F8;echo "." >G1;echo "." >G2;echo "." >G3;echo "." >G4;echo "." >G5;echo "." >G6;echo "." >G7;echo "." >G8;echo "." >H1;echo "." >H2;echo "." >H3;echo "." >H4;echo "." >H5;echo "." >H6;echo "." >H7;echo "." >H8


    tableau() # fonction qui trace le tableau
    { # on lit dans chaque fichier Xn sa valeur pour la placer dans le tableau
    read A1 <A1;read B1 <B1;read C1 <C1;read D1 <D1;read E1 <E1;read F1 <F1;read G1 <G1;read H1 <H1;read A2 <A2;read B2 <B2;read C2 <C2;read D2 <D2;read E2 <E2;read F2 <F2;read G2 <G2;read H2 <H2;read A3 <A3;read B3 <B3;read C3 <C3;read D3 <D3;read E3 <E3;read F3 <F3;read G3 <G3;read H3 <H3;read A4 <A4;read B4 <B4;read C4 <C4;read D4 <D4;read E4 <E4;read F4 <F4;read G4 <G4;read H4 <H4;read A5 <A5;read B5 <B5;read C5 <C5;read D5 <D5;read E5 <E5;read F5 <F5;read G5 <G5;read H5 <H5;read A6 <A6;read B6 <B6;read C6 <C6;read D6 <D6;read E6 <E6;read F6 <F6;read G6 <G6;read H6 <H6;read A7 <A7;read B7 <B7;read C7 <C7;read D7 <D7;read E7 <E7;read F7 <F7;read G7 <G7;read H7 <H7;read A8 <A8;read B8 <B8;read C8 <C8;read D8 <D8;read E8 <E8;read F8 <F8;read G8 <G8;read H8 <H8;

    # tableau a base d echo
    echo "-------------------------------------"
    echo "| | A | B | C | D | E | F | G | H |"
    echo "-------------------------------------"
    echo "| 1 | $A1 | $B1 | $C1 | $D1 | $E1 | $F1 | $G1 | $H1 |"
    echo "-------------------------------------"
    echo "| 2 | $A2 | $B2 | $C2 | $D2 | $E2 | $F2 | $G2 | $H2 |"
    echo "-------------------------------------"
    echo "| 3 | $A3 | $B3 | $C3 | $D3 | $E3 | $F3 | $G3 | $H3 |"
    echo "-------------------------------------"
    echo "| 4 | $A4 | $B4 | $C4 | $D4 | $E4 | $F4 | $G4 | $H4 |"
    echo "-------------------------------------"
    echo "| 5 | $A5 | $B5 | $C5 | $D5 | $E5 | $F5 | $G5 | $H5 |"
    echo "-------------------------------------"
    echo "| 6 | $A6 | $B6 | $C6 | $D6 | $E6 | $F6 | $G6 | $H6 |"
    echo "-------------------------------------"
    echo "| 7 | $A7 | $B7 | $C7 | $D7 | $E7 | $F7 | $G7 | $H7 |"
    echo "-------------------------------------"
    echo "| 8 | $A8 | $B8 | $C8 | $D8 | $E8 | $F8 | $G8 | $H8 |"
    echo "-------------------------------------"

    }
    convertisseur() # fonction qui convertit les Xn en nn, ex: B3 -> 32
    {
    case $shoot in
    A1) shoot=11 ;;
    A2) shoot=21 ;;
    A3) shoot=31 ;;
    A4) shoot=41 ;;
    A5) shoot=51 ;;
    A6) shoot=61 ;;
    A7) shoot=71 ;;
    A8) shoot=81 ;;
    B1) shoot=12 ;;
    B2) shoot=22 ;;
    B3) shoot=32 ;;
    B4) shoot=42 ;;
    B5) shoot=52 ;;
    B6) shoot=62 ;;
    B7) shoot=72 ;;
    B8) shoot=82 ;;
    C1) shoot=13 ;;
    C2) shoot=23 ;;
    C3) shoot=33 ;;
    C4) shoot=43 ;;
    C5) shoot=53 ;;
    C6) shoot=63 ;;
    C7) shoot=73 ;;
    C8) shoot=83 ;;
    D1) shoot=14 ;;
    D2) shoot=24 ;;
    D3) shoot=34 ;;
    D4) shoot=44 ;;
    D5) shoot=54 ;;
    D6) shoot=64 ;;
    D7) shoot=74 ;;
    D8) shoot=84 ;;
    E1) shoot=15 ;;
    E2) shoot=25 ;;
    E3) shoot=35 ;;
    E4) shoot=45 ;;
    E5) shoot=55 ;;
    E6) shoot=65 ;;
    E7) shoot=75 ;;
    E8) shoot=85 ;;
    F1) shoot=16 ;;
    F2) shoot=26 ;;
    F3) shoot=36 ;;
    F4) shoot=46 ;;
    F5) shoot=56 ;;
    F6) shoot=66 ;;
    F7) shoot=76 ;;
    F8) shoot=86 ;;
    G1) shoot=17 ;;
    G2) shoot=27 ;;
    G3) shoot=37 ;;
    G4) shoot=47 ;;
    G5) shoot=57 ;;
    G6) shoot=67 ;;
    G7) shoot=77 ;;
    G8) shoot=87 ;;
    H1) shoot=18 ;;
    H2) shoot=28 ;;
    H3) shoot=38 ;;
    H4) shoot=48 ;;
    H5) shoot=58 ;;
    H6) shoot=68 ;;
    H7) shoot=78 ;;
    H8) shoot=88 ;;
    esac
    }
    converse()
    { # idem fonction précédente à l envers
    case $conv in
    11) conv=A1 ;;
    12) conv=B1 ;;
    13) conv=C1 ;;
    14) conv=D1 ;;
    15) conv=E1 ;;
    16) conv=F1 ;;
    17) conv=G1 ;;
    18) conv=H1 ;;
    21) conv=A2 ;;
    22) conv=B2 ;;
    23) conv=C2 ;;
    24) conv=D2 ;;
    25) conv=E2 ;;
    26) conv=F2 ;;
    27) conv=G2 ;;
    28) conv=H2 ;;
    31) conv=A3 ;;
    32) conv=B3 ;;
    33) conv=C3 ;;
    34) conv=D3 ;;
    35) conv=E3 ;;
    36) conv=F3 ;;
    37) conv=G3 ;;
    38) conv=H3 ;;
    41) conv=A4 ;;
    42) conv=B4 ;;
    43) conv=C4 ;;
    44) conv=D4 ;;
    45) conv=E4 ;;
    46) conv=F4 ;;
    47) conv=G4 ;;
    48) conv=H4 ;;
    51) conv=A5 ;;
    52) conv=B5 ;;
    53) conv=C5 ;;
    54) conv=D5 ;;
    55) conv=E5 ;;
    56) conv=F5 ;;
    57) conv=F5 ;;
    58) conv=G5 ;;
    61) conv=A6 ;;
    62) conv=B6 ;;
    63) conv=C6 ;;
    64) conv=D6 ;;
    65) conv=E6 ;;
    66) conv=F6 ;;
    67) conv=G6 ;;
    68) conv=H6 ;;
    71) conv=A7 ;;
    72) conv=B7 ;;
    73) conv=C7 ;;
    74) conv=D7 ;;
    75) conv=E7 ;;
    76) conv=F7 ;;
    77) conv=G7 ;;
    78) conv=H7 ;;
    81) conv=A8 ;;
    82) conv=B8 ;;
    83) conv=C8 ;;
    84) conv=D8 ;;
    85) conv=E8 ;;
    86) conv=F8 ;;
    87) conv=G8 ;;
    88) conv=H8 ;;
    esac
    }

    joue()
    { # fonction qui vérifie dans les 8 directions et retourne les pions
    read coul < couleur # importe la couleur du joueur
    if [ "$coul" = "n" ]
    then
    aff="x" # assigne l affichage x ou O en fonction de la couleur
    paff="O"
    else
    aff="O"
    paff="x"
    fi
    convertisseur # converti la case choisie en chiffre
    line=`expr $shoot / 10`
    row=`expr $shoot % 10`
    cased=`expr 8 - $row`
    caseg=`expr $row - 1`
    caseh=`expr $line - 1`
    caseb=`expr 8 - $line`
    if [ $cased -ge $caseh ]
    then casehd=$caseh
    else casehd=$cased
    fi
    if [ $cased -ge $caseb ]
    then casebd=$caseb
    else casebd=$cased
    fi
    if [ $caseg -ge $caseb ]
    then casebg=$caseb
    else casebg=$caseg
    fi
    if [ $caseg -ge $caseh ]
    then casehg=$caseh
    else casehg=$caseg
    fi
    flag=0
    i=1
    shoot3=$shoot
    hyperflag=0
    while [ $i -le $caseb ]
    do
    k=`expr $i \* 10`
    point=`expr $shoot + $k`
    conv=$point
    converse
    read evalu < $conv
    if [ "$evalu" = "$paff" ]
    then
    flag=`expr $flag + 1`
    else
    if [ "$evalu" = "." ]
    then
    break
    else
    if [ "$evalu" = "$aff" ]
    then
    echo $flag
    echo $evalu
    if [ $flag -ge 1 ]
    then
    j=1
    hyperflag=`expr $hyperflag + 1`
    while [ $j -le $flag ]
    do
    shoot3=`expr $shoot3 + 10`
    j=`expr $j + 1`
    conv=$shoot3
    converse
    echo $aff >$conv
    done

    fi
    fi
    fi
    fi
    i=`expr $i + 1`
    done


    flag=0
    i=1
    shoot3=$shoot
    while [ $i -le $caseh ]
    do
    k=`expr $i \* 10`
    point=`expr $shoot - $k`
    conv=$point
    converse
    read evalu <$conv
    if [ "$evalu" = "$paff" ]
    then
    flag=`expr $flag + 1`
    else
    if [ "$evalu" = "." ]
    then
    break
    else
    if [ "$evalu" = "$aff" ]
    then
    if [ $flag -ge 1 ]
    then
    j=1
    hyperflag=`expr $hyperflag + 1`
    while [ $j -le $flag ]
    do
    shoot3=`expr $shoot3 - 10`
    conv=$shoot3
    converse
    j=`expr $j + 1`
    echo $aff >$conv
    done
    fi
    fi
    fi
    fi
    i=`expr $i + 1`
    done

    flag=0
    i=1
    shoot3=$shoot
    while [ $i -le $casebd ]
    do
    k=`expr $i \* 10`
    ad=`expr $i \* 1`
    bd=`expr $k + $ad`
    point=`expr $shoot + $bd`
    conv=$point
    converse
    read evalu <$conv
    if [ "$evalu" = "$paff" ]
    then
    flag=`expr $flag + 1`
    else
    if [ "$evalu" = "." ]
    then
    break
    else
    if [ "$evalu" = "$aff" ]
    then
    if [ $flag -ge 1 ]
    then
    j=1
    hyperflag=`expr $hyperflag + 1`
    while [ $j -le $flag ]
    do
    shoot3=`expr $shoot3 + 11`
    conv=$shoot3
    j=`expr $j + 1`
    converse
    echo $aff >$conv
    done
    fi
    fi
    fi
    fi
    i=`expr $i + 1`
    done

    flag=0
    i=1
    shoot3=$shoot
    while [ $i -le $casehg ]
    do
    k=`expr $i \* 10`
    ad=`expr $i \* 1`
    bd=`expr $k + $ad`
    point=`expr $shoot - $bd`
    conv=$point
    converse
    read evalu <$conv
    if [ "$evalu" = "$paff" ]
    then
    flag=`expr $flag + 1`
    else
    if [ "$evalu" = "." ]
    then
    break
    else
    if [ "$evalu" = "$aff" ]
    then
    if [ $flag -ge 1 ]
    then
    j=1
    hyperflag=`expr $hyperflag + 1`
    while [ $j -le $flag ]
    do
    shoot3=`expr $shoot3 - 11`
    j=`expr $j + 1`
    conv=$shoot3
    converse
    echo $aff >$conv
    done
    fi
    fi
    fi
    fi
    i=`expr $i + 1`
    done

    flag=0
    i=1
    shoot3=$shoot
    while [ $i -le $casehd ]
    do
    k=`expr $i \* 10`
    ad=`expr $i \* 1`
    bd=`expr $k - $ad`
    point=`expr $shoot - $bd`
    conv=$point
    converse
    read evalu <$conv
    if [ "$evalu" = "$paff" ]
    then
    flag=`expr $flag + 1`
    else
    if [ "$evalu" = "." ]
    then
    break
    else
    if [ "$evalu" = "$aff" ]
    then
    if [ $flag -ge 1 ]
    then
    j=1
    hyperflag=`expr $hyperflag + 1`
    while [ $j -le $flag ]
    do
    shoot3=`expr $shoot3 - 9`
    j=`expr $j + 1`
    conv=$shoot3
    converse
    echo $aff >$conv
    done
    fi
    fi
    fi
    fi
    i=`expr $i + 1`
    done

    flag=0
    i=1
    shoot3=$shoot
    while [ $i -le $casebg ]
    do
    k=`expr $i \* 10`
    ad=`expr $i \* 1`
    bd=`expr $k - $ad`
    point=`expr $shoot + $bd`
    conv=$point
    converse
    read evalu <$conv
    if [ "$evalu" = "$paff" ]
    then
    flag=`expr $flag + 1`
    else
    if [ "$evalu" = "." ]
    then
    break
    else
    if [ "$evalu" = "$aff" ]
    then
    if [ $flag -ge 1 ]
    then
    hyperflag=`expr $hyperflag + 1`
    while [ $j -le $flag ]
    do
    shoot3=`expr $shoot3 + 9`
    j=`expr $j + 1`
    conv=$shoot3
    converse
    echo $aff >$conv
    done
    fi
    fi
    fi
    fi
    i=`expr $i + 1`
    done

    flag=0
    i=1
    shoot3=$shoot
    while [ $i -le $cased ]
    do
    point=`expr $shoot + $i`
    conv=$point
    converse
    read evalu <$conv
    if [ "$evalu" = "$paff" ]
    then
    flag=`expr $flag + 1`
    else
    if [ "$evalu" = "." ]
    then
    break
    else
    if [ "$evalu" = "$aff" ]
    then
    if [ $flag -ge 1 ]
    then
    j=1
    hyperflag=`expr $hyperflag + 1`
    while [ $j -le $flag ]
    do
    j=`expr $j + 1`
    shoot3=`expr $shoot3 + 1`
    conv=$shoot3
    converse
    echo $aff >$conv
    done
    fi
    fi
    fi
    fi
    i=`expr $i + 1`
    done

    flag=0
    i=1
    shoot3=$shoot
    while [ $i -le $caseg ]
    do
    point=`expr $shoot - $i`
    conv=$point
    converse
    read evalu <$conv
    if [ "$evalu" = "$paff" ]
    then
    flag=`expr $flag + 1`
    else
    if [ "$evalu" = "." ]
    then
    break
    else
    if [ "$evalu" = "$aff" ]
    then
    if [ $flag -ge 1 ]
    then
    j=1
    hyperflag=`expr $hyperflag + 1`
    while [ $j -le $flag ]
    do
    shoot3=`expr $shoot3 - 1`
    j=`expr $j + 1`
    conv=$shoot3
    converse
    echo $aff >$conv
    done
    fi
    fi
    fi
    fi
    i=`expr $i + 1`
    done






    if [ "$hyperflag" = "0" ]
    then
    read ultra<ultraflag
    if [ "$ultra" = "1" ]
    then
    finpartie
    else
    echo "0">ultraflag
    fi
    echo "1">ultraflag
    echo ".">$shoot5
    echo "Coup impossible, réessayez"
    echo "Appuyez pour continuer"
    read lasparticho
    tir
    else
    echo $aff >$shoot5

    fi


    clear
    tableau
    sleep 3
    echo l>who
    sleep 2
    change
    }
    change()
    {

    read coul < couleur
    if [ "$coul" = "n" ]
    then
    echo b > couleur
    else
    echo n > couleur
    fi


    suite
    }
    finpartie()
    {
    echo "La Partie est finie"
    xcomp=0
    Ocomp=0
    for i in A B C D E F G H
    do
    for j in 1 2 3 4 5 6 7 8
    do
    read temp< $i$j
    if [ "$temp" = "x" ]
    then
    xcomp=`expr $xcomp + 1`
    fi
    if [ "$temp" = "O" ]
    then
    Ocomp=`expr $Ocomp + 1`
    fi
    done
    done
    echo "Le Joueur noir [x] a marqué $xcomp points"
    echo "Le Joueur blanc [O] a marqué $Ocomp points"
    echo "Appuyez sur pour recommencer ou sur une touche pour quitter"
    read touche
    if [ "$touche" = "r" ]
    then
    attente
    else
    exit 0
    fi


    }
    attente()
    {
    echo "x" >E4
    echo "O" >E5
    echo "O" >D4
    echo "x" >D5
    aff="O"
    clear
    echo "Attente de l'autre joueur"
    i=0
    read var2 < file

    if [ "$var2" = "r" ]
    then
    echo b>who
    echo rg > file
    coul="b"
    echo b > couleur
    pascoul="n"
    echo "vous etes blanc - vos pions sont [OO]"
    sleep 2
    suite
    else
    echo r > file
    while i=0
    do
    sleep 3
    read joueur < file
    if [ "$joueur" = "rg" ]
    then
    echo "vous etes noir - vos pions sont [xx]"
    break
    fi
    done
    suite
    fi
    }



    tir()
    {
    clear
    tableau
    echo w>who
    read color<couleur
    if [ "$color" = "n" ]
    then
    affi="x"
    else
    affi="O"
    fi
    echo "Votre couleur est [$affi]"
    echo "Où voulez vous jouer? Ecrivez en majuscule (exemple: X4)"
    read shoot
    if [ "$shoot" = "q" ]
    then
    exit 0
    else
    shoot2=$shoot
    shoot5=$shoot
    read testa <$shoot
    echo $testa
    echo $shoot
    if [ "$testa" = "." ]
    then
    echo $shoot >$shoot
    eval "$shoot=$shoot2"
    joue
    else

    echo "Coup impossible, réessayez"
    echo "Appuyez sur pour continuer"
    read sertawait
    tir
    fi
    fi
    }

    suite ()
    {
    read var1<who
    if [ "$var1" = "$coul" ]
    then
    echo w >who
    tir
    else

    echo "Attendez que l'autre joueur finisse"
    i=0
    while i=0
    do
    sleep 1
    read attent<who
    if [ "$attent" = "l" ]
    then
    echo good
    tir
    fi
    done
    fi
    }
    attente