Përmbajtje:

Arduino Touch Tic Tac Toe Lojë: 6 hapa (me fotografi)
Arduino Touch Tic Tac Toe Lojë: 6 hapa (me fotografi)

Video: Arduino Touch Tic Tac Toe Lojë: 6 hapa (me fotografi)

Video: Arduino Touch Tic Tac Toe Lojë: 6 hapa (me fotografi)
Video: CS50 2015 – 10-я неделя 2024, Qershor
Anonim
Image
Image
Lojë Arduino Touch Tic Tac Toe
Lojë Arduino Touch Tic Tac Toe
Lojë Arduino Touch Tic Tac Toe
Lojë Arduino Touch Tic Tac Toe
Lojë Arduino Touch Tic Tac Toe
Lojë Arduino Touch Tic Tac Toe

Të dashur miq, mirë se vini në një tutorial tjetër Arduino! Në këtë tutorial të detajuar ne do të ndërtojmë një lojë Arduino Tic Tac Toe. Siç mund ta shihni, ne po përdorim një ekran me prekje dhe po luajmë kundër kompjuterit. Një lojë e thjeshtë si Tic Tac Toe është një hyrje e shkëlqyeshme në programimin e lojërave dhe Inteligjencën Artificiale. Edhe pse nuk do të përdorim asnjë algoritëm të inteligjencës artificiale në këtë lojë, ne do të kuptojmë pse algoritmet e inteligjencës artificiale kërkohen në lojëra më komplekse.

Zhvillimi i lojërave për Arduino nuk është i lehtë dhe kërkon shumë kohë. Por ne mund të ndërtojmë disa lojëra të thjeshta për Arduino sepse është argëtuese dhe do të na lejojë të eksplorojmë disa tema më të avancuara programimi, si inteligjenca artificiale. Ashtë një përvojë e madhe mësimore dhe në fund do të keni një lojë të bukur për fëmijët!

Le ta ndërtojmë tani këtë projekt.

Hapi 1: Merrni të gjitha pjesët

Image
Image
2.8
2.8

Pjesët e nevojshme për të ndërtuar këtë projekt janë si më poshtë:

Një Arduino Uno ▶

Një ekran me prekje 2.8”▶

Kostoja e projektit është shumë e ulët. Isshtë vetëm 15 dollarë

Para se të përpiqeni të ndërtoni këtë projekt ju lutemi shikoni videon që kam përgatitur në lidhje me ekranin me prekje. Unë e kam bashkangjitur atë në këtë udhëzues. Do t'ju ndihmojë të kuptoni kodin dhe të kalibroni ekranin me prekje.

Hapi 2: Ekrani me ngjyra me prekje 2.8 "për Arduino

Image
Image
2.8
2.8
2.8
2.8

E zbulova këtë ekran me prekje në banggood.com dhe vendosa ta blija në mënyrë që të përpiqesha ta përdorja në disa nga projektet e mia. Siç mund ta shihni, ekrani është i lirë, kushton rreth 11 dollarë.

Merreni këtu ▶

Ekrani ofron një rezolucion prej 320x240 piksele dhe vjen si një mburojë e cila e bën lidhjen me Arduino jashtëzakonisht të lehtë. Siç mund ta shihni, ekrani përdor pothuajse të gjitha kunjat dixhitale dhe analoge të Arduino Uno. Kur përdorim këtë mburojë na mbeten vetëm 2 kunja dixhitale dhe 1 kunj analog për projektet tona. Për fat të mirë, ekrani funksionon mirë edhe me Arduino Mega, kështu që ne kur kemi nevojë për më shumë kunja mund të përdorim Arduino Mega në vend të Arduino Uno. Fatkeqësisht, ky ekran nuk punon me Arduino Due ose bordin Wemos D1 ESP8266. Një avantazh tjetër i mburojës është se ai ofron një slot micro SD i cili është shumë i lehtë për t'u përdorur.

Hapi 3: Ndërtimi i projektit dhe testimi i tij

Ndërtimi i projektit dhe testimi i tij
Ndërtimi i projektit dhe testimi i tij
Ndërtimi i projektit dhe testimi i tij
Ndërtimi i projektit dhe testimi i tij
Ndërtimi i projektit dhe testimi i tij
Ndërtimi i projektit dhe testimi i tij

Pas lidhjes së ekranit me Arduino Uno, ne mund të ngarkojmë kodin dhe jemi gati për të luajtur.

Në fillim, ne shtypim butonin "Fillo lojën" dhe loja fillon. Arduino luan së pari. Ne pastaj mund të luajmë lëvizjen tonë thjesht duke prekur ekranin. Arduino pastaj luan lëvizjen e tij dhe kështu me radhë. Lojtari që arrin të vendosë tre nga shenjat e tyre në një rresht horizontal, vertikal ose diagonal fiton lojën. Kur loja ka mbaruar, shfaqet ekrani Game Over. Ne pastaj mund të shtypim butonin play again për të filluar lojën përsëri.

Arduino është shumë i mirë në këtë lojë. Do të fitojë shumicën e ndeshjeve, ose nëse jeni një lojtar shumë i mirë loja do të përfundojë në barazim. Unë me qëllim e kam projektuar këtë algoritëm për të bërë disa gabime në mënyrë që t'i jap lojtarit një shans për të fituar. Duke shtuar dy rreshta të tjerë në kodin e lojës, ne mund ta bëjmë Arduino të pamundur të humbasë lojën. Por si mundet që një çip 2 $, CPU Arduino, të mundë trurin e njeriut? A është programi që kemi zhvilluar më i zgjuar se truri i njeriut?

Hapi 4: Algoritmi i lojës

Algoritmi i lojës
Algoritmi i lojës
Algoritmi i lojës
Algoritmi i lojës

Për t'iu përgjigjur kësaj pyetjeje, le të shohim algoritmin që kam zbatuar.

Kompjuteri luan gjithmonë i pari. Vetëm ky vendim, e bën lojën shumë më të lehtë për Arduino të fitojë. Lëvizja e parë është gjithmonë një qoshe. Lëvizja e dytë për Arduino është gjithashtu një kënd i rastësishëm nga pjesa e mbetur pa u kujdesur fare për lëvizjen e lojtarit. Nga kjo pikë e tutje, Arduino së pari kontrollon nëse lojtari mund të fitojë në lëvizjen tjetër dhe bllokon atë lëvizje. Nëse lojtari nuk mund të fitojë në një lëvizje të vetme, ai luan një lëvizje këndi nëse është e disponueshme ose një e rastësishme nga pjesa e mbetur. Kjo është e gjitha, ky algoritëm i thjeshtë mund të mundë lojtarin njerëzor çdo herë ose në rastin më të keq, loja do të rezultojë në barazim. Ky nuk është algoritmi më i mirë i lojës tic tac toe, por një nga më të thjeshtë.

Ky algoritëm mund të zbatohet lehtësisht në Arduino, sepse loja Tic Tac Toe është shumë e thjeshtë, dhe ne lehtë mund ta analizojmë dhe zgjidhim atë. Nëse hartojmë pemën e lojës mund të zbulojmë disa strategji fituese dhe t'i zbatojmë me lehtësi ato në kod ose mund ta lëmë CPU -në të llogarisë pemën e lojës në kohë reale dhe të zgjedhë lëvizjen më të mirë në vetvete. Sigurisht, algoritmi që përdorim në këtë lojë është shumë i thjeshtë, sepse loja është shumë e thjeshtë. Nëse përpiqemi të krijojmë një algoritëm fitues për shah, edhe nëse përdorim kompjuterin më të shpejtë, ne nuk mund të llogarisim pemën e lojës në një mijë vjet! Për lojëra si kjo, ne kemi nevojë për një qasje tjetër, kemi nevojë për disa algoritme të Inteligjencës Artificiale dhe natyrisht fuqi të madhe përpunuese. Më shumë për këtë në një video të ardhshme.

Hapi 5: Kodi i Projektit

Kodi i Projektit
Kodi i Projektit

Le të hedhim një vështrim të shpejtë në kodin e projektit. Ne kemi nevojë për tre biblioteka në mënyrë që kodi të përpilohet.

  1. Adafruit TFTLCD:
  2. Adafruit GFX:
  3. Ekran me prekje:

Siç mund ta shihni, edhe një lojë e thjeshtë si kjo, kërkon më shumë se 600 rreshta kod. Kodi është kompleks, kështu që nuk do të përpiqem ta shpjegoj në një mësim të shkurtër. Unë do t'ju tregoj zbatimin e algoritmit për lëvizjet Arduino.

Në fillim, ne luajmë dy kënde të rastësishme.

<int firstMoves = {0, 2, 6, 8}; // do t'i përdorë këto pozicione së pari për (counter = 0; counter <4; counter ++) // Numëroni lëvizjet e para të luajtura {if (bordi [firstMoves [counter]! = 0) // Lëvizja e parë luhet nga dikush {movesPlayed ++; }} bëj {nëse (lëviz <= 2) {int randomMove = random (4); int c = firstMoves [randomMove]; nëse (bordi [c] == 0) {vonesë (1000); dërrasë [c] = 2; Serial.print (firstMoves [randomMove]); Serial.println (); drawCpuMove (firstMoves [randomMove]); b = 1; }}

Tjetra, në çdo raund ne kontrollojmë nëse lojtari mund të fitojë në lëvizjen tjetër.

int checkOponent ()

{if (bordi [0] == 1 && bordi [1] == 1 && bordi [2] == 0) kthimi 2; përndryshe nëse (bordi [0] == 1 && bordi [1] == 0 && bordi [2] == 1) kthehet 1; ndryshe nëse (bordi [1] == 1 && bordi [2] == 1 && bordi [0] == 0) kthehet 0; përndryshe nëse (bordi [3] == 1 && bordi [4] == 1 && bordi [5] == 0) kthehet 5; përndryshe nëse (bordi [4] == 1 && bordi [5] == 1 && bordi [3] == 0) kthehet 3; përndryshe nëse (bordi [3] == 1 && bordi [4] == 0 && bordi [5] == 1) kthehet 4; tjetër nëse (bordi [1] == 0 && bordi [4] == 1 && bordi [7] == 1) kthehet 1; ndryshe kthe 100; }

Nëse po, ne e bllokojmë atë lëvizje, shumicën e rasteve. Ne nuk i bllokojmë të gjitha lëvizjet në mënyrë që t'i japim lojtarit një shans për të fituar. A mund të gjeni cilat lëvizje nuk janë të bllokuara? Pas bllokimit të lëvizjes, ne luajmë një kënd të mbetur, ose një lëvizje të rastësishme. Ju mund të studioni kodin dhe të zbatoni me lehtësi algoritmin tuaj të pakonkurueshëm. Si gjithmonë, kodin e projektit mund ta gjeni të bashkangjitur në këtë udhëzues.

SH NOTNIM: Meqenëse Banggood ofron të njëjtin ekran me dy drejtues të ndryshëm të ekranit, nëse kodi i mësipërm nuk funksionon, ndryshoni funksionin initDisplay në sa vijon:

void initDisplay ()

{tft.reset (); tft.filloj (0x9341); tft.setRotation (3); }

Hapi 6: Mendimet dhe Përmirësimet Përfundimtare

Mendimet dhe Përmirësimet Përfundimtare
Mendimet dhe Përmirësimet Përfundimtare

Siç mund ta shihni, edhe me një Arduino Uno, ne mund të ndërtojmë një algoritëm të pakonkurueshëm për lojëra të thjeshta. Ky projekt është i mrekullueshëm, sepse është i lehtë për tu ndërtuar, dhe në të njëjtën kohë një hyrje e madhe në inteligjencën artificiale dhe programimin e lojërave. Unë do të përpiqem të ndërtoj disa projekte më të avancuara me Inteligjencë Artificiale në të ardhmen duke përdorur Raspberry Pi më të fuqishëm kështu që qëndroni të sintonizuar! Do të doja të dëgjoja mendimin tuaj për këtë projekt.

Ju lutemi postoni komentet tuaja më poshtë dhe mos harroni të pëlqeni udhëzimet nëse ju duket interesante. Faleminderit!

Recommended: