Turinys:

„Arduino Touch Tic Tac Toe“žaidimas: 6 žingsniai (su paveikslėliais)
„Arduino Touch Tic Tac Toe“žaidimas: 6 žingsniai (su paveikslėliais)

Video: „Arduino Touch Tic Tac Toe“žaidimas: 6 žingsniai (su paveikslėliais)

Video: „Arduino Touch Tic Tac Toe“žaidimas: 6 žingsniai (su paveikslėliais)
Video: CS50 2015 - Week 10 2024, Birželis
Anonim
Image
Image
„Arduino Touch Tic Tac Toe“žaidimas
„Arduino Touch Tic Tac Toe“žaidimas
„Arduino Touch Tic Tac Toe“žaidimas
„Arduino Touch Tic Tac Toe“žaidimas
„Arduino Touch Tic Tac Toe“žaidimas
„Arduino Touch Tic Tac Toe“žaidimas

Mieli draugai, kviečiame į kitą „Arduino“pamoką! Šioje išsamioje pamokoje mes sukursime „Arduino Tic Tac Toe“žaidimą. Kaip matote, mes naudojame jutiklinį ekraną ir žaidžiame prieš kompiuterį. Toks paprastas žaidimas kaip „Tic Tac Toe“yra puikus įvadas į žaidimų programavimą ir dirbtinį intelektą. Nors šiame žaidime nenaudosime jokių dirbtinio intelekto algoritmų, suprasime, kodėl dirbtinio intelekto algoritmai reikalingi sudėtingesniuose žaidimuose.

„Arduino“žaidimų kūrimas nėra lengvas ir reikalauja daug laiko. Bet mes galime sukurti paprastus „Arduino“žaidimus, nes tai smagu ir leis mums ištirti pažangesnes programavimo temas, tokias kaip dirbtinis intelektas. Tai puiki mokymosi patirtis, o pabaigoje turėsite gražų žaidimą vaikams!

Dabar kurkime šį projektą.

1 žingsnis: Gaukite visas dalis

Image
Image
2.8
2.8

Šiam projektui sukurti reikalingos šios dalys:

„Arduino Uno“▶

2,8 colio jutiklinis ekranas ▶

Projekto kaina yra labai maža. Tai tik 15 USD

Prieš bandydami sukurti šį projektą, pažiūrėkite mano parengtą vaizdo įrašą apie jutiklinį ekraną. Aš pridėjau jį prie šios instrukcijos. Tai padės suprasti kodą ir sukalibruoti jutiklinį ekraną.

2 žingsnis: 2,8 colio liečiamas spalvotas ekranas, skirtas „Arduino“

Image
Image
2.8
2.8
2.8
2.8

Atradau šį jutiklinį ekraną svetainėje banggood.com ir nusprendžiau jį nusipirkti, kad galėčiau jį panaudoti kai kuriuose savo projektuose. Kaip matote, ekranas yra nebrangus, jis kainuoja apie 11 USD.

Gaukite čia ▶

Ekranas siūlo 320x240 pikselių skiriamąją gebą ir yra ekranas, kuris labai palengvina ryšį su „Arduino“. Kaip matote, ekrane naudojami beveik visi „Arduino Uno“skaitmeniniai ir analoginiai kaiščiai. Naudojant šį skydą mūsų projektams lieka tik 2 skaitmeniniai kaiščiai ir 1 analoginis kaištis. Laimei, ekranas puikiai veikia ir su „Arduino Mega“, todėl kai mums reikia daugiau smeigtukų, galime naudoti „Arduino Mega“, o ne „Arduino Uno“. Deja, šis ekranas neveikia su „Arduino Due“ar „Wemos D1 ESP8266“plokšte. Kitas skydo privalumas yra tai, kad jame yra labai paprasta naudoti „micro SD“lizdas.

3 žingsnis: projekto sukūrimas ir jo išbandymas

Projekto kūrimas ir jo testavimas
Projekto kūrimas ir jo testavimas
Projekto kūrimas ir jo testavimas
Projekto kūrimas ir jo testavimas
Projekto kūrimas ir jo testavimas
Projekto kūrimas ir jo testavimas

Prijungę ekraną prie „Arduino Uno“, galime įkelti kodą ir esame pasiruošę žaisti.

Iš pradžių paspaudžiame mygtuką „Pradėti žaidimą“ir žaidimas prasideda. Pirmiausia žaidžia „Arduino“. Tada mes galime žaisti savo judesį tiesiog paliesdami ekraną. Tada „Arduino“žaidžia savo žingsnį ir pan. Žaidėjas, kuriam pavyksta sudėti tris savo ženklus horizontalioje, vertikalioje ar įstrižoje eilutėje, laimi žaidimą. Pasibaigus žaidimui, pasirodys ekranas „Game Over“. Tada galime paspausti „Play again“mygtuką, kad vėl pradėtume žaidimą.

„Arduino“puikiai žaidžia šį žaidimą. Jis laimės daugumą rungtynių, arba jei esate labai geras žaidėjas, žaidimas baigsis lygiosiomis. Aš sąmoningai sukūriau šį algoritmą, kad padarytų keletą klaidų, kad suteikčiau žaidėjui galimybę laimėti. Pridėję dar dvi eilutes prie žaidimo kodo, galime padaryti „Arduino“neįmanoma prarasti žaidimo. Bet kaip 2 USD lustas, „Arduino“procesorius, gali įveikti žmogaus smegenis? Ar mūsų sukurta programa yra protingesnė už žmogaus smegenis?

4 žingsnis: žaidimo algoritmas

Žaidimo algoritmas
Žaidimo algoritmas
Žaidimo algoritmas
Žaidimo algoritmas

Norėdami atsakyti į šį klausimą, pažvelkime į mano įdiegtą algoritmą.

Kompiuteris visada groja pirmas. Vien dėl šio sprendimo „Arduino“žaidimą daug lengviau laimėti. Pirmasis žingsnis visada yra kampas. Antrasis „Arduino“ėjimas taip pat yra atsitiktinis kampas nuo likusio, visiškai nesirūpinant žaidėjo judesiu. Nuo šio momento „Arduino“pirmiausia patikrina, ar žaidėjas gali laimėti kitą ėjimą, ir blokuoja šį ėjimą. Jei žaidėjas negali laimėti vienu judesiu, jis atlieka kampinį ėjimą, jei toks yra, arba atsitiktinį iš likusių. Štai viskas, šis paprastas algoritmas kiekvieną kartą gali įveikti žaidėją, o blogiausiu atveju žaidimas baigsis lygiosiomis. Tai nėra geriausias „Tic Tac Toe“žaidimo algoritmas, bet vienas iš paprasčiausių.

Šis algoritmas gali būti lengvai įdiegtas „Arduino“, nes „Tic Tac Toe“žaidimas yra labai paprastas, ir mes galime jį lengvai išanalizuoti ir išspręsti. Jei suprojektuosime žaidimo medį, galime atrasti keletą laimėjimo strategijų ir lengvai jas įgyvendinti kodu arba galime leisti procesoriui apskaičiuoti žaidimo medį realiu laiku ir pasirinkti geriausią žingsnį. Žinoma, šiame žaidime naudojamas algoritmas yra labai paprastas, nes žaidimas yra labai paprastas. Jei bandysime sukurti laimintį šachmatų algoritmą, net jei naudosime greičiausią kompiuterį, negalėsime apskaičiuoti žaidimo medžio per tūkstantį metų! Tokiems žaidimams mums reikia kito požiūrio, mums reikia tam tikrų dirbtinio intelekto algoritmų ir, žinoma, didžiulės apdorojimo galios. Daugiau apie tai būsimame vaizdo įraše.

5 žingsnis: projekto kodas

