AWARI

Hirtelen itt lett az ideje, - mittomén mé' -
hogy még a dos előtti időkben
Z80-as BASIC eprommal ellátott gépen futtatott programot átírjak bashscriptre.
Nevezetesen Csákány - Dr. Vajda:
Játékok számítógéppel (1980) - Awari.

Egy most duplamagasnak mondott rackdobozban (Junoszty monitorral ellátva)
ilyen kártyákon volt összedrótozva:

olyan spéci zománchuzallal, amelyről a forrasztási helyen leolvadt a szigetelés pákahőfokon.

Lehetne persze egy hosszabb, hat rövidebb faággal és 36 babszemmel is játszani, de gyanús, hogy hétvégi takarítás után már nem lenne meg.

Valamint lehetne játszani ezen az oldalon, de ez eggyel könnyebb feladat, mint basic-ből átírni.
Emlékszem, valahogy megfejeltem azzal, hogy először sajátmagával játszott le 50 menetet, hogy ne lehessen az "5,4,3,2,1"-es indulással tönkreverni.

A lényeg, hogy ennek kapcsán
rájöttem, hogy miután a pixelbuherátor, a webmaestro és az ergizda én vagyok a munkahelyemen -
a legjobb, ha szabadidőmben programozom, mert különben valami váratlan nagyobb horderejű feladatnál a programozási gyakorlat híján
esetleg ugrik a szabadidőm.

:D

Hozzászólások

Mindjárt az elején

#!/bin/bash

mert különben nincs

declare -a b

Aztán nem jutottam egyről kettőre


:~$ x=1; y=1; z=$x+$y; echo $z
1+1

másodjára persze igen


:~$ x=1; y=1; z=$(($x+$y)); echo $z
2

tömbrájder van

:~$ b[1]=3; echo $b[1]
[1]

ízirájder van

:~$ b[1]=3; echo ${b[1]}
3

mindent csak egyszerűen

:~$ x=1; b[1]=3; echo $(($x+${b[1]}))
4

valami sikálni való persze mindig marad


:~$ echo " 1   5     BC EF"
 1   5     BC EF
:~$ :~$ b[3]=" 1   5     BC EF"; echo ${b[3]}
1 5 BC EF

talán akkor valahogy így


:~$ b[3]=" 1   5     BC EF"; echo "${b[3]}"
 1   5     BC EF

A random kiosztás az eredeti basic-ben slampos volt,
nemigen ügyelt volna arra, hogy pontosan 36 bogyó legyen kiosztva
és "nem eléggé volt random" - ezért újra írtam a rutint:


function random () { # paraméter: 1|2 (max. 5|6 bogyó)
        ms=36; mr=12; mn=$[3-$1];
        for i in $(seq 7 12 | shuf -n 6) $(seq 0 5 | shuf -n 6); do
                mx=$[ms/mr+x+1];
                if [ $ms -lt $mx ]; then mx=$ms; fi
                if [ $ms -lt $mn ]; then mn=$ms; fi
                if [ $mr -lt 2 ];
                        then b[$i]=$ms;
                        else b[$i]=$(seq $mn $mx | shuf -n 1);
                fi;
                ms=$[ms-b[$i]];
                mr=$[$mr-1];
        done;
        b[6]='0'; b[13]='0';
}

ha "random 1" akkor max. 5 bogyó megy egy fakkba, - ha "random 2", akkor 6.
Miután csak a programból hívom, nem végeztem paraméter ellenőrzést.

és lőn:


Standard, Random(1,2), Beírom(3) Kilépés(k): 2

    !  2 !  5 !  4 !  2 !  6 !  1 !
  0 !----!----!----!----!----!----!  0
    !  3 !  6 !  1 !  2 !  1 !  3 !     < játékos

Lépés(1-6), Új játék(0): 

nem, mert itt azt ellenőrzöm, hogy a kioszható max ne legyen több, mint a még nem kiosztott bogyószám.

a kiszámolt max viszont helyesen:

mx=$[ms/mr+

$1

+1];

és azért működött eddig, mert "read x" volt a "random erősség" bekérdezése.

Standard, Random(1,2), Beírom(3) Kilépés(k):

és még egy javítás:

for i in $(seq 0 12 | shuf -n 13 | sed 's/6//g'); do