Բովանդակություն:

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:

Ստացեք այստեղ ▶

Theուցադրումն առաջարկում է 320x240 պիքսել թույլատրելիություն և գալիս է որպես վահան, ինչը չափազանց հեշտ է դարձնում կապը Arduino- ի հետ: Ինչպես տեսնում եք, էկրանն օգտագործում է Arduino Uno- ի գրեթե բոլոր թվային և անալոգային կապերը: Այս վահանն օգտագործելիս մեզ մնում է միայն 2 թվային կապում և 1 անալոգային կապում մեր նախագծերի համար: Բարեբախտաբար, ցուցադրումը լավ է աշխատում նաև Arduino Mega- ի հետ, ուստի մենք, երբ ավելի շատ կապում ենք պետք, կարող ենք օգտագործել Arduino Mega- ն Arduino Uno- ի փոխարեն: Unfortunatelyավոք, այս էկրանը չի աշխատում Arduino Due- ի կամ Wemos D1 ESP8266 տախտակի հետ: Վահանի մեկ այլ առավելությունն այն է, որ այն առաջարկում է միկրո SD բնիկ, որը շատ հեշտ է օգտագործել:

Քայլ 3. Նախագծի կառուցում և փորձարկում:

Նախագծի կառուցում և փորձարկում
Նախագծի կառուցում և փորձարկում
Նախագծի կառուցում և փորձարկում
Նախագծի կառուցում և փորձարկում
Նախագծի կառուցում և փորձարկում
Նախագծի կառուցում և փորձարկում

Էկրանը Arduino Uno- ին միացնելուց հետո կարող ենք բեռնել ծածկագիրը և պատրաստ ենք խաղալ:

Սկզբում մենք սեղմում ենք «Սկսել խաղը» կոճակը, և խաղը սկսվում է: Առաջինը խաղում է Arduino- ն: Այնուհետև մենք կարող ենք խաղալ մեր քայլը ՝ պարզապես դիպչելով էկրանին: Arduino- ն այնուհետև կատարում է իր քայլը և այլն: Խաղացողը, ում կհաջողվի հորիզոնական, ուղղահայաց կամ անկյունագծային շարքերում տեղադրել իրենց երեք նշանները, շահում է խաղը: Երբ խաղն ավարտվում է, հայտնվում է Game Over էկրանը: Այնուհետև կարող ենք սեղմել play again կոճակը ՝ խաղը նորից սկսելու համար:

Arduino- ն շատ լավ է խաղում այս խաղում: Այն կհաղթի խաղերի մեծ մասում, կամ եթե դուք շատ լավ խաղացող եք, խաղը կավարտվի ոչ -ոքի: Ես միտումնավոր նախագծեցի այս ալգորիթմը որոշ սխալներ թույլ տալու համար, որպեսզի մարդկային խաղացողին հաղթելու հնարավորություն տամ: Խաղի կոդին ավելացնելով ևս երկու տող, մենք կարող ենք Arduino- ին անհնար դարձնել պարտությունը: Բայց ինչպես կարող է 2 $ չիպը ՝ Arduino պրոցեսորը, ծեծել մարդու ուղեղը: Արդյո՞ք մեր մշակած ծրագիրը խելացի է, քան մարդու ուղեղը:

Քայլ 4. Խաղի ալգորիթմ

Խաղի ալգորիթմ
Խաղի ալգորիթմ
Խաղի ալգորիթմ
Խաղի ալգորիթմ

Այս հարցին պատասխանելու համար եկեք նայենք իմ կիրառած ալգորիթմին:

Համակարգիչը միշտ առաջինն է խաղում: Միայն այս որոշումը Arduino- ի համար խաղը շատ ավելի հեշտ է դարձնում հաղթելը: Առաջին քայլը միշտ անկյունային է: Երկրորդ քայլը Arduino- ի համար նույնպես պատահական անկյուն է մնացածից ՝ ընդհանրապես չմտածելով խաղացողի շարժման մասին: Այս պահից սկսած, Arduino- ն նախ ստուգում է, արդյոք խաղացողը կարող է հաղթել հաջորդ քայլում և արգելափակում է այդ քայլը: Եթե խաղացողը չի կարող հաղթել մեկ քայլով, ապա այն խաղարկում է անկյունային, եթե առկա է կամ պատահական ՝ մնացածից: Վերջ, այս պարզ ալգորիթմը կարող է ամեն անգամ հաղթել մարդ խաղացողին կամ վատագույն դեպքում խաղը ոչ -ոքիի կհանգեցնի: Սա ոչ թե tic tac toe խաղի լավագույն ալգորիթմն է, այլ ամենապարզերից մեկը:

Այս ալգորիթմը կարելի է հեշտությամբ իրականացնել Arduino- ում, քանի որ Tic Tac Toe խաղը շատ պարզ է, և մենք հեշտությամբ կարող ենք այն վերլուծել և լուծել: Եթե մենք նախագծում ենք խաղի ծառը, մենք կարող ենք գտնել որոշ հաղթող ռազմավարություններ և հեշտությամբ դրանք իրականացնել կոդի մեջ, կամ մենք կարող ենք թույլ տալ, որ պրոցեսորը հաշվարկի խաղի ծառը իրական ժամանակում և ինքնուրույն ընտրի լավագույն քայլը: Իհարկե, այն ալգորիթմը, որը մենք օգտագործում ենք այս խաղում, շատ պարզ է, քանի որ խաղը շատ պարզ է: Եթե մենք փորձենք նախագծել շախմատի հաղթող ալգորիթմ, նույնիսկ եթե մենք օգտագործում ենք ամենաարագ համակարգիչը, մենք չենք կարող հաշվել խաղի ծառը հազար տարվա ընթացքում: Նման խաղերի համար մեզ այլ մոտեցում է պետք, մեզ պետք են Արհեստական բանականության որոշ ալգորիթմներ և, իհարկե, հսկայական մշակման հզորություն: Այս մասին ավելին ՝ ապագա տեսանյութում:

Քայլ 5. Նախագծի ծածկագիրը

Codeրագրի ծածկագիրը
Codeրագրի ծածկագիրը

Եկեք արագ նայենք նախագծի ծածկագրին: Մեզ պետք է երեք գրադարան, որպեսզի ծածկագիրը կազմվի:

  1. Adafruit TFTLCD ՝
  2. Adafruit GFX ՝
  3. Սենսորային էկրան ՝

Ինչպես տեսնում եք, նույնիսկ այսպիսի պարզ խաղը պահանջում է ավելի քան 600 տող կոդ: Կոդը բարդ է, այնպես որ ես չեմ փորձի այն բացատրել կարճ ձեռնարկում: Չնայած ձեզ ցույց կտամ Arduino- ի քայլերի ալգորիթմի իրականացումը:

Սկզբում մենք խաղում ենք երկու պատահական անկյունային:

<int firstMoves = {0, 2, 6, 8}; // առաջին հերթին կօգտագործի այս դիրքերը (հաշվիչ = 0; հաշվիչ <4; հաշվիչ ++) // Հաշվեք առաջին քայլերը, որոնք խաղացել են {if (տախտակ [firstMoves [counter]! = 0) // Առաջին քայլը կատարում է մեկը {movesPlayed ++; }} անել {if (շարժումներ <= 2) {int randomMove = random (4); int c = firstMoves [randomMove]; if (տախտակ [c] == 0) {ուշացում (1000); տախտակ [c] = 2; Serial.print (firstMoves [randomMove]); Serial.println (); drawCpuMove (firstMoves [randomMove]); բ = 1; }}

Հաջորդը, յուրաքանչյուր տուրում մենք ստուգում ենք, արդյոք խաղացողը կարող է հաղթել հաջորդ քայլին:

int checkOpponent ()

{if (տախտակ [0] == 1 && տախտակ [1] == 1 && տախտակ [2] == 0) վերադարձ 2; այլապես եթե (տախտակ [0] == 1 && տախտակ [1] == 0 && տախտակ [2] == 1) վերադարձնել 1; այլապես եթե (տախտակ [1] == 1 && տախտակ [2] == 1 && տախտակ [0] == 0) վերադարձնել 0; այլապես, եթե (տախտակ [3] == 1 && տախտակ [4] == 1 && տախտակ [5] == 0) վերադարձնել 5; այլապես, եթե (տախտակ [4] == 1 && տախտակ [5] == 1 && տախտակ [3] == 0) վերադարձնել 3; այլապես եթե (տախտակ [3] == 1 && տախտակ [4] == 0 && տախտակ [5] == 1) վերադարձնել 4; այլապես եթե (տախտակ [1] == 0 && տախտակ [4] == 1 && տախտակ [7] == 1) վերադարձնել 1; այլապես վերադարձնել 100; }

Եթե այո, ապա մենք արգելափակում ենք այդ քայլը, շատ դեպքերում: Մենք չենք արգելափակում բոլոր քայլերը, որպեսզի մարդկային խաղացողին հաղթելու հնարավորություն տանք: Կարո՞ղ եք գտնել, թե որ շարժումներն արգելափակված չեն: Քայլը արգելափակելուց հետո մենք խաղում ենք մնացած անկյուն կամ պատահական քայլ: Դուք կարող եք ուսումնասիրել ծածկագիրը և հեշտությամբ իրականացնել ձեր սեփական աննման ալգորիթմը: Ինչպես միշտ, դուք կարող եք գտնել ծրագրի կոդը, որը կցված է այս ուսանելի:

ՈEՇԱԴՐՈԹՅՈՆ. Քանի որ Banggood- ն առաջարկում է նույն էկրանը երկու տարբեր ցուցադրման վարորդներով, եթե վերը նշված կոդը չի գործում, փոխեք initDisplay գործառույթը հետևյալին

void initDisplay ()

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

Քայլ 6: Վերջնական մտքեր և բարելավումներ

Վերջնական մտքեր և բարելավումներ
Վերջնական մտքեր և բարելավումներ

Ինչպես տեսնում եք, նույնիսկ Arduino Uno- ի միջոցով մենք կարող ենք կառուցել անպարտելի ալգորիթմ պարզ խաղերի համար: Այս նախագիծը հիանալի է, քանի որ այն կառուցելը հեշտ է, և միևնույն ժամանակ հիանալի ներածություն Արհեստական բանականության և խաղերի ծրագրավորման մեջ: Ես կփորձեմ ապագայում Արհեստական բանականության հետ ավելի առաջադեմ նախագծեր կառուցել `օգտագործելով ավելի հզոր Raspberry Pi- ն, այնպես որ մնացեք լարված: Ես կցանկանայի լսել ձեր կարծիքը այս նախագծի վերաբերյալ:

Խնդրում ենք տեղադրել ձեր մեկնաբանությունները ստորև և չմոռանաք հավանել ուսուցանվողը, եթե ձեզ հետաքրքրում է: Շնորհակալություն

Խորհուրդ ենք տալիս: