Hướng dẫn pygame python 3
Khi tôi bắt đầu học lập trình máy tính vào cuối thiên niên kỷ trước, tôi đã bị thúc đẩy bởi mong muốn viết trò chơi máy tính. Tôi đã cố gắng tìm ra cách viết trò chơi bằng mọi ngôn ngữ và trên mọi nền tảng mà tôi đã học, bao gồm cả Python. Đó là cách tôi phát hiện ra 7 và học cách sử dụng nó để viết trò chơi và các chương trình đồ họa khác. Vào thời điểm đó, tôi thực sự muốn có một đoạn trích về 7 Show
Đến cuối bài viết này, bạn sẽ có thể
Cuốn sách hướng dẫn này giả định rằng bạn đã có kiến thức cơ bản về viết chương trình Python, bao gồm các hàm do người dùng định nghĩa, nhập, vòng lặp và điều kiện. Bạn cũng nên làm quen với cách mở tệp trên nền tảng của mình. Hiểu biết cơ bản về Python hướng đối tượng cũng hữu ích. 7 hoạt động với hầu hết các phiên bản Python, nhưng Python 3. 6 được đề xuất và sử dụng trong suốt bài viết nàyCác bạn có thể lấy toàn bộ code trong bài viết này để làm theo Mã mẫu. Nhấp vào đây để tải xuống mã nguồn cho dự án mẫu PyGame được sử dụng trong hướng dẫn này Bối cảnh và thiết lập 7 là trình bao bọc Python cho thư viện SDL, viết tắt của Simple DirectMedia Layer. SDL cung cấp quyền truy cập đa nền tảng vào các thành phần phần cứng đa phương tiện cơ bản của hệ thống, chẳng hạn như âm thanh, video, chuột, bàn phím và cần điều khiển. 7 bắt đầu cuộc sống thay thế cho dự án PySDL bị đình trệ. Bản chất đa nền tảng của cả SDL và 7 có nghĩa là bạn có thể viết trò chơi và các chương trình Python đa phương tiện phong phú cho mọi nền tảng hỗ trợ chúngĐể cài đặt 7 trên nền tảng của bạn, hãy sử dụng lệnh 4 thích hợp________số 8 Bạn có thể xác minh cài đặt bằng cách tải một trong các ví dụ đi kèm với thư viện
Nếu cửa sổ trò chơi xuất hiện, nghĩa là 7 đã được cài đặt đúng cách. Nếu bạn gặp sự cố, hướng dẫn Bắt đầu sẽ phác thảo một số sự cố đã biết và lưu ý cho tất cả các nền tảngLoại bỏ các quảng cáoChương trình PyGame cơ bảnTrước khi đi vào chi tiết cụ thể, chúng ta hãy xem một chương trình 7 cơ bản. Chương trình này tạo một cửa sổ, tô nền bằng màu trắng và vẽ một vòng tròn màu xanh lam ở giữa cửa sổ đó 2Khi bạn chạy chương trình này, bạn sẽ thấy một cửa sổ giống như thế này Hãy chia nhỏ đoạn mã này, từng phần một
Đó là phiên bản 7 của “Xin chào, Thế giới. ” Bây giờ chúng ta hãy tìm hiểu sâu hơn một chút về các khái niệm đằng sau mã nàyKhái niệm PyGameVì 7 và thư viện SDL có thể di động trên các nền tảng và thiết bị khác nhau, nên cả hai đều cần xác định và làm việc với các phần trừu tượng cho các thực tế phần cứng khác nhau. Hiểu những khái niệm và trừu tượng đó sẽ giúp bạn thiết kế và phát triển trò chơi của riêng mìnhKhởi tạo và Mô-đunThư viện 7 bao gồm một số cấu trúc Python, bao gồm một số mô-đun khác nhau. Các mô-đun này cung cấp quyền truy cập trừu tượng vào phần cứng cụ thể trên hệ thống của bạn, cũng như các phương pháp thống nhất để làm việc với phần cứng đó. Ví dụ: 60 cho phép truy cập thống nhất vào màn hình video của bạn, trong khi 61 cho phép điều khiển trừu tượng cần điều khiển của bạnSau khi nhập thư viện 7 trong ví dụ trên, điều đầu tiên bạn làm là khởi tạo PyGame bằng cách sử dụng 63. Hàm này gọi các hàm 64 riêng biệt của tất cả các mô-đun 7 đi kèm. Vì các mô-đun này là phần trừu tượng cho phần cứng cụ thể nên bước khởi tạo này là bắt buộc để bạn có thể làm việc với cùng mã trên Linux, Windows và MacMàn hình và bề mặtNgoài các mô-đun, 7 cũng bao gồm một số lớp Python, gói gọn các khái niệm không phụ thuộc vào phần cứng. Một trong số đó là 67, ở mức cơ bản nhất, xác định một khu vực hình chữ nhật mà bạn có thể vẽ trên đó. 67 đối tượng được sử dụng trong nhiều ngữ cảnh trong 7. Sau đó, bạn sẽ thấy cách tải một hình ảnh vào 67 và hiển thị nó trên màn hìnhTrong 7, mọi thứ được xem trên một 60 do người dùng tạo, có thể là một cửa sổ hoặc toàn màn hình. Màn hình được tạo bằng cách sử dụng 93, trả về một 67 đại diện cho phần hiển thị của cửa sổ. Đây là 67 mà bạn chuyển vào các hàm vẽ như 96 và nội dung của 67 đó được đẩy lên màn hình khi bạn gọi 98Hình ảnh và RectsChương trình 7 cơ bản của bạn đã vẽ một hình trực tiếp lên màn hình 67, nhưng bạn cũng có thể làm việc với hình ảnh trên đĩa. Mô-đun 71 cho phép bạn tải và lưu hình ảnh ở nhiều định dạng phổ biến. Hình ảnh được tải vào đối tượng 67, sau đó có thể thao tác và hiển thị theo nhiều cáchNhư đã đề cập ở trên, các đối tượng của 67 được biểu diễn bằng hình chữ nhật, cũng như nhiều đối tượng khác trong 7, chẳng hạn như hình ảnh và cửa sổ. Hình chữ nhật được sử dụng nhiều đến mức có một lớp 75 đặc biệt chỉ để xử lý chúng. Bạn sẽ sử dụng 75 đối tượng và hình ảnh trong trò chơi của mình để thu hút người chơi và kẻ thù, đồng thời quản lý va chạm giữa họĐược rồi, đó là đủ lý thuyết. Hãy thiết kế và viết một trò chơi Loại bỏ các quảng cáoThiết kế trò chơi cơ bảnTrước khi bạn bắt đầu viết bất kỳ mã nào, bạn nên chuẩn bị sẵn một số thiết kế. Vì đây là một trò chơi hướng dẫn nên chúng ta cũng hãy thiết kế một số cách chơi cơ bản cho nó
Khi anh ấy mô tả các dự án phần mềm, một đồng nghiệp cũ của tôi thường nói, “Bạn không biết bạn làm gì cho đến khi bạn biết bạn không làm gì. ” Với ý nghĩ đó, đây là một số điều sẽ không được đề cập trong hướng dẫn này
Bạn có thể tự do thử thêm các tính năng này và các tính năng khác vào chương trình của riêng mình Bắt đầu nào Nhập và khởi tạo PyGameSau khi nhập 7, bạn cũng cần khởi tạo nó. Điều này cho phép 7 kết nối các phần tóm tắt của nó với phần cứng cụ thể của bạn
Thư viện 7 định nghĩa nhiều thứ ngoài các mô-đun và lớp. Nó cũng xác định một số hằng số cục bộ cho những thứ như tổ hợp phím, di chuyển chuột và thuộc tính hiển thị. Bạn tham khảo các hằng số này bằng cú pháp 70. Bằng cách nhập các hằng số cụ thể từ 71, bạn có thể sử dụng cú pháp 72 để thay thế. Điều này sẽ giúp bạn tiết kiệm một số lần nhấn phím và cải thiện khả năng đọc tổng thểThiết lập màn hìnhBây giờ bạn cần một cái gì đó để vẽ. Tạo một màn hình để trở thành canvas tổng thể
Bạn tạo màn hình để sử dụng bằng cách gọi 73 và chuyển một bộ hoặc danh sách có chiều rộng và chiều cao mong muốn. Trong trường hợp này, cửa sổ có kích thước 800x600, như được xác định bởi các hằng số 74 và 75 trên dòng 20 và 21. Điều này trả về một 67 đại diện cho kích thước bên trong của cửa sổ. Đây là phần cửa sổ bạn có thể kiểm soát, trong khi hệ điều hành kiểm soát viền cửa sổ và thanh tiêu đềNếu bạn chạy chương trình này ngay bây giờ, thì bạn sẽ thấy một cửa sổ bật lên trong thời gian ngắn và sau đó biến mất ngay lập tức khi chương trình thoát. Đừng chớp mắt hoặc bạn có thể bỏ lỡ nó. Trong phần tiếp theo, bạn sẽ tập trung vào vòng lặp trò chơi chính để đảm bảo rằng chương trình của bạn chỉ thoát khi được cung cấp đầu vào chính xác Thiết lập vòng lặp trò chơiMọi trò chơi từ Pong đến Fortnite đều sử dụng vòng lặp trò chơi để kiểm soát lối chơi. Vòng lặp trò chơi thực hiện bốn điều rất quan trọng
Mỗi chu kỳ của vòng lặp trò chơi được gọi là khung hình và bạn có thể thực hiện mọi việc càng nhanh trong mỗi chu kỳ, trò chơi của bạn sẽ chạy càng nhanh. Các khung hình tiếp tục xảy ra cho đến khi một số điều kiện để thoát khỏi trò chơi được đáp ứng. Trong thiết kế của bạn, có hai điều kiện có thể kết thúc vòng lặp trò chơi
Điều đầu tiên mà vòng lặp trò chơi thực hiện là xử lý đầu vào của người dùng để cho phép người chơi di chuyển quanh màn hình. Do đó, bạn cần một số cách để nắm bắt và xử lý nhiều loại đầu vào. Bạn làm điều này bằng cách sử dụng hệ thống sự kiện 7Loại bỏ các quảng cáoxử lý sự kiệnNhấn phím, di chuyển chuột và thậm chí cả di chuyển cần điều khiển là một số cách mà người dùng có thể cung cấp thông tin đầu vào. Tất cả kết quả đầu vào của người dùng trong một sự kiện được tạo. Các sự kiện có thể xảy ra bất cứ lúc nào và thường (nhưng không phải luôn luôn) bắt nguồn từ bên ngoài chương trình. Tất cả các sự kiện trong 7 được đặt trong hàng đợi sự kiện, sau đó có thể được truy cập và thao tác. Xử lý các sự kiện được gọi là xử lý chúng và mã để làm như vậy được gọi là trình xử lý sự kiệnMỗi sự kiện trong 7 có một loại sự kiện được liên kết với nó. Đối với trò chơi của bạn, các loại sự kiện bạn sẽ tập trung vào là nhấn phím và đóng cửa sổ. Các sự kiện nhấn phím có loại sự kiện 00 và sự kiện đóng cửa sổ có loại 01. Các loại sự kiện khác nhau cũng có thể có dữ liệu khác được liên kết với chúng. Ví dụ: loại sự kiện 00 cũng có một biến có tên là 03 để cho biết phím nào đã được nhấnBạn truy cập danh sách tất cả các sự kiện đang hoạt động trong hàng đợi bằng cách gọi 04. Sau đó, bạn lặp qua danh sách này, kiểm tra từng loại sự kiện và phản hồi tương ứng 6Hãy xem xét kỹ hơn về vòng lặp trò chơi này
Khi bạn thêm những dòng này vào mã trước đó và chạy nó, bạn sẽ thấy một cửa sổ có màn hình trống hoặc đen Cửa sổ sẽ không biến mất cho đến khi bạn nhấn phím Esc hoặc kích hoạt sự kiện 01 bằng cách đóng cửa sổ. Vẽ trên màn hìnhTrong chương trình mẫu, bạn đã vẽ trên màn hình bằng hai lệnh
Bây giờ bạn sẽ tìm hiểu về cách thứ ba để vẽ lên màn hình. sử dụng một 67Nhớ lại rằng 67 là một đối tượng hình chữ nhật mà bạn có thể vẽ trên đó, giống như một tờ giấy trắng. Đối tượng 62 là một 67 và bạn có thể tạo các đối tượng 67 của riêng mình tách biệt với màn hình hiển thị. Hãy xem nó hoạt động như thế nào 6Sau khi màn hình tràn ngập màu trắng ở dòng 45, một 67 mới được tạo ở dòng 48. 67 này rộng 50 pixel, cao 50 pixel và được gán cho 22. Tại thời điểm này, bạn coi nó giống như 62. Vì vậy, trên dòng, 51 bạn tô màu đen. Bạn cũng có thể truy cập vào 75 cơ bản của nó bằng cách sử dụng 25. Điều này được lưu trữ dưới dạng 26 để sử dụng sau nàySử dụng $ python3 -m pygame.examples.aliens 27 và $ python3 -m pygame.examples.aliens 28Chỉ tạo một 67 mới là không đủ để nhìn thấy nó trên màn hình. Để làm điều đó, bạn cần ghép ________ 267 vào một ________ 267 khác. Thuật ngữ 32 là viết tắt của Block Transfer và 27 là cách bạn sao chép nội dung của một 67 sang một 67 khác. Bạn chỉ có thể 27 từ một 67 này sang một 67 khác, nhưng vì màn hình chỉ là một 67 khác nên đó không phải là vấn đề. Đây là cách bạn vẽ 22 trên màn hình 9Cuộc gọi 27 trên dòng 55 có hai đối số
Tọa độ 42 yêu cầu chương trình của bạn đặt 22 ở chính giữa màn hình, nhưng nó không hoàn toàn giống như vậyLý do tại sao hình ảnh trông lệch tâm là vì 27 đặt góc trên cùng bên trái của 22 tại vị trí đã cho. Nếu bạn muốn đặt 22 ở giữa, thì bạn sẽ phải thực hiện một số phép toán để dịch chuyển nó lên trên và sang trái. Bạn có thể thực hiện việc này bằng cách lấy chiều rộng và chiều cao của màn hình trừ chiều rộng và chiều cao của 22, chia mỗi số cho 2 để xác định vị trí tâm, sau đó chuyển các số đó làm đối số cho 48 7Lưu ý cuộc gọi tới 98 sau cuộc gọi tới 50. Thao tác này cập nhật toàn bộ màn hình với mọi thứ được vẽ kể từ lần lật cuối cùng. Không có cuộc gọi đến 28, không có gì được hiển thịLoại bỏ các quảng cáoyêu tinhTrong thiết kế trò chơi của bạn, người chơi bắt đầu từ bên trái và chướng ngại vật đến từ bên phải. Bạn có thể biểu diễn tất cả các chướng ngại vật bằng các đối tượng 67 để giúp việc vẽ mọi thứ trở nên dễ dàng hơn, nhưng làm thế nào để bạn biết nên vẽ chúng ở đâu? Theo thuật ngữ lập trình, sprite là biểu diễn 2D của một thứ gì đó trên màn hình. Về cơ bản, đó là một bức tranh. 7 cung cấp một lớp 54, được thiết kế để chứa một hoặc một số biểu diễn đồ họa của bất kỳ đối tượng trò chơi nào mà bạn muốn hiển thị trên màn hình. Để sử dụng nó, bạn tạo một lớp mới mở rộng 54. Điều này cho phép bạn sử dụng các phương pháp tích hợp của nóngười chơiĐây là cách bạn sử dụng các đối tượng 54 với trò chơi hiện tại để xác định người chơi. Chèn mã này sau dòng 18 7Trước tiên, bạn xác định 57 bằng cách mở rộng 58 trên dòng 22. Sau đó, 59 sử dụng 60 để gọi phương thức 59 của 54. Để biết thêm thông tin về lý do tại sao điều này là cần thiết, bạn có thể đọc Supercharge Your Classes With Python super()Tiếp theo, bạn xác định và khởi tạo 63 để giữ hình ảnh hiển thị, hiện tại là một hộp màu trắng. Bạn cũng xác định và khởi tạo 64 mà bạn sẽ sử dụng để vẽ trình phát sau này. Để sử dụng lớp mới này, bạn cần tạo một đối tượng mới và thay đổi cả mã bản vẽ. Mở rộng khối mã bên dưới để xem tất cả cùng nhauMở rộng mã đầy đủHiển thị/Ẩn 0Chạy mã này. Bạn sẽ thấy một hình chữ nhật màu trắng ở khoảng giữa màn hình Bạn nghĩ điều gì sẽ xảy ra nếu bạn đổi dòng 59 thành 65? 1Khi bạn chuyển 75 đến 27, nó sẽ sử dụng tọa độ của góc trên cùng bên trái để vẽ bề mặt. Bạn sẽ sử dụng điều này sau để làm cho người chơi của bạn di chuyểnĐầu vào của người dùngCho đến giờ, bạn đã học cách thiết lập 7 và vẽ các đối tượng trên màn hình. Bây giờ, niềm vui thực sự bắt đầu. Bạn sẽ làm cho trình phát có thể điều khiển được bằng bàn phímTrước đó, bạn đã thấy rằng 04 trả về một danh sách các sự kiện trong hàng đợi sự kiện, danh sách này bạn sẽ quét các loại sự kiện của 00. Chà, đó không phải là cách duy nhất để đọc các lần nhấn phím. 7 cũng cung cấp 72, trả về một từ điển chứa tất cả các sự kiện 00 hiện tại trong hàng đợiĐặt cái này vào vòng lặp trò chơi của bạn ngay sau vòng xử lý sự kiện. Điều này trả về một từ điển chứa các phím được nhấn ở đầu mỗi khung 2Tiếp theo, bạn viết một phương thức trong 57 để chấp nhận từ điển đó. Điều này sẽ xác định hành vi của sprite dựa trên các phím được nhấn. Đây là những gì có thể trông giống như 3 75, 76, 77, và 78 tương ứng với các phím mũi tên trên bàn phím. Nếu mục nhập từ điển cho phím đó là 79, thì phím đó sẽ bị hỏng và bạn di chuyển trình phát 64 theo hướng thích hợp. Ở đây bạn sử dụng 81, viết tắt của di chuyển tại chỗ, để di chuyển 75 hiện tạiSau đó, bạn có thể gọi 83 mọi khung hình để di chuyển sprite của trình phát để phản hồi lại các lần nhấn phím. Thêm cuộc gọi này ngay sau cuộc gọi tới 84 4Giờ đây, bạn có thể di chuyển hình chữ nhật của trình phát xung quanh màn hình bằng các phím mũi tên Bạn có thể nhận thấy hai vấn đề nhỏ
Để giữ trình phát trên màn hình, bạn cần thêm một số logic để phát hiện xem 26 có di chuyển khỏi màn hình không. Để làm được điều đó, bạn kiểm tra xem tọa độ 26 đã di chuyển ra ngoài ranh giới của màn hình chưa. Nếu vậy thì bạn hướng dẫn chương trình di chuyển nó trở lại cạnh 5Tại đây, thay vì sử dụng 87, bạn chỉ cần thay đổi trực tiếp tọa độ tương ứng của 88, 89, 90, hoặc 91. Kiểm tra điều này và bạn sẽ thấy hình chữ nhật của trình phát không thể di chuyển ra khỏi màn hình nữaBây giờ hãy thêm một số kẻ thù Loại bỏ các quảng cáokẻ thùTrò chơi không có kẻ thù là gì? . Đầu tiên, nhập thư viện 92 6Sau đó, tạo một lớp sprite mới có tên là 93, theo cùng mẫu mà bạn đã sử dụng cho 57 7Có bốn sự khác biệt đáng chú ý giữa 93 và 57
Vậy, 204 làm gì? Nhóm SpriteMột lớp siêu hữu ích khác mà 7 cung cấp là 207. Đây là một đối tượng chứa một nhóm các đối tượng 54. Vậy tại sao lại sử dụng nó? . Các phương pháp này giúp phát hiện xem có bất kỳ 93 nào đã va chạm với 57 hay không, điều này giúp cho việc cập nhật dễ dàng hơn nhiềuHãy xem cách tạo các nhóm sprite. Bạn sẽ tạo hai đối tượng 210 khác nhau
Đây là những gì trông giống như trong mã 8Khi bạn gọi cho 204, 54 sẽ bị xóa khỏi mọi 210 mà nó thuộc về. Điều này cũng loại bỏ các tham chiếu đến 54, cho phép trình thu gom rác của Python lấy lại bộ nhớ khi cần thiếtBây giờ bạn có một nhóm 222, bạn có thể thay đổi cách các đối tượng được vẽ. Thay vì chỉ gọi 27 trên 57, bạn có thể lặp lại mọi thứ trong 222 9Bây giờ, bất cứ thứ gì được đưa vào 222 sẽ được vẽ với mọi khung hình, cho dù đó là kẻ thù hay người chơiChỉ có một vấn đề… Bạn không có bất kỳ kẻ thù nào. Bạn có thể tạo ra một loạt kẻ thù khi bắt đầu trò chơi, nhưng trò chơi sẽ nhanh chóng trở nên nhàm chán khi tất cả chúng đều rời khỏi màn hình sau đó vài giây. Thay vào đó, hãy khám phá cách duy trì nguồn cung kẻ thù ổn định khi trò chơi tiếp diễn Sự kiện tùy chỉnhThiết kế kêu gọi kẻ thù xuất hiện đều đặn. Điều này có nghĩa là tại các khoảng thời gian đã đặt, bạn cần thực hiện hai việc
Bạn đã có mã xử lý các sự kiện ngẫu nhiên. Vòng lặp sự kiện được thiết kế để tìm kiếm các sự kiện ngẫu nhiên xảy ra trong mọi khung hình và xử lý chúng một cách thích hợp. May mắn thay, 7 không hạn chế bạn chỉ sử dụng các loại sự kiện mà nó đã xác định. Bạn có thể xác định các sự kiện của riêng mình để xử lý khi bạn thấy phù hợpHãy xem cách tạo sự kiện tùy chỉnh được tạo vài giây một lần. Bạn có thể tạo một sự kiện tùy chỉnh bằng cách đặt tên cho nó 20 7 xác định các sự kiện bên trong dưới dạng số nguyên, vì vậy bạn cần xác định một sự kiện mới với một số nguyên duy nhất. Sự kiện cuối cùng của 7 dự trữ được gọi là 233, vì vậy việc xác định 234 trên dòng 83 đảm bảo nó là duy nhấtTiếp theo, bạn cần chèn sự kiện mới này vào hàng đợi sự kiện đều đặn trong suốt trò chơi. Đó là nơi mô-đun 235 xuất hiện. Dòng 84 kích hoạt sự kiện 236 mới cứ sau 250 mili giây hoặc bốn lần mỗi giây. Bạn gọi 237 bên ngoài vòng lặp trò chơi vì bạn chỉ cần một đồng hồ bấm giờ, nhưng nó sẽ kích hoạt trong suốt trò chơiThêm mã để xử lý sự kiện mới của bạn 21Bất cứ khi nào trình xử lý sự kiện nhìn thấy sự kiện 236 mới trên dòng 115, nó sẽ tạo một 93 và thêm nó vào 229 và 222. Vì 93 nằm trong 222 nên nó sẽ được vẽ ở mọi khung hình. Bạn cũng cần gọi cho 244 trên đường dây 126, cập nhật mọi thứ trong 229, để đảm bảo chúng di chuyển đúng cáchTuy nhiên, đó không phải là lý do duy nhất có một nhóm chỉ dành cho 229Loại bỏ các quảng cáoPhát hiện va chạmThiết kế trò chơi của bạn yêu cầu trò chơi kết thúc bất cứ khi nào kẻ thù va chạm với người chơi. Kiểm tra va chạm là một kỹ thuật cơ bản của lập trình trò chơi và thường yêu cầu một số phép toán không tầm thường để xác định xem hai họa tiết có chồng lên nhau hay không Đây là lúc một khung như 7 có ích. Viết mã phát hiện va chạm rất tẻ nhạt, nhưng 7 có RẤT NHIỀU phương pháp phát hiện va chạm để bạn sử dụngĐối với hướng dẫn này, bạn sẽ sử dụng một phương thức có tên là 249, được đọc là “sprite va chạm bất kỳ. ” Phương thức này chấp nhận một 54 và một 210 làm tham số. Nó xem xét mọi đối tượng trong 210 và kiểm tra xem 64 của nó có giao nhau với 64 của 54 không. Nếu vậy, thì nó trả về 79. Nếu không, nó sẽ trả về 257. Điều này là hoàn hảo cho trò chơi này vì bạn cần kiểm tra xem một 258 duy nhất có va chạm với một trong số 210 của 229 khôngĐây là những gì trông giống như trong mã 22Dòng 135 kiểm tra xem 258 có va chạm với bất kỳ đối tượng nào trong 229 không. Nếu vậy, thì 263 được gọi để xóa nó khỏi mọi nhóm mà nó thuộc về. Vì các đối tượng duy nhất được hiển thị là trong 222, nên 258 sẽ không còn được hiển thị nữa. Khi người chơi đã bị giết, bạn cũng cần thoát khỏi trò chơi, vì vậy bạn đặt 05 để thoát khỏi vòng lặp trò chơi ở dòng 138Tại thời điểm này, bạn đã có các yếu tố cơ bản của một trò chơi Bây giờ, hãy chỉnh sửa một chút, làm cho nó dễ chơi hơn và thêm một số khả năng nâng cao để giúp nó nổi bật Hình ảnh SpriteĐược rồi, bạn có một trò chơi, nhưng hãy thành thật mà nói.. Nó hơi xấu. Người chơi và kẻ thù chỉ là những khối màu trắng trên nền đen. Đó là công nghệ tiên tiến nhất khi Pong còn mới, nhưng nó không còn hiệu quả nữa. Hãy thay thế tất cả những hình chữ nhật màu trắng nhàm chán đó bằng một số hình ảnh thú vị hơn sẽ khiến trò chơi giống như một trò chơi thực sự Trước đó, bạn đã biết rằng hình ảnh trên đĩa có thể được tải vào 67 với một số trợ giúp từ mô-đun 71. Đối với hướng dẫn này, chúng tôi đã tạo ra một máy bay phản lực nhỏ cho người chơi và một số tên lửa cho kẻ thù. Bạn có thể sử dụng tác phẩm nghệ thuật này, vẽ tác phẩm của riêng mình hoặc tải xuống một số nội dung nghệ thuật trò chơi miễn phí để sử dụng. Bạn có thể nhấp vào liên kết bên dưới để tải xuống nghệ thuật được sử dụng trong hướng dẫn nàyMã mẫu. Nhấp vào đây để tải xuống mã nguồn cho dự án mẫu PyGame được sử dụng trong hướng dẫn này Thay đổi Trình tạo đối tượngTrước khi bạn sử dụng hình ảnh để đại diện cho người chơi và kẻ thù, bạn cần thực hiện một số thay đổi đối với hàm tạo của chúng. Mã bên dưới thay thế mã được sử dụng trước đó 23Hãy giải nén dòng 31 một chút. 269 tải một hình ảnh từ đĩa. Bạn truyền cho nó một đường dẫn đến tệp. Nó trả về một 67 và cuộc gọi 271 tối ưu hóa 67, giúp các cuộc gọi 27 trong tương lai nhanh hơnDòng 32 sử dụng 274 để biểu thị màu 7 sẽ hiển thị trong suốt. Trong trường hợp này bạn chọn màu trắng vì đó là màu nền của hình ảnh máy bay phản lực. Hằng số RLEACCEL là một tham số tùy chọn giúp 7 hiển thị nhanh hơn trên màn hình không tăng tốc. Điều này được thêm vào tuyên bố nhập khẩu 71 trên dòng 11Không có gì khác cần phải thay đổi. Hình ảnh vẫn là một 67, ngoại trừ bây giờ nó có một bức tranh được vẽ trên đó. Bạn vẫn sử dụng nó theo cách cũĐây là những thay đổi tương tự đối với 93 trông như thế nào 24Chạy chương trình bây giờ sẽ hiển thị rằng đây là cùng một trò chơi mà bạn đã có trước đây, ngoại trừ bây giờ bạn đã thêm một số giao diện đồ họa đẹp mắt với hình ảnh. Nhưng tại sao chỉ dừng lại ở việc làm cho người chơi và kẻ thù trông đẹp mắt? Loại bỏ các quảng cáoThêm hình nềnĐối với các đám mây nền, bạn sử dụng các nguyên tắc giống như bạn đã làm cho 57 và 93
Đây là những gì 282 trông giống như 25Điều đó tất cả nên trông rất quen thuộc. Nó khá giống với 93Để các đám mây xuất hiện ở những khoảng thời gian nhất định, bạn sẽ sử dụng mã tạo sự kiện tương tự như mã bạn đã sử dụng để tạo kẻ thù mới. Đặt nó ngay bên dưới sự kiện tạo kẻ thù 26Điều này nói rằng hãy đợi 1000 mili giây hoặc một giây trước khi tạo 284 tiếp theoTiếp theo, tạo một 210 mới để giữ từng 284 mới được tạo 27Tiếp theo, thêm trình xử lý cho sự kiện 295 mới trong trình xử lý sự kiện 28Cuối cùng, đảm bảo rằng 288 được cập nhật mọi khung hình 29Dòng 172 cập nhật bản gốc 60 để lấp đầy màn hình với màu xanh da trời dễ chịu. Bạn có thể thay đổi màu này thành màu khác. Có thể bạn muốn một thế giới xa lạ với bầu trời màu tím, vùng đất hoang độc hại có màu xanh neon hoặc bề mặt sao Hỏa có màu đỏLưu ý rằng mỗi 282 và 93 mới được thêm vào 222 cũng như 288 và 229. Điều này được thực hiện bởi vì mỗi nhóm được sử dụng cho một mục đích riêng biệt
Bạn tạo nhiều nhóm để bạn có thể thay đổi cách di chuyển hoặc hành vi của các nhân vật mà không ảnh hưởng đến chuyển động hoặc hành vi của các nhân vật khác Tốc độ trò chơiTrong khi thử nghiệm trò chơi, bạn có thể nhận thấy rằng kẻ thù di chuyển hơi nhanh. Nếu không, thì không sao, vì các máy khác nhau sẽ thấy các kết quả khác nhau tại thời điểm này Lý do cho điều này là vòng lặp trò chơi xử lý khung hình nhanh như bộ xử lý và môi trường sẽ cho phép. Vì tất cả các họa tiết di chuyển một lần trên mỗi khung hình nên chúng có thể di chuyển hàng trăm lần mỗi giây. Số lượng khung hình được xử lý mỗi giây được gọi là tốc độ khung hình và hiểu đúng điều này là sự khác biệt giữa một trò chơi có thể chơi được và một trò chơi đáng quên Thông thường, bạn muốn tốc độ khung hình càng cao càng tốt, nhưng với trò chơi này, bạn cần giảm tốc độ xuống một chút để trò chơi có thể chơi được. May mắn thay, mô-đun 235 chứa một 08 được thiết kế chính xác cho mục đích nàySử dụng 08 để thiết lập tốc độ khung hình có thể phát chỉ cần hai dòng mã. Đầu tiên tạo một 08 mới trước khi vòng lặp trò chơi bắt đầu 0Cuộc gọi thứ hai 11 để thông báo cho 7 rằng chương trình đã đi đến cuối khung 1Đối số được chuyển đến 11 thiết lập tốc độ khung hình mong muốn. Để thực hiện điều này, 11 tính toán số mili giây mà mỗi khung hình cần, dựa trên tốc độ khung hình mong muốn. Sau đó, nó so sánh số đó với số mili giây đã trôi qua kể từ lần cuối cùng 11 được gọi. Nếu không đủ thời gian trôi qua, thì 11 sẽ trì hoãn quá trình xử lý để đảm bảo rằng nó không bao giờ vượt quá tốc độ khung hình đã chỉ địnhChuyển sang tốc độ khung hình nhỏ hơn sẽ dẫn đến nhiều thời gian hơn trong mỗi khung hình để tính toán, trong khi tốc độ khung hình lớn hơn giúp chơi trò chơi mượt mà hơn (và có thể nhanh hơn) Chơi xung quanh với con số này để xem những gì cảm thấy tốt nhất cho bạn Loại bỏ các quảng cáoHiệu ứng âm thanhCho đến nay, bạn đã tập trung vào lối chơi và các khía cạnh hình ảnh của trò chơi của mình. Bây giờ, hãy cùng khám phá việc mang lại cho trò chơi của bạn một số hương vị thính giác. 7 cung cấp cho 18 để xử lý tất cả các hoạt động liên quan đến âm thanh. Bạn sẽ sử dụng các lớp và phương thức của mô-đun này để cung cấp nhạc nền và hiệu ứng âm thanh cho các hành động khác nhauCái tên 18 đề cập đến thực tế là mô-đun trộn nhiều âm thanh khác nhau thành một tổng thể gắn kết. Sử dụng mô-đun phụ 20, bạn có thể truyền các tệp âm thanh riêng lẻ ở nhiều định dạng khác nhau, chẳng hạn như MP3, Ogg và Mod. Bạn cũng có thể sử dụng 21 để giữ một hiệu ứng âm thanh sẽ được phát, ở định dạng Ogg hoặc WAV không nén. Tất cả quá trình phát lại diễn ra ở chế độ nền, vì vậy khi bạn phát 21, phương thức này sẽ trả về ngay lập tức khi âm thanh phátGhi chú. Tài liệu 7 nói rằng hỗ trợ MP3 bị hạn chế và các định dạng không được hỗ trợ có thể gây ra sự cố hệ thống. Âm thanh tham chiếu trong bài viết này đã được kiểm tra và chúng tôi khuyên bạn nên kiểm tra kỹ mọi âm thanh trước khi phát hành trò chơi của mìnhNhư với hầu hết mọi thứ 7, việc sử dụng 18 bắt đầu bằng bước khởi tạo. May mắn thay, điều này đã được xử lý bởi 63. Bạn chỉ cần gọi 27 nếu bạn muốn thay đổi giá trị mặc định 2 27 chấp nhận một số đối số, nhưng giá trị mặc định hoạt động tốt trong hầu hết các trường hợp. Lưu ý rằng nếu bạn muốn thay đổi mặc định, bạn cần gọi cho 27 trước khi gọi cho 63. Nếu không, các giá trị mặc định sẽ có hiệu lực bất kể thay đổi của bạnSau khi hệ thống được khởi tạo, bạn có thể thiết lập âm thanh và nhạc nền của mình 3Dòng 138 và 139 tải một đoạn âm thanh nền và bắt đầu phát nó. Bạn có thể yêu cầu clip âm thanh lặp lại và không bao giờ kết thúc bằng cách đặt tham số có tên là 31Dòng 143 đến 145 tải ba âm thanh bạn sẽ sử dụng cho các hiệu ứng âm thanh khác nhau. Hai âm thanh đầu tiên là âm thanh tăng và giảm, được phát khi người chơi di chuyển lên hoặc xuống. Cuối cùng là âm thanh được sử dụng mỗi khi có va chạm. Bạn cũng có thể thêm các âm thanh khác, chẳng hạn như âm thanh khi một 93 được tạo hoặc âm thanh cuối cùng khi trò chơi kết thúcVì vậy, làm thế nào để bạn sử dụng các hiệu ứng âm thanh? . Ví dụ, khi con tàu di chuyển lên, bạn muốn chơi trò chơi 33. Do đó, bạn thêm một cuộc gọi đến 34 bất cứ khi nào bạn xử lý sự kiện đó. Trong thiết kế, điều đó có nghĩa là thêm các cuộc gọi sau vào 83 cho 57 4Đối với va chạm giữa người chơi và kẻ thù, bạn phát âm thanh khi phát hiện va chạm 5Tại đây, trước tiên bạn dừng bất kỳ hiệu ứng âm thanh nào khác, vì khi va chạm, trình phát không còn di chuyển nữa. Sau đó, bạn phát âm thanh va chạm và tiếp tục thực hiện từ đó Cuối cùng, khi trò chơi kết thúc, tất cả âm thanh sẽ dừng lại. Điều này đúng cho dù trò chơi kết thúc do va chạm hay người dùng thoát theo cách thủ công. Để thực hiện việc này, hãy thêm các dòng sau vào cuối chương trình sau vòng lặp 6Về mặt kỹ thuật, những dòng cuối cùng này không bắt buộc, vì chương trình kết thúc ngay sau đó. Tuy nhiên, nếu sau này bạn quyết định thêm màn hình giới thiệu hoặc màn hình thoát vào trò chơi của mình, thì có thể sẽ có nhiều mã chạy hơn sau khi trò chơi kết thúc Đó là nó. Kiểm tra lại, và bạn sẽ thấy một cái gì đó như thế này Lưu ý về nguồnBạn có thể nhận thấy nhận xét trên các dòng 136-137 khi nhạc nền được tải, liệt kê nguồn nhạc và liên kết đến giấy phép Creative Commons. Điều này đã được thực hiện bởi vì người tạo ra âm thanh đó yêu cầu nó. Các yêu cầu về giấy phép nêu rõ rằng để sử dụng âm thanh, phải cung cấp cả ghi nhận tác giả phù hợp và liên kết đến giấy phép Dưới đây là một số nguồn âm nhạc, âm thanh và nghệ thuật mà bạn có thể tìm kiếm nội dung hữu ích
Khi bạn tạo trò chơi của mình và sử dụng nội dung đã tải xuống như tác phẩm nghệ thuật, âm nhạc hoặc mã từ các nguồn khác, vui lòng đảm bảo rằng bạn tuân thủ các điều khoản cấp phép của các nguồn đó Sự kết luậnXuyên suốt hướng dẫn này, bạn đã học cách lập trình trò chơi với 7 khác với lập trình thủ tục tiêu chuẩn. Bạn cũng đã học cách
Để thực hiện điều này, bạn đã sử dụng một tập hợp con của các mô-đun 7, bao gồm các mô-đun 60, 18 và 20, 235, 71, 44 và 03. Bạn cũng đã sử dụng một số lớp 7, bao gồm 75, 67, 21 và 54. Nhưng những điều này chỉ làm trầy xước bề mặt của những gì 7 có thể làm. Kiểm tra tài liệu chính thức của 7 để biết danh sách đầy đủ các mô-đun và lớp có sẵnBạn có thể tìm thấy tất cả các tệp mã, đồ họa và âm thanh cho bài viết này bằng cách nhấp vào liên kết bên dưới Mã mẫu. Nhấp vào đây để tải xuống mã nguồn cho dự án mẫu PyGame được sử dụng trong hướng dẫn này Hãy để lại ý kiến dưới đây là tốt. Python hạnh phúc Đánh dấu là đã hoàn thành Xem ngay Hướng dẫn này có một khóa học video liên quan do nhóm Real Python tạo. Xem nó cùng với hướng dẫn bằng văn bản để hiểu sâu hơn. Tạo trò chơi cuộn bên 2D với PyGame 🐍 Thủ thuật Python 💌 Nhận một Thủ thuật Python ngắn và hấp dẫn được gửi đến hộp thư đến của bạn vài ngày một lần. Không có thư rác bao giờ. Hủy đăng ký bất cứ lúc nào. Được quản lý bởi nhóm Real Python Gửi cho tôi thủ thuật Python » Giới thiệu về Jon Fincher Jon đã dạy Python và Java tại hai trường trung học ở Bang Washington. Trước đây, ông là Giám đốc Chương trình tại Microsoft » Thông tin thêm về JonMỗi hướng dẫn tại Real Python được tạo bởi một nhóm các nhà phát triển để nó đáp ứng các tiêu chuẩn chất lượng cao của chúng tôi. Các thành viên trong nhóm đã làm việc trong hướng dẫn này là Alex Aldren Christopher Geir Arne Jaya Joanna Bậc thầy Kỹ năng Python trong thế giới thực Với quyền truy cập không giới hạn vào Python thực Tham gia với chúng tôi và có quyền truy cập vào hàng nghìn hướng dẫn, khóa học video thực hành và cộng đồng các Pythonistas chuyên gia Nâng cao kỹ năng Python của bạn » Bậc thầy Kỹ năng Python trong thế giới thực Tham gia với chúng tôi và có quyền truy cập vào hàng ngàn hướng dẫn, khóa học video thực hành và cộng đồng Pythonistas chuyên gia Nâng cao kỹ năng Python của bạn » Bạn nghĩ sao? Đánh giá bài viết này Tweet Chia sẻ Chia sẻ EmailBài học số 1 hoặc điều yêu thích mà bạn đã học được là gì? Mẹo bình luận. Những nhận xét hữu ích nhất là những nhận xét được viết với mục đích học hỏi hoặc giúp đỡ các sinh viên khác. Nhận các mẹo để đặt câu hỏi hay và nhận câu trả lời cho các câu hỏi phổ biến trong cổng thông tin hỗ trợ của chúng tôi |