Mục lục:
2025 Tác giả: John Day | [email protected]. Sửa đổi lần cuối: 2025-01-23 15:15
Trong các bài viết trước, chúng ta đã khám phá cách làm trò chơi trên GameGo, một máy chơi game cổ điển di động được phát triển bởi tổ chức giáo dục TinkerGen. Các trò chơi mà chúng tôi thực hiện gợi nhớ đến các trò chơi Nintendo cũ. Trong bài viết hôm nay, chúng ta sẽ quay trở lại thời kỳ hoàng kim của game arcade. Chúng tôi sẽ tạo lại trò chơi Space Invaders trong Micropython trên vi điều khiển Micro: bit - và để thay đổi, chúng tôi cũng sẽ sử dụng phần mở rộng BitPlayer Micro: bit, cho phép chúng tôi chơi trò chơi thuận tiện hơn.
Vì hướng dẫn này là về cách viết mã trò chơi trong Micropython, thay vì trình tự từng giai đoạn truyền thống mà chúng tôi đã sử dụng trước đây cho các hướng dẫn lập trình đồ họa, chúng tôi sẽ đi qua từng khối mã - đi qua các hàm, lớp quan trọng và chính vòng. Bạn có thể tải xuống mã đầy đủ trong kho lưu trữ GitHub của dự án này. Thắt dây an toàn và bắt đầu!
Quân nhu
TinkerGen BitPlayer
BBC Micro: bit
Bước 1: Vòng lặp chính
Trong hướng dẫn này, tôi sẽ sử dụng từ "method" khá thường xuyên. Một phương thức trong python hơi giống với một hàm, ngoại trừ nó được liên kết với đối tượng / các lớp. Vì vậy, để đơn giản hóa, bạn có thể đọc nó là "một hàm trong lớp". Bạn có thể đọc thêm về các phương pháp tại đây.
Chúng tôi vào vòng lặp chính với
trong khi không phải game_over:
tình trạng. Bên trong, chúng tôi nhận được số lượng kẻ xâm lược, cơ hội xuất hiện của chúng và số lượng cần thiết để lên cấp độ tiếp theo từ từ điển cấp độ. Tiếp theo, chúng tôi kiểm tra chuyển động từ trái sang phải bằng các phương thức cá thể Listen_Dir của cá thể lớp JoyStick. Nếu một trong các điều kiện được đánh giá là Đúng, chúng tôi tăng / giảm giá trị x của nhân vật có thể chơi của chúng tôi. Chúng tôi giới hạn nó ở [-2, 2] với hai điều kiện if. Sau đó, chúng tôi khởi tạo một thể hiện của lớp DisplayBuffer và kiểm tra các lần nhấn nút "khiên" hoặc "đạn lửa". Chúng tôi sử dụng phương thức DisplayBuffer.set () để thiết lập các đối tượng để hiển thị sau này. Để hiển thị lá chắn, chúng tôi sử dụng DisplayBuffer.set () trực tiếp, nhưng đối với đạn và kẻ xâm lược, chúng tôi thêm chúng vào danh sách tương ứng và đặt () chúng từng cái một trong vòng lặp với mã sau để hiển thị sau với DispBuffer.render ():
đối với b trong dấu đầu dòng: b.render (dispBuf) đối với v trong vaders: v.render (dispBuf)
Tất cả những kẻ xâm lược, đạn và lá chắn được hiển thị sau mỗi lần lặp lại vòng lặp chính với
dispBuf.render ()
Trước khi kết thúc vòng lặp chính, chúng tôi kiểm tra xem có viên đạn nào của những kẻ xâm lược đã đến cuối màn hình hay không và nếu có, chúng tôi sẽ xóa chúng khỏi danh sách tương ứng.
Bước 2: Cần điều khiển
BitPlayer rất dễ cầm và sử dụng, với cần điều khiển 2 trục như bộ điều khiển Gameboy hoặc PSP, nó cũng bao gồm 6 nút có thể lập trình khác được gắn nhãn là L, R, A, B, C và D. Để có trải nghiệm nhập vai và tương tác, BitPlayer Bản thân nó có bộ rung, động cơ rung và cổng Grove I2C để kết nối các thiết bị ngoại vi bổ sung như màn hình OLED.
Chúng tôi chỉ sử dụng nút điều khiển bên trái-phải của cần điều khiển cho trò chơi này, ví dụ đầy đủ về việc sử dụng tất cả các nút BitPlayer, bạn có thể xem tại Joystick_example.py trong kho lưu trữ GitHub của dự án này. Khi tạo phiên bản của lớp JoyStick, chúng tôi kiểm tra việc đọc mặc định trục X và lưu trữ giá trị đó trong self. Read_X. Sau đó, trong hàm Listen_Dir, chúng tôi kiểm tra xem độ lệch từ giá trị mặc định đó có cao hơn biến độ nhạy hay không (hãy thử tự điều chỉnh, nếu bạn cảm thấy JoyStick quá nhạy cảm) và trả về True of False theo hướng được phát hiện.
Hãy xem ví dụ cụ thể về cách hoạt động của điều này:
Giả sử số đọc trục X mặc định của chúng ta là 0. Sau đó, nếu chúng ta di chuyển Cần điều khiển sang phải:
New_X = JoyStick_X.read_analog () # New_X = 200
Right = New_X - self. Read_X #Right = 200 Left = self. Read_X - New_X #Left = -200
Sau đó, khi chúng tôi kiểm tra hướng:
Precision = 150if Right> Precision: # 200> 150 True Get_Rocker = DIR ['R'] elif Left> Precision: # -200> 150 False Get_Rocker = DIR ['L'] else: Get_Rocker = DIR ['NONE'] nếu Dir == Get_Rocker: trả về Đúng khác: trả về Sai
Bước 3: Hiển thị bộ đệm
Lớp DisplayBuf chịu trách nhiệm điều khiển màn hình LED. Nó được thực hiện bằng hai phương thức set () và render (). Phương thức set () thay đổi các giá trị tương ứng với các pixel màn hình LED. Bạn có thể nhớ rằng các pixel trên màn hình LED Micro: bit có thể được biểu thị dưới dạng chuỗi hoặc danh sách - "00000: 00000: 00000: 00000: 00000" là màn hình trống. "00000: 00000: 00000: 00000: 00100" là màn hình có pixel thiếu sáng ở chính giữa hàng dưới cùng.
00000:
00000
:00000
:00000:
00100"
Ký hiệu này có thể dễ dàng hơn để xử lý:)
Vì vậy, những gì chúng tôi làm trong vòng lặp chính là gọi phương thức set () của DisplayBuf để thiết lập tất cả các đối tượng của chúng tôi cần được hiển thị trên màn hình. Sau đó, chúng tôi sử dụng phương thức render () để thực sự hiển thị tất cả chúng trên màn hình cùng một lúc.
Bước 4: Kẻ xâm lược, Bullets và người chơi
Bullets and Invaders thuộc lớp Mover. Các cá thể của lớp Mover có vị trí x, y và tốc độ, cũng như độ sáng. Lớp Mover có hai phương thức thể hiện, set () và move (). Phương thức set () chỉ đơn giản gọi phương thức DisplayBuf set () với các tọa độ được cập nhật để lưu lại cho việc hiển thị sau này trên ma trận LED. Phương thức move () cập nhật tọa độ phiên bản theo tốc độ phiên bản - điều này rất hữu ích sau này, khi chúng ta cần thay đổi tốc độ của những kẻ xâm lược khi các cấp độ tiến triển.
Class Bullet và class Invader là các lớp con của lớp Mover. Ở đây chúng tôi sử dụng một thứ gọi là kế thừa. Chức năng của super () cho phép chúng ta gọi các phương thức của lớp cha trong lớp con mà không cần lặp lại mã.
Bước 5: Biến nó thành của riêng bạn
Xin chúc mừng! Bạn vừa tạo lại trò chơi Space Invaders cổ điển trên Micro: bit với một số phần cứng chơi game thú vị. Tất nhiên, bạn có thể cải thiện mã trò chơi từ đây - ví dụ: hiện tại, trò chơi chỉ có một cấp độ - bạn có thể thêm nhiều cấp độ thử thách hơn. Ngoài ra, như bạn có thể nhớ lại, trò chơi gốc có những tảng đá nổi trước mặt người chơi, bạn cũng có thể thêm đá vào.
Nếu bạn thực hiện một phiên bản cải tiến của trò chơi, hãy chia sẻ nó trong phần bình luận bên dưới! Để biết thêm thông tin về BitPlayer và các phần cứng khác dành cho các nhà sản xuất và giáo dục STEM, hãy truy cập trang web của chúng tôi, https://tinkergen.com/ và đăng ký nhận bản tin của chúng tôi.
TinkerGen gần đây đã tạo chiến dịch Kickstarter cho MARK (Make A Robot Kit), một bộ robot để dạy mã hóa, robot, AI!
Mã Micropython ban đầu từ hexkcd / micro-vaders, đã được thay đổi để hoạt động với TinkerGen BitPlayer.
Đề xuất:
Màn hình cây trồng trong nhà thông minh - Biết khi nào cây trồng của bạn cần tưới nước: 8 bước (có hình ảnh)
Máy theo dõi cây trồng trong nhà thông minh - Biết khi nào cây trồng của bạn cần tưới nước: Một vài tháng trước, tôi đã làm một que theo dõi độ ẩm của đất chạy bằng pin và có thể được gắn vào đất trong chậu cây trong nhà của bạn để cung cấp cho bạn một số thông tin hữu ích về đất mức độ ẩm và đèn LED nhấp nháy để cho bạn biết khi nào cần
Trồng nhiều rau diếp trong ít không gian hơn hoặc Trồng rau diếp trong không gian, (nhiều hơn hoặc ít hơn).: 10 bước
Trồng nhiều rau diếp hơn trong ít không gian hơn hoặc … Trồng rau diếp trong không gian, (Nhiều hơn hoặc ít hơn): Đây là bài dự thi chuyên nghiệp cho Cuộc thi trồng trọt ngoài Trái đất, được gửi thông qua Huấn luyện viên. Tôi không thể vui mừng hơn khi được thiết kế cho sản xuất cây trồng vũ trụ và đăng Tài liệu hướng dẫn đầu tiên của mình. Để bắt đầu, cuộc thi yêu cầu chúng tôi
MicroPython trên ESP8266 WeMos D1 Mini giá rẻ $ 3 để ghi nhật ký nhiệt độ gấp đôi, Wi-Fi và số liệu thống kê trên thiết bị di động: 4 bước
MicroPython trên ESP8266 WeMos D1 Mini giá rẻ $ 3 để ghi nhật ký nhiệt độ gấp đôi, Wi-Fi và thiết bị di động: Với chip / thiết bị ESP8266 giá rẻ nhỏ bé, bạn có thể ghi dữ liệu nhiệt độ bên ngoài, trong phòng, nhà kính, phòng thí nghiệm, phòng làm mát hoặc bất kỳ nơi nào khác hoàn toàn miễn phí. Ví dụ này, chúng tôi sẽ sử dụng để ghi nhiệt độ phòng làm mát, bên trong và bên ngoài
Cách Flash Firmware MicroPython trên Công tắc thông minh dựa trên Sonoff ESP8266: 3 bước (có Hình ảnh)
Cách Flash Firmware MicroPython trên Công tắc thông minh Sonoff dựa trên ESP8266: Sonoff là gì? Sonoff là dòng thiết bị dành cho Nhà thông minh do ITEAD phát triển. Một trong những thiết bị linh hoạt và rẻ tiền nhất từ dòng đó là Sonoff Basic và Sonoff Dual. Đây là các thiết bị chuyển mạch hỗ trợ Wi-Fi dựa trên một con chip tuyệt vời, ESP8266. Trong khi
Mặc trống: Đánh trống trong quần áo của bạn!: 7 bước
Drum Wear: Drums in Your Clothing !: Hãy nhìn những người đi xe buýt trong thành phố. Nhiều người trong số họ được cắm vào máy nghe nhạc của họ, gõ theo nhịp, giả vờ như họ có trống theo ý của họ. Bây giờ không cần phải giả vờ! Mòn trống mang đến cho những tay trống đầy tham vọng một khả năng di động hoàn toàn và