Cách lập trình trò chơi máy tính (với hình ảnh)

Mục lục:

Cách lập trình trò chơi máy tính (với hình ảnh)
Cách lập trình trò chơi máy tính (với hình ảnh)
Anonim

Bạn có ý tưởng về một trò chơi máy tính và muốn biến nó thành hiện thực? Hoặc bạn đã bao giờ tự hỏi trò chơi máy tính được viết như thế nào? WikiHow này hướng dẫn bạn cách viết ba trò chơi máy tính cơ bản bằng Python. Bạn sẽ cần hiểu biết cơ bản về Python và các khái niệm lập trình chung để phát triển trò chơi đầu tiên của mình.

Các bước

Phần 1/3: Tạo trò chơi dựa trên văn bản

5692759 1
5692759 1

Bước 1. Chọn một ngôn ngữ lập trình

Tất cả các ngôn ngữ lập trình đều khác nhau, vì vậy bạn sẽ phải quyết định sử dụng ngôn ngữ nào để viết trò chơi của mình. Mọi ngôn ngữ lập trình chính đều hỗ trợ nhập văn bản, xuất văn bản và cấu trúc if (những thứ chính bạn cần cho một trò chơi dựa trên văn bản đơn giản), vì vậy hãy khám phá các tùy chọn và quyết định tùy chọn nào bạn cảm thấy thoải mái nhất và chuyên tâm học tập. Dưới đây là một số yếu tố cần xem xét:

  • Ngôn ngữ chủ yếu được sử dụng để làm gì?

    Một số ngôn ngữ lập trình, như JavaScript, được thiết kế để sử dụng cho web, trong khi những ngôn ngữ khác, như Python, C hoặc C ++, được thiết kế để chạy các chương trình máy tính. Đối với trò chơi của bạn, hãy hướng tới một ngôn ngữ có phạm vi sử dụng rộng hơn, chẳng hạn như Python, C, C ++ hoặc JavaScript.

  • Nó khó học như thế nào?

    Mặc dù việc viết một chương trình sẽ đủ dễ dàng sau khi thực hành bằng bất kỳ ngôn ngữ lập trình thông thường nào (tức là không phải ngôn ngữ được thiết kế đặc biệt để gây nhầm lẫn như Malbolge), một số lại thân thiện với người mới bắt đầu hơn những ngôn ngữ khác. Ví dụ, Java và C sẽ yêu cầu bạn hiểu các khái niệm lập trình sâu hơn so với một thứ như Python, vốn được biết đến với cú pháp dễ tiếp cận và dễ tiếp cận hơn.

  • Tôi có thể sử dụng nó ở đâu?

    Bạn có thể muốn mọi người trên các hệ thống khác nhau, chẳng hạn như Linux, Mac hoặc Windows, tất cả đều có thể chơi trò chơi của bạn. Vì vậy, bạn không nên sử dụng ngôn ngữ chỉ được hỗ trợ trên một số hệ thống, chẳng hạn như Visual Basic, ngôn ngữ này chỉ được hỗ trợ trên Windows.

Bài viết này sẽ sử dụng Python cho các ví dụ về trò chơi dựa trên văn bản, nhưng bạn có thể tra cứu cách các khái niệm được thực hiện trong bất kỳ ngôn ngữ lập trình nào khác.

5692759 2
5692759 2

Bước 2. Chuẩn bị máy tính của bạn

Hai thành phần chính bạn sẽ cần là một trình soạn thảo văn bản, trong đó bạn sẽ viết mã của mình và một trình biên dịch, bạn sẽ sử dụng để biến nó thành một trò chơi. Nếu bạn muốn làm theo ví dụ trong bài viết này, bạn nên cài đặt Python và học cách chạy các chương trình. Nếu muốn, bạn có thể thiết lập IDE (Môi trường máy tính để bàn tích hợp), kết hợp chỉnh sửa, biên dịch và gỡ lỗi vào một chương trình duy nhất. IDE của Python được gọi là IDLE. Nhưng bạn cũng có thể chỉ sử dụng bất kỳ trình soạn thảo văn bản nào hỗ trợ văn bản thuần túy, chẳng hạn như Notepad cho Windows, TextEdit cho macOS hoặc Vim cho Linux.

5692759 3
5692759 3

Bước 3. Viết một số mã để chào người chơi

Người chơi sẽ muốn biết chuyện gì đang xảy ra và họ phải làm gì, vì vậy bạn nên in một số văn bản cho họ.

  • Điều này được thực hiện với hàm print () trong Python. Để dùng thử, hãy mở một tệp mới có phần mở rộng.py, nhập mã sau vào đó, lưu và chạy nó:

    print ("Chào mừng bạn đến với trò chơi đoán số!") print ("Nhập một số nguyên từ 1 đến 1000:")

5692759 4
5692759 4

Bước 4. Tạo một số ngẫu nhiên

Hãy tạo một trò chơi dựa trên văn bản yêu cầu người chơi đoán đúng số. Điều đầu tiên chúng ta cần làm là tạo một số ngẫu nhiên khi bắt đầu trò chơi để người chơi không phải lúc nào cũng đoán cùng một số. Vì số sẽ không đổi trong suốt chương trình, nên bạn sẽ muốn lưu số ngẫu nhiên trong một biến.

  • Python không có hàm số ngẫu nhiên được tích hợp sẵn, nhưng nó có một thư viện tiêu chuẩn (điều này có nghĩa là người dùng sẽ không phải cài đặt thêm bất kỳ thứ gì). Vì vậy, hãy chuyển đến đầu mã của bạn (trước các hàm print ()) và nhập dòng nhập ngẫu nhiên.
  • Sử dụng chức năng ngẫu nhiên. Nó được gọi là randint (), nằm trong thư viện ngẫu nhiên mà bạn vừa nhập và lấy giá trị tối thiểu và lớn nhất mà số có thể có làm đối số. Vì vậy, hãy quay lại cuối mã của bạn và nhập dòng sau:

    rightNum = random.randint (0, 1000)

5692759 5
5692759 5

Bước 5. Nhận thông tin đầu vào từ người chơi

Trong một trò chơi, người chơi muốn làm điều gì đó hoặc tương tác với một thứ gì đó. Trong một trò chơi dựa trên văn bản, điều này có thể thực hiện được bằng cách nhập văn bản. Bây giờ chúng ta có một số ngẫu nhiên, các dòng mã tiếp theo của chúng ta sẽ yêu cầu người chơi nhập dự đoán tốt nhất của họ.

  • Vì mã bạn nhập sẽ in hướng dẫn nhập số cho người chơi, nên nó cũng sẽ đọc số họ nhập. Điều này được thực hiện với input () trong Python 3 và raw_input () trong Python 2. Bạn nên viết bằng Python 3, vì Python 2 sẽ sớm lỗi thời. Thêm dòng sau vào mã của bạn để lưu dữ liệu đầu vào của người chơi trong một biến được gọi là số:

    userNum = input ()

5692759 6
5692759 6

Bước 6. Chuyển đầu vào của người chơi thành kiểu dữ liệu có thể sử dụng được

Người chơi đã nhập một số-bây giờ là gì?

  • Đặt đầu vào của người chơi là một số. Bây giờ, điều này nghe có vẻ khó hiểu vì họ vừa nhập một số. Nhưng có một lý do chính đáng: Python giả định rằng tất cả đầu vào là văn bản hoặc "chuỗi", như nó được gọi trong lập trình. Văn bản này chứa số bạn muốn lấy. Python có một hàm chuyển đổi một chuỗi chỉ chứa một số thành số bên trong. Kiểu:

    userNum = int (userNum)

5692759 7
5692759 7

Bước 7. So sánh số của người chơi với số chính xác

Sau khi người chơi nhập số của họ, bạn sẽ cần so sánh số đó với số được tạo ngẫu nhiên. Nếu các số không giống nhau, trò chơi của bạn có thể khiến người chơi thử một số khác. Nếu các con số trùng khớp, bạn có thể cho người chơi biết họ đoán đúng và thoát khỏi chương trình. Điều này được thực hiện với mã sau:

trong khi userNum! = rightNum: userNum = int (input ())

5692759 8
5692759 8

Bước 8. Cung cấp cho người chơi phản hồi

Trong khi bạn đã xử lý thông tin đầu vào của họ, người chơi sẽ không thấy điều này. Bạn sẽ cần thực sự in kết quả cho người chơi để họ hiểu điều gì đang xảy ra.

  • Chắc chắn, bạn có thể chỉ cho người chơi biết số của họ là đúng hay sai. Nhưng với cách làm đó, người chơi có thể phải đoán 1000 lần trong trường hợp xấu nhất, điều này sẽ rất nhàm chán.
  • Vì vậy, hãy cho người chơi biết số lượng của họ quá nhỏ hay quá lớn. Điều này sẽ làm giảm đáng kể số lần đoán của họ. Ví dụ: nếu người chơi đoán 500 đầu tiên và trò chơi trả lời "Quá lớn. Hãy thử lại", sẽ chỉ có 500 số có thể thay vì 1000. Điều này được thực hiện với cấu trúc if, vì vậy hãy thay thế chữ in ("Sai. Hãy thử lại. ") Với một.
  • Hãy lưu ý rằng việc kiểm tra xem hai số có giống nhau hay không được thực hiện với == chứ không phải với =. = gán giá trị bên phải của nó cho biến bên trái của nó!
  • if userNum <rightNum: print ("Quá nhỏ. Thử lại:") if userNum> rightNum: print ("Quá lớn. Thử lại:")

5692759 9
5692759 9

Bước 9. Kiểm tra mã của bạn

Là một lập trình viên, bạn nên chắc chắn rằng mã của bạn hoạt động trước khi xem xét nó hoàn thành.

  • Khi lập trình bằng python, hãy đảm bảo rằng bạn nhận được các thụt lề chính xác. Mã của bạn sẽ trông như thế này:

    import random print ("Chào mừng bạn đến với trò chơi đoán số!") print ("Nhập một số nguyên từ 1 đến 1000:") rightNum = random.randint (0, 1000) userNum = input () userNum = int (userNum) while userNum! = rightNum: if userNum <rightNum: print ("Quá nhỏ. Thử lại:") if userNum> rightNum: print ("Quá lớn. Thử lại:") userNum = int (input ()) print ("Bạn đoán chính xác. ")

5692759 10
5692759 10

Bước 10. Xác thực đầu vào

Người chơi sẽ không thể phá vỡ trò chơi của bạn chỉ bằng cách nhập sai thứ. "Xác thực đầu vào" có nghĩa là đảm bảo người chơi đã nhập đúng thứ trước khi xử lý.

  • Mở lại trò chơi và thử nhập bất kỳ thứ gì không phải là số. Trò chơi sẽ thoát ra với một ValueError. Để tránh điều này, bạn có thể thực hiện một cách để kiểm tra xem đầu vào có phải là một số hay không.
  • Xác định một chức năng. Vì xác thực đầu vào là khá lâu và bạn phải thực hiện nhiều lần, bạn nên xác định một hàm. Nó sẽ không có đối số và trả về một số. Đầu tiên, viết def numInput (): ở đầu mã của bạn, ngay dưới nhập ngẫu nhiên.
  • Nhận đầu vào của người chơi một lần. Sử dụng hàm input () và gán kết quả cho biến inp.
  • Khi đầu vào của người chơi không phải là một số, hãy yêu cầu họ nhập một số. Để kiểm tra xem một chuỗi có phải là số hay không, hãy sử dụng các hàm isdigit (), hàm này chỉ cho phép một số nguyên, vì vậy bạn sẽ không phải kiểm tra riêng.
  • Nếu đầu vào là một số, hãy chuyển nó từ chuỗi thành số và trả về kết quả. Sử dụng hàm int () để chuyển đổi chuỗi thành số nguyên. Điều này sẽ làm cho việc chuyển đổi trong mã chính trở nên không cần thiết và bạn nên xóa nó khỏi đó.
  • Thay thế tất cả các lệnh gọi tới input () trong mã chính bằng các lệnh gọi tới numInput ().
  • Mã của hàm numInput () sẽ giống như sau:
  • def numInput (): inp = input () while not inp.isdigit (): print ("Bạn được yêu cầu nhập số nguyên! Nhập số nguyên:") inp = input () return int (inp)

5692759 11
5692759 11

Bước 11. Kiểm tra lại trò chơi

Nhập những điều sai có chủ đích để xem điều gì sẽ xảy ra và sau đó sửa bất kỳ lỗi nào khi chúng xuất hiện.

Hãy thử nhập một số văn bản khi chương trình hỏi bạn một số. Bây giờ, thay vì thoát ra với một thông báo lỗi, chương trình sẽ yêu cầu bạn nhập lại một số

5692759 12
5692759 12

Bước 12. Đề nghị khởi động lại trò chơi khi nó kết thúc

Bằng cách này, người chơi có thể chơi trò chơi của bạn trong một thời gian dài hơn mà không cần phải liên tục khởi động lại.

  • Đặt tất cả mã ngoại trừ nhập và định nghĩa hàm vào một vòng lặp trong khi. Đặt True làm điều kiện: điều này sẽ luôn đúng, vì vậy vòng lặp sẽ tiếp tục mãi mãi.
  • Hỏi người chơi xem họ có muốn chơi lại sau khi họ đoán đúng số hay không. Sử dụng hàm print ().
  • Nếu họ trả lời "Không", hãy thoát ra khỏi cái nhìn. Nếu họ trả lời bất cứ điều gì khác, hãy tiếp tục. Việc thoát ra khỏi vòng lặp được thực hiện với câu lệnh break.
  • Di chuyển "Chào mừng bạn đến với trò chơi đoán số" bên ngoài vòng lặp while. Người chơi chắc hẳn không muốn được chào đón mỗi khi chơi game. Di chuyển bản in hướng dẫn ("Chào mừng bạn đến với trò chơi đoán số!" Phía trên True:, để nó chỉ được in một lần, khi người dùng bắt đầu trò chơi đầu tiên.
5692759 13
5692759 13

Bước 13. Chạy thử trò chơi

Bạn sẽ cần phải kiểm tra trò chơi của mình mỗi khi bạn triển khai một tính năng mới.

  • Đảm bảo trả lời cả "Có" và "Không" ít nhất một lần để đảm bảo rằng cả hai tùy chọn đều hoạt động. Đây là mã của bạn sẽ trông như thế nào:

    import random def numInput (): inp = input () while not inp.isdigit (): print ("Bạn được yêu cầu nhập một số nguyên! Nhập một số nguyên:") inp = input () return int (inp) print ("Chào mừng bạn đến với trò chơi đoán số!") Trong khi True: print ("Nhập một số nguyên từ 1 đến 1000:") rightNum = random.randint (0, 1000) userNum = numInput () while userNum! = RightNum: if userNum <rightNum: print ("Quá nhỏ. Thử lại:") if userNum> rightNum: print ("Quá lớn. Thử lại:") userNum = numInput () print ("Bạn đoán đúng.") print ("Bạn có muốn chơi lại không? Nhập No để thoát. ") if input () ==" No ": break

5692759 14
5692759 14

Bước 14. Viết các trò chơi dựa trên văn bản khác

Làm thế nào về việc viết một cuộc phiêu lưu văn bản tiếp theo? Hay một trò chơi đố vui? Sáng tạo.

Mẹo: Đôi khi sẽ hữu ích khi xem tài liệu nếu bạn không chắc chắn về cách thức thực hiện điều gì đó hoặc cách một hàm được sử dụng. Tài liệu Python 3 được tìm thấy tại https://docs.python.org/3/. Đôi khi tìm kiếm bất cứ điều gì bạn muốn làm trên internet cũng mang lại kết quả tốt.

Phần 2 của 3: Làm trò chơi với đồ họa 2D

5692759 15
5692759 15

Bước 1. Chọn một thư viện đồ họa

Tạo đồ họa rất phức tạp và hầu hết các ngôn ngữ lập trình (bao gồm Python, C ++, C, JavaScript) chỉ cung cấp hỗ trợ tối thiểu hoặc thậm chí không hỗ trợ cho đồ họa trong thư viện lõi hoặc thư viện tiêu chuẩn. Vì vậy, bạn sẽ phải sử dụng một thư viện bên ngoài để có thể tạo đồ họa, ví dụ như Pygame cho Python.

Ngay cả với thư viện đồ họa, bạn sẽ phải lo lắng về những thứ như cách hiển thị menu, cách kiểm tra những gì người chơi đã nhấp, cách hiển thị các ô, v.v. Nếu bạn muốn tập trung vào việc phát triển trò chơi thực tế, bạn có thể sử dụng thư viện công cụ trò chơi như Unity, thực hiện những điều này một cách dễ dàng

Bài viết này sẽ sử dụng Python với Cocos2D để hướng dẫn cách tạo một platformer 2D đơn giản. Một số khái niệm được đề cập có thể không tồn tại trong các game engine khác. Tham khảo tài liệu của họ để biết thêm thông tin.

5692759 16
5692759 16

Bước 2. Cài đặt thư viện đồ họa bạn đã chọn

Cocos2D cho Python rất dễ cài đặt. Bạn có thể lấy nó từ https://python.cocos2d.org/index.html hoặc bằng cách chạy sudo pip3 install cocos2d nếu bạn đang sử dụng Linux.

5692759 17
5692759 17

Bước 3. Tạo một thư mục mới cho trò chơi và phương tiện của bạn

Bạn sẽ sử dụng những thứ như hình ảnh và âm thanh trong trò chơi của mình. Giữ những thứ này trong cùng một thư mục với chương trình. Thư mục này không được chứa bất kỳ thứ gì khác để bạn có thể dễ dàng xem nội dung bạn có trong trò chơi.

5692759 18
5692759 18

Bước 4. Tạo một tệp mã mới trong thư mục mới

Gọi nó là chính, với phần mở rộng tệp cho ngôn ngữ lập trình của bạn. Nếu bạn viết một chương trình lớn và phức tạp khi có nhiều tệp chương trình, điều này sẽ cho bạn biết đâu là tệp chính.

Trong ví dụ này, chúng tôi sẽ tạo một tệp có tên main.py sẽ chứa tất cả mã của chúng tôi

5692759 19
5692759 19

Bước 5. Tạo cửa sổ trò chơi

Đây là điều kiện tiên quyết cơ bản cho một game có đồ họa.

  • Nhập các mô-đun con cocos2d cần thiết: cocos.director, cocos.scene và cocos.layer. Điều này được thực hiện với từ subModuleName import *, trong đó tên Sub-Module là submodule mà bạn muốn nhập. Sự khác biệt giữa từ… nhập * và nhập… là bạn không phải đặt tên mô-đun trước mọi thứ bạn sử dụng từ mô-đun đó với tên mô-đun trước đó.
  • Xác định một lớp con MainMenuBgr của ColorLayer. Về cơ bản, điều này có nghĩa là bất kỳ nền menu chính nào bạn tạo sẽ hoạt động giống như một lớp màu với một số thay đổi bạn thực hiện.
  • Bắt đầu giám đốc cocos. Điều này sẽ cung cấp cho bạn một cửa sổ mới. Nếu bạn không đặt chú thích, cửa sổ sẽ có chú thích giống như tên tệp (main.py), trông sẽ không chuyên nghiệp. Cho phép thay đổi kích thước cửa sổ bằng cách đặt có thể thay đổi kích thước thành True.
  • Xác định một hàm showMainMenu. Bạn nên đặt mã hiển thị menu chính vào một hàm vì điều này sẽ cho phép bạn dễ dàng quay lại menu chính bằng cách gọi lại hàm.
  • Tạo cảnh. Hiện tại, khung cảnh bao gồm một lớp, là một đối tượng của lớp MainMenuBgr mà bạn đã xác định.
  • Chạy cảnh này trong cửa sổ.
  • from cocos.director import * from cocos.scene import * from cocos.layer import * class MainMenuBgr (ColorLayer): def _init _ (self): super (MainMenu, self)._ init _ (0, 200, 255, 255) def showMainMenu (): menuSc = Scene (MainMenuBgr ()) director.run (menuSc) director.init (caption = "IcyPlat - a simple platformer", resizable = True) showMainMenu ()

5692759 20
5692759 20

Bước 6. Thêm menu chính vào cửa sổ

Bên cạnh trò chơi thực tế, bạn sẽ cần thêm một menu mà người chơi có thể sử dụng để đóng cửa sổ, trong số các yếu tố khác mà bạn có thể thêm sau này.

  • Nhập cocos.menu (một lần nữa với hướng dẫn từ) và pyglet.app (lần này với nhập).
  • Định nghĩa MainMenu là một lớp con của Menu.
  • Đặt căn chỉnh của menu chính. Bạn phải đặt căn chỉnh dọc và ngang riêng biệt.
  • Tạo danh sách các mục menu và thêm chúng vào menu. Bạn nên có ít nhất các mục menu "Bắt đầu trò chơi" và "Thoát". Mọi mục menu nên được đặt bên trong dấu ngoặc. Mỗi mục phải có nhãn và chức năng gọi lại để xác định điều gì sẽ xảy ra khi người chơi nhấp vào nó. Đối với mục "Bắt đầu trò chơi", hãy sử dụng hàm startGame (bạn sẽ sớm viết nó), đối với mục "Quit", hãy sử dụng "pyglet.app.exit" (đã tồn tại). Tạo menu thực bằng cách gọi self.create_menu (menuItems).
  • Định nghĩa startGame (). Bây giờ chỉ cần đặt pass vào định nghĩa, bạn sẽ thay thế nó khi bạn viết trò chơi thực tế.
  • Đi đến vị trí trong mã của bạn nơi bạn đã tạo cảnh menuSc và thêm một đối tượng MainMenu vào đó.
  • Toàn bộ mã của bạn bây giờ sẽ trông như sau:

    từ nhập cocos.director * từ nhập cocos.menu * từ nhập cocos.scene * từ nhập cocos.layer * nhập lớp pyglet.app MainMenuBgr (ColorLayer): def _init _ (self): super (MainMenuBgr, self)._ init _ (0, 200, 255, 255) class MainMenu (Menu): def _init _ (self): super (MainMenu, self)._ init _ ("") self.menu_valign = CENTER self.menu_halign = CENTER menuItems = [(MenuItem ("Start Game ", startGame)), (MenuItem (" Quit ", pyglet.app.exit))] self.create_menu (menuItems) def startGame (): pass def showMainMenu (): menuSc = Scene (MainMenuBgr ()) menuSc.add (MainMenu ()) director.run (menuSc) director.init (caption = "IcyPlat - a simple platformer", resizable = True) showMainMenu ()

5692759 21
5692759 21

Bước 7. Kiểm tra mã của bạn

Kiểm tra mã sớm, mặc dù nó vẫn còn ngắn và tương đối đơn giản. Sau đó, bạn có thể xác định và sửa bất kỳ lỗi nào trong cấu trúc cơ bản trước khi mọi thứ trở nên quá phức tạp.

Mã từ các hướng dẫn sẽ mở ra một cửa sổ có chú thích "IcyPlat - một platformer đơn giản." Nền có màu xanh lam nhạt và bạn có thể thay đổi kích thước cửa sổ. Khi bạn nhấp vào "Bắt đầu trò chơi" trên menu, không có gì sẽ xảy ra (chưa). Khi bạn nhấp vào "Thoát", cửa sổ sẽ đóng lại

5692759 22
5692759 22

Bước 8. Tạo một sprite

Sprite là một "đối tượng trò chơi" hoặc một hình ảnh 2 chiều. Sprites có thể là đối tượng trong trò chơi, biểu tượng, trang trí nền, nhân vật và bất kỳ thứ gì khác mà bạn có thể đại diện bằng hình ảnh trong trò chơi. Chúng tôi sẽ bắt đầu bằng cách tạo mô hình cho một nhân vật mà người chơi có thể tương tác.

  • Nhập mô-đun con cocos.sprite bằng biểu thức from-import.
  • Tìm một hình ảnh để đại diện cho sprite. Bạn không thể hiển thị một sprite nếu bạn không có hình ảnh cho nó. Bạn có thể vẽ một hoặc bạn có thể lấy một từ internet (tuy nhiên, hãy để ý các giấy phép nếu bạn định xuất bản trò chơi của mình). Đối với ví dụ này, hãy truy cập https://opengameart.org/content/tux-classic-hero-style và lưu hình ảnh-p.webp" />
  • Tạo một lớp như một đối tượng mới của lớp ScrollableLayer. Sau đó, tạo sprite dưới dạng đối tượng Sprite và đặt vị trí của nó thành (8, 250). Để tham khảo, điểm (0, 0) nằm ở góc dưới cùng bên trái. Mức này khá cao, nhưng nó sẽ đảm bảo rằng chú chim cánh cụt không bị mắc kẹt trong băng.
  • Thêm sprite vào lớp của sprite.
  • Tạo một cảnh mới từ layer của sprite và chạy nó.
  • def startGame (): figLayer = ScrollableLayer () fig = Sprite ('pingu.png') fig.position = (75, 100) figLayer.add (fig) # gameSc = Scene (figLayer) director.run (gameSc)

  • Chạy mã. Bạn sẽ thấy một hình chim cánh cụt nhỏ (hoặc bất cứ thứ gì bạn đã vẽ) trên nền đen sau khi bạn nhấp vào Bắt đầu trò chơi.
5692759 23
5692759 23

Bước 9. Mơ ước phong cảnh của bạn

Trong hầu hết các trò chơi, các sprite của bạn không nên trôi nổi trong khoảng không. Họ thực sự nên đứng trên một bề mặt nào đó, với một thứ gì đó xung quanh họ. Trong các trò chơi 2D, điều này thường được thực hiện với một bộ ô xếp và một bản đồ ô. Bộ gạch về cơ bản cho biết loại hình vuông bề mặt và hình vuông nền tồn tại, và chúng trông như thế nào.

  • Tạo một tập hợp gạch. Bộ xếp hình cho trò chơi này sẽ rất cơ bản: một ô cho băng và một ô cho bầu trời. Viên đá được sử dụng trong ví dụ này là từ đây, theo CC-BY-SA 3.0.
  • Tạo hình ảnh bộ xếp hình. Đó là hình ảnh của tất cả các ô, tất cả phải có cùng kích thước (chỉnh sửa nếu không) và có kích thước bạn muốn xem trong trò chơi, cạnh nhau. Lưu ảnh của bạn dưới dạng icyTiles.png.
  • Tạo mô tả bộ xếp hình. Đó là một tệp XML. Tệp XML chứa thông tin về kích thước của các ô trong hình ảnh bộ ô, hình ảnh nào sẽ sử dụng và tìm ô xếp ở đó ở đâu. Tạo tệp XML có tên icyTiles.xml với mã bên dưới:

         
    
5692759 24
5692759 24

Bước 10. Lập bản đồ xếp hình cho cảnh quan của bạn

Bản đồ ô là một bản đồ xác định ô nằm ở vị trí nào trong cấp độ của bạn. Trong ví dụ này, bạn nên xác định một chức năng để tạo bản đồ ô vì việc thiết kế bản đồ ô bằng tay rất tẻ nhạt. Một trò chơi nâng cao hơn thường sẽ có một số loại trình chỉnh sửa cấp độ, nhưng để làm quen với việc phát triển trò chơi 2D, một thuật toán có thể cung cấp các cấp độ đủ tốt.

  • Tìm ra bao nhiêu hàng và cột là cần thiết. Đối với điều này, hãy chia kích thước màn hình cho kích thước ô theo cả chiều ngang (cột) và chiều dọc (hàng). Làm tròn số lên trên; bạn cần một chức năng của mô-đun toán học cho điều đó, vì vậy hãy thêm từ khóa nhập toán học vào các nhập ở đầu mã của bạn.
  • Mở một tệp để viết. Thao tác này sẽ xóa tất cả nội dung trước đó của tệp, vì vậy hãy chọn tên mà chưa có tệp nào trong thư mục, như levelMap.xml.
  • Viết các thẻ mở vào tệp.
  • Tạo bản đồ ô theo thuật toán. Bạn sử dụng một mã trong đoạn mã dưới đây hoặc bạn có thể tự tạo một mã. Đảm bảo nhập hàm randint từ mô-đun ngẫu nhiên: nó bắt buộc phải có để mã bên dưới hoạt động và bất cứ thứ gì bạn nghĩ ra có thể cũng sẽ cần số nguyên ngẫu nhiên. Ngoài ra, hãy đảm bảo đặt gạch bầu trời và gạch băng ở các lớp khác nhau: băng là rắn, bầu trời thì không.
  • Viết các thẻ đóng vào tệp và đóng tệp.
  • def createTilemap (): colAmount = ceil (800/16) * 3 # (độ rộng màn hình / kích thước ô) * 3 rowAmount = ceil (600/16) # chiều cao màn hình / kích thước ô xếp ngóiFile = open ("levelMap.xml", " w ") tileFile.write ('\ n / n / n') iceHeight = randint (1, 10) cho tôi trong phạm vi (0, colAmount): tileFile.write ('') makeHole = False nếu randint (0, 50) == 10 và i! = 0: # không cho phép lỗ tại điểm sinh sản makeHole = True cho j trong phạm vi (0, rowAmount): if makeHole: tileFile.write ('\ n') else: if j <= iceHeight: tileFile.write ('\ n') else: tileFile.write ('\ n') iceHeight = randint (iceHeight-5, iceHeight + 5) nếu iceHeight <0: # giới hạn ô không xuống quá thấp iceHeight = randint (1, 5) if iceHeight> rowAmount: # giới hạn các ô khỏi quá cao iceHeight = randint (int (rowAmount / 2) -5, int (rowAmount / 2) +5) tileFile.write ('\ n') tileFile.write ('\ n / n') cho tôi trong phạm vi (0, colAmount): ngóiFile.write ('') cho j trong phạm vi (0, rowAmount): ngóiFile.write ('\ n') ngóiFile.write ('\ n ') tileFile.write (' / n / n ') tileFile.close ()

5692759 25
5692759 25

Bước 11. Hiển thị bản đồ ô

Nhập mọi thứ từ cocos.tiles và sau đó đi vào hàm startGame cho điều đó.

  • Khi bắt đầu chức năng startGame của bạn, hãy tạo một bản đồ ô bằng cách sử dụng chức năng bạn đã xác định cho chức năng đó.
  • Tạo trình quản lý cuộn mới. Làm điều này ngay dưới dòng nơi bạn thêm sprite vào lớp của nó.
  • Tạo một lớp mới chứa các ô, lớp này sẽ được tải từ bản đồ ô levelMap.xml mà hàm createTilemap của bạn đã tạo.
  • Thêm lớp không rắn, lớp rắn và lớp sprite vào trình quản lý cuộn, chính xác theo thứ tự này. Bạn có thể thêm vị trí z nếu muốn.
  • Thay vì tạo cảnh từ lớp sprite, hãy tạo cảnh đó từ trình quản lý cuộn.
  • Hàm startGame của bạn bây giờ sẽ giống như sau:

    def startGame (): createTilemap () # fig = Sprite ('pingu.png') fig.position = (8, 500) figLayer = ScrollableLayer () figLayer.add (fig) # tileLayer = load ('levelMap.xml') solidTiles = tileLayer ['solid'] nsoliTiles = tileLayer ['not_solid'] # scrMang = ScrollingManager () scrMang.add (nsoliTiles, z = -1) scrMang.add (solidTiles, z = 0) scrMang.add (figLayer, z = 1) # gameSc = Cảnh (scrMang) director.run (gameSc)

5692759 26
5692759 26

Bước 12. Kiểm tra mã của bạn

Bạn nên kiểm tra mã của mình thường xuyên để đảm bảo rằng các tính năng mới mà bạn đã triển khai thực sự hoạt động.

Đoạn mã trong ví dụ bây giờ sẽ hiển thị một số cảnh quan băng giá phía sau chú chim cánh cụt. Nếu chú chim cánh cụt trông giống như đang bay lơ lửng trên mặt băng thì bạn đã không làm gì sai và nó sẽ được khắc phục ở bước tiếp theo

5692759 27
5692759 27

Bước 13. Thêm các điều khiển

Người chơi có nhiều cách để tương tác với chương trình trong trò chơi 2D hơn là trong trò chơi dựa trên văn bản. Một phổ biến bao gồm di chuyển hình của họ khi nhấn đúng phím.

  • Nhập mọi thứ từ cocos.mapcolliders và từ cocos.actions. Cũng nhập khóa từ pyglet.window.
  • "Khai báo" một số biến toàn cục. Các biến toàn cục được chia sẻ giữa các hàm. Bạn thực sự không thể khai báo các biến trong Python, nhưng bạn phải nói rằng một biến toàn cục tồn tại trong mã chính trước khi sử dụng nó. Bạn có thể gán giá trị 0 vì một hàm sẽ đảm nhiệm việc gán giá trị chính xác sau này. Vì vậy, hãy thêm vào bên dưới các biểu thức nhập:

    # "khai báo" biến toàn cục keyboard = 0 scrMang = 0

  • Điều chỉnh chức năng startGame của bạn:

    • Giả sử rằng bạn sử dụng bàn phím biến toàn cục và scrMang. Làm điều này bằng cách viết bàn phím toàn cục, scrMang ở đầu hàm.
    • Làm cho cửa sổ lắng nghe các sự kiện bàn phím.
    • Yêu cầu con số hoạt động dựa trên PlatformerController. Bạn sẽ sớm triển khai PlatformerController đó.
    • Tạo một máy va chạm bản đồ để xử lý các va chạm giữa các ô đặc và hình.

    def startGame (): global keyboard, scrMang generateTilemap () # fig = Sprite ('pingu.png') fig.position = (8, 250) figLayer = ScrollableLayer () figLayer.add (fig) # tileLayer = load ('levelMap.xml ') solidTiles = tileLayer [' solid '] nsoliTiles = tileLayer [' not_solid '] # keyboard = key. KeyStateHandler () director.window.push_handlers (keyboard) # fig.do (PlatformerController ()) mapcollider = RectMapCollider (speed_on_bump = 'slide') fig.collision_handler = make_collision_handler (mapcollider, solidTiles) # scrMang = ScrollingManager () scrMang.add (nsoliTiles, z = -1) scrMang.add (solidTiles, z = 0) scrMang.add (figLayer, z = 1) # gameSc = Cảnh (scrMang) director.run (gameSc)

  • Tạo bộ điều khiển platformer. Đây là những gì sẽ di chuyển hình theo các lần nhấn phím của bạn.

    • Xác định bộ điều khiển platformer như một lớp con của Hành động.
    • Xác định tốc độ di chuyển, tốc độ nhảy và trọng lực.
    • Xác định chức năng bắt đầu. Chức năng này được gọi một lần, khi bộ điều khiển platformer được kết nối với hình. Nó sẽ đặt tốc độ của nó thành 0 cả theo hướng x và y.
    • Xác định chức năng bước. Nó sẽ được lặp lại trong khi cảnh đang chạy.
    • Yêu cầu hàm bước sử dụng bàn phím biến toàn cục và scrMang.
    • Nhận và thay đổi vận tốc. Lưu vận tốc x và y trong các biến riêng biệt. Đặt vận tốc x thành 1 hoặc -1 (tùy thuộc vào việc nhấn phím trái hay phải) nhân với tốc độ di chuyển. Thêm trọng lực với vận tốc y. Nhân nó với thời gian chết để nó hoạt động theo cùng một cách trên các thiết bị chậm hơn. Nếu nhấn phím khoảng trắng và hình người đang đứng trên mặt đất, hãy nhảy bằng cách thay đổi vận tốc y thành tốc độ nhảy.
    • Tính toán đến vị trí mà hình sẽ di chuyển. Sau đó, hãy để trình xử lý va chạm điều chỉnh vị trí đó nếu nó nằm bên trong một viên gạch đặc. Cuối cùng, di chuyển con số đến vị trí điều chỉnh mới.
    • Đặt tiêu điểm của trình quản lý cuộn trên hình. Điều này làm cho máy ảnh di chuyển một cách hợp lý khi hình di chuyển.

    class PlatformerController (Action): global keyboard, scrMang on_ground = True MOVE_SPEED = 300 JUMP_SPEED = 500 GRAVITY = -1200 def start (self): self.target.velocity = (0, 0) def step (self, dt): global keyboard, cuộn nếu dt> 0,1: # không làm gì cả trong khi thời gian chết để trả về lớn vx, vy = self.target.velocity vx = (keyboard [key. RIGHT] - keyboard [key. LEFT]) * self. MOVE_SPEED vy + = self. GRAVITY * dt if self.on_ground and keyboard [key. SPACE]: vy = self. JUMP_SPEED dx = vx * dt dy = vy * dt last = self.target.get_rect () new = last.copy () new.x + = dx new.y + = dy self.target.velocity = self.target.collision_handler (last, new, vx, vy) self.on_ground = (new.y == last.y) self.target.position = new.center scrMang.set_focus (* new.center)

5692759 28
5692759 28

Bước 14. Kiểm tra mã của bạn

Nếu bạn đã làm theo ví dụ, bây giờ bạn sẽ có thể di chuyển chim cánh cụt bằng các phím mũi tên và nhảy bằng cách nhấn phím cách. Ngoài ra, chú chim cánh cụt bây giờ sẽ rơi xuống thay vì bay lơ lửng trên mặt đất.

5692759 29
5692759 29

Bước 15. Tạo phần kết cho trò chơi

Ngay cả những trận đấu có thể diễn ra liên tục cũng có khả năng bị thua. Vì cấp độ bạn thực hiện trong ví dụ với một hàm có kết thúc, nên bạn cũng cần phải làm cho nó có thể giành chiến thắng bằng cách đến cuối cấp độ đó. Nếu không, người chơi sẽ chỉ nhảy xung quanh các khối băng ở đó, điều này sẽ gây nhàm chán.

  • Bên trong bộ điều khiển platformer, sau khi đặt tiêu điểm, hãy lấy vị trí x và y của hình. Nếu vị trí y nhỏ hơn 0, hãy gọi hàm finishGame () (bạn sẽ viết nó sau) với "Game Over" làm đối số. Nếu vị trí x lớn hơn kích thước của màn hình nhân với 3 (trước đó bạn đã đặt nó làm kích thước cấp).

    posX, posY = self.target.position if posY <0: finishGame ("Game Over") trả về nếu posX> 800 * 3: # level size finishGame ("Level hoàn thành") trả về

  • Xác định một lớp finishMenu. Nó sẽ giống như lớp menu chính mà bạn đã xác định trước đó, nhưng thay vì có một chuỗi trống làm tiêu đề, nó phải sử dụng một văn bản biến mà hàm _init_ lấy làm đối số. Các mục menu nên được gắn nhãn "Thử lại" và "Thoát" ngay bây giờ, nhưng các chức năng mà chúng gọi vẫn giữ nguyên.

    class FinishMenu (Menu): def _init _ (self, text): super (FinishMenu, self)._ init _ (text) self.menu_valign = CENTER self.menu_halign = CENTER menuItems = [(MenuItem ("Thử lại", startGame)), (MenuItem ("Thoát", pyglet.app.exit))] self.create_menu (menuItems)

  • Định nghĩa hàm finishGame (). Nó phải lấy văn bản làm đối số. Nó sẽ tạo một cảnh ngoài nền menu chính, một FinishMenu với đối số văn bản được chuyển vào menu này. Sau đó, nó sẽ chạy cảnh này.

    def finishGame (text): menuSc = Scene (MainMenuBgr ()) menuSc.add (FinishMenu (text)) director.run (menuSc)

5692759 30
5692759 30

Bước 16. Thêm tín dụng

Đây là nơi bạn nhận được tín dụng cho mã tuyệt vời của mình, cũng như ghi công cho bất kỳ ai khác đã giúp bạn trong suốt chặng đường. Nếu bạn đã sử dụng hình ảnh từ một trang web khác (với sự cho phép), hãy nhớ gán hình ảnh đó cho người tạo ra hình ảnh đó.

  • Tạo một tệp CREDITS và nhập tất cả các khoản tín dụng của bạn vào đó, như sau:

    Penguin: Kelvin Shadewing, dưới khối băng CC0: Michał Banas digit1024 trên opengameart.org theo CC-BY-SA 3.0

  • Quay lại mã Python của bạn và nhập Nhãn từ cocos.text.
  • Xác định một lớp con Tín dụng của Lớp. Trong hàm _init_ của nó, hãy đọc tệp CREDITS và tạo nhãn văn bản ở vị trí chính xác của mọi dòng trong đó.

    class Credits (Lớp): def _init _ (self): super (Credits, self)._ init _ () credFile = open ("CREDITS", "r") creds = credFile.read () creds = creds.split ("\ n ") cho tôi trong phạm vi (0, len (creds)): credLabel = Label (creds , font_size = 32, anchor_x =" left ", anchor_y =" top ") credLabel.position = 25, 500- (i +1) * 40 self.add (credLabel)

  • Chuyển đến lớp menu chính của bạn và thêm một mục menu có nhãn "Tín dụng" sẽ gọi hàm showCredits khi được nhấp vào.
  • Xác định một lớp con BackToMainMenuButton của Menu. Tạo menu này với một mục, có nhãn "Quay lại", gọi hàm showMainMenu. "Menu" này, giống như một nút hơn, nên được căn chỉnh theo chiều dọc ở dưới cùng và theo chiều ngang ở trên cùng.

    class BackToMainMenuButton (Menu): def _init _ (self): super (BackToMainMenuButton, self)._ init _ ("") self.menu_valign = BOTTOM self.menu_halign = LEFT menuItems = [(MenuItem ("Back"), showMainMenu. create_menu (menuItems)

  • Xác định hàm showCredits. Nó sẽ tạo một cảnh từ lớp MainMenuBgr và lớp Tín dụng và chạy cảnh đó.

    def showCredits (): credSc = Scene (MainMenuBgr ()) credSc.add (Credits ()) credSc.add (BackToMainMenuButton ()) director.run (credSc)

5692759 31
5692759 31

Bước 17. Kiểm tra mã của bạn

Khi bạn nghĩ rằng bạn đã hoàn thành mã của mình, bạn nên xem lại tất cả. Điều này có thể giúp bạn biết được liệu có điều gì đó có thể được tối ưu hóa hay không hoặc có một số dòng không cần thiết mà bạn quên xóa hay không. Nếu bạn đã làm theo ví dụ, toàn bộ mã của bạn bây giờ sẽ trông như sau:

    từ nhập cocos.director * từ nhập cocos.menu * từ nhập cocos.scene * từ nhập cocos.layer * từ nhập cocos.sprite * từ nhập cocos.tiles * từ nhập cocos.mapcolliders * từ nhập cocos.actions * từ cocos.text import Nhãn nhập khẩu pyglet.app từ khóa nhập pyglet.window từ toán học nhập ceil từ nhập ngẫu nhiên randint # "khai báo" biến toàn cục keyboard = 0 scrMang = 0 class MainMenuBgr (ColorLayer): def _init _ (self): super (MainMenuBgr, self)._ init _ (0, 200, 255, 255) class MainMenu (Menu): def _init _ (self): super (MainMenu, self)._ init _ ("") self.menu_valign = CENTER self.menu_halign = CENTER menuItems = [(MenuItem ("Start Game", startGame)), (MenuItem ("Credits", showCredits)), (MenuItem ("Quit", pyglet.app.exit))] self.create_menu (menuItems) class Tín dụng (Layer): def _init _ (self): super (Credits, self)._ init _ () credFile = open ("CREDITS", "r") creds = credFile.read () creds = creds.split ("\ n") cho tôi trong phạm vi (0, len (creds)): credLabel = Label (creds , font_size = 32, anchor_x = "left", anchor_y = "top") credLabel.position = 25, 500- (i + 1) * 40 self.add (credLabel) class BackToMainMenuButton (Menu): def _init _ (self): super (BackToMainMenuButton, self)._ init _ ("") self.menu_valign = BOTTOM self.menu_halign = LEFT menuItems = [(MenuItem ("Back", showMainMenu))] self.create_menu (menuItems) class FinishMenu (Menu): self, text): super (FinishMenu, self)._ init _ (text) self.menu_valign = CENTER self.menu_halign = CENTER menuItems = [(MenuItem ("Thử lại", startGame)), (MenuItem ("Thoát", pyglet. app.exit))] self.create_menu (menuItems) class PlatformerController (Action): global keyboard, scrMang on_ground = True MOVE_SPEED = 300 JUMP_SPEED = 500 GRAVITY = -1200 def start (self): self.target.velocity = (0, 0) def step (self, dt): global keyboard, scroller nếu dt> 0.1: # không làm gì cả khi thời gian chết quá lớn trả về vx, vy = self.target.velocity vx = (keyboard [key. RIGHT] - bàn phím [key. LEFT]) * self. MOVE_SPEED vy + = self. GRAVITY * dt nếu self.on _ground và bàn phím [key. SPACE]: vy = self. JUMP_SPEED dx = vx * dt dy = vy * dt last = self.target.get_rect () new = last.copy () new.x + = dx new.y + = dy self.target.velocity = self.target.collision_handler (last, new, vx, vy) self.on_ground = (new.y == last.y) self.target.position = new.center scrMang.set_focus (* new.center) posX, posY = self.target.position if posY <0: finishGame ("Game Over") trả về nếu posX> 800 * 3: # level size finishGame ("Level đã hoàn thành") trả về def finishGame (text): menuSc = Scene (MainMenuBgr ()) menuSc.add (FinishMenu (text)) director.run (menuSc) def showCredits (): credSc = Scene (MainMenuBgr ()) credSc.add (Credits ()) credSc.add (BackToMainMenuButton ()) Director.run (credSc) def createTilemap (): colAmount = ceil (800/16) * 3 # (chiều rộng màn hình / kích thước ô) * 3 rowAmount = ceil (600/16) # chiều cao màn hình / kích thước ô xếp ngóiFile = mở ("levelMap.xml", "w") tileFile.write ('\ n / n / n') iceHeight = randint (1, 10) cho tôi trong phạm vi (0, colAmount): tileFile.write ('') makeHole = Sai nếu rand int (0, 50) == 10 và i! = 0: # không cho phép lỗ tại điểm sinh sản makeHole = True for j trong range (0, rowAmount): if makeHole: tileFile.write ('\ n') else: if j <= iceHeight: tileFile.write ('\ n') else: tileFile.write ('\ n') iceHeight = randint (iceHeight-5, iceHeight + 5) nếu iceHeight <0: # giới hạn ô cũng không tiếp tục low iceHeight = randint (1, 5) if iceHeight> rowAmount: # giới hạn các ô từ quá cao iceHeight = randint (int (rowAmount / 2) -5, int (rowAmount / 2) +5) tileFile.write ('\ n ') tileFile.write (' / n / n ') cho tôi trong phạm vi (0, colAmount): ngóiFile.write (' ') cho j trong phạm vi (0, rowAmount): ngóiFile.write (' / n ') ngóiFile.write ('\ n') tileFile.write ('\ n / n') tileFile.close () def startGame (): global keyboard, scrMang generateTilemap () # fig = Sprite ('pingu.png') fig.position = (8, 250) figLayer = ScrollableLayer () figLayer.add (fig) # tileLayer = load ('levelMap.xml') solidTiles = tileLayer ['solid'] nsoliTiles = tileLayer ['not_solid'] # keyboard = key. KeyStateHandler () director.window.push_handlers (keybo ard) # fig.do (PlatformerController ()) mapcollider = RectMapCollider (speed_on_bump = 'slide') fig.collision_handler = make_collision_handler (mapcollider, solidTiles) # scrMang = ScrollingManager () scrMang.add (nsoliTiles -1) scrMang = -1. add (solidTiles, z = 0) scrMang.add (figLayer, z = 1) # gameSc = Scene (scrMang) director.run (gameSc) def showMainMenu (): menuSc = Scene (MainMenuBgr ()) menuSc.add (MainMenu ()) director.run (menuSc) window = director.init (caption = "IcyPlat - a simple platformer", resizable = True) showMainMenu ()

  • Đó là 168 dòng hoàn toàn, và 152 dòng nếu bạn chỉ đếm mã. Điều này làm có vẻ nhiều, nhưng đối với một trò chơi phức tạp như vậy, đây thực sự là một số tiền nhỏ.
5692759 32
5692759 32

Bước 18. Đã hoàn thành

Bây giờ hãy thử nghiệm trò chơi. Khi bạn lập trình một cái gì đó, bạn phải kiểm tra xem nó có hoạt động hay không bất cứ khi nào bạn triển khai một cái gì đó mới. Ngoài ra, bạn có thể muốn chơi trò chơi mà bạn đã viết trong một thời gian.

Phần 3/3: Xuất bản trò chơi

5692759 52
5692759 52

Bước 1. Viết ra các thành phần phụ thuộc

Bất kỳ ai sử dụng máy tính khác sẽ không được cài đặt phần mềm và thư viện giống như bạn. Vì vậy, bạn sẽ cần đảm bảo rằng tất cả những người cài đặt trò chơi của bạn đều biết chính xác những gì họ sẽ cần để chạy nó. Bạn không nhất thiết phải viết ra tất cả các phụ thuộc của tất cả các phụ thuộc của tất cả các phụ thuộc và vân vân, nhưng ít nhất bạn nên viết các phụ thuộc của các gói của bạn và các phụ thuộc của chúng.

5692759 53
5692759 53

Bước 2. Đảm bảo rằng bạn có quyền sử dụng tất cả các phương tiện

Điều này áp dụng cho tất cả đồ họa, bao gồm mô hình 3D, âm nhạc, hội thoại, âm nhạc, thư viện và khuôn khổ mà bạn đã sử dụng cho trò chơi của mình. Bất cứ điều gì bạn không viết cho mình.

  • Thường có một số điều kiện, chẳng hạn như phải ghi công tác giả hoặc chia sẻ các sửa đổi của phương tiện truyền thông theo cùng một giấy phép. Đôi khi bạn sẽ có thể sử dụng đồ họa mà không cần quy người sáng tạo miễn là bạn không tính phí trò chơi. Nếu bạn phải ghi công cho tác giả, hãy làm điều đó ở nơi dễ thấy, như tab "Ghi công" trong trò chơi của bạn.
  • Ngoài ra còn có phương tiện truyền thông được xác nhận bản quyền và không có giấy phép được chỉ định, đôi khi có một số văn bản như "Mọi quyền được bảo lưu". Nếu đúng như vậy, bạn phải được tác giả cho phép rõ ràng trước khi đưa nó vào trò chơi của bạn.
  • Các thư viện thường được phát hành theo giấy phép cho phép chúng được sử dụng làm thư viện. Một ngoại lệ đáng chú ý là GPL không có ngoại lệ liên kết: Giấy phép như vậy chỉ cho phép sử dụng nó trong một chương trình với một số giấy phép nhất định. Và bạn phải luôn đọc ít nhất những điểm cơ bản của giấy phép để đảm bảo rằng bất cứ điều gì bạn đang làm với phương tiện hoặc thư viện đều được phép.

Cảnh báo: Sử dụng phương tiện hoặc thư viện theo cách mà giấy phép không cho phép trong trò chơi mà bạn xuất bản có thể khiến bạn gặp rắc rối pháp lý nghiêm trọng. Vì vậy, hãy hỏi tác giả hoặc tránh hoàn toàn phần phương tiện truyền thông nếu bạn không chắc chắn về việc sử dụng của mình có được phép hay không.

5692759 54
5692759 54

Bước 3. Quyết định các điều kiện bạn muốn xuất bản trò chơi của mình

Bạn sẽ bán trò chơi của mình chứ? Bạn có muốn cho phép người khác sử dụng hình ảnh và ý tưởng của mình không? Mặc dù bạn phải cẩn thận về phương tiện mà bạn sử dụng trong dự án của mình, nhưng bạn thường có thể quyết định cách bạn muốn cho phép người khác sử dụng trò chơi của mình. Bạn có thể sử dụng giấy phép Creative Commons CC0 để phát hành trò chơi của mình trong miền công cộng.. Để cho phép phân phối và sửa đổi theo một số điều kiện trong khi vẫn giữ một số quyền, hãy dùng thử Giấy phép Công cộng Gnu (GPL) hoặc Giấy phép Phân phối Phần mềm Berkeley (BSD). Hoặc, bạn có thể làm cho phần mềm của mình trở thành độc quyền, nghĩa là không ai được phép phân phối hoặc sửa đổi nó mà không có sự cho phép của bạn.

Mặc dù có thể kiếm tiền bằng cách bán trò chơi, nhưng chưa chắc mọi người sẽ mua trò chơi đầu tiên của bạn thường có ít tính năng và không có gì đặc biệt. Ngoài ra, nếu một chương trình miễn phí không hoạt động, những người đã tải xuống nó sẽ rất thất vọng. Tuy nhiên, nếu họ đã trả tiền, họ sẽ đòi lại tiền, gây ra nhiều vấn đề hơn cho cả bạn và người dùng. Vì vậy, hãy cân nhắc cung cấp miễn phí một số chương trình đầu tiên của bạn

5692759 55
5692759 55

Bước 4. Quyết định cách bạn muốn xuất bản trò chơi của mình

Mỗi phương pháp đều có một số ưu và nhược điểm, vì vậy bạn phải tự quyết định.

  • Xuất bản nó trên một trang web:

    Nếu bạn có một trang web, bạn có thể tải lên trò chơi của mình để có thể tải xuống. Đảm bảo cung cấp hướng dẫn rõ ràng về cách cài đặt phần mềm, cũng như tất cả các phụ thuộc bắt buộc. Điểm bất lợi của điều này là người chơi sẽ phải cài đặt các phụ thuộc theo cách thủ công, điều này có thể gây khó khăn cho một số người.

  • Tạo gói cho trình quản lý gói:

    Có các trình quản lý gói khác nhau, như apt, Yum và Homebrew, giúp mọi người dễ dàng cài đặt ứng dụng trong các môi trường dựa trên Linux và Linux. Tất cả chúng đều có các định dạng gói khác nhau. Điều tốt về các gói là chúng tự động cài đặt tất cả các phụ thuộc (nếu bạn định cấu hình chúng một cách chính xác). Vì vậy, người chơi chỉ phải cài đặt gói của bạn và sau đó có thể chơi trò chơi. Vấn đề là có nhiều trình quản lý gói khác nhau trên các nền tảng khác nhau, vì vậy bạn sẽ phải thực hiện một số công việc để cung cấp các gói cho tất cả những cái phổ biến nhất.

5692759 56
5692759 56

Bước 5. Hướng sự chú ý vào chương trình của bạn

Cân nhắc tải chương trình của bạn lên một kho lưu trữ gói chính, như kho lưu trữ Ubuntu và Debian duy trì, để cho phép cài đặt dễ dàng. Ngoài ra, hãy đăng trên các diễn đàn thích hợp, như phần dự án của GameDev hoặc một phần của tigSource. Nhưng đừng thất vọng nếu trò chơi đầu tiên của bạn không trở nên nổi tiếng. Nếu bạn có một ý tưởng mà nhiều người thích nó, trò chơi của bạn có thể trở nên nổi tiếng.

Lời khuyên

  • Hãy kiên nhẫn và sẵn sàng học hỏi. Lập trình đôi khi có thể khiến bạn nản lòng!
  • Nếu bạn tự hỏi làm thế nào một thứ gì đó được thực hiện trong một trò chơi khác và trò chơi là mã nguồn mở, bạn có thể xem mã nguồn của nó.
  • Khi tìm kiếm phương tiện, hãy cố gắng tìm nội dung thuộc phạm vi công cộng. Tìm kiếm hình ảnh và nhạc "Creative Commons" hoặc "Public Domain" và sử dụng các trang web như https://opengameart.org hoặc
  • Đừng sao chép những đoạn mã lớn mà không kiểm tra giấy phép. Nó thường bị cấm, và nếu không, thường yêu cầu ghi công.
  • Không gửi thư rác hoặc đăng ở những nơi không thích hợp khi quảng cáo trò chơi của bạn. Điều này có thể khiến bạn bị chặn khỏi trang, đơn giản là gây khó chịu và sẽ gây tổn hại đến danh tiếng của bạn.

Đề xuất: