Mục lục:

Tái tạo trò chơi khó nhất thế giới trên Arduino: 7 bước
Tái tạo trò chơi khó nhất thế giới trên Arduino: 7 bước

Video: Tái tạo trò chơi khó nhất thế giới trên Arduino: 7 bước

Video: Tái tạo trò chơi khó nhất thế giới trên Arduino: 7 bước
Video: Top 3 tựa Game NẶNG NHẤT! Nhiều máy tải về xong là đứt luôn. 🥲 2024, Tháng bảy
Anonim
Image
Image

Dự án này dựa trên một trò chơi máy tính mà bạn có thể tìm thấy trên mạng. Tên của nó là, "Trò chơi khó nhất thế giới." Tôi đã có thể tạo lại nó trên Arduino bằng Ma trận LED bốn mô-đun. Trong tài liệu hướng dẫn này, tôi dạy bạn cách tự xây dựng nó. Trước khi chúng ta đi vào quá nhiều chi tiết, tôi muốn cung cấp một cái nhìn tổng quan nhanh về các bước tôi đã trải qua để tạo ra trò chơi này.

  1. Tôi đã tập hợp tất cả các bộ phận cần thiết.
  2. Tôi kết nối các bộ phận với nhau.
  3. Tôi đã viết một bản phác thảo sử dụng cần điều khiển để di chuyển đèn LED của trình phát trên tất cả các mô-đun.
  4. Tôi thiết kế những chướng ngại vật đầu tiên và thêm chúng vào bản phác thảo để chúng mô phỏng Trò chơi khó nhất thế giới.
  5. Sau đó, tôi đã thêm mã để phát hiện va chạm với các chướng ngại vật, điều này sẽ khởi động lại trò chơi.
  6. Và sau đó tôi thiết kế thêm hai cấp độ chướng ngại vật.

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

Tất cả các bộ phận
Tất cả các bộ phận
Tất cả các bộ phận
Tất cả các bộ phận

Đây là danh sách tất cả các bộ phận bạn cần:

  1. Một đầu nối Arduino UNO và usb:
  2. Một bốn mô-đun 8x8: LED ma trận https://www.banggood.com/MAX7219-Dot-Matrix-Module..
  3. Một cần điều khiển:
  4. 10 dây từ nam đến nữ:

Bước 2: Cách kết nối các bộ phận với Arduino

Cách kết nối các bộ phận với Arduino
Cách kết nối các bộ phận với Arduino

Cách kết nối Ma trận LED với Arduino

  1. GND chuyển đến GND
  2. VCC đi tới 5V
  3. DataIn chuyển đến chân số 12
  4. CLK đi đến chân số 11
  5. CS hoặc LOAD chuyển đến chân số 10

Cách kết nối cần điều khiển

  1. GND chuyển đến GND
  2. 5V chuyển sang 5V
  3. VRx đi đến chân analog A0
  4. VRy đi đến chân tương tự A1
  5. SW không được sử dụng

Pin kết nối với giắc cắm 9v để cung cấp năng lượng cho Arduino

Bước 3: Lưu đồ của chương trình

Lưu đồ của Chương trình
Lưu đồ của Chương trình

Hình bầu dục cho biết bắt đầu chương trình.

Bước đầu tiên là xác định tất cả các trở ngại.

Hai bước tiếp theo chỉ ra việc thiết lập các biến và bật tất cả các mô-đun.

Bước tiếp theo, là đặt đèn LED ở mức đầu tiên và bất kỳ biến nào khác.

Tiếp theo hiển thị cấp độ mà người chơi hiện đang ở.

Hình thoi biểu thị việc đọc Cần điều khiển để xem nó đang được đẩy theo hướng nào.

Sau đó di chuyển người chơi theo bất kỳ hướng nào mà Cần điều khiển được đẩy.

Kiểm tra xem người chơi có va chạm với chướng ngại vật hay không.

Nếu người chơi gặp chướng ngại vật, hãy quay trở lại cấp độ đầu tiên. Nếu không, hãy kiểm tra xem người chơi có đạt đến cuối cấp độ hay không.

Nếu người chơi ở cuối cấp độ, hãy đặt sang cấp độ tiếp theo rồi quay lại "Hiển thị cấp độ hiện tại". Nếu chúng không ở cuối, hãy di chuyển chướng ngại vật và quay lại, "Đọc Cần điều khiển".

Bước 4: Lập trình Joystick

Tất nhiên để di chuyển dấu chấm nhỏ là trình phát, chúng ta cần một phím điều khiển. và để cho phép cần điều khiển thực sự di chuyển trình phát, chúng tôi cần mã hóa nó trong Arduino IDE. Bạn cần bao gồm thư viện LedControl mà bạn có thể tìm thấy bằng cách đi tới menu phác thảo> Bao gồm Thư viện> quản lý thư viện và tìm kiếm LedControl. Đây là mã của cần điều khiển trông như thế nào.

#include "LedControl.h"

int DataIn = 12; int CLK = 11; int DIN = 10; LedControl lc = LedControl (DataIn, CLK, DIN, 4); // Tạo đối tượng cho bốn mô-đun int delaytime = 50; // tốc độ trò chơi chạy int Joystick_RtLt, Joystick_UpDn; int player_x = 0; // vị trí người chơi nằm ngang từ 0 đến 31 int player_y = 3; // trình phát vị trí dọc từ 0 đến 7 int row, column, module; void setup () {initialize_modules (); // bật và thiết lập cả 4 module led} void loop () {move_player (); // bắt đầu vòng lặp bằng cách kiểm tra xem người chơi có di chuyển độ trễ hay không (delaytime); } void initialize_modules () {lc.shutdown (0, false); // khởi động mô-đun 0 lc.setIntensity (0, 1); lc.shutdown (1, sai); // khởi động mô-đun 1 lc.setIntensity (1, 1); lc.shutdown (2, sai); // khởi động mô-đun 2 lc.setIntensity (2, 1); lc.shutdown (3, sai); // khởi động mô-đun 3 lc.setIntensity (3, 1); lc.clearDisplay (0); // xóa mô-đun 0} void move_player () {module = player_x / 8; // xác định mô-đun nào của trình phát trên column = player_x% 8; // xác định cột nơi trình phát nằm trên module row = player_y; lc.setLed (mô-đun, hàng, cột, sai); // tắt đèn led ở vị trí hiện tại của người chơi cần điều khiển_RtLt = analogRead (A0) / 204 - 2; // đọc cần điều khiển X và phạm vi bản đồ từ 2 đến -2 if (cần điều khiển_RtLt> 0) // khi cần điều khiển đến đúng người chơi_x ++; // sang phải khác if (cần điều khiển_RtLt 0) // nếu cần điều khiển ở bên trái chứ không phải ở đầu player_x--; // di chuyển sang trái cần điều khiển_UpDn = analogRead (A1) / 204 - 2; // đọc cần điều khiển Y và phạm vi bản đồ từ 2 đến -2 if (cần điều khiển_UpDn 0) // nếu cần điều khiển bị ngắt và người chơi không ở dưới cùng player_y--; // di chuyển xuống khác if (cần điều khiển_UpDn> 0 && player_y <7) // nếu cần điều khiển lên và trình phát không ở trên cùng player_y ++; // đi lên module = player_x / 8; // thiết lập mô-đun cho người chơi vị trí mới cột = player_x% 8; // đặt cột cho người chơi vị trí mới row = player_y; // đặt hàng cho người chơi vị trí mới lc.setLed (module, row, column, true); // bật đèn led ở vị trí mới của người chơi}

Bây giờ bạn đã thêm cần điều khiển, hãy làm việc với chướng ngại vật đầu tiên!

Bước 5: Cấp độ đầu tiên

Được rồi, giờ là lúc vào phần chính của chương trình, các chướng ngại vật! Những trở ngại là những gì thực sự làm cho trò chơi này trở thành, "Trò chơi khó nhất thế giới." Vì vậy, nếu bạn muốn thực sự chơi trò chơi thì bạn cần thêm mã này vào mã của mình:

chướng ngại vật byte [LEVELS] [SCENES] [COLUMNS] [ROWS] = {// ba cấp, 8 cảnh, 8 collums, 8 hàng

{{{1, 1, 1, 1, 1, 1, 0, 0}, // cấp độ đầu tiên, cảnh đầu tiên {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 1, 1, 1, 1, 1, 1}, { 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}}, {{1, 1, 1, 1, 1, 0, 0, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, // cảnh cấp một, cảnh thứ hai {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 1, 1, 1, 1, 1 }, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}}, {{1, 1, 1, 1, 0, 0, 1, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, // cấp đầu tiên, thứ ba cảnh {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {1, 1, 0, 0, 1, 1, 1, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}}, {{1, 1, 1, 0, 0, 1, 1, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, // 1 cấp độ, cảnh thứ tư {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {1, 1, 1, 0, 0, 1, 1, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}}, {{1, 1, 0, 0, 1, 1, 1, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, // mức đầu tiên, cảnh thứ năm {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {1, 1, 1, 1, 0, 0, 1, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}}, {{1, 0, 0, 1, 1, 1, 1, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, // mức đầu tiên, cảnh thứ sáu {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, { 1, 1, 1, 1, 1, 0, 0, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}}, {{0, 0, 1, 1, 1, 1, 1, 1}, // cấp đầu tiên, cảnh thứ bảy {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0 }, {1, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}}, {{0, 1, 1, 1, 1, 1, 1, 1}, // cấp một, tám cảnh {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {1, 1, 1, 1, 1, 1, 1, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}}}, void setup () {initialize_modules (); // bật và thiết lập tất cả bốn mô-đun dẫn start_level (0); void loop () {move_player (); // bắt đầu vòng lặp bằng cách kiểm tra xem người chơi có di chuyển không if (va chạm ()) {// kiểm tra mức va chạm = 0; // nếu xung đột true, đặt lại mức start_level (level); // khởi động lại trò chơi} else if (delay_count == chướng ngại vật_delay) {// nếu không có va chạm di chuyển chướng ngại vật mọi độ trễ khác moveobstacle (); delay_count = 0; } else delay_count ++; sự chậm trễ (delaytime); // độ trễ theo tốc độ của trò chơi}

Và đó là trở ngại đầu tiên! Nếu bạn cảm thấy nhàm chán với điều này ở cấp độ đầu tiên thì bạn luôn có thể thay đổi các byte, chỉ cần nhớ rằng bạn cần có tám cảnh khác nhau! Hãy tiếp tục bước tiếp theo, phát hiện va chạm!

Bước 6: Phát hiện va chạm

Bước này là một phần quan trọng khác của trò chơi, ngoài ra sẽ không có nhiều thử thách! bạn chỉ có thể vượt qua các chướng ngại vật mà không gặp bất kỳ hậu quả nào! Điều đó sẽ không vui lắm phải không? vì vậy, hãy làm cho trò chơi trở nên thử thách hơn (và thú vị hơn nhiều!) bằng cách thêm phần này của chương trình:

void loop () {

move_player (); // bắt đầu vòng lặp bằng cách kiểm tra xem người chơi có di chuyển không if (va chạm ()) {// kiểm tra mức va chạm = 0; // nếu xung đột true, đặt lại mức start_level (level); // khởi động lại trò chơi} else if (delay_count == chướng ngại vật_delay) {// nếu không có va chạm di chuyển chướng ngại vật mọi độ trễ khác moveobstacle (); delay_count = 0; } else delay_count ++; sự chậm trễ (delaytime); // độ trễ theo tốc độ của trò chơi} int va chạm () {// kiểm tra xem người chơi có gặp chướng ngại vật trong cảnh mô-đun = player_x / 8; cột = người chơi_x% 8; hàng = người chơi_y; if (mô-đun> 0) if (chướng ngại vật [mức] [cảnh] [cột] [hàng] == 1) // nếu vị trí của người chơi giống với chướng ngại vật return (1); // phát hiện va chạm trả về true return (0); // không có va chạm trả về false}

Và ở đó bạn đi! bây giờ bạn có thể thưởng thức trò chơi nhiều hơn nữa! Bây giờ tôi sẽ chỉ cho bạn cách lập trình hai cấp độ cuối cùng của trò chơi! bạn gần như đã hoàn thành với hướng dẫn này, và tôi chắc chắn rằng bạn đã sẵn sàng để thử nó!

Bước 7: Hai cấp độ cuối cùng

Đã đến phần cuối của hướng dẫn, hai cấp độ cuối cùng này là tất cả những gì bạn cần để hoàn thành trò chơi này. Sau đó, bạn có thể thử nó cho chính mình! đây là mã:

chướng ngại vật byte [LEVELS] [SCENES] [COLUMNS] [ROWS] = {// mức thứ hai và thứ ba, 8 cảnh, 8 cột, 8 hàng

{{{1, 0, 0, 0, 0, 0, 0, 1}, // cấp hai, cảnh đầu tiên {0, 1, 0, 0, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 0, 1, 1, 0, 0, 0}, { 0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 0, 0, 1, 0}, {1, 0, 0, 0, 0, 0, 0, 1}}, {{1, 1, 0, 0, 0, 0, 0, 1}, // mức thứ hai, cảnh thứ hai {0, 0, 1, 0, 0, 0, 0, 1}, {0, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 0, 1, 1, 1, 0, 0}, {0, 0, 1, 1, 1, 0, 0, 0 }, {0, 1, 0, 0, 1, 0, 0, 0}, {1, 0, 0, 0, 0, 1, 0, 0}, {1, 0, 0, 0, 0, 0, 1, 1}}, {{0, 1, 0, 0, 0, 0, 0, 0}, // cảnh thứ hai, thứ ba {0, 0, 1, 1, 0, 0, 0, 1}, {0, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 0, 1, 1, 1, 1, 0}, {0, 1, 1, 1, 1, 0, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 0}, {0, 1, 0, 0, 0, 1, 1, 0}, {0, 0, 0, 0, 0, 0, 1, 0}}, {{0, 0, 1, 0, 0, 0, 0, 0}, // cảnh cấp hai thứ tư {0, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 0, 0, 1, 0, 0, 1}, {0, 1, 1, 1, 1, 0, 1, 0}, {0, 1, 0, 1, 1, 1, 1, 0}, {1, 0, 0, 1, 0, 0, 0, 0}, {0, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0}}, {{0, 0, 0, 1, 0, 0, 0, 0}, // cấp hai, năm mươi cảnh thứ {0, 0, 0, 0, 1, 0, 0, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 1, 1, 0, 0, 1}, {1, 0, 0, 1, 1, 0, 1, 0}, {0, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 0, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 0, 0, 0}}, {{0, 0, 0, 0, 1, 0, 0, 0}, // cấp thứ hai, cảnh thứ sáu {0, 0, 0, 0, 0, 1, 0, 0}, {0, 1, 1, 0, 0, 1, 0, 0}, {1, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 0, 1, 1, 0, 1, 1}, {0, 0, 1, 0, 0, 1, 1, 0}, {0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 1, 0, 0, 0, 0}}, {{0, 0, 0, 0, 0, 1, 0, 0}, // cấp hai, cảnh thứ bảy {0, 0, 0, 0, 0, 1, 0, 0}, {1, 1, 1, 0, 0, 1, 0, 0}, {0, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 1, 0, 0, 1, 1, 1}, {0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 1, 0, 0, 0, 0, 0}}, {{0, 0, 0, 0, 0, 0, 1, 0}, // cảnh thứ tám cấp thứ hai {1, 1, 0, 0, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 0, 0, 1, 1}, {0, 1, 0, 0, 0, 0, 0, 0}}}, {{{0, 1, 0, 0, 0, 0, 0, 1}, // cấp thứ ba, cảnh đầu tiên {0, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 0, 1, 0, 0}, {1, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 1}, {0, 0, 0, 1, 0, 0, 0, 0} }, {{0, 0, 0, 0, 1, 0, 0, 1}, // cấp ba, cảnh thứ hai {1, 0, 0, 0, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 1}, {1, 0, 0, 1, 0, 0, 0, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 0, 0, 0, 1, 0, 0, 0}, {1, 0, 0, 1, 0, 0, 1, 0}}, {{0, 1, 0, 0, 1, 0, 0, 1}, // cấp ba, cảnh thứ ba {0, 0, 0, 1, 0, 0, 1, 0}, { 0, 0, 0, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 1}, {1, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 1, 0, 0, 0, 0, 0, 1}, {1, 0, 0, 1, 0, 0, 0, 0}}, {{0, 0, 0, 0, 1, 0, 0, 1}, // cấp ba, cảnh thứ tư {1, 0, 0, 1, 0, 0, 1, 0 }, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 0, 0, 0, 1, 0, 0, 1}, {1, 0, 0, 0, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 1, 0, 0, 1, 0}}, {{0, 1, 0, 0, 1, 0, 0, 1}, // cấp ba, cảnh thứ năm {0, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 0, 0, 0, 1}, {0, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 1}, {1, 0, 0, 0, 0, 0, 0, 0}}, {{0, 0, 0, 0, 1, 0, 0, 1}, // cấp ba, cảnh thứ sáu {1, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 0, 0, 1}, {1, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 1, 0, 0, 1, 0}}, {{0, 1, 0, 0, 1, 0, 0, 1}, // cấp ba, cảnh thứ bảy {0, 0, 0, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 1}, {1, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 0, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 1}, {1, 0, 0, 1, 0, 0, 0, 0}}, {{0, 0, 0, 0, 1, 0, 0, 0}, // cấp ba, cảnh thứ tám { 1, 0, 0, 0, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 1}, {1, 0, 0, 1, 0, 0, 0, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 0}, {1, 0, 0, 1, 0, 0, 1, 0}}}};

Và đó là nó! bạn đã sẵn sàng để cố gắng hoàn thành Trò chơi khó nhất thế giới. Ngoài ra mã Arduino đầy đủ được đính kèm bên dưới.

Đề xuất: