/ / Xây dựng một trò chơi điện tử cầm tay đơn giản bằng Arduino

Xây dựng một trò chơi điện tử cầm tay đơn giản bằng Arduino

Học cách viết mã có thể là một hành trình dài. Bạn không chỉ phải tìm các nguồn để giúp bạn học mà còn phải tìm ra những ý tưởng dự án thú vị giúp cho việc học của bạn đi đúng hướng.

Trò chơi điện tử mang đến cơ hội tuyệt vời để lập trình thứ gì đó mà bạn có thể thưởng thức. Và họ cũng có thể dạy bạn những nguyên tắc cơ bản cần có để trở thành một lập trình viên giỏi. Bài viết này khám phá dự án trò chơi điện tử Arduino cầm tay DIY để giúp bạn bắt đầu.

Chúng ta đang làm gì và tại sao?


Cận cảnh bảng mạch Arduino, tiêu điểm trên màn hình nhỏ có từ

Trước khi đi sâu vào phần hướng dẫn của bài viết này, bạn nên khám phá những gì chúng tôi đang làm và lý do tại sao chúng tôi chọn nó cho dự án này. Một số thách thức đi kèm với việc tạo trò chơi cho các thiết bị như Arduinos.

  • Không gian lưu trữ: Hầu hết các bo mạch Arduino đều có rất ít RAM hoặc bộ nhớ flash. Điều này không chỉ đặt ra giới hạn về số lượng mã mà chúng có thể chạy mà còn đưa ra những thách thức khi làm việc với các biến.
  • Sức mạnh xử lý: Arduino mà chúng tôi sử dụng có CPU công suất thấp, vì vậy không thể tạo các ứng dụng ngốn tài nguyên cho nó.
  • Thành phần hạn chế: Arduinos có sẵn rất nhiều chân cắm, nhưng nhiều thành phần cần nhiều hơn một chân. Điều này hạn chế chúng tôi khi nói đến điều khiển và hiển thị kết quả đầu ra.

Với những thách thức này, chúng tôi quyết định tạo ra một thiết bị cầm tay chạy một trò chơi dựa trên phản ứng rất đơn giản. Bạn có thể dễ dàng tạo các trò chơi khác cho phần cứng mà chúng tôi đang làm việc và chúng tôi khuyến khích bạn sáng tạo.

LÀM VIDEO TRONG NGÀY

Cận cảnh bảng mạch Arduino, với màn hình nhỏ hiển thị trò chơi

Bản thân trò chơi rất đơn giản. Trên màn hình xuất hiện ba khối, hai khối có viền và một khối được điền, mỗi khối có một nút vật lý tương ứng bên dưới. Người chơi phải nhấn nút bên phải mỗi vòng để tiếp tục chơi, và nếu họ nhấn nút sai hoặc hết thời gian thì trò chơi sẽ kết thúc. Mỗi nút bấm thành công sẽ được thưởng điểm. Trò chơi từ từ tăng độ khó bằng cách giảm thời gian phản ứng có sẵn.

Kết nối màn hình OLED, Arduino và các nút


Một sơ đồ mạch đơn giản cho thấy một bảng Arduino được kết nối với màn hình và bốn nút.

Lên dây cho trò chơi cầm tay của bạn là bước đầu tiên trong quá trình này. Như bạn có thể thấy trong sơ đồ mạch ở trên, bạn không cần phải thực hiện nhiều kết nối để bắt đầu và thậm chí bạn có thể sử dụng một breadboard cho dự án này.

Chúng tôi đã xuất bản một hướng dẫn để giúp bạn kết nối các nút nhấn với Arduino. Dự án Arduino Aquarium Monitor của chúng tôi hướng dẫn bạn cách sử dụng màn hình OLED với bộ vi điều khiển như thế này. Do đó, chúng tôi sẽ tập trung vào mã cho dự án này trong phần còn lại của bài viết này.

Mã trò chơi cầm tay Arduino


Danh sách bốn tệp được lưu trữ trên GitHub

Định dạng phù hợp và cấu trúc tệp gọn gàng là rất quan trọng đối với các lập trình viên mới và kỳ cựu. Bạn sẽ cảm ơn bản thân vì đã dành thời gian để sắp xếp mã của mình một cách gọn gàng nếu bạn phải xem lại nó.

Mã sử ​​dụng tệp INO chính để tạo nền tảng cho dự án của chúng tôi. Ngoài ra còn có một tệp C ++ để điều khiển màn hình của chúng tôi, một tệp C ++ để chạy mã trò chơi chính và một tệp thư viện Arduino để kết nối tất cả với nhau.

Chúng tôi sẽ đi sâu hơn vào mã này bên dưới, nhưng chúng tôi khuyến khích bạn xem qua mã được nhận xét trong dự án Trò chơi cầm tay Arduino của chúng tôi trên GitHub. Nó sẽ giúp bạn tham khảo nó cùng với bài viết này.

Tệp Thư viện (library.h)

Tệp thư viện của chúng tôi đóng một vai trò quan trọng, kết nối các tệp dự án khác của chúng tôi với nhau để chúng có thể hoạt động như một ứng dụng duy nhất. Tệp này chứa các khai báo để bao gồm thư viện Arduino.h và tất cả các chức năng trong mã trò chơi của chúng tôi cần hoạt động giữa các tệp của chúng tôi. Nếu không có điều này, mã của chúng tôi sẽ không hoạt động.

Tệp INO Chính (main.ino)

Giống như nhiều dự án Arduino khác, dự án này bắt đầu với mẫu mặc định do Arduino IDE cung cấp. Mẫu đó cung cấp cho nó cài đặtvòng các hàm mà chúng tôi sử dụng để gọi các hàm trong các tệp khác của chúng tôi. Tệp này cũng có phần khai báo để bao gồm tệp thư viện.h.

Chức năng thiết lập lý tưởng để khởi tạo màn hình và các nút của chúng tôi, vì nó chỉ chạy một lần khi Arduino được đặt lại hoặc bật nguồn. Đối với điều này, chúng tôi gọi hàm disSetup () trong tệp hiển thị của chúng tôi và hàm butSetup () trong tệp trò chơi của chúng tôi.

Hàm loop () của chúng tôi thậm chí còn đơn giản hơn hàm setup (), chỉ với một lệnh gọi hàm gameState () được tìm thấy trong tệp trò chơi của chúng tôi. Chúng ta sẽ khám phá điều này chi tiết hơn ở phần sau của bài viết.

Tệp mã hiển thị (display.cpp)


Cận cảnh bảng mạch Arduino, với màn hình nhỏ hiển thị thông báo 'trò chơi kết thúc'

Chúng tôi đang sử dụng màn hình OLED SSD1306 cho dự án này, mặc dù bạn có thể sử dụng một loại màn hình khác nếu bạn chỉnh sửa mã cho phù hợp. Tệp này bắt đầu với việc bao gồm tệp thư viện, thư viện.h. Sau đó, nó bao gồm các khai báo cho các thư viện SPI, Wire, Adafruit_GX và Adafruit_SSD1306. Sau đó, nó xác định một số hằng số để cung cấp cài đặt cho màn hình.

Chức năng đầu tiên, disSetup, khởi tạo màn hình và hiển thị màn hình giật gân logo. Sau đó, nó sẽ xóa màn hình sau khi đợi khoảng 2 giây. Tệp chính của chúng tôi, main.ino, gọi disSetup trong cài đặt hàm số.

Phần còn lại của các hàm trong tệp này, ngoại trừ timerBar (), tạo thành các màn hình khác nhau được nhìn thấy trong suốt trò chơi. Tệp trò chơi, game.cppgọi từng hàm này.

  • startGame (): Hàm này điều khiển màn hình đầu tiên mà người chơi nhìn thấy. Nó chỉ đơn giản là hỏi xem họ đã sẵn sàng trong khi gọi switchInstance chức năng được tìm thấy trong tệp trò chơi.
  • startGame (): Sau khi người chơi bắt đầu trò chơi, màn hình này sẽ hiển thị một bộ đếm ngược ngắn. Sau đó, nó thay đổi trạng thái của trò chơi để phù hợp.
  • inGame (): Đây là hàm hiển thị phức tạp nhất của chúng tôi, sử dụng ba biến để tải mỗi vòng của trò chơi. Nó bắt đầu bằng câu lệnh if để xác định ô nào trong số ba ô sẽ điền, tiếp theo là hiển thị các ô và cấp độ cũng như điểm số của người chơi.
  • timerBar (): Hàm này sử dụng một biến để hiển thị thanh hẹn giờ ở cuối màn hình. Nó cho người chơi biết họ có bao nhiêu thời gian cho mỗi vòng.
  • successScreen (): Đây là một chức năng đơn giản hiển thị thông báo mỗi khi người chơi hoàn thành thành công một vòng chơi.
  • endGame (): Chức năng cuối cùng này hiển thị trò chơi trên màn hình với điểm số của người chơi và tùy chọn bắt đầu lại trò chơi.


Tệp mã trò chơi (game.cpp)


Cận cảnh bảng mạch Arduino, với màn hình nhỏ hiển thị trò chơi

Cuối cùng, là tệp cuối cùng để khám phá, đã đến lúc xem mã trò chơi. Tệp này, giống như những tệp khác, bắt đầu bằng việc bao gồm tệp thư viện.h. Nó cũng chứa một danh sách dài các biến số nguyên khác nhau mà chúng tôi sử dụng trong trò chơi.

Bạn sẽ tìm thấy hàm butSetup () trước bất kỳ hàm nào khác. Hàm setup () trong tệp chính của chúng tôi gọi butSetup. Hàm này sử dụng các biến để thiết lập các nút của chúng ta làm đầu vào mà chúng ta có thể đọc sau này.

  • switchInstance (): Chức năng này chuyển đổi giữa các phiên bản của trò chơi, từ màn hình bắt đầu đến trò chơi và trò chơi qua các màn hình. Nó nhận được một biến để cho nó biết trạng thái trò chơi cần chuyển sang. Câu lệnh if chờ một lần nhấn nút để bắt đầu trò chơi từ trạng thái startGame (). Một câu lệnh if khác bắt đầu lại trò chơi từ trạng thái endGame ().
  • gameState (): Hàm này đặt độ khó của trò chơi dựa trên điểm số của người chơi và gọi hàm phù hợp tùy thuộc vào trạng thái của trò chơi. Nó bắt đầu với một loạt các câu lệnh if đặt các biến dựa trên điểm của người chơi, tiếp theo là các câu lệnh if khác để kiểm tra phiên bản hiện tại.
  • ngóiSelector (): Hàm này tạo ra một số ngẫu nhiên từ 0 đến 2 để cho trò chơi biết ô nào trong số ba ô sẽ điền vào bất kỳ thời điểm nào.
  • theGame (): Hàm này được cho là quan trọng nhất. Nó gọi là gạch lát nềntrong game chức năng, chọn một ô mới và hiển thị nó trên màn hình. Sau đó, bạn sẽ tìm thấy một vòng lặp for hoạt động như một bộ đếm thời gian cho mỗi vòng. Nó chứa một tập hợp các câu lệnh if nhận các lần nhấn nút và xác định xem chúng có đúng hay không.


Xây dựng trò chơi Arduino cầm tay của riêng bạn

Bài viết này là một đồng hành với mã dự án được tìm thấy trên GitHub. Bạn có thể tìm thêm thông tin về các dòng mã cụ thể mà chúng tôi đã sử dụng trong phần nhận xét trong các tệp đó. Nhưng bạn cũng có thể thoải mái tải nó lên Arduino của mình và tận hưởng niềm vui.

Sáng tạo là chìa khóa trong thế giới phát triển trò chơi và chúng tôi khuyến khích bạn làm việc trên ý tưởng trò chơi của riêng mình cùng với ý tưởng này.


Bảng mạch Arduino

10 dự án radio Arduino tốt nhất

Đọc tiếp


Giới thiệu về tác giả

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *