Négyzetrácsban elhelyezett alakzatok oldalhatáron és sarkokon érintkező szomszédainak meghatározása

Bizonyos táblázatos, mátrixos feladatokban, de különösen egyes négyzetrácsos táblás játékokban /pl. Blokus vagy Torpedó (angolul Battleship)/ szükség lehet a táblázatos formában elhelyezett elemek, illetve alakzatok szomszédos celláinak meghatározására. Ráadásul az igények, illetve játékszabályok eltérhetnek abban, hogy megengedett-e az alakzatok sarkokon érintkezése vagy sem. Ezért szükség lehet nem csak az összes szomszédos cella ismeretére, hanem külön a sarkokon érintkező szomszédok és külön az oldalhatáron érintkező szomszédok beazonosítására is. Egy négyzethálóban elhelyezett alakzatot és szomszédait mutatja az 1. ábra felső sora.

Adott alakzat szomszédos cellái meghatározását halmazokkal és halmazműveletekkel viszonylag egyszerűen el lehet végezni. Ennek elvét mutatja és írja le az 1. ábra további része.

Hogy a szomszédok meghatározását vizuálisan szemléltessük, az elvet az alábbi GUI programban implementáltuk, a get_all_neighbors_coords(), get_corner_neighbors_coords() és a get_side_touching_neighbors_coords() metódusokkal.

Az alkalmazás futtatása után egy négyzethálóban egérkattintással kijelölhetünk cellákat, amelyek kék színnel jelennek meg. Ezzel alakzatokat definiálhatunk. Újabb kattintással az adott cella kijelölése megszüntethető. A választógombokkal az összes szomszédot, a sarkokon érintkező szomszédokat, vagy az oldalhatárokon érintkező szomszédokat jeleníthetjük meg. A megfelelő választógombbal a szomszédokat eltüntethetjük.

Egy példaelrendezést és az ebben szereplő alakzatok különböző kategóriájú szomszédait a 2. ábra mutatja.

E feladatban a halmazok és azokkal végzett műveletek adták a viszonylag egyszerű megoldást. Halmazokról, halmazműveletekről, valamint halmaz típusokon (set, frozenset) hívható metódusokról a Python tudásépítés lépésről lépésre című e-könyv „Beépített konténerobjektumok”, „Műveletek”, valamint a „Beépített típusok nyilvános metódusai” fejezetekben lehet részleteiben tájékozódni. A „Grafikus felhasználói felület készítése” fejezet pedig a bemutatott demo program megértéséhez, illetve egyéni igényekre szabott GUI alkalmazások készítéséhez adja meg az alapokat.

Érdekel a Python tudásépítés lépésről lépésre az alapoktól az első asztali alkalmazásig című e-könyv.