Mục lục:

Trò chơi Arduino Touch Tic Tac Toe: 6 bước (có hình ảnh)
Trò chơi Arduino Touch Tic Tac Toe: 6 bước (có hình ảnh)

Video: Trò chơi Arduino Touch Tic Tac Toe: 6 bước (có hình ảnh)

Video: Trò chơi Arduino Touch Tic Tac Toe: 6 bước (có hình ảnh)
Video: Biến hình khi văn phòng Schannel có khách đến 2024, Tháng sáu
Anonim
Image
Image
Trò chơi Arduino Touch Tic Tac Toe
Trò chơi Arduino Touch Tic Tac Toe
Trò chơi Arduino Touch Tic Tac Toe
Trò chơi Arduino Touch Tic Tac Toe
Trò chơi Arduino Touch Tic Tac Toe
Trò chơi Arduino Touch Tic Tac Toe

Chào mừng các bạn đến với một hướng dẫn Arduino khác! Trong hướng dẫn chi tiết này, chúng ta sẽ xây dựng một trò chơi Arduino Tic Tac Toe. Như bạn có thể thấy, chúng tôi đang sử dụng màn hình cảm ứng và chúng tôi đang chơi với máy tính. Một trò chơi đơn giản như Tic Tac Toe là một giới thiệu tuyệt vời về lập trình trò chơi và Trí tuệ nhân tạo. Mặc dù chúng tôi sẽ không sử dụng bất kỳ Thuật toán Trí tuệ Nhân tạo nào trong trò chơi này, nhưng chúng tôi sẽ hiểu tại sao Thuật toán Trí tuệ Nhân tạo lại được yêu cầu trong các trò chơi phức tạp hơn.

Việc phát triển trò chơi cho Arduino không hề đơn giản và đòi hỏi nhiều thời gian. Nhưng chúng ta có thể xây dựng một số trò chơi đơn giản cho Arduino vì nó rất thú vị và nó sẽ cho phép chúng ta khám phá một số chủ đề lập trình nâng cao hơn, như Trí tuệ nhân tạo. Đó là một trải nghiệm học tập tuyệt vời và cuối cùng bạn sẽ có một trò chơi hay cho bọn trẻ!

Bây giờ chúng ta hãy xây dựng dự án này.

Bước 1: Nhận tất cả các bộ phận

Image
Image
2,8
2,8

Các phần cần thiết để xây dựng dự án này là:

Một Arduino Uno ▶

Màn hình cảm ứng 2,8 inch ▶

Chi phí của dự án rất thấp. Nó chỉ là 15 $

Trước khi cố gắng xây dựng dự án này, vui lòng xem video tôi đã chuẩn bị về màn hình cảm ứng. Tôi đã đính kèm nó trong hướng dẫn này. Nó sẽ giúp bạn hiểu mã và hiệu chỉnh màn hình cảm ứng.

Bước 2: Màn hình màu cảm ứng 2,8 "cho Arduino

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

Tôi đã phát hiện ra màn hình cảm ứng này trên banggood.com và quyết định mua nó để thử sử dụng nó trong một số dự án của mình. Như bạn có thể thấy, màn hình hiển thị không đắt, nó có giá khoảng 11 đô la.

Tải xuống tại đây ▶

Màn hình có độ phân giải 320x240 pixel và nó đi kèm như một tấm chắn giúp kết nối với Arduino cực kỳ dễ dàng. Như bạn có thể thấy, màn hình sử dụng gần như tất cả các chân analog và kỹ thuật số của Arduino Uno. Khi sử dụng lá chắn này, chúng tôi chỉ còn lại 2 chân kỹ thuật số và 1 chân tương tự cho các dự án của chúng tôi. May mắn thay, màn hình cũng hoạt động tốt với Arduino Mega, vì vậy chúng tôi khi cần thêm chân cắm, chúng tôi có thể sử dụng Arduino Mega thay vì Arduino Uno. Rất tiếc, màn hình này không hoạt động với Arduino Due hoặc bo mạch Wemos D1 ESP8266. Một ưu điểm khác của tấm chắn là nó cung cấp một khe cắm micro SD rất dễ sử dụng.

Bước 3: Xây dựng dự án và thử nghiệm nó

Xây dựng dự án và thử nghiệm nó
Xây dựng dự án và thử nghiệm nó
Xây dựng dự án và thử nghiệm nó
Xây dựng dự án và thử nghiệm nó
Xây dựng dự án và thử nghiệm nó
Xây dựng dự án và thử nghiệm nó

Sau khi kết nối màn hình với Arduino Uno, chúng ta có thể tải mã và sẵn sàng chơi.

Đầu tiên, chúng tôi nhấn nút “Bắt đầu trò chơi” và trò chơi bắt đầu. Arduino chơi trước. Sau đó, chúng ta có thể chơi di chuyển của mình chỉ bằng cách chạm vào màn hình. Sau đó Arduino thực hiện bước di chuyển của nó, v.v. Người chơi thành công trong việc đặt ba dấu của họ theo hàng ngang, hàng dọc hoặc đường chéo sẽ thắng trò chơi. Khi trò chơi kết thúc, màn hình Game Over sẽ xuất hiện. Sau đó chúng ta có thể nhấn nút chơi lại để bắt đầu lại trò chơi.

Arduino rất giỏi trong trò chơi này. Nó sẽ giành chiến thắng trong hầu hết các trò chơi, hoặc nếu bạn là một người chơi rất giỏi, trò chơi sẽ kết thúc với tỷ số hòa. Tôi cố ý thiết kế thuật toán này để tạo ra một số sai lầm nhằm tạo cơ hội chiến thắng cho người chơi. Bằng cách thêm hai dòng nữa vào mã của trò chơi, chúng tôi có thể làm cho Arduino không thể thua trò chơi. Nhưng làm thế nào một con chip 2 đô la, CPU Arduino, có thể đánh bại bộ não con người? Chương trình chúng tôi phát triển có thông minh hơn bộ não con người không?

Bước 4: Thuật toán trò chơi

Thuật toán trò chơi
Thuật toán trò chơi
Thuật toán trò chơi
Thuật toán trò chơi

Để trả lời câu hỏi này, hãy xem thuật toán mà tôi đã triển khai.

Máy tính luôn phát trước. Chỉ riêng quyết định này thôi đã giúp Arduino giành chiến thắng trong trò chơi dễ dàng hơn rất nhiều. Nước đi đầu tiên luôn là một góc. Nước đi thứ hai cho Arduino cũng là một góc ngẫu nhiên từ góc còn lại mà không quan tâm đến nước đi của người chơi. Từ thời điểm này, Arduino trước tiên sẽ kiểm tra xem người chơi có thể thắng trong nước đi tiếp theo hay không và chặn nước đi đó. Nếu người chơi không thể thắng trong một nước đi, người chơi sẽ chơi một nước đi góc nếu nó có sẵn hoặc một nước đi ngẫu nhiên từ những người còn lại. Vậy là xong, thuật toán đơn giản này có thể đánh bại người chơi là con người mọi lúc hoặc trong trường hợp xấu nhất, trò chơi sẽ dẫn đến kết quả hòa. Đây không phải là thuật toán trò chơi tic tac toe tốt nhất, nhưng là một trong những thuật toán đơn giản nhất.

Thuật toán này có thể được thực hiện trong Arduino một cách dễ dàng, vì trò chơi Tic Tac Toe rất đơn giản, và chúng ta có thể dễ dàng phân tích và giải nó. Nếu chúng ta thiết kế cây trò chơi, chúng ta có thể phát hiện ra một số chiến lược chiến thắng và dễ dàng thực hiện chúng bằng mã hoặc chúng ta có thể để CPU tính toán cây trò chơi trong thời gian thực và tự mình chọn ra nước đi tốt nhất. Tất nhiên, thuật toán chúng tôi sử dụng trong trò chơi này rất đơn giản, bởi vì trò chơi rất đơn giản. Nếu chúng ta cố gắng thiết kế một thuật toán chiến thắng cho cờ vua, ngay cả khi chúng ta sử dụng máy tính nhanh nhất, chúng ta cũng không thể tính cây trò chơi trong một nghìn năm! Đối với những trò chơi như thế này, chúng ta cần một cách tiếp cận khác, chúng ta cần một số thuật toán Trí tuệ nhân tạo và tất nhiên là sức mạnh xử lý rất lớn. Thông tin thêm về điều này trong một video trong tương lai.

Bước 5: Mã của dự án

Mã của dự án
Mã của dự án

Chúng ta hãy xem nhanh mã của dự án. Chúng ta cần ba thư viện để biên dịch mã.

  1. Adafruit TFTLCD:
  2. Adafruit GFX:
  3. Màn hình cảm ứng:

Như bạn có thể thấy, ngay cả một trò chơi đơn giản như thế này, yêu cầu hơn 600 dòng mã. Mã phức tạp, vì vậy tôi sẽ không cố gắng giải thích nó trong hướng dẫn ngắn. Mặc dù vậy, tôi sẽ chỉ cho bạn cách triển khai thuật toán cho các bước di chuyển của Arduino.

Lúc đầu, chúng tôi chơi hai góc ngẫu nhiên.

<int firstMoves = {0, 2, 6, 8}; // sẽ sử dụng các vị trí này đầu tiên for (counter = 0; counter <4; counter ++) // Đếm nước đi đầu tiên đã chơi {if (board [firstMoves [counter]! = 0) // Nước đi đầu tiên được chơi bởi ai đó {movePlayed ++; }} do {if (move <= 2) {int randomMove = random (4); int c = firstMoves [randomMove]; if (ban [c] == 0) {delay (1000); ban [c] = 2; Serial.print (firstMoves [randomMove]); Serial.println (); drawCpuMove (firstMoves [randomMove]); b = 1; }}

Tiếp theo, trong mỗi vòng, chúng tôi kiểm tra xem người chơi có thể thắng trong nước đi tiếp theo hay không.

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; khác trả về 100; }

Nếu có, chúng tôi chặn việc di chuyển đó, hầu hết các lần. Chúng tôi không chặn tất cả các bước di chuyển để người chơi con người có cơ hội giành chiến thắng. Bạn có thể tìm thấy nước đi nào không bị chặn không? Sau khi chặn nước đi, chúng ta chơi một góc còn lại, hoặc một nước đi ngẫu nhiên. Bạn có thể nghiên cứu mã và triển khai thuật toán bất bại của riêng mình một cách dễ dàng. Như mọi khi, bạn có thể tìm thấy mã của dự án được đính kèm trên hướng dẫn này.

LƯU Ý: Vì Banggood cung cấp cùng một màn hình với hai trình điều khiển hiển thị khác nhau, nếu mã trên không hoạt động, hãy thay đổi chức năng initDisplay thành như sau:

void initDisplay ()

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

Bước 6: Suy nghĩ cuối cùng và cải tiến

Những suy nghĩ cuối cùng và cải tiến
Những suy nghĩ cuối cùng và cải tiến

Như bạn có thể thấy, ngay cả với Arduino Uno, chúng tôi có thể xây dựng một thuật toán không thể đánh bại cho các trò chơi đơn giản. Dự án này rất tuyệt, vì nó dễ xây dựng, đồng thời là một giới thiệu tuyệt vời về Trí tuệ nhân tạo và lập trình trò chơi. Tôi sẽ cố gắng xây dựng một số dự án tiên tiến hơn với Trí tuệ nhân tạo trong tương lai bằng cách sử dụng Raspberry Pi mạnh mẽ hơn, vì vậy hãy chú ý theo dõi! Tôi rất muốn nghe ý kiến của bạn về dự án này.

Hãy gửi bình luận của bạn bên dưới và đừng quên like hướng dẫn nếu bạn thấy thú vị. Cảm ơn!

Đề xuất: