Hướng dẫn python dnd character generator - trình tạo ký tự python dnd

Tổng quan

Tôi có một chút thú nhận để thực hiện, tôi không bao giờ thực sự bận tâm để học Python. Lần cuối cùng tôi sử dụng ngắn gọn nó, Python 3 vừa được phát hành và đã bị bỏ qua bởi hầu hết mọi người do tất cả đều phá vỡ những thay đổi mà mọi người đã chuyển sang nó từ Python 2.

Điều này thật điên rồ, như theo tôi, Python chỉ đứng sau JavaScript về ngôn ngữ được sử dụng nhiều nhất trên thế giới. Tôi không có lý do gì để không học nó và xem những gì ồn ào là tất cả!

Tôi thích học như thế nào

Khi học một ngôn ngữ lập trình mới, tôi có một dự án tôi muốn tái tạo để tìm hiểu những điều cơ bản.

Dự án liên quan đến việc tạo ra một nhân vật người chơi Dungeons & Dragons (D & D) ngẫu nhiên. Tôi biết bạn đã không nghĩ rằng tôi có thể là người lạnh hơn phải không? Chà, trong phòng thủ của tôi, nó là một miền mà tôi biết rõ và chỉ viết một lượng nhỏ mã để tạo ra một ký tự cơ bản thường bao gồm các nguyên tắc cơ bản lập trình sau:

  • Gán biến
  • For-loops
  • If-statements
  • Viết phương pháp và làm việc với các tham số
  • Ngẫu nhiên
  • Lists/arrays
  • Các cặp khóa/giá trị
  • Đối tượng và tính chất của chúng

Bạn có thể thấy triển khai C# trước đây của tôi ở đây và triển khai JavaScript thuần túy của tôi ở đây. & NBSP;

Tôi sẽ cho rằng bạn ít nhất đã nghe nói về trò chơi nhập vai phổ biến nhất trên thế giới trước đây, hoặc ít nhất bạn có thể đã thấy những đứa trẻ trong Stranger Things chơi nó. Theo truyền thống, nó liên quan đến bút, giấy, xúc xắc và đồ ăn nhẹ, ngày nay chúng tôi sẽ tái tạo nó trong phần mềm (cũng có thể không phải là đồ ăn nhẹ).

Và tôi đã có ý định học Python 3 một thời gian, vì vậy chúng tôi đi đây:

Lập kế hoạch và thiết lập

Bạn có thể tải xuống phiên bản mới nhất của Python 3 tại đây. Tôi sẽ sử dụng mã Visual Studio với phần mở rộng Python được cài đặt.

Một ký tự D & D được cấu hình đầy đủ có thể trở nên rất phức tạp, mục đích của dự án này là để tạo ra một nhân vật bạn có thể chơi một trò chơi với ngay lập tức, thay vào đó bạn sẽ có cơ sở của một nhân vật để tiếp tục xác định nếu bạn muốn. Vì vậy, chúng tôi sẽ giữ phạm vi nhỏ, kết quả mà chúng tôi đang tìm kiếm là một nhân vật với:

  • Một cái tên
  • Một giới tính
  • Một lớp học, chẳng hạn như máy bay chiến đấu hoặc một phù thủy
  • Một chủng tộc như một con người hoặc một Elf & nbsp;
  • Sáu điểm khả năng được đặt hàng phù hợp cho lớp nhân vật

Và với mục đích của bài đăng trên blog này, tôi sẽ viết bằng mã sạch, dễ hiểu. Không có gì quá nâng cao.

Ok, đó là kế hoạch nhàm chán đủ - hãy để nhận được mã hóa!

Điều đầu tiên trước tiên

Bạn có thể nghĩ để bắt đầu với một cái tên, nhưng vì chúng tôi sẽ ngẫu nhiên hóa nhân vật của mình mỗi khi chúng tôi chạy chương trình, nên nó hợp lý hơn khi bắt đầu với một nhân vật ngẫu nhiên để dựa trên thế hệ của chúng tôi. Nếu không, chúng ta có thể kết thúc với một nhân vật lùn với tên người như Steve, tôi nghĩ Lord of the Rings sẽ là một bộ phim rất khác nếu Tolkien sử dụng một máy phát điện ngẫu nhiên để tạo ra các nhân vật của mình!

Danh sách, lớp học và đối tượng

Để khai báo một danh sách các chuỗi trong Python, đó là cú pháp đơn giản:

Tên biến = [[Square Square

Hãy để Lừa đặt một số để ghi lại một số dữ liệu tên mà chúng ta cần để bắt đầu.

Tôi đã giữ số lượng các chủng tộc và các lớp mà chúng tôi bao gồm 3 lần chỉ để giữ các biến thể tên và số lượng mã hóa lặp đi lặp lại cho bài tập này. & NBSP;

Chúng ta có thể lấy các phần tử ra khỏi danh sách trực tiếp bằng cách sử dụng chỉ mục

Danh sách là một loại có thể thay đổi, tức là có thể thay đổi nội dung của chúng như vậy:

Tiếp theo, chúng tôi cần một số đối tượng để đối chiếu tất cả thông tin nhân vật của chúng tôi, Python là ngôn ngữ lập trình hướng đối tượng (OOP) và nó cung cấp cho chúng tôi cú pháp đơn giản để xác định một lớp và khởi tạo nó là một đối tượng:

Def __init__ là hàm tạo mặc định được gọi khi bạn khởi tạo một thể hiện mới của lớp ký tự. Điều này chịu trách nhiệm thiết lập các giá trị mặc định của các thuộc tính đối tượng của bạn, trong trường hợp này tất cả chỉ là các chuỗi trống cho đến bây giờ.

Một cái gì đó bạn có thể nhận thấy là Python không sử dụng dấu ngoặc xoăn để phân biệt các khối mã, thay vào đó, nó sử dụng khoảng trắng để tạo sự khác biệt trong phạm vi mã. Điều này có thể mất một số làm quen, nhưng IDE của bạn sẽ giúp bạn một chút!

Khi chúng tôi chạy mã và kiểm tra đối tượng trong bộ nhớ, chúng tôi có thể xác nhận điều này bằng cách xem trạng thái của nó ngay sau khi chúng tôi khởi tạo nó.

Được rồi, vì vậy điều đó đủ đơn giản để thiết lập, thời gian để bắt đầu xác định một số thuộc tính đối tượng của chúng tôi. Vì chúng tôi đang tìm cách ngẫu nhiên quá trình này, chúng tôi cần một cách để giả ngẫu nhiên tạo ra một số chỉ mục danh sách. Cách đơn giản nhất để làm điều này là sử dụng mô -đun ngẫu nhiên Python, vì vậy hãy để thêm dòng sau vào đầu mã của chúng tôi:

Giản dị! Bây giờ chúng tôi có quyền truy cập vào mô -đun ngẫu nhiên trong suốt mã của chúng tôi. Mô-đun này chứa một số trình tạo số giả ngẫu nhiên tuy nhiên chúng tôi chủ yếu quan tâm đến randint (). Phương pháp này có hai tham số INT, bắt đầu và kết thúc. Khi được thực thi, hàm sẽ trả về một số ngẫu nhiên bao gồm cả hai tham số. Chúng ta có thể sử dụng điều này cùng với hàm Len () (trả về số lượng phần tử trong một mảng) để lấy chỉ mục danh sách ngẫu nhiên để nhận giá trị ngẫu nhiên, ví dụ khi tôi chạy mã sau:

Tôi nhận được đầu ra bảng điều khiển:

Sau đó, chúng tôi có thể áp dụng logic này vào lớp ký tự của chúng tôi cho tất cả các giá trị của chúng tôi có được từ danh sách:

Bây giờ, nếu chúng ta khởi tạo một đối tượng nhân vật mới, chúng ta sẽ nhận được trạng thái ban đầu sau:

Chức năng và điều kiện

Để chạm vào danh sách, bây giờ để gán một tên. Vì tên nhân vật sẽ được xác định bởi chủng tộc và giới tính của họ, và như bạn có thể đoán, chúng tôi sẽ muốn sử dụng if-statements để đạt được điều này. & NBSP;

Tôi cảm thấy muốn nhồi nhét một loạt các câu lệnh IF vào lớp nhân vật của tôi sẽ trông lộn xộn, vì vậy tôi sẽ tách logic đó vào chức năng của chính nó và chỉ gọi nó trong hàm tạo mặc định của tôi. Điều này cho tôi một cái cớ để xem các chức năng được xác định như thế nào và cách gọi chúng và nhận được giá trị trả lại của chúng.

May mắn cho chúng tôi, chúng tôi đã học được cú pháp để viết các hàm Python khi chúng tôi viết hàm tạo mặc định __init __ (). Sự khác biệt duy nhất với chức năng mới của chúng tôi là chúng tôi sẽ đặt cho nó một cái tên hữu ích, xác định một số tham số và thêm giá trị trả về ở cuối: & nbsp;

Vì vậy, ở đây, chúng tôi sử dụng một số câu lệnh IF để xác định danh sách nào chúng tôi nên chọn tên đầu tiên và sau đó sử dụng câu lệnh MATCH với một số phép nội suy chuỗi vui nhộn để nối họ vào chuỗi tên.

Và những cái tên đó được thực hiện ngay bây giờ!

Cho các vòng lặp và từ điển

Trong D & D, tất cả mọi thứ mà nhân vật của bạn làm đều dựa trên điểm số 6 khả năng cốt lõi của bạn, trong đó bạn có truyền thống nhận được bằng cách lăn một số xúc xắc. & NBSP;

Mỗi lớp ký tự khác nhau sẽ thích 6 điểm được sắp xếp để các giá trị cao hơn phát vào các thuộc tính chính của ký tự của họ. Ví dụ, một máy bay chiến đấu sẽ muốn điểm mạnh cao trong khi một phù thủy sẽ ít quan tâm đến sức mạnh và muốn trí thông minh của họ là thuộc tính cao nhất của họ.

Vì vậy, các chi tiết miền này cung cấp cho chúng tôi một số thách thức và cú pháp Python mới để học.

Thứ nhất, để xác định điểm số khả năng, chúng ta cần làm như sau:

  • Roll Roll Một con xúc xắc sáu mặt (1d6) bốn lần.
  • Thả số thấp nhất.
  • Thêm ba số còn lại lại với nhau
  • Lưu số đó ở đâu đó
  • Lặp lại năm lần nữa, với tổng số sáu số
  • Đặt hàng điểm theo sở thích của lớp ký tự

Đây là việc tôi thực hiện các yêu cầu đó:

Như bạn có thể thấy ở đầu khối mã, tôi có một bộ các vòng được lồng để xử lý các cuộn xúc xắc và các bước lọc liên quan, sau đó tôi đã lưu 6 điểm cuối cùng vào một danh sách đã đặt hàng. & NBSP; Cuối cùng, tôi đã sử dụng một câu lệnh MATCH để gán các giá trị cho các chỉ số/khóa mong muốn trong KVP/từ điển và sau đó trả lại cho người gọi khi hoàn thành.

Lớp nhân vật cuối cùng

Mà khi chạy và xuất ở định dạng JSON mang lại cho chúng ta:

Và đó có lẽ là một nơi tốt để ngăn chặn ngay bây giờ.

Sự kết luận

Chúng tôi đang ở đó. Đây là cách tôi thích học những điều cơ bản của một ngôn ngữ lập trình mới. Tôi chắc chắn rằng bạn có thể nghĩ ra một ví dụ về miền tương tự để sử dụng làm của riêng bạn hoặc bạn có thể tự do nhận công việc trong bài đăng trên blog và mở rộng trên nó

Tôi hy vọng bạn đã thích bài đăng này, bạn có thể tìm thấy tất cả các mã nguồn được tạo trong bài đăng trên blog này ở đây