Taula de continguts:

Joc Arduino Touch Tic Tac Toe: 6 passos (amb imatges)
Joc Arduino Touch Tic Tac Toe: 6 passos (amb imatges)

Vídeo: Joc Arduino Touch Tic Tac Toe: 6 passos (amb imatges)

Vídeo: Joc Arduino Touch Tic Tac Toe: 6 passos (amb imatges)
Vídeo: CS50 2015 – 10-я неделя 2024, Desembre
Anonim
Image
Image
Joc Arduino Touch Tic Tac Toe
Joc Arduino Touch Tic Tac Toe
Joc Arduino Touch Tic Tac Toe
Joc Arduino Touch Tic Tac Toe
Joc Arduino Touch Tic Tac Toe
Joc Arduino Touch Tic Tac Toe

Benvolguts amics, benvinguts a un altre tutorial Arduino. En aquest detallat tutorial anem a construir un joc Arduino Tic Tac Toe. Com podeu veure, fem servir una pantalla tàctil i estem jugant contra l’ordinador. Un joc senzill com Tic Tac Toe és una gran introducció a la programació de jocs i a la Intel·ligència Artificial. Tot i que no farem servir cap algorisme d’intel·ligència artificial en aquest joc, entendrem per què es requereixen algorismes d’intel·ligència artificial en jocs més complexos.

Desenvolupar jocs per a Arduino no és fàcil i requereix molt de temps. Però podem construir alguns jocs senzills per a Arduino perquè és divertit i ens permetrà explorar temes de programació més avançats, com la intel·ligència artificial. És una gran experiència d’aprenentatge i al final tindreu un bon joc per als nens!

Ara construïm aquest projecte.

Pas 1: Obteniu totes les parts

Image
Image
El 2,8
El 2,8

Les parts necessàries per construir aquest projecte són les següents:

An Arduino Uno ▶

Una pantalla tàctil de 2,8”▶

El cost del projecte és molt baix. Només val 15 $

Abans d'intentar construir aquest projecte, mireu el vídeo que he preparat sobre la pantalla tàctil. L’he adjuntat en aquest instructiu. Us ajudarà a entendre el codi i a calibrar la pantalla tàctil.

Pas 2: pantalla tàctil de 2,8 "en color per a Arduino

Image
Image
El 2,8
El 2,8
El 2,8
El 2,8

Vaig descobrir aquesta pantalla tàctil a banggood.com i vaig decidir comprar-la per intentar utilitzar-la en alguns dels meus projectes. Com podeu veure, la pantalla és econòmica i costa uns 11 dòlars.

Obteniu-lo aquí ▶

La pantalla ofereix una resolució de 320x240 píxels i es presenta com un escut que facilita molt la connexió amb Arduino. Com podeu veure, la pantalla utilitza gairebé tots els pins digitals i analògics de l’Arduino Uno. En utilitzar aquest escut, només ens queden 2 pins digitals i 1 pin analògic per als nostres projectes. Afortunadament, la pantalla també funciona bé amb l’Arduino Mega, de manera que quan necessitem més pins podem utilitzar l’Arduino Mega en lloc de l’Arduino Uno. Malauradament, aquesta pantalla no funciona amb Arduino Due ni amb la placa Wemos D1 ESP8266. Un altre avantatge de l'escut és que ofereix una ranura micro SD que és molt fàcil d'utilitzar.

Pas 3: Construir el projecte i provar-lo

Construint el projecte i provant-lo
Construint el projecte i provant-lo
Construint el projecte i provant-lo
Construint el projecte i provant-lo
Construint el projecte i provant-lo
Construint el projecte i provant-lo

Després de connectar la pantalla a l'Arduino Uno, podem carregar el codi i estem preparats per jugar.

Al principi, premem el botó "Inicia el joc" i el joc comença. L’Arduino toca primer. A continuació, podem jugar a la nostra jugada simplement tocant la pantalla. A continuació, l’Arduino juga el seu moviment, etc. Guanya el joc el jugador que aconsegueixi col·locar tres de les seves marques en una fila horitzontal, vertical o diagonal. Quan finalitza el joc, apareix la pantalla Game Over. A continuació, podem prémer el botó Reprodueix per començar de nou el joc.

L'Arduino és molt bo en aquest joc. Guanyarà la majoria dels jocs, o si sou un jugador molt bo, el joc acabarà en empat. Vaig dissenyar intencionadament aquest algorisme per cometre alguns errors per tal de donar al jugador humà la possibilitat de guanyar. Si afegim dues línies més al codi del joc, podem fer que l’Arduino no pugui perdre el joc. Però, com pot un xip de 2 $, la CPU Arduino, superar el cervell humà? El programa que hem desenvolupat és més intel·ligent que el cervell humà?

Pas 4: l'algorisme del joc

L’algorisme del joc
L’algorisme del joc
L’algorisme del joc
L’algorisme del joc

Per respondre a aquesta pregunta, vegem l’algoritme que he implementat.

L’ordinador sempre juga primer. Només amb aquesta decisió, l'Arduino guanya el joc molt més fàcilment. El primer moviment sempre és un racó. El segon moviment de l'Arduino també és una cantonada aleatòria de la resta sense preocupar-se del moviment del jugador. A partir d’aquest moment, l’Arduino comprova primer si el jugador pot guanyar en el següent moviment i bloqueja aquest moviment. Si el jugador no pot guanyar en una sola jugada, juga una jugada de cantonada si està disponible o una aleatòria de la resta. Ja està, aquest senzill algorisme pot guanyar al jugador humà cada vegada o, en el pitjor dels casos, el joc resultarà en un empat. Aquest no és el millor algorisme de joc de tic tac toe, sinó un dels més senzills.

Aquest algorisme es pot implementar fàcilment a Arduino, perquè el joc Tic Tac Toe és molt senzill i el podem analitzar i resoldre fàcilment. Si dissenyem l'arbre del joc, podem descobrir algunes estratègies guanyadores i implementar-les fàcilment en codi o podem deixar que la CPU calculi l'arbre del joc en temps real i escollir el millor moviment per si mateix. Per descomptat, l’algorisme que fem servir en aquest joc és molt senzill, perquè el joc és molt senzill. Si intentem dissenyar un algorisme guanyador per als escacs, fins i tot si fem servir l’ordinador més ràpid, no podem calcular l’arbre de joc en mil anys. Per a jocs com aquest, necessitem un altre enfocament, necessitem alguns algorismes d’Intel·ligència Artificial i, per descomptat, un enorme poder de processament. Més informació sobre això en un futur vídeo.

Pas 5: Codi del projecte

Codi del projecte
Codi del projecte

Fem una ullada ràpida al codi del projecte. Necessitem tres biblioteques per tal de compilar el codi.

  1. Adafruit TFTLCD:
  2. Adafruit GFX:
  3. Pantalla tàctil:

Com podeu veure, fins i tot un joc tan senzill com aquest requereix més de 600 línies de codi. El codi és complex, de manera que no intentaré explicar-ho en un breu tutorial. Us mostraré la implementació de l'algorisme per als moviments d'Arduino.

Al principi, juguem dos córners a l’atzar.

<int firstMoves = {0, 2, 6, 8}; // utilitzarà aquestes posicions primer per (comptador = 0; comptador <4; comptador ++) // Compteu els primers moviments jugats {if (tauler [primerMou [comptador]! = 0) // El primer moviment el juga algú {movesPlayed ++; }} fer {if (es mou <= 2) {int randomMove = random (4); int c = firstMoves [randomMove]; if (tauler [c] == 0) {delay (1000); tauler [c] = 2; Serial.print (firstMoves [randomMove]); Serial.println (); drawCpuMove (firstMoves [randomMove]); b = 1; }}

A continuació, en cada ronda comprovem si el jugador pot guanyar en la següent jugada.

int checkOpponent ()

{if (tauler [0] == 1 && tauler [1] == 1 && tauler [2] == 0) retorn 2; else if (tauler [0] == 1 && tauler [1] == 0 && tauler [2] == 1) retorna 1; else if (tauler [1] == 1 && tauler [2] == 1 && tauler [0] == 0) retorna 0; else if (tauler [3] == 1 && tauler [4] == 1 && tauler [5] == 0) retorna 5; else if (tauler [4] == 1 && tauler [5] == 1 && tauler [3] == 0) retorna 3; else if (tauler [3] == 1 && tauler [4] == 0 && tauler [5] == 1) retorna 4; else if (tauler [1] == 0 && tauler [4] == 1 && tauler [7] == 1) retorna 1; sinó torna 100; }

Si és així, bloquegem aquest moviment, la majoria de les vegades. No bloquegem tots els moviments per donar al jugador humà la possibilitat de guanyar. Podeu trobar quins moviments no estan bloquejats? Després de bloquejar el moviment, reproduïm una cantonada restant o un moviment aleatori. Podeu estudiar el codi i implementar fàcilment el vostre propi algorisme immillorable. Com sempre, podeu trobar el codi del projecte adjunt en aquest instructiu.

NOTA: Atès que Banggood ofereix la mateixa pantalla amb dos controladors de pantalla diferents, si el codi anterior no funciona, canvieu la funció initDisplay a la següent:

void initDisplay ()

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

Pas 6: Pensaments finals i millores

Pensaments finals i millores
Pensaments finals i millores

Com podeu veure, fins i tot amb un Arduino Uno, podem construir un algorisme immillorable per a jocs senzills. Aquest projecte és fantàstic, ja que és fàcil de construir i, al mateix temps, és una gran introducció a la intel·ligència artificial i la programació de jocs. Intentaré construir alguns projectes més avançats amb Intel·ligència Artificial en el futur amb el Raspberry Pi més potent, així que estigueu atents. M'encantaria escoltar la vostra opinió sobre aquest projecte.

Si us plau, publiqueu els vostres comentaris a continuació i no us oblideu d’agradar els indicatius si us sembla interessant. Gràcies!

Recomanat: