Python DnD chiến đấu

Tập lệnh mô phỏng theo kinh nghiệm một số lần lặp lại cụ thể của một cuộc chạm trán [i. e. 1.000 lần] để đạt được xác suất chiến thắng thất bại. thiệt hại và hp không phải là yếu tố duy nhất để xác định mức độ thay đổi của một cuộc chạm trán, do đó có thể không thể dự đoán bằng phép tính, do đó mô phỏng

giả định

Có thể có các yếu tố liên quan, một trong số đó là chiến lược, được mã hóa ở đây với một tập hợp các giả định

  • Một mục tiêu kẻ thù còn sống với hp thấp nhất [thẻ. "yếu nhất"]. Các chế độ thay thế là ngẫu nhiên hoặc chế độ có sát thương trung bình cao nhất [thẻ. "khốc liệt nhất"]
  • Một người chỉ chữa lành khi không có cơ hội lãng phí và một người chữa lành nhân vật tuyệt vời nhất
  • Một người chỉ sử dụng ném lưới, vật lộn và các động tác ưa thích khác khi có biến kinh tế - nghĩa là, đội của người này đông hơn đội kia
  • Nếu có lượt tiết kiệm và một người chịu toàn bộ sát thương, người đó sẽ né tránh
  • Một số quy tắc nhỏ không tạo ra sự khác biệt

không lưới điện

Mã này không tính đến dung lượng. Điều đó có nghĩa là nó giả sử chiến thuật trên lưới không thành vấn đề. điều này rõ ràng là sai, nhưng việc mã hóa một thứ không được tuân thủ trong trò chơi là một điều ít xấu xa hơn —mỗi nhóm đều có nhiều người sẽ lao vào tầm ngắm của phù thủy chỉ để giết đồ— hoặc các quy tắc để giải quyết các tình huống không tầm thường —người chơi chấp nhận . Nhờ có nhiều lần lặp lại, máy học có thể được áp dụng khiến nó trở thành một vấn đề tối thiểu hóa chức năng, nhưng nó quá mức cần thiết vì không có người chơi nào là một chiến lược gia bậc thầy như vậy

danh sách chính tả

Ngân sách chính tả gây rắc rối cho người chơi, do đó không có nhiều phép thuật, thanh cho một số ít cantrip

Trong nhiều năm của Python, hầu hết có hai cách để nối chuỗi và biến. Và bây giờ chúng ta có cách định dạng mới. Chúng tôi sẽ sử dụng các hằng số sau trong các ví dụ

>>> a = 'You'
>>> b = 'Mega Punch'
>>> c = 50

cách đầu tiên

>>> a + ' used ' + b + '. It dealt ' + str[c] + ' damage.'
'You used Mega Punch. It dealt 50 damage.'

Điều này gây khó chịu khi nhập và không an toàn nếu a hoặc b thay đổi thành int. Tôi đã không sử dụng toán tử

>>> a + ' used ' + b + '. It dealt ' + str[c] + ' damage.'
'You used Mega Punch. It dealt 50 damage.'
3, vì nó sẽ tạo thành một bộ nếu bạn gán nó cho một biến

cách thứ hai

>>> '%s used %s. It dealt %s damage.' % [a, b, c]
'You used Mega Punch. It dealt 50 damage.'

Cái này khá giống cái mới. phương pháp định dạng. Tuy nhiên, có những lập luận chống lại nó, như đã nêu trong for it

Các hoạt động định dạng được mô tả ở đây thể hiện nhiều điểm kỳ quặc dẫn đến một số lỗi phổ biến [chẳng hạn như không hiển thị chính xác các bộ dữ liệu và từ điển]. Sử dụng str mới hơn. format[] giúp tránh những lỗi này và cũng cung cấp một cách tiếp cận mạnh mẽ, linh hoạt và có thể mở rộng hơn để định dạng văn bản

các str. cách định dạng

