Hướng dẫn make game with python - làm game với python

Nội dung chính ShowShow

  • Bắt đầu: Cài đặt Python
  • Chạy mã python từ tệp
  • Thêm tài nguyên trò chơi
  • Bước 1: Xin chào Bunny
  • Bước 2: Thêm phong cảnh
  • Bước 3: Thực hiện di chuyển Bunny
  • Bước 4: Biến chú thỏ
  • Bước 5: Bắn, Bunny, bắn!
  • Bước 6: Đưa lên vũ khí! Badgers!
  • Bước 7: Vụ va chạm với lửng và mũi tên
  • Bước 8: Thêm HUD với máy đo sức khỏe và đồng hồ
  • Bước 9: Chiến thắng hoặc thua
  • Biến chạy theo dõi nếu trò chơi kết thúc và biến mã thoát theo dõi xem người chơi có thắng hay bị thua hay không.
  • Điều đó chăm sóc cấu hình âm thanh. :] Bây giờ tất cả những gì bạn cần làm là chơi các hiệu ứng âm thanh khác nhau khi cần thiết. Làm điều đó theo hướng dẫn trong các bình luận cho mã dưới đây:
  • Tôi có thể tạo một trò chơi với Python không?
  • Làm thế nào để bạn tạo ra một trò chơi đơn giản trong Python?

Tìm hiểu làm thế nào để tạo ra một trò chơi đơn giản với Python!

Đây là một bài đăng của thành viên nhóm hướng dẫn Julian Meyer, một nhà phát triển Python 13 tuổi. Bạn có thể tìm thấy anh ấy trên và Twitter.

Bạn đã bao giờ tự hỏi làm thế nào các trò chơi video được tạo ra? Nó không phức tạp như bạn nghĩ!

Trong hướng dẫn này, bạn sẽ tạo ra một trò chơi đơn giản có tên Bunnies và Badgers, nơi anh hùng, chú thỏ, phải bảo vệ một lâu đài chống lại một đám tấn công của Badgers. : O

Để viết trò chơi này, bạn sẽ sử dụng Python. Không, tôi không nói về một con rắn lớn! :]

Python là một ngôn ngữ lập trình máy tính. Chúng tôi đã chọn Python cho hướng dẫn này bởi vì nó là một ngôn ngữ đơn giản để bắt đầu, và rất vui và dễ học.

Nếu bạn chưa quen với Python, trước khi bạn bắt đầu kiểm tra cuốn sách này: nghĩ Python: Làm thế nào để nghĩ như một nhà khoa học máy tính. Điều đó sẽ giúp bạn tăng tốc.

Sau đó lặn trở lại đây và sẵn sàng - có một cuộc chiến diễn ra giữa Bunnies và Badgers. Tiếp tục đọc để nhảy vào cuộc cạnh tranh!

Bắt đầu: Cài đặt Python

Nếu bạn muốn thử hướng dẫn này trên PC Windows, bạn cần cài đặt Python. Hãy chắc chắn rằng bạn lấy phiên bản 2.7.3 chứ không phải phiên bản 3.3.0! Sau khi chạy trình cài đặt, bạn nên nhàn rỗi trong thư mục tất cả các chương trình trong menu Bắt đầu của mình. Ra mắt nhàn rỗi để bắt đầu.

Nếu bạn đang ở trên máy Mac, bạn đã cài đặt Python! Chỉ cần mở thiết bị đầu cuối (/Applications/tương tự

Lưu ý: Nếu bạn cài đặt Python từ python.org (và có thể phải nếu bạn muốn làm cho pygame hoạt động), thì bạn cũng sẽ có quyền truy cập vào Idle trên Mac. Nó nên có trong thư mục/Ứng dụng/Python 2.7.

Nếu bạn đã làm điều đó một cách chính xác, bạn sẽ thấy một cái gì đó như thế này:

Python 2.7.3 (v2.7.3:70274d53c1dd, Apr  9 2012, 20:52:43) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 

Lưu ý: Nếu bạn muốn thoát khỏi dấu nhắc Python (giá đỡ ba góc, >>>), bạn có thể gõ thoát () tại dấu nhắc Python và nhấn trả về hoặc bạn có thể nhấn Control+D.

Khi bạn đang ở dấu nhắc Python, để kiểm tra xem Python có hoạt động chính xác hay không, hãy nhập in 1+1 và nhấn Enter/Return. Nó nên in 2. Bạn vừa viết chương trình Python đầu tiên của bạn!

Bây giờ bạn đã biết Python đang hoạt động chính xác, bạn cần cài đặt pygame để viết một trò chơi bằng Python.

Pygame là một thư viện Python giúp việc viết trò chơi dễ dàng hơn rất nhiều! Nó cung cấp chức năng như xử lý hình ảnh và phát lại âm thanh mà bạn có thể dễ dàng kết hợp vào trò chơi của mình.

Tới đây và tải xuống trình cài đặt pygame phù hợp với hệ thống của bạn. Hãy chắc chắn rằng bạn tải xuống phiên bản Python 2.7.

Lưu ý: Trình cài đặt pygame từ liên kết ở trên sẽ không hoạt động với python mặc định từ Apple được cài đặt trên máy Mac. Bạn cần phải tải xuống Python từ python.org và cài đặt nó để sử dụng pygame. Hoặc, bạn có thể cài đặt cả Python và Pygame thông qua MacPorts.

Để xác minh rằng bạn đã cài đặt pygame đúng cách, mở nhàn rỗi hoặc chạy python thông qua thiết bị đầu cuối và nhập nhập pygame tại dấu nhắc Python. Nếu điều này không dẫn đến bất kỳ đầu ra nào, thì bạn có thể tốt.

Mặt khác, nếu nó xuất hiện một lỗi như những gì mà hiển thị bên dưới, thì pygame không được cài đặt.

Python 2.7.2 (default, Jun 20 2012, 16:23:33) 
[GCC 4.2.1 Compatible Apple Clang 4.0 (tags/Apple/clang-418.0.60)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import pygame
Traceback (most recent call last):
  File "", line 1, in 
ImportError: No module named pygame
>>> 

Nếu bạn gặp lỗi như thế này, hãy đăng trên các diễn đàn và tôi sẽ giúp bạn hoạt động.

Chạy mã python từ tệp

Mặc dù bạn có thể chạy các bit ngắn của mã python tại dấu nhắc Python, nếu bạn muốn làm việc trên một chương trình lớn hơn (như một trò chơi), bạn có thể muốn lưu mã của mình vào một tệp để bạn không phải nhập nó vào lặp đi lặp lại.

Có một số cách để chạy một chương trình Python dưới dạng tệp. Một cách là sử dụng một trình soạn thảo văn bản đơn giản như Notepad (Windows) hoặc Textedit (Mac). Mở một tệp văn bản mới, nhập mã Python của bạn (như in 1+1). Sau đó lưu nó dưới dạng xxx.py (xxx có thể là bất kỳ tên tệp mô tả nào).

Sau đó, trên Windows, nhấp đúp vào tệp này để chạy nó. Trên Mac, mở thiết bị đầu cuối và nhập Python, sau đó kéo tệp mà bạn đã lưu vào cửa sổ thiết bị đầu cuối và nhấn ENTER.

Một cách khác là nhập mã của bạn bằng trình soạn thảo IDLE, đó là những gì bạn sẽ làm trong hướng dẫn này. Để chạy nhàn rỗi, chỉ cần gõ nhàn rỗi từ thiết bị đầu cuối. Sau đó chọn Tệp \ cửa sổ mới từ menu nhàn rỗi và bạn nên có cửa sổ Trình chỉnh sửa văn bản nơi bạn có thể nhập mã Python. Bạn có thể lưu các thay đổi mã của mình thông qua Tệp \ Lưu và thậm chí chạy mã thông qua Module Run \ Run (F5).

Xin lưu ý rằng menu chạy chỉ khả dụng nếu bạn mở tệp trong cửa sổ Trình chỉnh sửa.

Thêm tài nguyên trò chơi

Bạn gần như đã sẵn sàng để tạo ra trò chơi của bạn. Nhưng những gì mà một trò chơi không có một số đồ họa và hiệu ứng âm thanh tuyệt vời? Tôi đã kết hợp tất cả các hiệu ứng đồ họa và âm thanh mà bạn sẽ cần cho trò chơi của mình vào một kho lưu trữ zip. Bạn có thể tải xuống thông qua nút tải xuống ở đầu và cuối trang này.

Khi bạn đã tải xuống tệp, hãy tạo một thư mục cho trò chơi của mình trên đĩa cứng của bạn và trích xuất thư mục tài nguyên vào thư mục đó để thư mục trò chơi của bạn có một thư mục con có tên là tài nguyên, với các tài nguyên khác nhau được nhóm lại trong các thư mục bổ sung bên trong nó, như thế này :

Bây giờ bạn đã sẵn sàng để bắt đầu tạo Bunnies và Badgers. :]

Bước 1: Xin chào Bunny

Chạy IDLE và mở cửa sổ Trình soạn thảo văn bản mới, như đã đề cập trong phần trước. Nhập mã sau vào cửa sổ Trình chỉnh sửa:

# 1 - Import library
import pygame
from pygame.locals import *

# 2 - Initialize the game
pygame.init()
width, height = 640, 480
screen=pygame.display.set_mode((width, height))

# 3 - Load images
player = pygame.image.load("resources/images/dude.png")

# 4 - keep looping through
while 1:
    # 5 - clear the screen before drawing it again
    screen.fill(0)
    # 6 - draw the screen elements
    screen.blit(player, (100,100))
    # 7 - update the screen
    pygame.display.flip()
    # 8 - loop through the events
    for event in pygame.event.get():
        # check if the event is the X button 
        if event.type==pygame.QUIT:
            # if it is quit the game
            pygame.quit() 
            exit(0) 

Lưu tệp vào thư mục trò chơi của bạn (một trong đó thư mục con tài nguyên) và đặt tên cho nó là game.py.

Hãy cùng đi qua từng phần mã:

  1. Nhập thư viện pygame. Điều này cho phép bạn sử dụng các chức năng từ thư viện trong chương trình của bạn.
  2. Khởi tạo pygame và thiết lập cửa sổ hiển thị.
  3. Tải hình ảnh mà bạn sẽ sử dụng cho chú thỏ.
  4. Tiếp tục lặp qua mã thụt lề sau.

    Lưu ý: Trường hợp các ngôn ngữ khác như Objective-C, Java hoặc PHP sử dụng niềng răng xoăn để hiển thị một khối mã được thực thi trong vòng một vòng hoặc câu lệnh IF, Python sử dụng thụt lề để xác định các khối mã. Vì vậy, vết lõm thích hợp là rất quan trọng trong Python - hãy ghi nhớ điều đó. :]

  5. Đổ đầy màn hình với màu đen trước khi bạn vẽ bất cứ thứ gì.
  6. Thêm hình ảnh thỏ mà bạn đã tải vào màn hình tại x = 100 và y = 100.
  7. Cập nhật màn hình.
  8. Kiểm tra bất kỳ sự kiện mới nào và nếu có một, và đó là một lệnh bỏ, hãy thoát khỏi chương trình.

    Lưu ý: Theo tài liệu pygame, bạn không cần phải gọi pygame.quit () vì trình thông dịch sẽ tự động gọi nó khi trình thông dịch tắt. Tuy nhiên, ít nhất là trên Mac OS, trò chơi sẽ bị treo trên lối ra trừ khi pygame.quit () được gọi.

Nếu bạn chạy mã ngay bây giờ (thông qua Module Run \ Run trong menu IDLE), bạn sẽ thấy một màn hình tương tự như dưới đây:

W00T Bunny đang ở trong cảnh, và sẵn sàng hành động!

Nhưng trò chơi trông đáng sợ và cô đơn với chú thỏ chỉ đứng đó trên một nền đen. Thời gian để thanh toán mọi thứ một chút. :]

Bước 2: Thêm phong cảnh

Hãy bắt đầu bằng cách thêm một nền vào cảnh trò chơi. Điều này có thể được thực hiện với một vài cuộc gọi thêm màn hình.blit ().

Ở cuối Phần số 3, sau khi tải hình ảnh người chơi, thêm mã sau:

grass = pygame.image.load("resources/images/grass.png")
castle = pygame.image.load("resources/images/castle.png")

Điều này tải các hình ảnh và đặt chúng vào các biến cụ thể. Bây giờ họ phải được vẽ trên màn hình. Nhưng nếu bạn kiểm tra hình ảnh cỏ, bạn sẽ nhận thấy rằng nó đã giành được bao phủ toàn bộ khu vực màn hình, là 640 x 480. Điều này có nghĩa là bạn phải gạch cỏ trên khu vực màn hình để che nó hoàn toàn.

Thêm mã sau vào game.py ở đầu phần số 6 (trước khi trình phát được vẽ trên màn hình):

    for x in range(width/grass.get_width()+1):
        for y in range(height/grass.get_height()+1):
            screen.blit(grass,(x*100,y*100))
    screen.blit(castle,(0,30))
    screen.blit(castle,(0,135))
    screen.blit(castle,(0,240))
    screen.blit(castle,(0,345 ))

Như bạn có thể thấy, các vòng lặp câu lệnh thông qua X trước tiên. Sau đó, trong đó cho vòng lặp, nó lặp qua y và vẽ cỏ ở các giá trị x và y được tạo ra bởi các vòng lặp. Một vài dòng tiếp theo chỉ vẽ các lâu đài trên màn hình.

Nếu bạn chạy chương trình ngay bây giờ, bạn sẽ nhận được một cái gì đó như thế này:

Tốt hơn nhiều - điều này đang bắt đầu trông tốt! :]

Bước 3: Thực hiện di chuyển Bunny

Tiếp theo bạn cần thêm một số yếu tố chơi trò chơi thực tế, như làm cho Bunny phản ứng với các máy ép chính.

Để làm điều đó, trước tiên, bạn sẽ thực hiện một phương pháp tốt để theo dõi các khóa nào đang được nhấn vào một thời điểm nhất định. Bạn có thể làm điều này chỉ đơn giản bằng cách tạo một loạt các trạng thái khóa giữ trạng thái của mỗi khóa bạn muốn sử dụng cho trò chơi.

Thêm mã sau vào game.py ở cuối Phần số 2 (sau khi bạn đặt chiều cao và chiều rộng màn hình):

keys = [False, False, False, False]
playerpos=[100,100]

Mã này khá tự giải thích. Mảng các phím theo dõi các phím được nhấn theo thứ tự sau: WASD. Mỗi mục trong mảng tương ứng với một khóa - phần thứ nhất với W, thứ hai của A và vân vân.

Biến PlayerPos là nơi chương trình vẽ người chơi. Vì trò chơi sẽ chuyển người chơi đến các vị trí khác nhau, nên việc có một biến có chứa vị trí người chơi dễ dàng hơn và sau đó chỉ cần vẽ người chơi ở vị trí đó.

Bây giờ bạn cần sửa đổi mã hiện có để vẽ trình phát để sử dụng biến người chơi mới. Thay đổi dòng sau trong Phần #6:

    screen.blit(player, (100,100))

To:

    screen.blit(player, playerpos)

Tiếp theo, cập nhật mảng các phím dựa trên các phím đang được nhấn. Pygame giúp phát hiện các máy nhấn khóa dễ dàng bằng cách thêm các chức năng Event.key.

Vào cuối Phần số 8, ngay sau khi kiểm tra khối cho Event.type == pygame.quit, đặt mã này (ở cùng mức thụt với block pygame.quit nếu khối):

        if event.type == pygame.KEYDOWN:
            if event.key==K_w:
                keys[0]=True
            elif event.key==K_a:
                keys[1]=True
            elif event.key==K_s:
                keys[2]=True
            elif event.key==K_d:
                keys[3]=True
        if event.type == pygame.KEYUP:
            if event.key==pygame.K_w:
                keys[0]=False
            elif event.key==pygame.K_a:
                keys[1]=False
            elif event.key==pygame.K_s:
                keys[2]=False
            elif event.key==pygame.K_d:
                keys[3]=False

Ồ! Đó là rất nhiều dòng mã. Nếu bạn chia nó thành các câu lệnh IF, thì nó không phức tạp.

Đầu tiên bạn kiểm tra xem một khóa đang được nhấn hoặc phát hành. Sau đó, bạn kiểm tra khóa nào đang được nhấn hoặc phát hành và nếu nhấn hoặc phát hành khóa là một trong những phím mà bạn sử dụng, bạn sẽ cập nhật biến các khóa tương ứng.

Cuối cùng, bạn cần cập nhật biến PlayerPos để đáp ứng với các nhấn phím. Điều này thực sự rất đơn giản.

Thêm mã sau vào cuối game.py (với một cấp độ thụt lề, đặt nó ở cùng cấp độ với vòng lặp cho):

    # 9 - Move player
    if keys[0]:
        playerpos[1]-=5
    elif keys[2]:
        playerpos[1]+=5
    if keys[1]:
        playerpos[0]-=5
    elif keys[3]:
        playerpos[0]+=5

Mã này chỉ đơn giản là kiểm tra các phím nào đang được nhấn và thêm hoặc trừ đi từ vị trí của người chơi X X hoặc Y (tùy thuộc vào khóa được nhấn) để di chuyển trình phát.

Chạy trò chơi và bạn sẽ nhận được một người chơi giống như trước đây. Hãy thử nhấn wasd. Yay! Nó hoạt động.

Bước 4: Biến chú thỏ

Vâng, con thỏ của bạn bây giờ di chuyển khi bạn nhấn phím nhưng sẽ không còn mát hơn nếu bạn có thể sử dụng chuột của mình để xoay chú thỏ để đối mặt với hướng bạn chọn, vì vậy anh ấy không phải đối mặt với cùng một cách mọi lúc? Nó đủ đơn giản để thực hiện bằng cách sử dụng lượng giác.

Hãy xem hình minh họa sau:

Trong hình trên, nếu (5,3) là vị trí của chú thỏ và (2,4) là vị trí hiện tại của chuột, bạn có thể tìm thấy góc quay (z) bằng cách áp dụng hàm lượng giác atan2 cho sự khác biệt trong sự khác biệt trong khoảng cách giữa hai điểm. Tất nhiên, một khi bạn biết góc xoay, bạn chỉ có thể xoay chú thỏ phù hợp. :]

Nếu bạn hơi bối rối về phần này, thì đừng lo lắng - dù sao bạn cũng có thể tiếp tục. Nhưng đây là lý do tại sao bạn nên chú ý trong lớp toán! :] Bạn sẽ sử dụng công cụ này mọi lúc trong lập trình trò chơi.

Bây giờ bạn cần áp dụng khái niệm này cho trò chơi của bạn. Để làm điều này, bạn có thể sử dụng chức năng Surface Pygame.ROTATE (độ). Ngẫu nhiên, hãy nhớ rằng giá trị Z nằm trong radian. : [

Hàm Atan2 đến từ thư viện toán học Python. Vì vậy, hãy thêm điều này vào cuối Phần số 1 trước:

Python 2.7.2 (default, Jun 20 2012, 16:23:33) 
[GCC 4.2.1 Compatible Apple Clang 4.0 (tags/Apple/clang-418.0.60)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import pygame
Traceback (most recent call last):
  File "", line 1, in 
ImportError: No module named pygame
>>> 
0

Sau đó, thay thế dòng cuối cùng trong Phần #6 (dòng người chơi.blit) bằng mã sau:

Python 2.7.2 (default, Jun 20 2012, 16:23:33) 
[GCC 4.2.1 Compatible Apple Clang 4.0 (tags/Apple/clang-418.0.60)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import pygame
Traceback (most recent call last):
  File "", line 1, in 
ImportError: No module named pygame
>>> 
1

Hãy cùng đi qua cấu trúc cơ bản của mã trên. Đầu tiên bạn có được vị trí chuột và người chơi. Sau đó, bạn cho chúng ăn vào hàm ATAN2. Sau đó, bạn chuyển đổi góc nhận được từ hàm ATAN2 từ radian sang độ (nhân radian với khoảng 57,29 hoặc 360/2π).

Vì chú thỏ sẽ được xoay, vị trí của nó sẽ thay đổi. Vì vậy, bây giờ bạn tính toán vị trí Bunny mới và hiển thị chú thỏ trên màn hình.

Chạy lại trò chơi. Nếu bạn chỉ sử dụng các phím WASD, thì trò chơi nên hoạt động chính xác như trước. Nhưng nếu bạn di chuyển chuột, chú thỏ cũng quay. Mát mẻ!

Bước 5: Bắn, Bunny, bắn!

Bây giờ, chú thỏ của bạn di chuyển xung quanh, đó là thời gian để thêm một chút hành động. :] Làm thế nào về việc để Bunny bắn kẻ thù sử dụng mũi tên? Đây không phải là con thỏ ôn hòa!

Bước này phức tạp hơn một chút vì bạn phải theo dõi tất cả các mũi tên, cập nhật chúng, xoay chúng và xóa chúng khi chúng ra ngoài màn hình.

Trước hết, thêm các biến cần thiết vào cuối phần khởi tạo, Phần số 2:

Python 2.7.2 (default, Jun 20 2012, 16:23:33) 
[GCC 4.2.1 Compatible Apple Clang 4.0 (tags/Apple/clang-418.0.60)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import pygame
Traceback (most recent call last):
  File "", line 1, in 
ImportError: No module named pygame
>>> 
2

Biến đầu tiên theo dõi độ chính xác của người chơi và mảng thứ hai theo dõi tất cả các mũi tên. Biến độ chính xác về cơ bản là một danh sách số lượng phát bắn và số lượng lửng bị đánh. Sau đó, chúng tôi sẽ sử dụng thông tin này để tính tỷ lệ phần trăm chính xác.

Tiếp theo, tải hình ảnh mũi tên ở cuối Phần #3:

Python 2.7.2 (default, Jun 20 2012, 16:23:33) 
[GCC 4.2.1 Compatible Apple Clang 4.0 (tags/Apple/clang-418.0.60)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import pygame
Traceback (most recent call last):
  File "", line 1, in 
ImportError: No module named pygame
>>> 
3

Bây giờ khi người dùng nhấp chuột, một mũi tên cần phải bắn. Thêm phần sau vào cuối Phần số 8 dưới dạng Trình xử lý sự kiện mới:

Python 2.7.2 (default, Jun 20 2012, 16:23:33) 
[GCC 4.2.1 Compatible Apple Clang 4.0 (tags/Apple/clang-418.0.60)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import pygame
Traceback (most recent call last):
  File "", line 1, in 
ImportError: No module named pygame
>>> 
4

Mã này kiểm tra xem chuột có được nhấp không và nếu có, nó có được vị trí chuột và tính toán vòng quay mũi tên dựa trên vị trí người chơi xoay và vị trí con trỏ. Giá trị xoay này được lưu trữ trong mảng mũi tên.

Tiếp theo, bạn thực sự phải vẽ các mũi tên trên màn hình. Thêm mã sau ngay sau Phần #6.1:

Python 2.7.2 (default, Jun 20 2012, 16:23:33) 
[GCC 4.2.1 Compatible Apple Clang 4.0 (tags/Apple/clang-418.0.60)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import pygame
Traceback (most recent call last):
  File "", line 1, in 
ImportError: No module named pygame
>>> 
5

Các giá trị Vely và Velx được tính toán bằng cách sử dụng lượng giác cơ bản. 10 là tốc độ của các mũi tên. Câu lệnh IF chỉ kiểm tra xem viên đạn có nằm ngoài giới hạn không và nếu có, nó sẽ xóa mũi tên. Cái thứ hai cho các vòng lặp câu lệnh qua các mũi tên và vẽ chúng với vòng quay chính xác.

Hãy thử và chạy chương trình. Bạn nên có một chú thỏ bắn mũi tên khi bạn nhấp vào chuột! : D

Bước 6: Đưa lên vũ khí! Badgers!

OK, bạn có một lâu đài và bạn có một anh hùng có thể di chuyển và bắn. Vì vậy, những gì còn thiếu? Kẻ thù tấn công lâu đài mà anh hùng có thể bắn vào!

Trong bước này, bạn sẽ tạo ra những con lửng được tạo ngẫu nhiên chạy tại lâu đài. Sẽ ngày càng có nhiều lửng khi trò chơi tiến triển. Vì vậy, hãy để Lừa lập một danh sách những gì bạn sẽ cần nó để làm.

  1. Thêm kẻ xấu vào danh sách một mảng.
  2. Cập nhật mảng kẻ xấu mỗi khung hình và kiểm tra xem chúng có tắt màn hình không.
  3. Cho những kẻ xấu.

Dễ dàng, phải không? :]

Đầu tiên, thêm mã sau vào cuối Phần #2:

Python 2.7.2 (default, Jun 20 2012, 16:23:33) 
[GCC 4.2.1 Compatible Apple Clang 4.0 (tags/Apple/clang-418.0.60)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import pygame
Traceback (most recent call last):
  File "", line 1, in 
ImportError: No module named pygame
>>> 
6

Trên đây thiết lập một bộ đếm thời gian (cũng như một vài giá trị khác) để trò chơi thêm một lửng mới sau khi một thời gian trôi qua. Bạn giảm mốc mọi khung cho đến khi nó bằng không và sau đó bạn sinh ra một con lửng mới.

Bây giờ thêm phần sau vào cuối Phần #3:

Python 2.7.2 (default, Jun 20 2012, 16:23:33) 
[GCC 4.2.1 Compatible Apple Clang 4.0 (tags/Apple/clang-418.0.60)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import pygame
Traceback (most recent call last):
  File "", line 1, in 
ImportError: No module named pygame
>>> 
7

Dòng đầu tiên ở trên tương tự như tất cả các mã tải hình ảnh trước đó. Dòng thứ hai thiết lập một bản sao của hình ảnh để bạn có thể làm động người xấu dễ dàng hơn nhiều.

Tiếp theo, bạn phải cập nhật và cho những kẻ xấu. Thêm mã này ngay sau Phần #6.2:

Python 2.7.2 (default, Jun 20 2012, 16:23:33) 
[GCC 4.2.1 Compatible Apple Clang 4.0 (tags/Apple/clang-418.0.60)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import pygame
Traceback (most recent call last):
  File "", line 1, in 
ImportError: No module named pygame
>>> 
8

Rất nhiều mã để đi qua. :] Dòng đầu tiên kiểm tra xem Badtimer có bằng không và nếu có, tạo ra một Badger và đặt Badtimer lên một lần nữa dựa trên số lần xấu đã chạy cho đến nay. Đầu tiên cho Loop cập nhật vị trí X của Badger, kiểm tra xem Badger có ở ngoài màn hình không và xóa Badger nếu nó là ngoài màn hình. Thứ hai cho vòng lặp rút ra tất cả các lửng.

Để sử dụng chức năng ngẫu nhiên trong mã trên, bạn cũng cần nhập thư viện ngẫu nhiên. Vì vậy, hãy thêm phần sau vào cuối Phần số 1:

Python 2.7.2 (default, Jun 20 2012, 16:23:33) 
[GCC 4.2.1 Compatible Apple Clang 4.0 (tags/Apple/clang-418.0.60)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import pygame
Traceback (most recent call last):
  File "", line 1, in 
ImportError: No module named pygame
>>> 
9

Cuối cùng, hãy thêm dòng này ngay sau câu lệnh WHRE (Mục 4) để giảm giá trị của xấu cho mỗi khung hình:

# 1 - Import library
import pygame
from pygame.locals import *

# 2 - Initialize the game
pygame.init()
width, height = 640, 480
screen=pygame.display.set_mode((width, height))

# 3 - Load images
player = pygame.image.load("resources/images/dude.png")

# 4 - keep looping through
while 1:
    # 5 - clear the screen before drawing it again
    screen.fill(0)
    # 6 - draw the screen elements
    screen.blit(player, (100,100))
    # 7 - update the screen
    pygame.display.flip()
    # 8 - loop through the events
    for event in pygame.event.get():
        # check if the event is the X button 
        if event.type==pygame.QUIT:
            # if it is quit the game
            pygame.quit() 
            exit(0) 
0

Hãy thử tất cả các mã này bằng cách chạy trò chơi. Bây giờ bạn nên bắt đầu thấy một số trò chơi thực sự - bạn có thể bắn, di chuyển, quay và lửng cố gắng chạy theo bạn.

Nhưng chờ đã! Tại sao Badgers không thổi vào lâu đài? Hãy nhanh chóng thêm nó vào ...

Thêm mã này ngay trước khi chỉ mục+= 1 vào vòng lặp đầu tiên trong phần #6.3:

# 1 - Import library
import pygame
from pygame.locals import *

# 2 - Initialize the game
pygame.init()
width, height = 640, 480
screen=pygame.display.set_mode((width, height))

# 3 - Load images
player = pygame.image.load("resources/images/dude.png")

# 4 - keep looping through
while 1:
    # 5 - clear the screen before drawing it again
    screen.fill(0)
    # 6 - draw the screen elements
    screen.blit(player, (100,100))
    # 7 - update the screen
    pygame.display.flip()
    # 8 - loop through the events
    for event in pygame.event.get():
        # check if the event is the X button 
        if event.type==pygame.QUIT:
            # if it is quit the game
            pygame.quit() 
            exit(0) 
1

Mã này khá đơn giản. Nếu giá trị x của Badger nhỏ hơn 64 ở bên phải, thì hãy xóa kẻ xấu đó và giảm giá trị sức khỏe trò chơi theo giá trị ngẫu nhiên trong khoảng từ 5 đến 20. (sau đó, bạn sẽ hiển thị giá trị sức khỏe hiện tại trên màn hình.)

Nếu bạn xây dựng và điều hành chương trình, bạn sẽ nhận được một loạt những kẻ tấn công Badgers biến mất khi họ đâm vào lâu đài. Mặc dù bạn không thể nhìn thấy nó, nhưng Badgers thực sự đang giảm sức khỏe của bạn.

Bước 7: Vụ va chạm với lửng và mũi tên

Badgers đang tấn công lâu đài của bạn nhưng mũi tên của bạn không có tác dụng gì với chúng! Làm thế nào một chú thỏ được cho là để bảo vệ nhà của anh ta?

Thời gian để đặt mũi tên để giết Badgers để bạn có thể bảo vệ lâu đài của mình và giành chiến thắng trong trò chơi! Về cơ bản, bạn phải lặp qua tất cả những kẻ xấu và bên trong mỗi vòng lặp đó, bạn phải lặp qua tất cả các mũi tên và kiểm tra xem chúng có va chạm không. Nếu họ làm, sau đó xóa Badger, xóa mũi tên và thêm một vào tỷ lệ chính xác của bạn.

Ngay sau Phần #6.3.1, thêm điều này:

# 1 - Import library
import pygame
from pygame.locals import *

# 2 - Initialize the game
pygame.init()
width, height = 640, 480
screen=pygame.display.set_mode((width, height))

# 3 - Load images
player = pygame.image.load("resources/images/dude.png")

# 4 - keep looping through
while 1:
    # 5 - clear the screen before drawing it again
    screen.fill(0)
    # 6 - draw the screen elements
    screen.blit(player, (100,100))
    # 7 - update the screen
    pygame.display.flip()
    # 8 - loop through the events
    for event in pygame.event.get():
        # check if the event is the X button 
        if event.type==pygame.QUIT:
            # if it is quit the game
            pygame.quit() 
            exit(0) 
2

Chỉ có một điều quan trọng cần lưu ý trong mã này. Câu lệnh IF là hàm pygame tích hợp kiểm tra xem hai hình chữ nhật có giao nhau không. Một vài dòng khác chỉ làm những gì tôi giải thích ở trên.

Nếu bạn chạy chương trình, cuối cùng bạn cũng có thể bắn và giết Badgers.

Bước 8: Thêm HUD với máy đo sức khỏe và đồng hồ

Trò chơi tiến triển khá tốt. Bạn có kẻ tấn công của bạn, và bạn có hậu vệ của bạn. Bây giờ tất cả những gì bạn cần là một cách để giữ điểm và để cho thấy chú thỏ đang làm tốt như thế nào.

Cách dễ nhất để làm điều này là thêm HUD (hiển thị lên đầu) cho thấy mức độ sức khỏe hiện tại của lâu đài. Bạn cũng có thể thêm một chiếc đồng hồ để cho thấy lâu đài đã tồn tại trong bao lâu.

Đầu tiên thêm đồng hồ. Thêm mã sau ngay trước khi bắt đầu Phần #7:

# 1 - Import library
import pygame
from pygame.locals import *

# 2 - Initialize the game
pygame.init()
width, height = 640, 480
screen=pygame.display.set_mode((width, height))

# 3 - Load images
player = pygame.image.load("resources/images/dude.png")

# 4 - keep looping through
while 1:
    # 5 - clear the screen before drawing it again
    screen.fill(0)
    # 6 - draw the screen elements
    screen.blit(player, (100,100))
    # 7 - update the screen
    pygame.display.flip()
    # 8 - loop through the events
    for event in pygame.event.get():
        # check if the event is the X button 
        if event.type==pygame.QUIT:
            # if it is quit the game
            pygame.quit() 
            exit(0) 
3

Mã trên chỉ đơn giản là tạo một phông chữ mới bằng cách sử dụng phông chữ pygame mặc định được đặt thành kích thước 24. Sau đó, phông chữ đó được sử dụng để hiển thị văn bản của thời gian lên bề mặt. Sau đó, văn bản được định vị và vẽ trên màn hình.

Tiếp theo thêm thanh sức khỏe. Nhưng trước khi vẽ thanh sức khỏe, bạn cần tải hình ảnh cho thanh. Thêm mã sau vào cuối Phần #3:

# 1 - Import library
import pygame
from pygame.locals import *

# 2 - Initialize the game
pygame.init()
width, height = 640, 480
screen=pygame.display.set_mode((width, height))

# 3 - Load images
player = pygame.image.load("resources/images/dude.png")

# 4 - keep looping through
while 1:
    # 5 - clear the screen before drawing it again
    screen.fill(0)
    # 6 - draw the screen elements
    screen.blit(player, (100,100))
    # 7 - update the screen
    pygame.display.flip()
    # 8 - loop through the events
    for event in pygame.event.get():
        # check if the event is the X button 
        if event.type==pygame.QUIT:
            # if it is quit the game
            pygame.quit() 
            exit(0) 
4

Đầu tiên là hình ảnh màu đỏ được sử dụng cho thanh sức khỏe đầy đủ. Thứ hai là hình ảnh màu xanh lá cây được sử dụng để hiển thị mức độ sức khỏe hiện tại.

Bây giờ hãy thêm mã sau ngay sau Mục 6.4 (mà bạn vừa thêm) để vẽ thanh sức khỏe trên màn hình:

# 1 - Import library
import pygame
from pygame.locals import *

# 2 - Initialize the game
pygame.init()
width, height = 640, 480
screen=pygame.display.set_mode((width, height))

# 3 - Load images
player = pygame.image.load("resources/images/dude.png")

# 4 - keep looping through
while 1:
    # 5 - clear the screen before drawing it again
    screen.fill(0)
    # 6 - draw the screen elements
    screen.blit(player, (100,100))
    # 7 - update the screen
    pygame.display.flip()
    # 8 - loop through the events
    for event in pygame.event.get():
        # check if the event is the X button 
        if event.type==pygame.QUIT:
            # if it is quit the game
            pygame.quit() 
            exit(0) 
5

Mã đầu tiên vẽ thanh sức khỏe toàn màu đỏ. Sau đó, nó rút ra một lượng màu xanh lá cây nhất định trên thanh, theo lâu đài của lâu đài còn lại.

Nếu bạn xây dựng và chạy chương trình, bạn nên có một bộ đếm thời gian và một thanh sức khỏe.

Bước 9: Chiến thắng hoặc thua

Nhưng đây là gì? Nếu bạn chơi đủ lâu, ngay cả khi sức khỏe của bạn giảm xuống 0, trò chơi vẫn tiếp tục! Không chỉ vậy, bạn cũng có thể tiếp tục bắn vào Badgers. Điều đó sẽ không hoạt động, bây giờ phải không? Bạn cần một số loại kịch bản thắng/thua để làm cho trò chơi đáng chơi.

Vì vậy, hãy thêm chiến thắng và thua điều kiện cũng như màn hình chiến thắng hoặc thua. :] Bạn làm điều này bằng cách thoát ra khỏi vòng lặp chính và đi vào vòng lặp chiến thắng/thua. Trong vòng lặp win/thua, bạn phải tìm hiểu xem người dùng đã thắng hay bị mất và hiển thị màn hình cho phù hợp.

Dưới đây là một phác thảo cơ bản của các kịch bản thắng/thua:

Nếu thời gian tăng (90000 ms hoặc 90 giây) thì:

  • Ngừng chạy trò chơi
  • Đặt kết quả của trò chơi thành 1 hoặc thắng

Nếu lâu đài bị phá hủy thì:

  • Ngừng chạy trò chơi
  • Đặt kết quả của trò chơi thành 1 hoặc thắng

Nếu lâu đài bị phá hủy thì:

Ngừng chạy trò chơi

Đặt kết quả của trò chơi thành 1 hoặc thắng

# 1 - Import library
import pygame
from pygame.locals import *

# 2 - Initialize the game
pygame.init()
width, height = 640, 480
screen=pygame.display.set_mode((width, height))

# 3 - Load images
player = pygame.image.load("resources/images/dude.png")

# 4 - keep looping through
while 1:
    # 5 - clear the screen before drawing it again
    screen.fill(0)
    # 6 - draw the screen elements
    screen.blit(player, (100,100))
    # 7 - update the screen
    pygame.display.flip()
    # 8 - loop through the events
    for event in pygame.event.get():
        # check if the event is the X button 
        if event.type==pygame.QUIT:
            # if it is quit the game
            pygame.quit() 
            exit(0) 
6

Nếu lâu đài bị phá hủy thì:

Tính độ chính xác một trong hai cách.

Lưu ý: ACC [0]*1.0 chỉ là chuyển đổi ACC [0] thành một chiếc phao. Nếu bạn không làm điều này, toán hạng phân chia sẽ trả về một số nguyên như 1 hoặc 2 thay vì nổi như 1.5

# 1 - Import library
import pygame
from pygame.locals import *

# 2 - Initialize the game
pygame.init()
width, height = 640, 480
screen=pygame.display.set_mode((width, height))

# 3 - Load images
player = pygame.image.load("resources/images/dude.png")

# 4 - keep looping through
while 1:
    # 5 - clear the screen before drawing it again
    screen.fill(0)
    # 6 - draw the screen elements
    screen.blit(player, (100,100))
    # 7 - update the screen
    pygame.display.flip()
    # 8 - loop through the events
    for event in pygame.event.get():
        # check if the event is the X button 
        if event.type==pygame.QUIT:
            # if it is quit the game
            pygame.quit() 
            exit(0) 
7

Thêm các dòng này vào cuối Game.py:

# 1 - Import library
import pygame
from pygame.locals import *

# 2 - Initialize the game
pygame.init()
width, height = 640, 480
screen=pygame.display.set_mode((width, height))

# 3 - Load images
player = pygame.image.load("resources/images/dude.png")

# 4 - keep looping through
while 1:
    # 5 - clear the screen before drawing it again
    screen.fill(0)
    # 6 - draw the screen elements
    screen.blit(player, (100,100))
    # 7 - update the screen
    pygame.display.flip()
    # 8 - loop through the events
    for event in pygame.event.get():
        # check if the event is the X button 
        if event.type==pygame.QUIT:
            # if it is quit the game
            pygame.quit() 
            exit(0) 
8

To:

# 1 - Import library
import pygame
from pygame.locals import *

# 2 - Initialize the game
pygame.init()
width, height = 640, 480
screen=pygame.display.set_mode((width, height))

# 3 - Load images
player = pygame.image.load("resources/images/dude.png")

# 4 - keep looping through
while 1:
    # 5 - clear the screen before drawing it again
    screen.fill(0)
    # 6 - draw the screen elements
    screen.blit(player, (100,100))
    # 7 - update the screen
    pygame.display.flip()
    # 8 - loop through the events
    for event in pygame.event.get():
        # check if the event is the X button 
        if event.type==pygame.QUIT:
            # if it is quit the game
            pygame.quit() 
            exit(0) 
9

Đây là phần dài nhất của mã! Nhưng nó không phức tạp.

Câu lệnh đầu tiên kiểm tra nếu thời gian hết. Cái thứ hai kiểm tra xem lâu đài bị phá hủy. Cái thứ ba tính toán tỷ lệ chính xác của bạn. Sau đó, câu lệnh nhanh chóng nếu bạn thắng hoặc bị mất và hiển thị hình ảnh chính xác.

Tất nhiên, nếu bạn muốn hiển thị hình ảnh để giành chiến thắng và mất màn hình, thì những hình ảnh đó phải được tải trước. Vì vậy, thêm mã sau vào cuối Phần #3:

Một điều nhanh chóng nữa. Thay đổi phần số 4 từ:

Biến chạy theo dõi nếu trò chơi kết thúc và biến mã thoát theo dõi xem người chơi có thắng hay bị thua hay không.

grass = pygame.image.load("resources/images/grass.png")
castle = pygame.image.load("resources/images/castle.png")
0

Chạy lại trò chơi và bây giờ bạn có thể chiến thắng hoặc chết khi cố gắng! Mát mẻ. :]

grass = pygame.image.load("resources/images/grass.png")
castle = pygame.image.load("resources/images/castle.png")
1

Bước 10: Âm nhạc và hiệu ứng âm thanh vô cớ!

Trò chơi trông khá hay nhưng nó nghe như thế nào? Nó hơi yên tĩnh, phải không? Thêm một số hiệu ứng âm thanh có thể thay đổi toàn bộ cảm giác của một trò chơi.

grass = pygame.image.load("resources/images/grass.png")
castle = pygame.image.load("resources/images/castle.png")
2

Pygame làm cho tải và chơi âm thanh siêu đơn giản. Đầu tiên, bạn phải khởi tạo bộ trộn bằng cách thêm nó vào cuối Phần #2:

Sau đó tải âm thanh và đặt mức âm lượng ở cuối Phần #3:

Hầu hết các mã trên chỉ đơn giản là tải các tệp âm thanh và định cấu hình các mức âm lượng âm thanh. Nhưng hãy chú ý đến dòng pygame.mixer.music.load - dòng đó tải nhạc nền cho trò chơi và dòng tiếp theo đặt nhạc nền để lặp lại mãi mãi.

Điều đó chăm sóc cấu hình âm thanh. :] Bây giờ tất cả những gì bạn cần làm là chơi các hiệu ứng âm thanh khác nhau khi cần thiết. Làm điều đó theo hướng dẫn trong các bình luận cho mã dưới đây:

Chạy trò chơi thêm một lần nữa và bạn sẽ nhận thấy rằng bây giờ bạn có âm nhạc nền và hiệu ứng âm thanh để va chạm và chụp. Trò chơi cảm thấy sống động hơn nhiều! :]

Đi đâu từ đây?


Bạn nên tự hào về bản thân: Bạn vừa hoàn thành việc tạo ra một trò chơi vui nhộn được đóng gói với âm nhạc, hiệu ứng âm thanh, một con thỏ sát thủ, kamikaze lửng và nhiều hơn nữa. Tôi đã nói với bạn rằng bạn có thể làm điều đó! :]

Bạn có thể tải xuống mã nguồn cuối cùng cho trò chơi thông qua nút tải xuống ở đầu hoặc cuối trang này.

Tại thời điểm này, hãy thoải mái mở rộng trò chơi này vào sáng tạo của riêng bạn! Có thể thử thay thế nghệ thuật bằng các bản vẽ của riêng bạn, hoặc thêm các loại vũ khí hoặc loại quái vật khác nhau vào trò chơi!

Bạn có bất kỳ câu hỏi hoặc nhận xét nào về những gì bạn đã làm trong hướng dẫn này? Nếu vậy, hãy tham gia các cuộc thảo luận trong các diễn đàn! Tôi rất thích nghe từ bạn.

Đây là một bài đăng của thành viên nhóm hướng dẫn Julian Meyer, một nhà phát triển Python 13 tuổi.. To build a game, you'll need to use many core programming skills. The kinds of skills that you'll see in real-world programming.

Tôi có thể tạo một trò chơi với Python không?

Bước 1: Xin chào Bunny...

Nhập thư viện pygame.....

Khởi tạo pygame và thiết lập cửa sổ hiển thị ..

Tải hình ảnh mà bạn sẽ sử dụng cho chú thỏ ..

Tiếp tục lặp qua mã thụt lề sau.....

Đổ đầy màn hình với màu đen trước khi bạn vẽ bất cứ thứ gì ..

Thêm hình ảnh thỏ mà bạn đã tải vào màn hình tại x = 100 và y = 100 ..