산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

Arduino 터치 틱택토 게임

구성품 및 소모품

Arduino UNO
× 1
2.8" 터치 스크린
× 1

앱 및 온라인 서비스

Arduino IDE

이 프로젝트 정보

친애하는 친구, 또 다른 Arduino 튜토리얼에 오신 것을 환영합니다! 이 상세한 튜토리얼에서 우리는 Arduino Tic-Tac-Toe 게임을 만들 것입니다. 보시다시피 우리는 터치 스크린을 사용하고 있으며 컴퓨터와 게임을하고 있습니다. Tic-Tac-Toe와 같은 간단한 게임은 게임 프로그래밍 및 인공 지능에 대한 훌륭한 소개입니다. 이 게임에서는 인공 지능 알고리즘을 사용하지 않지만 더 복잡한 게임에서 인공 지능 알고리즘이 필요한 이유를 이해할 것입니다.

Arduino용 게임을 개발하는 것은 쉽지 않고 많은 시간이 필요합니다. 그러나 Arduino를 위한 간단한 게임을 만들 수 있습니다. 재미있고 인공 지능과 같은 고급 프로그래밍 주제를 탐색할 수 있기 때문입니다. 이것은 훌륭한 학습 경험이며 마지막에는 아이들을 위한 멋진 게임이 될 것입니다!

이제 이 프로젝트를 빌드해 보겠습니다.

1단계:모든 부품 가져오기

이 프로젝트를 빌드하는 데 필요한 부품은 다음과 같습니다.

<울>
  • Arduino Uno
  • <울>
  • 2.8인치 터치 스크린
  • 프로젝트 비용이 매우 저렴합니다. $15에 불과합니다.

    이 프로젝트를 빌드하기 전에 여기에서 카드를 클릭하여 터치 디스플레이에 대해 준비한 비디오를 시청하십시오. 코드를 이해하고 터치 스크린을 보정하는 데 도움이 됩니다.

    2단계:Arduino용 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가 먼저 재생됩니다. 그런 다음 화면을 터치하기만 하면 움직임을 재생할 수 있습니다. 그런 다음 Arduino는 이동 등을 수행합니다. 가로, 세로, 대각선으로 3개의 마크를 표시하는 데 성공한 플레이어가 게임에서 승리합니다. 게임이 끝나면 게임 오버 화면이 나타납니다. 그런 다음 다시 플레이 버튼을 눌러 게임을 다시 시작할 수 있습니다.

    Arduino는 이 게임을 아주 잘합니다. 그것은 대부분의 게임에서 승리할 것입니다. 또는 당신이 아주 좋은 플레이어라면 게임은 무승부로 끝날 것입니다. 나는 의도적으로 인간 플레이어가 이길 수 있는 기회를 주기 위해 실수를 하도록 이 알고리즘을 설계했습니다. 게임 코드에 두 줄을 더 추가하면 Arduino가 게임을 잃는 것을 불가능하게 만들 수 있습니다. 그러나 2달러짜리 칩인 Arduino CPU가 어떻게 인간의 두뇌를 이길 수 있습니까? 우리가 개발한 프로그램이 인간의 두뇌보다 똑똑합니까?

    4단계:게임 알고리즘

    이 질문에 답하기 위해 제가 구현한 알고리즘을 살펴보겠습니다.

    컴퓨터가 항상 먼저 재생됩니다. 이 결정만으로도 Arduino가 게임에서 훨씬 쉽게 승리할 수 있습니다. 첫 번째 움직임은 항상 코너입니다. Arduino의 두 번째 움직임도 플레이어의 움직임에 전혀 신경 쓰지 않고 남은 모서리에서 무작위입니다. 이 시점부터 Arduino는 먼저 플레이어가 다음 이동에서 이길 수 있는지 확인하고 해당 이동을 차단합니다. 플레이어가 한 번의 이동으로 승리할 수 없는 경우 가능한 경우 코너 이동을 수행하거나 나머지 중 무작위로 이동합니다. 그게 다야, 이 간단한 알고리즘은 매번 인간 플레이어를 이길 수 있거나 최악의 시나리오에서 게임이 무승부로 이어질 것입니다. 이것은 최고의 틱택토 게임 알고리즘은 아니지만 가장 간단한 알고리즘 중 하나입니다.

    이 알고리즘은 Tic-Tac-Toe 게임이 매우 간단하기 때문에 Arduino에서 쉽게 구현할 수 있으며 쉽게 분석하고 해결할 수 있습니다. 게임 트리를 설계하면 몇 가지 승리 전략을 발견하고 코드로 쉽게 구현할 수 있습니다. 또는 CPU가 실시간으로 게임 트리를 계산하고 스스로 최선의 움직임을 선택하도록 할 수 있습니다. 물론 이 게임에서 사용하는 알고리즘은 게임이 매우 간단하기 때문에 매우 간단합니다. 우리가 체스를 위한 이기는 알고리즘을 설계하려고 하면 가장 빠른 컴퓨터를 사용해도 천 년 후에 게임 트리를 계산할 수 없습니다! 이와 같은 게임의 경우 다른 접근 방식이 필요하고 인공 지능 알고리즘과 엄청난 처리 능력이 필요합니다. 이에 대한 자세한 내용은 향후 동영상에서 확인할 수 있습니다.

    5단계:프로젝트 코드

    프로젝트 코드를 간단히 살펴보겠습니다. 코드를 컴파일하려면 세 개의 라이브러리가 필요합니다.

    <울>
  • 수정된 Adafruit TFTLCD
  • <울>
  • 아다프루트 GFX
  • <울>
  • 터치스크린
  • 보시다시피 이런 간단한 게임도 600줄 이상의 코드가 필요합니다. 코드가 복잡하므로 짧은 자습서에서 설명하지 않겠습니다. 아두이노 동작을 위한 알고리즘 구현을 보여드리겠습니다.

    처음에는 무작위로 두 코너를 플레이합니다.

    int firstMoves[]={0,2,6,8}; // 이 위치를 먼저 사용합니다. for(counter=0;counter<4;counter++) // 재생된 첫 번째 이동 수 계산 { if(board[firstMoves[counter]]!=0) // 첫 번째 이동은 누군가가 재생한 것입니다. { movePlayed++; } } do{ if(이동<=2) { int randomMove =random(4); int c=firstMoves[randomMove]; if (보드[c]==0) { 지연(1000); 보드[c]=2; Serial.print(firstMoves[randomMove]); 직렬.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) return 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);} 
    Graphics.c TicTacToeEasy.ino

    6단계:최종 생각 및 개선 사항

    보시다시피 Arduino Uno로도 간단한 게임을 위한 탁월한 알고리즘을 구축할 수 있습니다. 이 프로젝트는 구축하기 쉽고 동시에 인공 지능 및 게임 프로그래밍에 대한 훌륭한 소개이기 때문에 훌륭합니다. 앞으로 더 강력한 Raspberry Pi를 사용하여 인공 지능으로 더 발전된 프로젝트를 만들도록 노력할 것이므로 계속 지켜봐 주시기 바랍니다! 이 프로젝트에 대한 귀하의 의견을 듣고 싶습니다.

    아래에 의견을 게시하고 흥미롭다면 튜토리얼을 좋아하는 것을 잊지 마십시오. 감사합니다!

    <섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드">

    코드

    <울>
  • 코드 스니펫 #1
  • 코드 스니펫 #2
  • 코드 스니펫 #1일반 텍스트

    int firstMoves[]={0,2,6,8}; // 이 위치를 먼저 사용합니다.

    for(counter=0;counter<4;counter++) // 처음으로 플레이한 움직임을 계산합니다. { if(board[firstMoves[counter]]!=0) // 첫 번째 움직임 누군가가 재생합니다. { movePlayed++; } } do{ if(이동<=2) { int randomMove =random(4); int c=firstMoves[randomMove]; if (보드[c]==0) { 지연(1000); 보드[c]=2; Serial.print(firstMoves[randomMove]); 직렬.println(); drawCpuMove(firstMoves[randomMove]); b=1; } }

    코드 스니펫 #2일반 텍스트

    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) return 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을 반환합니다.}

    깃허브
    https://github.com/adafruit/Adafruit-GFX-Libraryhttps://github.com/adafruit/Adafruit-GFX-Library
    깃허브
    https://github.com/adafruit/Touch-Screen-Libraryhttps://github.com/adafruit/Touch-Screen-Library

    제조공정

    1. 체스
    2. MPU-6050을 사용한 Arduino 자이로스코프 게임
    3. Arduino Pong 게임 - OLED 디스플레이
    4. 휴대용 정전식 터치 피아노
    5. Arduino 게임 컨트롤러
    6. MAX7219가 있는 24x16 매트릭스의 Arduino Pong 게임
    7. Arduino 터치 브레이크아웃 게임
    8. Giant Animatronics Lego Minfig Operation Game
    9. 픽셀 체이서 게임
    10. arduino를 사용한 자동화된 Dino 게임