>>> '{} used {}. It dealt {} damage.'.format[a, b, c]
'You used Mega Punch. It dealt 50 damage.'
>>> '{1} used {0}. It dealt {2} damage.'.format[a, b, c]
'Mega Punch used You. It dealt 50 damage.'
>>> '{0} used {1}. {0} dealt {2} damage.'.format[a, b, c]
'You used Mega Punch. You dealt 50 damage.'
#Every console app that makes a UI needs this!
>>> '{}{:>15}'.format['Pika', '23/100']
'Pika         23/100'

Đây chỉ là để hiển thị một vài cách để sử dụng str. phương pháp định dạng. Nó cũng cho phép bạn thay đổi loại biến đã nhập, số lượng vị trí thập phân được hiển thị và thao tác với danh sách. Nhưng hầu hết tất cả nó chỉ là đá

Có rất nhiều câu hỏi về các toán tử này. Và đối với họ là khá trống

>>> a = random.randint[1, 9]
>>> a
9
>>> a
9
# It didn't change? That's 'cause you are not calling the function,
# you're just asking for the same output again. So if we could...
>>> l = [1, 9]
>>> random.randint[l]
TypeError: randint[] takes exactly 3 arguments [2 given]
# And this is why we have the `*` operator
>>> random.randint[*l]
4
>>> random.randint[*l]
2

Nhưng tôi khuyên bạn không nên sử dụng nó. Vì bạn sẽ nghĩ ra những thứ như

def print_lines[*lines]:
    print["\n".join[[line for line in lines]]]
# This is confusing. And `print` is a function in python3!
# If we ignore how good print is we get
def print_lines[*lines]:
    print['\n'.join[lines]]

# But how do we use it?
print_lines['hello', 'world']
print_lines[*['hello', 'world']]

# "There should be one-- and preferably only one --obvious way to do it."
print['hello', 'world', sep='\n']
print[['hello', 'world'], sep='\n']

là một chức năng bây giờ. Và trích dẫn từ The Zen of Python

Tôi sử dụng cái này sau trong ví dụ Lớp học và tôi đã chỉ trích những người khác sử dụng nó. Chúng cho phép bạn giảm số lượng mã bạn viết. Và bạn chỉ cần thay đổi chúng để chúng trở thành máy phát điện. Trình tạo tốt cho lượng dữ liệu lớn vì chúng chỉ đưa thông tin vào bộ nhớ khi cần

# You have a list of strings, and you want them to be all lowercase.
>>> lst = [ .. ]
>>> lst2 = []
>>> for i in lst:
        lst2.append[i.lower[]]
# That's a lot of writing for such a simple task.
# And so we will use list comprehension.
>>> lst3 = [i.lower[] for i in lst]
# And they are the same.
>>> lst2 == lst3
True

Bạn muốn sử dụng lại mã. Và đó là câu trả lời chết não cho những lớp học nào. Chức năng chính của mã của bạn thực hiện bỏ lỡ, di chuyển và kiểm tra xem liệu một trong các Pokemon có bị ngất không. Khi tôi được giới thiệu về các lớp học, tôi được yêu cầu sử dụng super, thừa kế và rất nhiều thứ mà tôi phải vật lộn với. Và vì vậy tôi sẽ cung cấp cho bạn một ví dụ 'nhỏ' về một cách đơn giản để tạo một lớp. [Vì bạn không sử dụng nên tôi cho rằng bạn không thích/hiểu/biết chúng. ]

moves={'Punch': [18, 25],
       'Mega Punch': [10, 35],
       'Heal': [-25, -20]
       }

moves_list=list[moves]
moves_list_lower=[move.lower[] for move in moves_list]

move_names='\n'+'\n'.join[
    "{0}. {1} [Deal damage between '{2[0]}' - '{2[1]}']".format[
        i,
        move,
        moves[move]
    ]
    for i, move in enumerate[moves_list]
]

class Pokemon:
    def __init__[self, title]:
        self.title = title

    def select_move[self]
        move = input[move_names + '\n> '].lower[]
        try:
            return moves_list[int[move]]
        except ValueError:
            return moves_list[moves_list_lower.index[move]]
        except IndexError:
            print['That is not a valid move. Please try again.']

    def use_move[self, other, move]:
        # 20% of missing
        if random.randint[1,5]:
            print['{} missed!'.format[self.title.capitalize[]]]
        else:
            # Works as shown earlier.
            magnitude = random.randint[*moves[move]]
            if moves[move][0] < 0:
                # A simple self.health += magnitude
                self.heal[magnitude]
                desc = 'healed for {} health.'
            else:
                # A simple self.health -= magnitude
                other.deal[magnitude]
                desc = 'dealt {} damage.'
            print[['{} used {}. It' + desc].format[
                   self.title.capitalize[],
                   move,
                   magnitude
                   ]]
  • Các bit trong không gian tên toàn cầu là để tạo tất cả thông tin về các bước di chuyển

    • Chúng tôi giữ từ điển di chuyển đơn giản của bạn, vì nó lưu trữ tất cả thông tin chúng tôi cần
    • ________ 14 là bản sao của tất cả các khóa của từ điển, để chúng tôi có thể lập chỉ mục dễ dàng hơn
    • >>> a + ' used ' + b + '. It dealt ' + str[c] + ' damage.'
      'You used Mega Punch. It dealt 50 damage.'
      
      0 là bản sao viết thường của
      >>> a + ' used ' + b + '. It dealt ' + str[c] + ' damage.'
      'You used Mega Punch. It dealt 50 damage.'
      
      4. Điều này là để chúng tôi có thể sử dụng nó để xem liệu người đó đã nhập một nước đi hợp lệ hay chưa
    • >>> a + ' used ' + b + '. It dealt ' + str[c] + ' damage.'
      'You used Mega Punch. It dealt 50 damage.'
      
      2 sẽ xuất ra gần giống như câu lệnh in khi bắt đầu lượt của mỗi người chơi. Tuy nhiên, nó sẽ thay đổi mỗi khi bạn tải trò chơi, do cách hoạt động của từ điển. Bạn có thể sắp xếp
      >>> a + ' used ' + b + '. It dealt ' + str[c] + ' damage.'
      'You used Mega Punch. It dealt 50 damage.'
      
      4 để nó trở thành cố định nếu bạn muốn 'sửa' điều này. Nó cũng tạo ra khả năng hồi máu dưới dạng sát thương tiêu cực. Tôi chắc rằng bạn có thể tìm ra cách để khắc phục điều đó

    Tuy nhiên, tất cả nên được gói gọn trong một

    >>> a + ' used ' + b + '. It dealt ' + str[c] + ' damage.'
    'You used Mega Punch. It dealt 50 damage.'
    
    4 như @EthanBierlein đã nói

  • Tôi đã lược bỏ một số điểm chính trong chương trình này, vì nó chỉ nhằm mục đích chỉ cho bạn cách bạn có thể thực hiện nó. Và cho phép bạn tự suy nghĩ. Cá nhân tôi ghét, 'học các lớp, đây là cách hoạt động của

    >>> a + ' used ' + b + '. It dealt ' + str[c] + ' damage.'
    'You used Mega Punch. It dealt 50 damage.'
    
    5'

  • Tôi cũng đã sử dụng câu lệnh thử ngoại trừ. Tôi không biết liệu nó có đầy đủ chức năng hay không, nhưng nó chỉ cho bạn cách bạn có thể loại bỏ một số thứ lộn xộn. Để biết thêm thông tin về những 'ngoại lệ xử lý' này

  • Nếu tôi tiếp tục làm chương trình này, cá nhân tôi sẽ sử dụng tính kế thừa và ghi đè phương thức để làm cho nó sao cho máy tính có một cách khác với

    >>> a + ' used ' + b + '. It dealt ' + str[c] + ' damage.'
    'You used Mega Punch. It dealt 50 damage.'
    
    6

  • Nếu bạn muốn biết cách tốt nhất để tạo kiểu cho Python thì có PEP8 và PEP257

Câu trả lời này đã được viết lại để nó có bố cục và cách trình bày thông tin tốt hơn, thay vì lộn xộn. Tôi đã viết lại và hy vọng rằng nó tốt hoặc tốt hơn phiên bản trước. Nếu không, hoàn nguyên nó. -Tác giả

Chủ Đề