Projekto kodas
Projekto kodas

Greitai pažvelkime į projekto kodą. Kad sudarytume kodą, mums reikia trijų bibliotekų.

  1. „Adafruit“TFTLCD:
  2. „Adafruit GFX“:
  3. Jutiklinis ekranas:

Kaip matote, net tokiam paprastam žaidimui reikia daugiau nei 600 kodo eilučių. Kodas yra sudėtingas, todėl nesistengsiu jo paaiškinti trumpoje pamokoje. Tačiau aš jums parodysiu „Arduino“judesių algoritmo įgyvendinimą.

Iš pradžių žaidžiame du atsitiktinius kampus.

<int firstMoves = {0, 2, 6, 8}; // pirmiausia naudos šias pozicijas (skaitiklis = 0; skaitiklis <4; skaitiklis ++) // Skaičiuokite pirmuosius atliktus ėjimus {if (board [firstMoves [counter]!! = 0) // Pirmąjį ėjimą atlieka kažkas {movePlayed ++; }} do {if (juda <= 2) {int randomMove = atsitiktinis (4); int c = firstMoves [randomMove]; if (lenta [c] == 0) {uždelsimas (1000); lenta [c] = 2; Serial.print (firstMoves [randomMove]); Serial.println (); drawCpuMove (firstMoves [randomMove]); b = 1; }}

Toliau kiekviename raunde tikriname, ar žaidėjas gali laimėti kitu ėjimu.

int checkOponent ()

{if (board [0] == 1 && board [1] == 1 && board [2] == 0) return 2; else if (lenta [0] == 1 && lenta [1] == 0 && lenta [2] == 1) grąžinti 1; else if (lenta [1] == 1 && lenta [2] == 1 && lenta [0] == 0) grąžina 0; kitaip jei (lenta [3] == 1 && lenta [4] == 1 && lenta [5] == 0) grąžina 5; kitaip jei (lenta [4] == 1 && lenta [5] == 1 && lenta [3] == 0) grąžins 3; kitaip jei (lenta [3] == 1 && lenta [4] == 0 && lenta [5] == 1) grąžina 4; else if (lenta [1] == 0 && lenta [4] == 1 && lenta [7] == 1) grąžinti 1; kitaip grąžinti 100; }

Jei taip, mes blokuojame šį judėjimą, dažniausiai. Mes neužblokuojame visų ėjimų, kad suteiktume žaidėjui galimybę laimėti. Ar galite sužinoti, kurie judesiai nėra užblokuoti? Užblokavę ėjimą, žaidžiame likusį kampą arba atsitiktinį ėjimą. Galite išstudijuoti kodą ir lengvai įgyvendinti savo neprilygstamą algoritmą. Kaip visada, šiame instrukcijoje rasite pridėtą projekto kodą.

PASTABA: Kadangi „Banggood“siūlo tą patį ekraną su dviem skirtingomis ekrano tvarkyklėmis, jei aukščiau pateiktas kodas neveikia, pakeiskite „initDisplay“funkciją į šią:

void initDisplay ()

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

6 žingsnis: paskutinės mintys ir patobulinimai

Galutinės mintys ir patobulinimai
Galutinės mintys ir patobulinimai

Kaip matote, net naudodami „Arduino Uno“galime sukurti neprilygstamą paprastų žaidimų algoritmą. Šis projektas yra puikus, nes jį lengva sukurti, o kartu ir puikus įvadas į dirbtinį intelektą ir žaidimų programavimą. Ateityje bandysiu kurti pažangesnius projektus su dirbtiniu intelektu, naudodamas galingesnį „Raspberry Pi“, todėl sekite naujienas! Norėčiau išgirsti jūsų nuomonę apie šį projektą.

Prašome paskelbti savo komentarus žemiau ir nepamirškite pamėgti pamokymų, jei jums tai įdomu. Dėkoju!

Rekomenduojamas: