2048 ir populāra skaitļu spēle, kur lietotājs, izmantojot virziendarbības taustiņus, sapludina spēles laukumā attēlotos skaitļus, cenšoties sasniegt pēc iespējas lielāku rezultātu.
Apskatīsim vienkāršāko spēles variāciju, kur laukums veidots 4x4 rūtiņu izmērā ar 16 rūtiņām kopskaitā.
Laukumam izmantosim 2-dimensiju sarakstu...
Nodefinē sarakstu, kas nejauši izvēlētā pozīcijā glabā 1 nejauši izvēlētu skaitli 2 ≤ N ≤ 16, kurš vienmēr dalās ar 2 bez atlikuma.
Visvieglāk ir ģenerēt skaitli 2 un to kāpināt vajadzīgajā pakāpē, tādējādi skaitlis vienmēr dalīsies ar 2.
Tā kā maksimālā vērtība ir 16, tas ir skaitļa 2 kāpinājums pakāpē 4, bet skaitlis 2 ir tā kāpinājums pakāpē 1, tādējādi der visas pakāpes no 1 līdz 4.
Kāpināšanai izmanto Python operatoru ** vai pow(skaitlis, pakape) funkciju.
Pārējās pozīcijās var glabāties 0, kas neattēlosies spēles laukumā.
Piemērs:
rinda = [0, 4, 0, 0]
Atkārto algoritmu 4 reizes, lai kopskaitā būtu 4x4 saraksts ar 4 nejauši izvēlētiem skaitļiem, kur katrs no tiem atrodas savā rindā.
Piemērs:
laukums = [
[0, 4, 0, 0],
[0, 0, 2, 0],
[4, 0, 0, 0],
[0, 0, 0, 8]
]
Lai varētu spēlēt, nepieciešams ievads no spēlētāja. Varam izmantot W A S D burtus un attiecīgos taustiņus, kur
W - uz augšu
A - pa kreisi
S - uz leju
D - pa labi
Izdarot gājienu, spēlētājs izvēlas, kurā virzienā notiks skaitļu sapludināšana.
Tas nosaka, kā jāpārbauda visas laukuma vērtības - pa rindām vai pa "kolonnām".
Kolonna šajā gadījumā ir visu rindu attiecīgais elements. Kā katrā kolonnā, tā arī katrā rindā ir 4 skaitļi.
Apskatīsim algoritmu vienas rindas ietvaros...
rinda = [4, 2, 2, 0]
# kā rīkoties?! 🤨
Neatkarīgi no virziena, ko izdara spēlētājs, jaunās vērtības rindā būs 4 un 4. Izvēlētais virziens nosaka, kurā rindas galā vērtības novietosies - sākumā vai beigās.
Skaitļus salīdzina pa pāriem un vienā operācijā saskaita ne vairāk par 2 skaitļiem.

Šo pašu principu attiecina arī uz kolonnām...