Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Arduino Due TIC TAC TOE con pantalla táctil

Componentes y suministros

Arduino debido
× 1
2,8 zoll TFT LCD con pantalla táctil
× 1
Cables de puente (genéricos)
× 1

Aplicaciones y servicios en línea

Arduino IDE

Acerca de este proyecto

Acerca de

Hola, quiero compartir mi trabajo en el proyecto de nickthegreek82:arduino-touch-tic-tac-toe-game.

Necesitas:

  • la biblioteca Adafruit
  • la biblioteca GFX
  • y la biblioteca URTouch

Cableado

El cableado es el siguiente para la pantalla táctil:

  • Toque -> Arduino Due
  • T_IRQ -> 22
  • T_DO -> 24
  • T_DIN -> 26
  • T_CS -> 28
  • T_CLK -> 30

Para la pantalla:

  • Pantalla -> Arduino Due
  • SDO -> A.25
  • LED -> 3.3V
  • SCK -> A.27
  • SDI -> A.26
  • DC -> 9
  • RESTABLECER -> 8
  • CS -> 10
  • GND -> GND
  • VCC -> 3.3V

22.08.2017

Se modificó el KI y se optimizó algo de código.

26.08.2017

Algo de optimización de código.

27.08.2017

¿Puedes ganar contra la CPU?

13.03.2018

encontró una forma mejor para la IA

gracias a klauscam https://github.com/klauscam/ArduinoTicTacToe

Código

  • TIC TAC TOE
  • TicTacToe_new
TIC TAC TOE Arduino
Un simple juego TIC TAC TOE para jugar contra la computadora
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///////// // 2.8 "PANTALLA TÁCTIL TIC TAC TOE // // // // http://www.educ8s.tv // // // // modificado 08.2017 por rom3 // / ////////////////////////////////////////////// # include  #include  #include  #include  #include  #define TFT_RST 8 # define TFT_DC 9 # define TFT_CS 10 # define TOUCH_ORIENTATION1fruit_ft_fti34 (TFT_CS, TFT_DC, TFT_RST); Botones Adafruit_GFX_Button [9]; URTouch myTouch (30, 28, 26, 24, 22); movimientos int cortos sin firmar =1; ganador int corto sin firmar =0; // 0 =Draw, 1 =Human, 2 =CPUunsigned short int x, y; // posiciona el cursor int corto touchunsigned; // Cursor positionunsigned short int firstMoves [] ={0,2,6,8}; // usará estas posiciones primero, si la CPU comienza sin firmar short int board [] ={0,0,0,0,0,0,0,0,0,0}; // contiene datos de posición 0 está en blanco, 1 humano, 2 es jugador de computadora; // verdadero =USTED, falso =CPUbo ol b =1; char start [10] ={"Gamestart"}; char you [4] ={"YOU"}; char cpu [4] ={"CPU"}; char again [7] ={"Again?"}; const unsigned char circle [] PROGMEM ={0b0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 , 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 , 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7,0xf8,0x0,0x0,0x0 , 0x0,0x0,0x0,0x0,0x7f, 0xff, 0x80,0x0,0x0,0x0,0x0,0x0,0x3,0xff, 0xff, 0xf0,0x0,0x0,0x0,0x0,0x0,0xf, 0xff, 0xff, 0xfc , 0x0,0x0,0x0,0x0,0x0,0x1f, 0xff, 0xff, 0xfe, 0x0,0x0,0x0,0x0,0x0,0x7f, 0xf0,0x3,0xff, 0x80,0x0,0x0,0x0,0x0,0xff, 0x80 , 0x0,0x7f, 0xc0,0x0,0x0,0x0,0x1,0xfe, 0x0,0x0,0x1f, 0xe0,0x0,0x0,0x0,0x3,0xf8,0x0,0x0,0x7,0xf0,0x0,0x0,0x0,0x7 , 0xf0,0x0,0x0,0x3,0xf8,0x0,0x0,0x0,0xf, 0xe0,0x0,0x0,0x1,0xfc, 0x0,0x0,0x0,0xf, 0xc0,0x0,0x0,0x0,0xfc, 0x0,0x0 , 0x0,0x1f, 0x80,0x0,0x0,0x0,0x7e, 0x0,0x0,0x0,0x3f, 0x0,0x0,0x0,0x0,0x3f, 0x0,0x0,0x0,0x3e, 0x0,0x0,0x0,0x0,0x1f , 0x0,0x0,0x0,0x7e, 0x0,0x0,0x0,0x0,0x1f, 0x80,0x0,0x0,0x7c, 0x0,0x0,0x0,0x0,0xf, 0x80,0x0,0x0,0x7c, 0x0,0x0,0x0 , 0x0,0xf, 0x80,0x0,0x0,0xf8,0x0,0x0 , 0x0,0x0,0x7,0xc0,0x0,0x0,0xf8,0x0,0x0,0x0,0x0,0x7,0xc0,0x0,0x0,0xf8,0x0,0x0,0x0,0x0,0x7,0xc0,0x0,0x0,0xf0 , 0x0,0x0,0x0,0x0,0x3,0xc0,0x0,0x1,0xf0,0x0,0x0,0x0,0x0,0x3,0xe0,0x0,0x1,0xf0,0x0,0x0,0x0,0x0,0x3,0xe0,0x0 , 0x1,0xf0,0x0,0x0,0x0,0x0,0x3,0xe0,0x0,0x1,0xf0,0x0,0x0,0x0,0x0,0x3,0xe0,0x0,0x1,0xf0,0x0,0x0,0x0,0x0,0x3 , 0xe0,0x0,0x1,0xf0,0x0,0x0,0x0,0x0,0x3,0xe0,0x0,0x1,0xf0,0x0,0x0,0x0,0x0,0x3,0xe0,0x0,0x1,0xf0,0x0,0x0,0x0 , 0x0,0x3,0xe0,0x0,0x0,0xf0,0x0,0x0,0x0,0x0,0x3,0xc0,0x0,0x0,0xf8,0x0,0x0,0x0,0x0,0x7,0xc0,0x0,0x0,0xf8,0x0 , 0x0,0x0,0x0,0x7,0xc0,0x0,0x0,0xf8,0x0,0x0,0x0,0x0,0x7,0xc0,0x0,0x0,0x7c, 0x0,0x0,0x0,0x0,0xf, 0x80,0x0,0x0 , 0x7c, 0x0,0x0,0x0,0x0,0xf, 0x80,0x0,0x0,0x7e, 0x0,0x0,0x0,0x0,0x1f, 0x80,0x0,0x0,0x3e, 0x0,0x0,0x0,0x0,0x1f, 0x0 , 0x0,0x0,0x3f, 0x0,0x0,0x0,0x0,0x3f, 0x0,0x0,0x0,0x1f, 0x80,0x0,0x0,0x0,0x7e, 0x0,0x0,0x0,0xf, 0xc0,0x0,0x0,0x0 , 0xfc, 0x0,0x0,0x0,0xf, 0xe0,0x0,0x0,0x1,0xfc, 0x0,0x0,0x0,0x7,0xf0,0x0,0x0,0x3,0xf8,0x0,0x0,0x0,0x3,0xf8,0x0 , 0x0,0x7,0xf0,0x0,0x0,0x0,0x1,0xfe, 0x0,0x0,0x1f, 0xe0,0x0,0x0,0x0,0x0,0xff, 0x80,0x0,0x7f, 0xc0,0x0,0x0,0x0,0x0,0x7f, 0xf0,0x3,0xff, 0x80,0x0,0x0,0x0,0x0,0x1f, 0xff, 0xff, 0xfe, 0x0,0x0,0x0,0x0,0x0,0xf, 0xff, 0xff, 0xfc, 0x0,0x0,0x0,0x0,0x0,0x3,0xff, 0xff, 0xf0,0x0,0x0,0x0,0x0,0x0, 0x0,0x7f, 0xff, 0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x7,0xf8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; const unsigned char x_bitmap [] PROGMEM ={ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x3,0xff, 0xff, 0xc0,0x1,0xff, 0xff, 0xe0,0x0,0x1,0xff, 0xff, 0xe0,0x1,0xff, 0xff, 0xc0,0x0,0x1, 0xff, 0xff, 0xf0,0x3,0xff, 0xff, 0xc0,0x0,0x0,0xf f, 0xff, 0xf0,0x7,0xff, 0xff, 0x80,0x0,0x0,0xff, 0xff, 0xf8,0x7,0xff, 0xff, 0x80,0x0,0x0,0x7f, 0xff, 0xf8,0xf, 0xff, 0xff, 0x0, 0x0,0x0,0x3f, 0xff, 0xfc, 0xf, 0xff, 0xfe, 0x0,0x0,0x0,0x3f, 0xff, 0xfe, 0x1f, 0xff, 0xfe, 0x0,0x0,0x0,0x1f, 0xff, 0xfe, 0x1f, 0xff, 0xfc, 0x0,0x0,0x0,0x1f, 0xff, 0xff, 0x3f, 0xff, 0xfc, 0x0,0x0,0x0,0xf, 0xff, 0xff, 0x7f, 0xff, 0xf8,0x0,0x0,0x0,0xf, 0xff, 0xff, 0xff, 0xff, 0xf8,0x0,0x0,0x0,0x7,0xff, 0xff, 0xff, 0xff, 0xf0,0x0,0x0,0x0,0x3,0xff, 0xff, 0xff, 0xff, 0xe0,0x0,0x0,0x0,0x3, 0xff, 0xff, 0xff, 0xff, 0xe0,0x0,0x0,0x0,0x1,0xff, 0xff, 0xff, 0xff, 0xc0,0x0,0x0,0x0,0x1,0xff, 0xff, 0xff, 0xff, 0xc0,0x0,0x0, 0x0,0x0,0xff, 0xff, 0xff, 0xff, 0x80,0x0,0x0,0x0,0x0,0xff, 0xff, 0xff, 0xff, 0x80,0x0,0x0,0x0,0x0,0x7f, 0xff, 0xff, 0xff, 0x0, 0x0,0x0,0x0,0x0,0x3f, 0xff, 0xff, 0xfe, 0x0,0x0,0x0,0x0,0x0,0x3f, 0xff, 0xff, 0xfe, 0x0,0x0,0x0,0x0,0x0,0x1f, 0xff, 0xff, 0xfc, 0x0,0x0,0x0,0x0,0x0,0x1f, 0xff, 0xff, 0xfc, 0x0,0x0,0x0,0x0,0x0,0x1f, 0xff, 0xff, 0xfc, 0x0,0x0,0x0,0x0,0x0,0x3f, 0xff, 0xff, 0xfe, 0x0,0x0,0x0,0x0,0x0,0x3f, 0xff, 0xff, 0xfe, 0x0,0x0,0x0,0x0,0x0,0x7f, 0xff, 0xff, 0xf f, 0x0,0x0,0x0,0x0,0x0,0xff, 0xff, 0xff, 0xff, 0x80,0x0,0x0,0x0,0x0,0xff, 0xff, 0xff, 0xff, 0x80,0x0,0x0,0x0,0x1,0xff, 0xff, 0xff, 0xff, 0xc0,0x0,0x0,0x0,0x1,0xff, 0xff, 0xff, 0xff, 0xc0,0x0,0x0,0x0,0x3,0xff, 0xff, 0xff, 0xff, 0xe0,0x0,0x0,0x0, 0x3,0xff, 0xff, 0xff, 0xff, 0xe0,0x0,0x0,0x0,0x7,0xff, 0xff, 0xff, 0xff, 0xf0,0x0,0x0,0x0,0xf, 0xff, 0xff, 0xff, 0xff, 0xf8,0x0, 0x0,0x0,0xf, 0xff, 0xff, 0xff, 0xff, 0xf8,0x0,0x0,0x0,0x1f, 0xff, 0xff, 0x7f, 0xff, 0xfc, 0x0,0x0,0x0,0x1f, 0xff, 0xfe, 0x3f, 0xff, 0xfc, 0x0,0x0,0x0,0x3f, 0xff, 0xfc, 0x3f, 0xff, 0xfe, 0x0,0x0,0x0,0x3f, 0xff, 0xfc, 0x1f, 0xff, 0xfe, 0x0,0x0,0x0,0x7f, 0xff, 0xf 0x1f, 0xff, 0xff, 0x0,0x0,0x0,0xff, 0xff, 0xf8,0xf, 0xff, 0xff, 0x80,0x0,0x0,0xff, 0xff, 0xf0,0x7,0xff, 0xff, 0x80,0x0,0x1,0xff, 0xff, 0xe0,0x7,0xff, 0xff, 0xc0,0x0,0x1,0xff, 0xff, 0xe0,0x3,0xff, 0xff, 0xc0,0x0,0x3,0xff, 0xff, 0xc0,0x3,0xff, 0xff, 0xe0,0x0, 0x3,0xff, 0xff, 0xc0,0x1,0xff, 0xff, 0xe0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 , 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 , 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; configuración vacía () {myTouch.InitTouch (); myTouch.setPrecision (PREC_HI); tft.begin (); tft.setRotation (3); tft.fillScreen (ILI9341_BLACK); // Dibujar marco blanco tft.drawRect (0,0,320,240, ILI9341_WHITE); // Imprime el texto "Arduino" tft.setCursor (80,30); tft.setTextColor (ILI9341_GREEN); tft.setTextSize (4); tft.print ("Arduino"); // Imprimir texto "Tic Tac Toe" tft.setCursor (30,100); tft.setTextColor (ILI9341_WHITE); tft.setTextSize (4); tft.print ("Tic Tac Toe"); // Crear botón rojo // crear botones // x, y, w, h, contorno, relleno, botones de texto [0] .initButton (&tft, 160,200,200,40, ILI9341_WHITE, ILI9341_RED, ILI9341_WHITE, start, 2); botones [0] .drawButton (); hacer {waitonetouch (&x, &y); if (botones [0] .contiene (x, y)) b =0;} while (b> 0); } bucle void () {for (unsigned short int i =0; i <9; i ++) {board [i] =0; } tft.fillScreen (ILI9341_BLACK); // Dibujar marco blanco tft.drawRect (0,0,320,240, ILI9341_WHITE); // Imprimir texto "Tic Tac Toe" tft.setCursor (30,30); tft.setTextColor (ILI9341_WHITE); tft.setTextSize (4); tft.print ("Tic Tac Toe"); // Imprime "YouTube!" texto tft.setCursor (30,100); tft.setTextColor (ILI9341_GREEN); tft.setTextSize (4); tft.print ("Quién comienza"); // Crear botón rojo // crear botones // x, y, w, h, contorno, relleno, botones de texto [0] .initButton (&tft, 100,200,80,40, ILI9341_WHITE, ILI9341_RED, ILI9341_WHITE, usted, 2); botones [0] .drawButton (); // crear botones // x, y, w, h, contorno, relleno, botones de texto [1] .initButton (&tft, 200,200,80,40, ILI9341_WHITE, ILI9341_RED, ILI9341_WHITE, cpu, 2); botones [1] .drawButton (); b =1; hacer {esperar un toque (&x, &y); if (botones [0] .contiene (x, y)) {b =0; jugador =1; tft.fillScreen (ILI9341_BLACK); // Dibujar marco blanco tft.drawRect (0,0,320,240, ILI9341_WHITE); tft.setCursor (30,30); tft.setTextColor (ILI9341_WHITE); tft.setTextSize (2); tft.print ("Ok, empieza"); retraso (2000); } si (botones [1] .contiene (x, y)) {b =0; jugador =0; tft.fillScreen (ILI9341_BLACK); // Dibujar marco blanco tft.drawRect (0,0,320,240, ILI9341_WHITE); tft.setCursor (30,30); tft.setTextColor (ILI9341_WHITE); tft.setTextSize (2); tft.print ("Ok, comienza la CPU"); retraso (2000); }} mientras (b> 0); b =1; movimientos =1; ganador =0; cursor =10; tft.fillScreen (ILI9341_BLACK); // Dibujar marco tft.drawRect (0,0,320,240, ILI9341_WHITE); // Dibuja una línea vertical tft.fillRect (80,15,5,205, ILI9341_WHITE); tft.fillRect (150,15,5,205, ILI9341_WHITE); // Dibuja una línea horizontal tft.fillRect (15,80,205,5, ILI9341_WHITE); tft.fillRect (15,150,205,5, ILI9341_WHITE); tft.drawRect (230,10,80,220, ILI9341_WHITE); {do {if (mueve% 2 ==1 &&jugador ==falso || mueve% 2 ==0 &&jugador ==verdadero) {cursor + =10; tft.setCursor (240, cursor); tft.setTextSize (1); tft.println ("Yo dibujo"); arduinoMove (); checkWinner (); } más {cursor + =10; tft.setCursor (240, cursor); tft.setTextSize (1); tft.println ("Tu movimiento"); playerMove (); checkWinner (); } retraso (1000); se mueve ++; } while (ganador ==0 &&mueve <10); esperar un toque (&x, &y); tft.fillScreen (ILI9341_BLACK); // Dibujar marco tft.drawRect (0,0,320,240, ILI9341_WHITE); // Imprimir texto "Game Over" tft.setCursor (50,30); tft.setTextColor (ILI9341_WHITE); tft.setTextSize (4); tft.print ("JUEGO TERMINADO"); if (ganador ==0) {// Imprimir "¡SORTEO!" texto tft.setCursor (110,100); tft.setTextColor (ILI9341_YELLOW); tft.setTextSize (4); tft.print ("DIBUJAR");} if (ganador ==1) {// Imprimir "¡GANANCIAS HUMANAS!" texto tft.setCursor (40,100); tft.setTextColor (ILI9341_BLUE); tft.setTextSize (4); tft.print ("HUMAN WINS");} if (ganador ==2) {// Imprimir "CPU WINS!" texto tft.setCursor (60,100); tft.setTextColor (ILI9341_RED); tft.setTextSize (4); tft.print ("CPU WINS");} // crear botones // x, y, w, h, contorno, relleno, botones de texto [0] .initButton (&tft, 160,200,200,40, ILI9341_WHITE, ILI9341_RED, ILI9341_WHITE, nuevamente , 2); botones [0] .drawButton (); hacer {esperar un toque (&x, &y); if (botones [0] .contiene (x, y)) b =0; } mientras (b> 0); }} void playerMove () {waitonetouch (&x, &y); if ((x> 15 &&x <85) &&(y> 15 &&y <85)) // 0 {if (tablero [0] ==0) {tablero [0] =1; dibujarX (15,15); } else error (); } más si ((x> 85 &&x <155) &&(y> 15 &&y <85)) // 1 {if (tablero [1] ==0) {tablero [1] =1; dibujarX (85,15); } else error (); } if ((x> 155 &&x <225) &&(y> 15 &&y <85)) // 2 {if (tablero [2] ==0) {tablero [2] =1; dibujarX (155,15); } else error (); } if ((x> 15 &&x <85) &&(y> 85 &&y <155)) // 3 {if (tablero [3] ==0) {tablero [3] =1; dibujarX (15,85); } else error (); } if ((x> 85 &&x <155) &&(y> 85 &&y <155)) // 4 {if (tablero [4] ==0) {tablero [4] =1; dibujarX (85,85); } else error (); } if ((x> 155 &&x <225) &&(y> 85 &&y <155)) // 5 {if (tablero [5] ==0) {tablero [5] =1; dibujarX (155,85); } else error (); } if ((x> 15 &&x <85) &&(y> 155 &&y <225)) // 6 {if (tablero [6] ==0) {tablero [6] =1; dibujarX (15155); } else error (); } if ((x> 85 &&x <155) &&(y> 155 &&y <225)) // 7 {if (tablero [7] ==0) {tablero [7] =1; dibujarX (85.155); } else error (); } if ((x> 155 &&x <225) &&(y> 155 &&y <225)) // 8 {if (tablero [8] ==0) {tablero [8] =1; dibujarX (155,155); } else error (); }} anular error () {cursor + =10; tft.setCursor (240, cursor); tft.setTextSize (1); tft.println ("Error"); retraso (1000); cursor + =10; tft.setCursor (240, cursor); tft.println ("Vuelve a intentarlo"); playerMove ();} unsigned short int checkOpponent (unsigned short int x, unsigned short int y) {if (tablero [1] ==x &&tablero [2] ==x &&tablero [0] ==y) {if ( y ==0) {return 0; } si no devuelve 1; } if (tablero [3] ==x &&tablero [6] ==x &&tablero [0] ==y) {if (y ==0) {return 0; } else return 6; } if (tablero [0] ==y &&tablero [4] ==x &&tablero [8] ==x) {if (y ==0) {return 0; } si no devuelve 8; } if (tablero [0] ==x &&tablero [1] ==y &&tablero [2] ==x) {if (y ==0) {return 1; } si no devuelve 0; } if (tablero [4] ==x &&tablero [7] ==x &&tablero [1] ==y) {if (y ==0) {return 1; } si no devuelve 7; } if (tablero [0] ==x &&tablero [1] ==x &&tablero [2] ==y) {if (y ==0) {return 2; } si no devuelve 0; } if (tablero [5] ==x &&tablero [8] ==x &&tablero [2] ==y) {if (y ==0) {return 2; } si no devuelve 8; } if (tablero [4] ==x &&tablero [6] ==x &&tablero [2] ==y) {if (y ==0) {return 2; } else return 6; } if (tablero [4] ==x &&tablero [5] ==x &&tablero [3] ==y) {if (y ==0) {return 3; } si no devuelve 5; } if (tablero [0] ==x &&tablero [6] ==x &&tablero [3] ==y) {if (y ==0) {return 3; } else return 6; } if (tablero [3] ==x &&tablero [4] ==y &&tablero [5] ==x) {if (y ==0) {return 4; } si no devuelve 3; } if (tablero [1] ==x &&tablero [7] ==x &&tablero [4] ==y) {if (y ==0) {return 4; } si no devuelve 1; } if (tablero [0] ==x &&tablero [8] ==x &&tablero [4] ==y) {if (y ==0) {return 4; } si no devuelve 0; } if (tablero [2] ==x &&tablero [6] ==x &&tablero [4] ==y) {if (y ==0) {return 4; } si no devuelve 2; } if (tablero [3] ==x &&tablero [4] ==x &&tablero [5] ==y) {if (y ==0) {return 5; } si no devuelve 3; } if (tablero [2] ==x &&tablero [8] ==x &&tablero [5] ==y) {if (y ==0) {return 5; } si no devuelve 2; } if (tablero [7] ==x &&tablero [8] ==x &&tablero [6] ==y) {if (y ==0) {return 6; } si no devuelve 8; } if (tablero [0] ==x &&tablero [3] ==x &&tablero [6] ==y) {if (y ==0) {return 6; } si no devuelve 0; } if (tablero [4] ==x &&tablero [2] ==x &&tablero [6] ==y) {if (y ==0) {return 6; } si no devuelve 2; } if (tablero [1] ==x &&tablero [4] ==x &&tablero [7] ==y) {if (y ==0) {return 7; } si no devuelve 1; } if (tablero [6] ==x &&tablero [8] ==x &&tablero [7] ==y) {if (y ==0) {return 7; } else return 6; } if (tablero [6] ==x &&tablero [7] ==x &&tablero [8] ==y) {if (y ==0) {return 8; } else return 6; } if (tablero [5] ==x &&tablero [2] ==x &&tablero [8] ==y) {if (y ==0) {return 8; } si no devuelve 2; } if (tablero [4] ==x &&tablero [0] ==x &&tablero [8] ==y) {if (y ==0) {return 8; } si no devuelve 0; } else return 100;} void arduinoMove () {if (mueve <2) {do {unsigned short int randomMove =random (4); unsigned short int c =firstMoves [randomMove]; si (tablero [c] ==0) {tablero [c] =2; drawCpuMove (firstMoves [randomMove]); regreso; }} while (se mueve <2); } if (mueve <3) {if (tablero [4] ==0) {tablero [4] =2; dibujarCpuMove (4); regreso; }} unsigned short int twoPlayer =checkOpponent (2,0); // CPU dos en una fila? if (twoPlayer <9) {tablero [twoPlayer] =2; drawCpuMove (twoPlayer); regreso; } unsigned short int nextMove =checkOpponent (1,0); // ¿Jugador dos en una fila? if (nextMove <9) {tablero [nextMove] =2; drawCpuMove (nextMove); regreso; } unsigned short int next =checkOpponent (0,2); si (siguiente <9) {tablero [siguiente] =2; drawCpuMove (siguiente); regreso; } do {unsigned short int randomMove =random (9); if (tablero [movimiento aleatorio] ==0) {tablero [movimiento aleatorio] =2; drawCpuMove (randomMove); regreso; }} while (nextMove ==100);} void drawCircle (unsigned short int x, unsigned short int y) {tft.drawBitmap (x, y, circle, 65,65, ILI9341_RED);} void drawX (unsigned short int x , unsigned short int y) {tft.drawBitmap (x, y, x_bitmap, 65,65, ILI9341_BLUE);} void drawCpuMove (unsigned short int move) {switch (move) {case 0:drawCircle (15,15); descanso; caso 1:drawCircle (85,15); descanso; caso 2:drawCircle (155,15); descanso; caso 3:drawCircle (15,85); descanso; caso 4:drawCircle (85,85); descanso; caso 5:drawCircle (155,85); descanso; caso 6:drawCircle (15,155); descanso; caso 7:drawCircle (85,155); break; caso 8:drawCircle (155,155); break; }} void checkWinner () // comprueba el tablero para ver si hay un ganador // los lugares dan como resultado la variable global 'ganador' {// ¿ganas? if (tablero [0]> 0 &&tablero [1] ==tablero [0] &&tablero [2] ==tablero [0]) {ganador =tablero [0]; tft.fillRect (15, 45, 205, 5, ILI9341_WHITE); } if (tablero [3]> 0 &&tablero [4] ==tablero [3] &&tablero [5] ==tablero [3]) {ganador =tablero [3]; tft.fillRect (15, 115, 205, 5, ILI9341_WHITE); } if (tablero [6]> 0 &&tablero [7] ==tablero [6] &&tablero [8] ==tablero [6]) {ganador =tablero [6]; tft.fillRect (15, 185, 205, 5, ILI9341_WHITE); } if (tablero [0]> 0 &&tablero [3] ==tablero [0] &&tablero [6] ==tablero [0]) {ganador =tablero [0]; tft.fillRect (45, 15, 5, 205, ILI9341_WHITE); } if (tablero [1]> 0 &&tablero [4] ==tablero [1] &&tablero [7] ==tablero [1]) {ganador =tablero [1]; tft.fillRect (115, 15, 5, 205, ILI9341_WHITE); } if (tablero [2]> 0 &&tablero [5] ==tablero [2] &&tablero [8] ==tablero [2]) {ganador =tablero [2]; tft.fillRect (185, 15, 5, 205, ILI9341_WHITE); } if (tablero [0]> 0 &&tablero [4] ==tablero [0] &&tablero [8] ==tablero [0]) {ganador =tablero [0]; for (unsigned short int xx =0; xx <6; xx ++) {tft.drawLine (20 + xx, 20, 210 + xx, 210, ILI9341_WHITE); }} if (tablero [2]> 0 &&tablero [4] ==tablero [2] &&tablero [6] ==tablero [2]) {ganador =tablero [2]; for (unsigned short int xx =0; xx <6; xx ++) {tft.drawLine (210 + xx, 20, 20 + xx, 210, ILI9341_WHITE); }}} void waitonetouch (unsigned short int * x, unsigned short int * y) {do {delay (10); if (myTouch.dataAvailable () ==true) {myTouch.read (); * x =myTouch.getX (); // Obtener el punto de contacto * y =myTouch.getY (); regreso; }} while (myTouch.dataAvailable () ==falso); } 
TicTacToe_new Arduino
Un jugador invencible Tic Tac Toe para un jugador en Arduino Due
 /////////////////////////////////////// //////// // 2.8 "PANTALLA TÁCTIL TIC TAC TOE // // // // http://www.educ8s.tv // // // // modificado 08.2017 por rom3 // // /////////////////////////////////////////// # incluye  #include  #include  #include  #define TFT_RST 8 # define TFT_DC 9 # define TFT_CS 10 # define TOUCH_ORIENTATION LANDSCAPEAdafruit_ILI9341 tft_C341, botones [9]; URTouch myTouch (30, 28, 26, 24, 22); char start [10] ={"Gamestart"}; char you [4] ={"YOU"}; char cpu [4] ={" CPU "}; char otra vez [7] ={" ¿Otra vez? "}; Int jugador; int dificultad =8; unsigned short int x, y, b; // posición toque # definir NEGRO 0x0000 # definir AZUL 0x001F # definir ROJO 0xF800 # definir VERDE 0x07E0 # definir CIAN 0x07FF # definir MAGENTA 0xF81F # definir AMARILLO 0xFFE0 # definir BLANCO 0xFFFFint tablero [] ={0,0,0,0,0,0,0,0,0}; // mantiene los datos de posición 0 está en blanco, 1 humano, 2 es turno no firmado por computadora; c un círculo de caracteres sin signo [] PROGMEM ={0b0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 , 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 , 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7,0xf8,0x0,0x0,0x0 , 0x0,0x0,0x0,0x0,0x7f, 0xff, 0x80,0x0,0x0,0x0,0x0,0x0,0x3,0xff, 0xff, 0xf0,0x0,0x0,0x0,0x0,0x0,0xf, 0xff, 0xff, 0xfc , 0x0,0x0,0x0,0x0,0x0,0x1f, 0xff, 0xff, 0xfe, 0x0,0x0,0x0,0x0,0x0,0x7f, 0xf0,0x3,0xff, 0x80,0x0,0x0,0x0,0x0,0xff, 0x80 , 0x0,0x7f, 0xc0,0x0,0x0,0x0,0x1,0xfe, 0x0,0x0,0x1f, 0xe0,0x0,0x0,0x0,0x3,0xf8,0x0,0x0,0x7,0xf0,0x0,0x0,0x0,0x7 , 0xf0,0x0,0x0,0x3,0xf8,0x0,0x0,0x0,0xf, 0xe0,0x0,0x0,0x1,0xfc, 0x0,0x0,0x0,0xf, 0xc0,0x0,0x0,0x0,0xfc, 0x0,0x0 , 0x0,0x1f, 0x80,0x0,0x0,0x0,0x7e, 0x0,0x0,0x0,0x3f, 0x0,0x0,0x0,0x0,0x3f, 0x0,0x0,0x0,0x3e, 0x0,0x0,0x0,0x0,0x1f , 0x0,0x0,0x0,0x7e, 0x0,0x0,0x0,0x0,0x1f, 0x80,0x0,0x0,0x7c, 0x0,0x0,0x0,0x0,0xf, 0x80,0x0,0x0,0x7c, 0x0,0x0,0x0 , 0x0,0xf, 0x80,0x0,0x0,0xf8,0x0,0x0, 0x0,0x0,0x7,0xc0,0x0,0x0,0xf8,0x0,0x0,0x0,0x0,0x7,0xc0,0x0,0x0,0xf8,0x0,0x0,0x0,0x0,0x7,0xc0,0x0,0x0,0xf0, 0x0,0x0,0x0,0x0,0x3,0xc0,0x0,0x1,0xf0,0x0,0x0,0x0,0x0,0x3,0xe0,0x0,0x1,0xf0,0x0,0x0,0x0,0x0,0x3,0xe0,0x0, 0x1,0xf0,0x0,0x0,0x0,0x0,0x3,0xe0,0x0,0x1,0xf0,0x0,0x0,0x0,0x0,0x3,0xe0,0x0,0x1,0xf0,0x0,0x0,0x0,0x0,0x3, 0xe0,0x0,0x1,0xf0,0x0,0x0,0x0,0x0,0x3,0xe0,0x0,0x1,0xf0,0x0,0x0,0x0,0x0,0x3,0xe0,0x0,0x1,0xf0,0x0,0x0,0x0, 0x0,0x3,0xe0,0x0,0x0,0xf0,0x0,0x0,0x0,0x0,0x3,0xc0,0x0,0x0,0xf8,0x0,0x0,0x0,0x0,0x7,0xc0,0x0,0x0,0xf8,0x0, 0x0,0x0,0x0,0x7,0xc0,0x0,0x0,0xf8,0x0,0x0,0x0,0x0,0x7,0xc0,0x0,0x0,0x7c, 0x0,0x0,0x0,0x0,0xf, 0x80,0x0,0x0, 0x7c, 0x0,0x0,0x0,0x0,0xf, 0x80,0x0,0x0,0x7e, 0x0,0x0,0x0,0x0,0x1f, 0x80,0x0,0x0,0x3e, 0x0,0x0,0x0,0x0,0x1f, 0x0, 0x0,0x0,0x3f, 0x0,0x0,0x0,0x0,0x3f, 0x0,0x0,0x0,0x1f, 0x80,0x0,0x0,0x0,0x7e, 0x0,0x0,0x0,0xf, 0xc0,0x0,0x0,0x0, 0xfc, 0x0,0x0,0x0,0xf, 0xe0,0x0,0x0,0x1,0xfc, 0x0,0x0,0x0,0x7,0xf0,0x0,0x0,0x3,0xf8,0x0,0x0,0x0,0x3,0xf8,0x0, 0x0,0x7,0xf0,0x0,0x0,0x0,0x1,0xfe, 0x0,0x0,0x1f, 0 xe0,0x0,0x0,0x0,0x0,0xff, 0x80,0x0,0x7f, 0xc0,0x0,0x0,0x0,0x0,0x7f, 0xf0,0x3,0xff, 0x80,0x0,0x0,0x0,0x0,0x1f, 0xff, 0xff, 0xfe, 0x0,0x0,0x0,0x0,0x0,0xf, 0xff, 0xff, 0xfc, 0x0,0x0,0x0,0x0,0x0,0x3,0xff, 0xff, 0xf0,0x0,0x0,0x0,0x0,0x0, 0x0,0x7f, 0xff, 0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x7,0xf8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; const unsigned char x_bitmap [] PROGMEM ={ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x3,0xff, 0xff, 0xc0,0x1,0xff, 0xff, 0xe0,0x0,0x1,0xff, 0xff, 0xe0,0x1,0xff, 0xff, 0xc0,0x0,0x1, 0xff, 0xff, 0xf0,0x3,0xff, 0xff, 0xc0,0x0,0x0,0xff , 0xff, 0xf0,0x7,0xff, 0xff, 0x80,0x0,0x0,0xff, 0xff, 0xf8,0x7,0xff, 0xff, 0x80,0x0,0x0,0x7f, 0xff, 0xf8,0xf, 0xff, 0xff, 0x0,0x0 , 0x0,0x3f, 0xff, 0xfc, 0xf, 0xff, 0xfe, 0x0,0x0,0x0,0x3f, 0xff, 0xfe, 0x1f, 0xff, 0xfe, 0x0,0x0,0x0,0x1f, 0xff, 0xfe, 0x1f, 0xff, , 0x0,0x0,0x0,0x1f, 0xff, 0xff, 0x3f, 0xff, 0xfc, 0x0,0x0,0x0,0xf, 0xff, 0xff, 0x7f, 0xff, 0xf8,0x0,0x0,0x0,0xf, 0xff, 0xff, 0xff , 0xff, 0xf8,0x0,0x0,0x0,0x7,0xff, 0xff, 0xff, 0xff, 0xf0,0x0,0x0,0x0,0x3,0xff, 0xff, 0xff, 0xff, 0xe0,0x0,0x0,0x0,0x3,0xff , 0xff, 0xff, 0xff, 0xe0,0x0,0x0,0x0,0x1,0xff, 0xff, 0xff, 0xff, 0xc0,0x0,0x0,0x0,0x1,0xff, 0xff, 0xff, 0xff, 0xc0,0x0,0x0,0x0 , 0x0,0xff, 0xff, 0xff, 0xff, 0x80,0x0,0x0,0x0,0x0,0xff, 0xff, 0xff, 0xff, 0x80,0x0,0x0,0x0,0x0,0x7f, 0xff, 0xff, 0xff, 0x0,0x0 , 0x0,0x0,0x0,0x3f, 0xff, 0xff, 0xfe, 0x0,0x0,0x0,0x0,0x0,0x3f, 0xff, 0xff, 0xfe, 0x0,0x0,0x0,0x0,0x0,0x1f, 0xff, 0xff, 0xfc , 0x0,0x0,0x0,0x0,0x0,0x1f, 0xff, 0xff, 0xfc, 0x0,0x0,0x0,0x0,0x0,0x1f, 0xff, 0xff, 0xfc, 0x0,0x0,0x0,0x0,0x0,0x3f, 0xff , 0xff, 0xfe, 0x0,0x0,0x0,0x0,0x0,0x3f, 0xff, 0xff, 0xfe, 0x0,0x0,0x0,0x0,0x0,0x7f, 0xff, 0xff, 0xff , 0x0,0x0,0x0,0x0,0x0,0xff, 0xff, 0xff, 0xff, 0x80,0x0,0x0,0x0,0x0,0xff, 0xff, 0xff, 0xff, 0x80,0x0,0x0,0x0,0x1,0xff, 0xff , 0xff, 0xff, 0xc0,0x0,0x0,0x0,0x1,0xff, 0xff, 0xff, 0xff, 0xc0,0x0,0x0,0x0,0x3,0xff, 0xff, 0xff, 0xff, 0xe0,0x0,0x0,0x0,0x3 , 0xff, 0xff, 0xff, 0xff, 0xe0,0x0,0x0,0x0,0x7,0xff, 0xff, 0xff, 0xff, 0xf0,0x0,0x0,0x0,0xf, 0xff, 0xff, 0xff, 0xff, 0xf8,0x0,0x0 , 0x0,0xf, 0xff, 0xff, 0xff, 0xff, 0xf8,0x0,0x0,0x0,0x1f, 0xff, 0xff, 0x7f, 0xff, 0xfc, 0x0,0x0,0x0,0x1f, 0xff, 0xfe, 0x3f, 0xfcff, 0xff , 0x0,0x0,0x0,0x3f, 0xff, 0xfc, 0x3f, 0xff, 0xfe, 0x0,0x0,0x0,0x3f, 0xff, 0xfc, 0x1f, 0xff, 0xfe, 0x0,0x0,0x0,0x7f, 0xff, 0xfxf8,0 , 0xff, 0xff, 0x0,0x0,0x0,0xff, 0xff, 0xf8,0xf, 0xff, 0xff, 0x80,0x0,0x0,0xff, 0xff, 0xf0,0x7,0xff, 0xff, 0x80,0x0,0x1,0xff, 0xff , 0xe0,0x7,0xff, 0xff, 0xc0,0x0,0x1,0xff, 0xff, 0xe0,0x3,0xff, 0xff, 0xc0,0x0,0x3,0xff, 0xff, 0xc0,0x3,0xff, 0xff, 0xe0,0x0,0x3 , 0xff, 0xff, 0xc0,0x1,0xff, 0xff, 0xe0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 , 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; configuración vacía () {myTouch.InitTouch (); myTouch.setPrecision (PREC_HI); tft.begin (); tft.setRotation (3);} void loop () {int tablero [9] ={0,0,0,0,0,0,0,0,0}; drawStartScreen (); hacer {myTouch.read (); x =myTouch.getX (); // Obtener el punto de contacto y =myTouch.getY (); retraso (100); } while (! (botones [0] .contains (x, y))); tft.fillScreen (NEGRO); // Dibujar marco blanco tft.drawRect (0,0,320,240, WHITE); // Imprimir texto "Tic Tac Toe" tft.setCursor (30,30); tft.setTextColor (BLANCO); tft.setTextSize (4); tft.print ("Tic Tac Toe"); // Imprime "YouTube!" texto tft.setCursor (30,100); tft.setTextColor (VERDE); tft.setTextSize (4); tft.print ("Quién comienza"); // Crear botón rojo // crear botones // x, y, w, h, contorno, relleno, botones de texto [0] .initButton (&tft, 100,200,80,40, WHITE, RED, WHITE, you, 2); botones [0] .drawButton (); // crear botones // x, y, w, h, contorno, relleno, botones de texto [1] .initButton (&tft, 200,200,80,40, BLANCO, ROJO, BLANCO, cpu, 2); botones [1] .drawButton (); b =1; hacer {myTouch.read (); x =myTouch.getX (); // Obtener el punto de contacto y =myTouch.getY (); if (botones [0] .contiene (x, y)) {b =0; jugador =1; tft.fillScreen (NEGRO); // Dibujar marco blanco tft.drawRect (0,0,320,240, WHITE); tft.setCursor (30,30); tft.setTextColor (BLANCO); tft.setTextSize (2); tft.print ("Ok, empieza"); retraso (2000); } si (botones [1] .contiene (x, y)) {b =0; jugador =2; tft.fillScreen (NEGRO); // Dibujar marco blanco tft.drawRect (0,0,320,240, WHITE); tft.setCursor (30,30); tft.setTextColor (BLANCO); tft.setTextSize (2); tft.print ("Ok, comienza la CPU"); retraso (2000); }} mientras (b); tft.fillScreen (NEGRO); tft.drawRect (0,0,319,240, BLANCO); drawVerticalLine (125); drawVerticalLine (195); dibujarHorizontalLine (80); drawHorizontalLine (150); for (turno =0; turno <9 &&win (tablero) ==0; ++ turno) {if ((turno + jugador)% 2 ==0) computerMove (tablero); else {// dibujar (tablero); playerMove (tablero); }} switch (win (tablero)) {caso 0:Serial.println ("Es un empate. \ n"); descanso; caso 1:// dibujar (tablero); Serial.println ("Usted pierde. \ N"); descanso; case -1:Serial.println ("¡Tú ganas! \ n"); descanso; } hacer {} while (myTouch.dataAvailable () ==false); // x =mapa (tp.y, 930, 88, 0, 480); // y =mapa (tp.x, 908, 125, 0, 320); // retraso (250);}} vacío drawHorizontalLine (int y) {int i =0; para (i =0; i <7; i ++) {tft.drawLine (60, y + i, 270, y + i, BLANCO); }} vacío drawVerticalLine (int x) {int i =0; para (i =0; i <7; i ++) {tft.drawLine (x + i, 20, x + i, 220, BLANCO); }} void drawStartScreen () {tft.fillScreen (NEGRO); // Dibujar marco blanco tft.drawRect (0,0,319,240, WHITE); // Imprimir texto "Tic Tac Toe" tft.setCursor (30,100); tft.setTextColor (BLANCO); tft.setTextSize (4); tft.print ("Tic Tac Toe"); // Imprime "YouTube!" texto tft.setCursor (80,30); tft.setTextColor (VERDE); tft.setTextSize (4); tft.print ("Arduino"); botones [0] .initButton (&tft, 160,200,200,40, BLANCO, ROJO, BLANCO, inicio, 2); botones [0] .drawButton (); } void drawCircle (int x, int y) {drawBitmap (x, y, circle, 65,65, RED);} void drawX (int x, int y) {drawBitmap (x, y, x_bitmap, 65,65, BLUE );} void drawBitmap (int16_t x, int16_t y, const uint8_t * bitmap, int16_t w, int16_t h, uint16_t color) {int16_t i, j, byteWidth =(w + 7) / 8; uint8_t byte; para (j =0; j  score) {score =tempScore; mover =yo; }}} // devuelve una puntuación basada en el árbol minimax en un nodo dado. tablero [mover] =1; drawCpuMove (mover); delay (100);} void playerMove (int board [9]) {int move =0; b =1; hacer {if (myTouch.dataAvailable () ==true) {myTouch.read (); x =myTouch.getX (); // Obtener el punto de contacto y =myTouch.getY (); if ((x> 55 &&x <125) &&(y> 0 &&y <80)) // 0 {if (tablero [0] ==0) {mover =0; b =0; }} más si ((x> 125 &&x <195) &&(y> 0 &&y <80)) // 1 {if (tablero [1] ==0) {mover =1; b =0; }} más si ((x> 195 &&x <265) &&(y> 0 &&y <80)) // 2 {if (tablero [2] ==0) {mover =2; b =0; }} más si ((x> 55 &&x <125) &&(y> 80 &&y <155)) // 3 {if (tablero [3] ==0) {mover =3; b =0; }} más si ((x> 125 &&x <195) &&(y> 80 &&y <155)) // 4 {if (tablero [4] ==0) {mover =4; b =0; }} más si ((x> 195 &&x <265) &&(y> 80 &&y <155)) // 5 {if (tablero [5] ==0) {mover =5; b =0; }} más si ((x> 55 &&x <125) &&(y> 155 &&y <235)) // 6 {if (tablero [6] ==0) {mover =6; b =0; }} más si ((x> 125 &&x <195) &&(y> 155 &&y <235)) // 7 {if (tablero [7] ==0) {mover =7; b =0; }} más si ((x> 195 &&x <265) &&(y> 155 &&y <235)) // 8 {if (tablero [8] ==0) {mover =8; b =0; }}}} mientras (b); tablero [movimiento] =-1; dibujarPlayerMove (mover); delay (100);} int win (const int board [9]) {// lista de posibles posiciones ganadoras unsigned win [8] [3] ={{0,1,2}, {3,4,5}, {6,7,8}, {0,3,6}, {1,4,7}, {2,5,8}, {0,4,8}, {2,4,6}}; int winPos; for (winPos =0; winPos <8; ++ winPos) {if (tablero [gana [winPos] [0]]! =0 &&tablero [gana [winPos] [0]] ==tablero [gana [winPos] [ 1]] &&tablero [gana [winPos] [0]] ==tablero [gana [winPos] [2]]) regresa tablero [gana [winPos] [2]]; } return 0;} int minimax (int tablero [9], int jugador, int profundidad) {// verifica las posiciones de los jugadores int ganador =win (tablero); si (ganador! =0) devuelve ganador * jugador; movimiento int =-1; puntuación int =-2; int i; for (i =0; i <9; ++ i) {if (tablero [i] ==0) {tablero [i] =jugador; int thisScore =0; if (profundidad  score) {score =thisScore; mover =yo; } // elige el peor movimiento para el tablero oponente [i] =0; }} if (mover ==-1) return 0; return score;} void drawCpuMove (int move) {switch (move) {case 0:drawCircle (55,15); descanso; caso 1:drawCircle (130,15); descanso; caso 2:drawCircle (205,15); descanso; caso 3:drawCircle (55,85); descanso; caso 4:drawCircle (130,85); descanso; caso 5:drawCircle (205,85); descanso; caso 6:drawCircle (55,155); descanso; caso 7:drawCircle (130,155); break; caso 8:drawCircle (205,155); break; }} vacío drawPlayerMove (int mover) {cambiar (mover) {caso 0:drawX (55,15); descanso; caso 1:dibujarX (130,15); descanso; caso 2:dibujarX (205,15); descanso; caso 3:dibujarX (55,85); descanso; caso 4:dibujarX (130,85); descanso; caso 5:dibujarX (205,85); descanso; caso 6:drawX (55,155); descanso; caso 7:dibujarX (130,155); romper; caso 8:dibujarX (205,155); romper; }} 

Esquemas

Alambrado

Proceso de manufactura

  1. Tarjeta de visita del juego Tic Tac Toe
  2. Monitoreo de CO2 con sensor K30
  3. Comunicación para personas sordociegas con 1Sheeld / Arduino
  4. Controlar el aceptador de monedas con Arduino
  5. ¡Arduino con Bluetooth para controlar un LED!
  6. Sensor capacitivo de huellas dactilares con Arduino o ESP8266
  7. Jugando con Nextion Display
  8. Brazo robótico controlado por Nunchuk (con Arduino)
  9. Medición de la radiación solar con Arduino
  10. Mini radar con Arduino
  11. Cómo hacer música con un Arduino