Πίνακας περιεχομένων:

Παιχνίδι 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 - Week 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 pixel και έρχεται ως ασπίδα που κάνει τη σύνδεση με το Arduino εξαιρετικά εύκολη. Όπως μπορείτε να δείτε, η οθόνη χρησιμοποιεί σχεδόν όλες τις ψηφιακές και αναλογικές ακίδες του Arduino Uno. Όταν χρησιμοποιούμε αυτήν την ασπίδα μας μένουν μόνο 2 ψηφιακές ακίδες και 1 αναλογική ακίδα για τα έργα μας. Ευτυχώς, η οθόνη λειτουργεί καλά και με το Arduino Mega, οπότε όταν χρειαζόμαστε περισσότερες καρφίτσες μπορούμε να χρησιμοποιήσουμε το Arduino Mega αντί για το Arduino Uno. Δυστυχώς, αυτή η οθόνη δεν λειτουργεί με το Arduino Due ή με την πλακέτα Wemos D1 ESP8266. Ένα άλλο πλεονέκτημα της ασπίδας είναι ότι προσφέρει μια υποδοχή micro SD η οποία είναι πολύ εύκολη στη χρήση.

Βήμα 3: Κατασκευή του έργου και δοκιμή του

Κατασκευή του έργου και δοκιμή του
Κατασκευή του έργου και δοκιμή του
Κατασκευή του έργου και δοκιμή του
Κατασκευή του έργου και δοκιμή του
Κατασκευή του έργου και δοκιμή του
Κατασκευή του έργου και δοκιμή του

Αφού συνδέσουμε την οθόνη με το Arduino Uno, μπορούμε να φορτώσουμε τον κωδικό και είμαστε έτοιμοι να παίξουμε.

Στην αρχή, πατάμε το κουμπί "Έναρξη παιχνιδιού" και το παιχνίδι ξεκινά. Το Arduino παίζει πρώτο. Στη συνέχεια, μπορούμε να παίξουμε την κίνησή μας απλά αγγίζοντας την οθόνη. Το Arduino παίζει στη συνέχεια την κίνησή του και ούτω καθεξής. Ο παίκτης που πετυχαίνει να τοποθετήσει τρία από τα σημάδια του σε μια οριζόντια, κάθετη ή διαγώνια σειρά κερδίζει το παιχνίδι. Όταν τελειώσει το παιχνίδι, εμφανίζεται η οθόνη Game Over. Στη συνέχεια, μπορούμε να πατήσουμε το κουμπί play again για να ξεκινήσει ξανά το παιχνίδι.

Το Arduino είναι πολύ καλό σε αυτό το παιχνίδι. Θα κερδίσει τα περισσότερα παιχνίδια, ή αν είστε πολύ καλός παίκτης το παιχνίδι θα τελειώσει ισόπαλο. Σκόπιμα σχεδίασα αυτόν τον αλγόριθμο για να κάνει κάποια λάθη, προκειμένου να δώσω στον άνθρωπο παίκτη την ευκαιρία να κερδίσει. Προσθέτοντας δύο ακόμη γραμμές στον κώδικα του παιχνιδιού, μπορούμε να κάνουμε το Arduino αδύνατο να χάσει το παιχνίδι. Αλλά πώς μπορεί ένα τσιπ 2 $, η CPU Arduino, να νικήσει τον ανθρώπινο εγκέφαλο; Είναι το πρόγραμμα που αναπτύξαμε πιο έξυπνο από τον ανθρώπινο εγκέφαλο;

Βήμα 4: Ο αλγόριθμος παιχνιδιού

Ο αλγόριθμος του παιχνιδιού
Ο αλγόριθμος του παιχνιδιού
Ο αλγόριθμος του παιχνιδιού
Ο αλγόριθμος του παιχνιδιού

Για να απαντήσουμε σε αυτήν την ερώτηση, ας δούμε τον αλγόριθμο που έχω εφαρμόσει.

Ο υπολογιστής παίζει πάντα πρώτος. Αυτή η απόφαση και μόνο, κάνει το παιχνίδι πολύ πιο εύκολο για το Arduino να κερδίσει. Η πρώτη κίνηση είναι πάντα μια γωνία. Η δεύτερη κίνηση για το Arduino είναι επίσης μια τυχαία γωνία από το υπόλοιπο χωρίς να ενδιαφέρεται καθόλου για την κίνηση του παίκτη. Από αυτό το σημείο και μετά, το Arduino ελέγχει πρώτα εάν ο παίκτης μπορεί να κερδίσει στην επόμενη κίνηση και αποκλείει αυτήν την κίνηση. Εάν ο παίκτης δεν μπορεί να κερδίσει σε μία μόνο κίνηση, παίζει ένα κόρνερ εάν είναι διαθέσιμο ή τυχαίο από το υπόλοιπο. Αυτό είναι όλο, αυτός ο απλός αλγόριθμος μπορεί να κερδίσει τον παίκτη κάθε φορά ή στο χειρότερο σενάριο το παιχνίδι θα οδηγήσει σε ισοπαλία. Αυτός δεν είναι ο καλύτερος αλγόριθμος παιχνιδιού tic tac toe, αλλά ένας από τους απλούστερους.

Αυτός ο αλγόριθμος μπορεί να εφαρμοστεί εύκολα στο Arduino, επειδή το παιχνίδι Tic Tac Toe είναι πολύ απλό και μπορούμε εύκολα να το αναλύσουμε και να το λύσουμε. Αν σχεδιάσουμε το δέντρο παιχνιδιών, μπορούμε να ανακαλύψουμε μερικές στρατηγικές νίκης και να τις εφαρμόσουμε εύκολα σε κώδικα ή μπορούμε να αφήσουμε την CPU να υπολογίσει το δέντρο παιχνιδιού σε πραγματικό χρόνο και να επιλέξει την καλύτερη κίνηση από μόνη της. Φυσικά, ο αλγόριθμος που χρησιμοποιούμε σε αυτό το παιχνίδι είναι πολύ απλός, γιατί το παιχνίδι είναι πολύ απλό. Αν προσπαθήσουμε να σχεδιάσουμε έναν αλγόριθμο νίκης για το σκάκι, ακόμα και αν χρησιμοποιούμε τον ταχύτερο υπολογιστή, δεν μπορούμε να υπολογίσουμε το δέντρο παιχνιδιού σε χίλια χρόνια! Για παιχνίδια όπως αυτό, χρειαζόμαστε μια άλλη προσέγγιση, χρειαζόμαστε κάποιους αλγόριθμους Τεχνητής Νοημοσύνης και φυσικά τεράστια επεξεργαστική ισχύ. Περισσότερα για αυτό σε μελλοντικό βίντεο.

Βήμα 5: Κώδικας του Έργου

Κωδικός του Έργου
Κωδικός του Έργου

Ας ρίξουμε μια γρήγορη ματιά στον κώδικα του έργου. Χρειαζόμαστε τρεις βιβλιοθήκες για να καταρτιστεί ο κώδικας.

  1. Adafruit TFTLCD:
  2. Adafruit GFX:
  3. Οθόνη αφής:

Όπως μπορείτε να δείτε, ακόμη και ένα απλό παιχνίδι όπως αυτό, απαιτεί περισσότερες από 600 γραμμές κώδικα. Ο κώδικας είναι περίπλοκος, οπότε δεν θα προσπαθήσω να τον εξηγήσω σε σύντομο σεμινάριο. Θα σας δείξω όμως την εφαρμογή του αλγορίθμου για τις κινήσεις του Arduino.

Στην αρχή, παίζουμε δύο τυχαία κόρνερ.

<int firstMoves = {0, 2, 6, 8}; // θα χρησιμοποιήσει αυτές τις θέσεις πρώτα για (μετρητής = 0; μετρητής <4; μετρητής ++) // Μετρήστε τις πρώτες κινήσεις που παίχτηκαν {if (board [firstMoves [counter]! = 0) // Η πρώτη κίνηση παίζεται από κάποιον {movesPlayed ++; }} do {if (moves <= 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) επιστροφή 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? }

Εάν ναι, εμποδίζουμε αυτήν την κίνηση, τις περισσότερες φορές. Δεν αποκλείουμε όλες τις κινήσεις για να δώσουμε την ευκαιρία στον παίκτη να κερδίσει. Μπορείτε να βρείτε ποιες κινήσεις δεν αποκλείονται; Μετά τον αποκλεισμό της κίνησης, παίζουμε μια υπόλοιπη γωνία ή μια τυχαία κίνηση. Μπορείτε να μελετήσετε τον κώδικα και να εφαρμόσετε εύκολα τον δικό σας ασυναγώνιστο αλγόριθμο. Όπως πάντα, μπορείτε να βρείτε τον κωδικό του έργου που επισυνάπτεται σε αυτό το εκπαιδευτικό.

ΣΗΜΕΙΩΣΗ: Δεδομένου ότι το Banggood προσφέρει την ίδια οθόνη με δύο διαφορετικά προγράμματα οδήγησης οθόνης, εάν ο παραπάνω κώδικας δεν λειτουργεί, αλλάξτε τη λειτουργία initDisplay στην ακόλουθη:

void initDisplay ()

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

Βήμα 6: Τελικές σκέψεις και βελτιώσεις

Τελικές σκέψεις και βελτιώσεις
Τελικές σκέψεις και βελτιώσεις

Όπως μπορείτε να δείτε, ακόμη και με ένα Arduino Uno, μπορούμε να δημιουργήσουμε έναν ασυναγώνιστο αλγόριθμο για απλά παιχνίδια. Αυτό το έργο είναι υπέροχο, επειδή είναι εύκολο να χτιστεί, και ταυτόχρονα μια μεγάλη εισαγωγή στην Τεχνητή νοημοσύνη και τον προγραμματισμό παιχνιδιών. Θα προσπαθήσω να δημιουργήσω μερικά πιο προηγμένα έργα με Τεχνητή Νοημοσύνη στο μέλλον χρησιμοποιώντας το πιο ισχυρό Raspberry Pi, οπότε μείνετε συντονισμένοι! Θα ήθελα πολύ να ακούσω τη γνώμη σας για αυτό το έργο.

Παρακαλώ δημοσιεύστε τα σχόλιά σας παρακάτω και μην ξεχάσετε να σας αρέσει το διδακτικό, αν το βρείτε ενδιαφέρον. Ευχαριστώ!

Συνιστάται: