Мазмуну:

Arduino Touch Tic Tac Toe Оюну: 6 кадам (Сүрөттөр менен)
Arduino Touch Tic Tac Toe Оюну: 6 кадам (Сүрөттөр менен)

Video: Arduino Touch Tic Tac Toe Оюну: 6 кадам (Сүрөттөр менен)

Video: Arduino Touch Tic Tac Toe Оюну: 6 кадам (Сүрөттөр менен)
Video: REAL RACING 3 LEAD FOOT EDITION 2024, Июнь
Anonim
Image
Image
Arduino Touch Tic Tac Toe оюну
Arduino Touch Tic Tac Toe оюну
Arduino Touch Tic Tac Toe оюну
Arduino Touch Tic Tac Toe оюну
Arduino Touch Tic Tac Toe оюну
Arduino Touch Tic Tac Toe оюну

Урматтуу достор, дагы бир Arduino үйрөткүчүнө кош келиңиздер! Бул деталдуу окуу куралында биз Arduino Tic Tac Toe оюнун курганы жатабыз. Көрүнүп тургандай, биз сенсордук экранды колдонуп жатабыз жана компьютерге каршы ойноп жатабыз. Tic Tac Toe сыяктуу жөнөкөй оюн - бул оюн программалоого жана Жасалма интеллектке эң сонун киришүү. Бул оюнда биз жасалма интеллект алгоритмдерин колдонбосок да, эмне үчүн жасалма интеллект алгоритмдери татаал оюндарда талап кылынарын түшүнөбүз.

Arduino үчүн оюндарды иштеп чыгуу оңой эмес жана көп убакытты талап кылат. Бирок биз Arduino үчүн кээ бир жөнөкөй оюндарды кура алабыз, анткени бул кызыктуу жана ал бизге жасалма интеллект сыяктуу программалоо темаларын изилдөөгө мүмкүндүк берет. Бул чоң үйрөнүү тажрыйбасы жана аягында сиз балдар үчүн жагымдуу оюнга ээ болосуз!

Эми бул долбоорду куралы.

1 -кадам: Бардык бөлүктөрдү алыңыз

Image
Image
2.8
2.8

Бул долбоорду куруу үчүн керектүү бөлүктөр төмөнкүлөр:

An Arduino Uno ▶

2.8”сенсордук экран ▶

Долбоордун баасы абдан төмөн. Ал болгону 15 доллар

Бул долбоорду түзүүдөн мурун сенсордук дисплей жөнүндө мен даярдаган видеону көрүңүз. Мен аны бул көрсөтмөдө тиркеп койдум. Бул кодду түшүнүүгө жана сенсордук экранды калибрлөөгө жардам берет.

2 -кадам: Arduino үчүн 2.8 дюймдук түстүү дисплей

Image
Image
2.8
2.8
2.8
2.8

Мен бул сенсордук экранды banggood.com сайтынан таап, аны кээ бир долбоорлорумда колдонуу үчүн сатып алууну чечтим. Көрүнүп тургандай, дисплей арзан, баасы 11 доллардын тегерегинде.

Бул жерден алыңыз ▶

Дисплей 320x240 пикселдин чечилишин сунуштайт жана ал Arduino менен байланышты абдан оңойлотуучу калкан катары келет. Көрүнүп тургандай, дисплей Arduino Uno санариптик жана аналогдук пиндеринин дээрлик бардыгын колдонот. Бул калканды колдонууда биздин долбоорлор үчүн 2 гана санарип казык жана 1 аналогдук пин калат. Бактыга жараша, дисплей Arduino Mega менен да жакшы иштейт, андыктан бизге дагы казык керек болгондо Arduino Uno ордуна Arduino Mega колдоно алабыз. Тилекке каршы, бул дисплей Arduino Due же Wemos D1 ESP8266 тактасы менен иштебейт. Калкандын дагы бир артыкчылыгы - бул колдонууга оңой болгон микро SD уячасын сунуштайт.

3 -кадам: Долбоорду куруу жана аны сыноо

Долбоорду куруу жана аны сыноо
Долбоорду куруу жана аны сыноо
Долбоорду куруу жана аны сыноо
Долбоорду куруу жана аны сыноо
Долбоорду куруу жана аны сыноо
Долбоорду куруу жана аны сыноо

Экранды Arduino Uno менен туташтыргандан кийин, биз кодду жүктөй алабыз жана биз ойногонго даярбыз.

Башында биз "Оюнду баштоо" баскычын басабыз жана оюн башталат. Ардуино биринчи ойнойт. Андан кийин биз экраныбызды тийүү менен эле кыймыл -аракетибизди ойной алабыз. Андан кийин Arduino өзүнүн кыймылын ойнойт ж.б. Үч белгисин горизонталдуу, вертикалдуу же диагоналдуу катарга коюуга жетишкен оюнчу жеңишке жетет. Оюн бүткөндөн кийин, Game Over экраны пайда болот. Андан кийин оюнду кайра баштоо үчүн кайра ойнотуу баскычын бассак болот.

Arduino бул оюнда абдан жакшы. Ал көпчүлүк оюндарды утуп алат, же эгер сиз абдан жакшы оюнчу болсоңуз, оюн тең чыгуу менен аяктайт. Мен атайылап бул алгоритмди адам оюнчусуна жеңишке жетүү үчүн кээ бир каталарды кетирүү үчүн ойлоп тапкам. Оюндун кодуна дагы эки сапты кошуу менен, биз Arduino оюнду жоготуп албай калышыбыз мүмкүн. Бирок кантип 2 долларлык чип, Arduino CPU, адамдын мээсин сабай алат? Биз иштеп чыккан программа адамдын мээсине караганда акылдуубу?

4 -кадам: Оюн алгоритми

Оюн Алгоритми
Оюн Алгоритми
Оюн Алгоритми
Оюн Алгоритми

Бул суроого жооп берүү үчүн, мен ишке ашырган алгоритмди карап көрөлү.

Компьютер дайыма биринчи ойнойт. Бул чечимдин өзү эле оюнду Arduino үчүн жеңишке жеткирет. Биринчи кадам дайыма бурч болуп саналат. Ардуинонун экинчи кадамы - бул оюнчунун кыймылына таптакыр маани бербеген калган туш келди бурч. Ушул учурдан тартып, Arduino биринчи кезекте оюнчу кийинки кыймылда жеңе аларын текшерет жана кыймылын блоктойт. Эгерде оюнчу бир эле кыймылда жеңе албаса, анда ал бурчтук кыймылды ойнойт, же ал калганда кокусунан. Болгону, бул жөнөкөй алгоритм адам оюнчусун ар бир жолу жеңе алат же эң начар сценарийде оюн тең чыгууга алып келет. Бул эң мыкты тик -точ оюнунун алгоритми эмес, бирок эң жөнөкөйдөрүнүн бири.

Бул алгоритм Ардуинодо оңой эле ишке ашырылышы мүмкүн, анткени Tic Tac Toe оюну абдан жөнөкөй жана биз аны оңой анализдеп, чече алабыз. Эгерде биз оюн дарагын долбоорлосок, анда биз кээ бир утуп алуучу стратегияларды таап, аларды коддо оңой ишке ашыра алабыз же CPUга оюн дарагын реалдуу убакытта эсептеп, өзү эң жакшы кадамды тандап алат. Албетте, биз бул оюнда колдонгон алгоритм абдан жөнөкөй, анткени оюн абдан жөнөкөй. Эгерде биз шахмат боюнча жеңүүчү алгоритмди иштеп чыгууга аракет кылсак, эң ылдам компьютерди колдонсок да, оюн дарагын миң жылда эсептей албайбыз! Мындай оюндар үчүн бизге дагы башка ыкма керек, бизге жасалма интеллектин алгоритмдери жана албетте иштетүүнүн эбегейсиз күчү керек. Бул тууралуу кененирээк кийинки видеодо.

5 -кадам: Долбоордун коду

Долбоордун коду
Долбоордун коду

Долбоордун кодун тез карап көрөлү. Кодду түзүү үчүн бизге үч китепкана керек.

  1. Adafruit TFTLCD:
  2. Adafruit GFX:
  3. Сенсордук экран:

Көрүнүп тургандай, атүгүл ушул сыяктуу жөнөкөй оюн үчүн дагы 600 сап код талап кылынат. Код татаал, ошондуктан мен аны кыска сабакта түшүндүрүүгө аракет кылбайм. Мен сизге Arduino кыймылынын алгоритмин ишке ашырууну көрсөтөм.

Башында биз туш келди эки бурчту ойнойбуз.

<int firstMoves = {0, 2, 6, 8}; // бул позицияларды адегенде колдонот (counter = 0; counter <4; counter ++) // Биринчи ойногон кыймылдарды эсептөө {if (board [firstMoves [counter]! = 0) // Алгачкы кадамды кимдир бирөө ойнойт {movePlayed ++; }} do {if (move <= 2) {int randomMove = random (4); int c = firstMoves [randomMove]; if (board [c] == 0) {delay (1000); такта [c] = 2; Serial.print (firstMoves [randomMove]); Serial.println (); drawCpuMove (firstMoves [randomMove]); b = 1; }}

Кийинки, ар бир турда оюнчу кийинки кадамда жеңишке жетерин текшеребиз.

int checkOpponent ()

{if (board [0] == 1 && board [1] == 1 && board [2] == 0) return 2; else if (board [0] == 1 && board [1] == 0 && board [2] == 1) return 1; else if (board [1] == 1 && board [2] == 1 && board [0] == 0) 0 кайтаруу; else if (board [3] == 1 && board [4] == 1 && board [5] == 0) return 5; else if (board [4] == 1 && board [5] == 1 && board [3] == 0) return 3; else if (board [3] == 1 && board [4] == 0 && board [5] == 1) return 4; else if (board [1] == 0 && board [4] == 1 && board [7] == 1) return 1; башка 100 кайтаруу; }

Эгер ооба, биз бул кыймылга бөгөт коёбуз, көпчүлүк учурда. Биз адамдык оюнчуга жеңишке жетүү үчүн бардык аракеттерди тоспойбуз. Кайсы кыймылдар тосулбаганын таба аласызбы? Кыймылга тоскоолдук кылгандан кийин, биз калган бурчту, же туш келди кыймылды ойнойбуз. Сиз кодду изилдеп, өзүңүздүн теңдешсиз алгоритмиңизди оңой эле ишке ашыра аласыз. Адаттагыдай эле, бул нускамада тиркелген долбоордун кодун таба аласыз.

ЭСКЕРТҮҮ: Banggood эки дисплей драйвери менен бир эле дисплейди сунуш кылгандыктан, эгер жогорудагы код иштебесе, initDisplay функциясын төмөнкүлөргө өзгөртүңүз:

жараксыз initDisplay ()

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

6 -кадам: Акыркы ойлор жана жакшыртуулар

Акыркы ойлор жана жакшыртуулар
Акыркы ойлор жана жакшыртуулар

Көрүнүп тургандай, Arduino Uno менен да, биз жөнөкөй оюндар үчүн теңдешсиз алгоритмди кура алабыз. Бул долбоор сонун, анткени аны куруу оңой жана ошол эле учурда жасалма интеллектке жана оюн программалоого чоң киришүү. Мен келечекте жасалма интеллект менен бир кыйла өнүккөн долбоорлорду курууга аракет кылам, андыктан күчтүү Raspberry Pi менен иштеңиз! Бул долбоор боюнча сиздин пикириңизди уккум келет.

Сураныч, төмөндө комментарийлериңизди жазыңыз жана эгер сизге кызыктуу болсо, нускаманы жактырууну унутпаңыз. Рахмат!

Сунушталууда: