Tạo một sự kính trọng cho Excitebike bằng Python

Tạo một sự kính trọng cho Excitebike bằng Python

Excitebike là một trò chơi di chuyển bên trong đó bạn điều hướng một chiếc xe máy vượt qua các bước nhảy, di chuyển xung quanh chướng ngại vật và tăng tốc về đích.





Nintendo lần đầu tiên ra mắt trò chơi đua xe BMX này cho NES. Từ đó, công ty đã hiện đại hóa Excitebike và phát hành nó trên N64 và cuối cùng là Wii.





Không còn nhiều máy chơi game NES tồn tại nữa, điều này khiến cho việc chơi Excitebike trở lại rất khó bắt đầu. Cảm ơn một số người hâm mộ retro tại Tạp chí Wireframe, một đoạn mã Python có thể tạo lại phiên bản NES cổ điển này trong nhiều giờ vui vẻ trên Raspberry Pi hoặc PC tại nhà của bạn.





LÀM VIDEO TRONG NGÀY

Lấy mã và thiết lập

Mặc dù bạn có thể sử dụng nano hoặc vim để chỉnh sửa mã python của mình, nhưng bạn sẽ muốn tận dụng lợi thế của một tính năng đầy đủ trình soạn thảo văn bản hoặc IDE .

Bạn sẽ cần cài đặt Pygame Zero để hỗ trợ các tính năng được xây dựng trong sự tôn kính này đối với Excitebike. Pygame Zero chứa các mô-đun Python để người tạo trò chơi tập trung mà không cần phải lặp lại các nền tảng đơn giản.



Nếu bạn chưa cài đặt python3 trên PC của mình, bạn có thể tải xuống phiên bản mới nhất trực tiếp từ Python. Bạn cũng sẽ muốn đảm bảo rằng bạn đã cài đặt PIP cũng vậy.

Với phiên bản Python và PIP mới nhất được cài đặt, hãy mở thiết bị đầu cuối PowerShell hoặc Linux của bạn và nhập:





pip3 install pgzero 

Cuối cùng, bạn sẽ cần lấy một bản sao của mã Python từ kho lưu trữ GitHub của tạp chí Wireframe. Nhập lệnh sau vào một thiết bị đầu cuối:

git clone https://github.com/Wireframe-Magazine/Wireframe-66.git

Ngoài ra, bạn có thể tải xuống mã nén trực tiếp từ trang Wireframe GitHub.





Phá vỡ quy tắc

Để hiểu mã hoạt động, trước tiên hãy chạy trò chơi Excitebike. Làm như vậy bằng cách điều hướng đến mã nguồn và sau đó chạy nó bằng Pygame Zero:

những thứ cần gỡ cài đặt khỏi windows 10
cd Wireframe-66/source-code-excitebike/ 
pgzrun exitebike.py

Sau đó, bạn có thể mở tệp exitebike.py bằng trình soạn thảo văn bản để xem mã.

  Đoạn mã python kích thích

Các vẽ tranh chức năng vẽ nền khi hình ảnh chiếc xe đạp di chuyển. MỘT ' ở lại 'đề cập đến một khối được vẽ trên màn hình. Từ,' lai lịch,' đề cập đến hình ảnh nền (liên kết các hình ảnh với khối nền là nhờ các mô-đun Pygame Zero đã nhập).

def draw(): 
screen.blit("background", (0, 0))
drawTrack()
bike.draw()
screen.draw.text("LAP TIME: "+str(int(time.time() - startTime)), (20, 555),color=(255,255,255) , fontsize=50)
screen.draw.text("LAST LAP: "+str(lastLap), topright = (780, 555),color=(255,255,255) , fontsize=50)

Bạn cũng sẽ nhận thấy các tính toán cho thời gian vòng chạy và vòng cuối cùng (điều này được thể hiện bằng bộ đếm thời gian ở cuối màn hình). Thời gian vòng chạy liên tục tính toán sự khác biệt giữa lần nhấn phím mũi tên phải ban đầu (thời gian bắt đầu) và thời gian hiện tại.

Vòng cuối cùng là một phép tính tương tự. Thay vì thời gian bắt đầu, thời gian được tính từ khi xe máy vượt qua vị trí đường định sẵn (được đề cập là trackPos <-4800 trong mã). Các mục dưới đây trong dấu ngoặc kép đại diện cho một hình ảnh.

Mã này vẽ các khối hình ảnh trên màn hình theo những khoảng thời gian nhất định và các vị trí cụ thể trên màn hình. Hình ảnh đám đông được cung cấp chỉ có chiều rộng 100px. Tuy nhiên, đoạn mã dưới đây cho máy tính biết thời điểm vẽ hình ảnh để nó xuất hiện như thể có một đám đông mô phỏng phía sau xe máy khi nó di chuyển.

Hình ảnh tảng đá được hiển thị trên màn hình thành hai phần. Dòng mã thứ hai và thứ ba, bên dưới, hoạt động cùng nhau để mô phỏng phong cảnh một cách gọn gàng.

Sau khi bạn tạo bản sao dự phòng của mã python, hãy thử thay đổi các số bên dưới để xem điều gì xảy ra với những tảng đá trên màn hình!

screen.blit("crowd1", ((t*100)+trackOffset-100, 0)) 
screen.blit("rock1", ((t*100)+trackOffset-100, 270))
screen.blit("rock1", ((t*100)+trackOffset-50, 270))

Bạn muốn thay thế xe máy của mình bằng một chiếc xe tải Monster, xe bốn bánh, hoặc một loại xe khác? Có lẽ bạn muốn đua một con kỳ lân về đích?

Tất cả những gì bạn cần làm là vẽ một hình ảnh 50x50px (với nền trong suốt). Sau đó, đặt tệp này (picture.png) vào ' hình ảnh thư mục '(trong mã nguồn-kích thích thư mục). Bạn sẽ muốn tạo hai hình ảnh (một hình có chiều cao tăng lên một chút) để thêm phần chân thực. Tất cả những gì bạn cần làm là thay đổi tham chiếu thành ' làm đi nơi đây:

bike = Actor('bike0', center=(150, 350), anchor=('center', 'bottom'))
  trò chơi trăn kích thích với xe tải

Ngoài ra, hãy đảm bảo thực hiện hành động tìm và thay thế với tên của ảnh (không có phần mở rộng hình ảnh).

checkBikeRamp () là hàm thực hiện công việc tính toán trục Y để xe máy (hoặc xe tải) của bạn đi lên đoạn đường dốc (và nhận được một lượng không khí nghiêm trọng nếu bạn may mắn). Các keyboard.right keyboard.left các tham số được xác định trong cập nhật() hàm số.

Các bit mã này báo cho máy tính giảm tốc độ xe máy hoặc tăng tốc độ (tùy thuộc vào phím người dùng nhấn trên bàn phím). Dịch: Xe máy của bạn chuyển động càng nhanh thì số trục Y càng cao (hoặc bước nhảy rất lớn).

Ngược lại, on_key_down (key) chức năng sẽ gửi xe máy của bạn vào một mũi.

if key.name == "DOWN": 
bike.direction = 1
bike.laneY = limit(bike.laneY + 50, 375, 525)
bike.y += bike.direction

Các muckLane tham số sẽ làm chậm xe máy của bạn bằng cách sử dụng phép tính sau:

tôi có thể ghi âm cuộc gọi điện thoại trên iphone không
muckLane = int((bike.laneY-375)/50)+1

Dòng 66 của mã xác định thời điểm hiển thị hình ảnh 'muck' trên màn hình. Bây giờ máy tính đã biết khi nào xe máy của bạn sẽ vượt qua đoạn đường, nó sẽ giảm tốc độ xe máy của bạn một nửa khi bạn di chuyển qua đoạn đường này. Thay đổi giá trị muckLane từ / 50 thành / 25 hoặc / 75 để xem điều gì xảy ra tiếp theo.

Các tay đua (ahem, Lập trình viên Python)! Bắt đầu động cơ của bạn!

Ngay cả khi bạn không cảm thấy thoải mái khi lập trình sự tôn kính này với Excitebike từ đầu, thì mã này vẫn là một đoạn mồi tuyệt vời. Bằng cách điều chỉnh nó và nhận ra tác động trực quan của những thay đổi, bạn có thể học được rất nhiều điều. Bạn sẽ cố gắng thêm nhiều tính năng hoặc tay đua AI vào trò chơi của mình? Cứ liều thử đi!

Với một chút thực hành Python dưới thắt lưng của bạn, một ý tưởng khác để bạn thử là thêm các cấp độ khác nhau khi bạn vượt qua vạch đích sau 4 hoặc 5 lần. Ngoài ra, bạn có thể muốn thêm phần thưởng cho vị trí thứ nhất, thứ hai và thứ ba. Nếu bạn đang ở vị trí đầu tiên, hãy thêm tệp âm thanh cổ vũ đám đông! Có rất nhiều khả năng.

Khi bạn hài lòng với các cải tiến Excitebike của mình, tại sao không bắt tay vào tạo một trò chơi phiêu lưu văn bản? Có rất nhiều phần khác nhau đảm bảo bạn sẽ học được điều gì đó thú vị hàng giờ, hàng ngày hoặc thậm chí hàng tuần!