Съдържание:

Arduino Touch Tic Tac Toe Игра: 6 стъпки (със снимки)
Arduino Touch Tic Tac Toe Игра: 6 стъпки (със снимки)

Видео: Arduino Touch Tic Tac Toe Игра: 6 стъпки (със снимки)

Видео: Arduino Touch Tic Tac Toe Игра: 6 стъпки (със снимки)
Видео: CS50 2015 – 10-я неделя 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

Частите, необходими за изграждането на този проект, са следните:

Arduino Uno ▶

2.8”сензорен екран ▶

Цената на проекта е много ниска. Това е само 15 $

Преди да се опитате да изградите този проект, моля, вижте подготвеното от мен видео за сензорния дисплей. Прикачих го в тази инструкция. Това ще ви помогне да разберете кода и да калибрирате сензорния екран.

Стъпка 2: 2.8 "сензорен цветен дисплей за Arduino

Image
Image
2.8
2.8
2.8
2.8

Открих този сензорен екран на banggood.com и реших да го купя, за да опитам да го използвам в някои от моите проекти. Както можете да видите, дисплеят е евтин, струва около 11 долара.

Вземете го тук ▶

Дисплеят предлага резолюция 320x240 пиксела и идва като щит, който прави връзката с Arduino изключително лесна. Както можете да видите, дисплеят използва почти всички цифрови и аналогови щифтове на Arduino Uno. Когато използваме този щит, ние имаме само 2 цифрови пина и 1 аналогов щифт за нашите проекти. За щастие, дисплеят работи добре и с Arduino Mega, така че когато имаме нужда от повече щифтове, можем да използваме Arduino Mega вместо Arduino Uno. За съжаление този дисплей не работи с Arduino Due или платката Wemos D1 ESP8266. Друго предимство на щита е, че предлага микро SD слот, който е много лесен за използване.

Стъпка 3: Изграждане на проекта и неговото тестване

Изграждане на проекта и неговото тестване
Изграждане на проекта и неговото тестване
Изграждане на проекта и неговото тестване
Изграждане на проекта и неговото тестване
Изграждане на проекта и неговото тестване
Изграждане на проекта и неговото тестване

След като свържете екрана с Arduino Uno, можем да заредим кода и сме готови за игра.

Първо натискаме бутона „Старт на играта“и играта започва. Ардуино играе първи. След това можем да играем нашия ход, просто като докоснем екрана. След това Arduino играе своя ход и така нататък. Играчът, който успее да постави три свои марки в хоризонтален, вертикален или диагонален ред, печели играта. Когато играта приключи, се появява екранът Game Over. След това можем да натиснем бутона за възпроизвеждане, за да започнем играта отново.

Arduino е много добър в тази игра. Той ще спечели повечето игри, или ако сте много добър играч, играта ще завърши наравно. Умишлено проектирах този алгоритъм, за да направя някои грешки, за да дам шанс на човека да спечели. Като добавим още два реда към кода на играта, можем да направим Arduino невъзможно да загуби играта. Но как 2 $ чип, процесорът Arduino, може да победи човешкия мозък? Дали програмата, която разработихме, е по -умна от човешкия мозък?

Стъпка 4: Алгоритъмът на играта

Алгоритъмът на играта
Алгоритъмът на играта
Алгоритъмът на играта
Алгоритъмът на играта

За да отговорим на този въпрос, нека разгледаме алгоритъма, който съм приложил.

Компютърът винаги играе първи. Само това решение прави играта много по -лесна за победата на Arduino. Първият ход винаги е ъгъл. Вторият ход за Arduino също е случаен ъгъл от останалите, без изобщо да се интересува от хода на играча. От този момент Arduino първо проверява дали играчът може да спечели в следващия ход и блокира този ход. Ако играчът не може да спечели с един ход, той играе ъглов ход, ако е наличен, или случаен от останалите. Това е, този прост алгоритъм може да победи човешкия играч всеки път или в най -лошия сценарий играта ще доведе до равенство. Това не е най -добрият алгоритъм на играта тик -так, но един от най -простите.

Този алгоритъм може лесно да се внедри в Arduino, защото играта Tic Tac Toe е много проста и ние лесно можем да я анализираме и разрешим. Ако проектираме дървото на игрите, можем да открием някои печеливши стратегии и лесно да ги внедрим в код или да оставим процесора да изчисли дървото на играта в реално време и сам да избере най -добрия ход. Разбира се, алгоритъмът, който използваме в тази игра, е много прост, защото играта е много проста. Ако се опитаме да проектираме печеливш алгоритъм за шах, дори ако използваме най -бързия компютър, не можем да изчислим дървото на играта за хиляда години! За такива игри се нуждаем от друг подход, имаме нужда от някои алгоритми за изкуствен интелект и разбира се огромна процесорна мощ. Повече за това в бъдещо видео.

Стъпка 5: Код на проекта

Код на проекта
Код на проекта

Нека да разгледаме набързо кода на проекта. Нуждаем се от три библиотеки, за да компилираме кода.

  1. Adafruit TFTLCD:
  2. Adafruit GFX:
  3. Сензорен екран:

Както можете да видите, дори една проста игра като тази, изисква повече от 600 реда код. Кодът е сложен, така че няма да се опитвам да го обясня в кратък урок. Все пак ще ви покажа изпълнението на алгоритъма за ходовете на Arduino.

Първоначално играем два произволни корнера.

<int firstMoves = {0, 2, 6, 8}; // ще използва първо тези позиции за (брояч = 0; брояч <4; брояч ++) // Брой първите изиграни ходове {if (дъска [firstMoves [брояч]! = 0) // Първият ход се играе от някой {movePlayed ++; }} do {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]); b = 1; }}

След това във всеки рунд проверяваме дали играчът може да спечели в следващия ход.

int checkOpponent ()

{if (board [0] == 1 && board [1] == 1 && board [2] == 0) return 2; в противен случай if (board [0] == 1 && board [1] == 0 && board [2] == 1) return 1; в противен случай if (board [1] == 1 && board [2] == 1 && board [0] == 0) return 0; иначе ако (табло [3] == 1 && борд [4] == 1 && борд [5] == 0) връщане 5; в противен случай 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; иначе ако (табло [1] == 0 && борд [4] == 1 && борд [7] == 1) връщане 1; иначе върнете 100; }

Ако да, блокираме това движение, през повечето време. Ние не блокираме всички ходове, за да дадем шанс на човека да спечели. Можете ли да намерите кои ходове не са блокирани? След като блокираме хода, играем оставащ ъгъл или произволен ход. Можете да изучите кода и лесно да внедрите свой собствен непобедим алгоритъм. Както винаги можете да намерите кода на проекта, приложен към тази инструкция.

ЗАБЕЛЕЖКА: Тъй като Banggood предлага един и същ дисплей с два различни драйвера на дисплея, ако горният код не работи, променете функцията initDisplay на следното:

void initDisplay ()

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

Стъпка 6: Последни мисли и подобрения

Заключителни мисли и подобрения
Заключителни мисли и подобрения

Както можете да видите, дори с Arduino Uno, можем да изградим непобедим алгоритъм за прости игри. Този проект е страхотен, защото е лесен за изграждане и в същото време чудесно въведение в изкуствения интелект и програмирането на игри. Ще се опитам да изградя някои по -напреднали проекти с изкуствен интелект в бъдеще, използвайки по -мощната Raspberry Pi, така че следете! Ще се радвам да чуя вашето мнение за този проект.

Моля, публикувайте коментарите си по -долу и не забравяйте да харесате инструкциите, ако ви е интересно. Благодаря!

Препоръчано: