Python tic tac toe kiểm tra người chiến thắng

Chào mừng đến với phần 10 của loạt bài cơ bản về Python 3. Cho đến thời điểm này, chúng tôi đã xây dựng trò chơi TicTacToe của mình và bây giờ chúng tôi đã sẵn sàng bắt đầu tìm hiểu cách chúng tôi có thể xác định người chiến thắng trong trò chơi. Bạn có thể đang nghĩ "nhưng, người chơi thậm chí chưa thể chơi?. ?" Tôi biết tôi biết, chúng tôi sẽ thêm điều này, nhưng đây thực sự là một trong những bước cuối cùng chúng tôi cần. Cho đến lúc đó, chúng tôi thực sự có thể phát triển mọi thứ dễ dàng hơn bằng cách mã hóa cứng trong các thử nghiệm của mình. Một lần nữa, ở đây chúng ta "biết" khi nào một người chiến thắng thực sự thắng [3 lần liên tiếp theo chiều ngang, chiều dọc hoặc đường chéo], nhưng làm thế nào chúng ta có thể xác định điều này trong một chương trình?

Điều này có vẻ như là một vấn đề đối với chúng tôi. phá vỡ

Thuật toán để xác định những thứ này sẽ khác nhau đối với các đường ngang, dọc và chéo. Vì vậy, hãy bắt đầu với cách dễ nhất. nằm ngang

Hãy bắt đầu với một tập lệnh trống để phát triển điều này. Hãy thêm một bảng trò chơi giống như

game = [[1, 1, 1],
        [2, 2, 0],
        [1, 2, 0]]

Rõ ràng là hàng trên đã thắng. Làm thế nào chúng ta có thể xác định điều này? . Cái gì đó như

game = [[1, 1, 1],
        [2, 2, 0],
        [1, 2, 0]]

def win[current_game]:
    for row in game:
        print[row]
        # how might we check all items in this row? We could do something like:
        column_1 = row[0]
        column_2 = row[1]
        column_3 = row[2]
        if column_1 == column_2 == column_3:
            print["WINNER!"]
win[game]

Được rồi, nó hoạt động, nhưng. trên một trò chơi mới. chúng ta sẽ kết thúc với một người chiến thắng. Chúng tôi cũng có thể chỉ cần kiểm tra để đảm bảo rằng bất kỳ một trong các giá trị nào không phải là số không

if column_1 == column_2 == column_3 and column_1 != 0:

Điều này là tốt. Điều này hiệu quả và đó thường là điều quan trọng nhất, cho dù bạn đang cố gắng hoàn thành công việc cho chính mình hay có thể bạn đang cố gắng hoàn thành một số thời hạn mà sếp của bạn đặt ra

Điều đó nói rằng, như chúng ta đã thấy trước đây, nếu bạn thấy sự lặp lại trong mã, rất có thể, có một cách tốt hơn. Đôi khi, mọi người đi quá đà, tạo ra những "câu lót" siêu khó hiểu và gần như không thể đọc được. Chắc chắn có một sự cân bằng mà bạn muốn đạt được ở đây, bởi vì đọc đoạn mã trên rất dễ, nó khá rắc rối. Ngoài ra, điều gì sẽ xảy ra khi sếp của bạn quyết định họ muốn có một chiếc 4x4 tic tac toe? . Rất tiếc. Chương trình của chúng tôi rất nhỏ trong sơ đồ tổng thể, nhưng việc thực hiện những thay đổi này nghe có vẻ bực bội và cực kỳ tẻ nhạt. Ngoài ra, nó sẽ yêu cầu làm lại toàn bộ sau này nếu chúng tôi cần thực hiện thay đổi này hoặc có thể chúng tôi làm điều gì đó mà tôi đã thấy quá thường xuyên với một số khách hàng của mình. Một tập lệnh duy nhất cho từng sự khác biệt của biến. Nghiêm túc mà nói, điều này được thực hiện rất phổ biến và điều này tạo ra một lượng lớn thứ mà chúng ta gọi là

game = [[1, 1, 1],
        [2, 2, 0],
        [1, 2, 0]]

def win[current_game]:
    for row in game:
        print[row]
        # how might we check all items in this row? We could do something like:
        column_1 = row[0]
        column_2 = row[1]
        column_3 = row[2]
        if column_1 == column_2 == column_3:
            print["WINNER!"]
win[game]
1 cho một dự án. Ý tưởng tạo các phiên bản duy nhất là tốt, cho đến khi bạn cần thực hiện thay đổi trong tương lai, có thể thực hiện sửa lỗi hoặc thứ gì đó khác, và bây giờ bạn cần sửa đổi 10 giây, hàng trăm hoặc thậm chí hàng nghìn tập lệnh python. Một lần nữa, tôi đã nhìn thấy nó trong hàng ngàn. Có lẽ bạn sẽ cần viết một tập lệnh python để xử lý việc này

Khi chúng tôi làm cho mã của mình năng động hơn ngay từ đầu, nó sẽ giúp chúng tôi trong quá trình thực hiện. Nó có thể khó khăn hơn một chút ban đầu, nhưng nó thường đáng. Vấn đề là,

game = [[1, 1, 1],
        [2, 2, 0],
        [1, 2, 0]]

def win[current_game]:
    for row in game:
        print[row]
        # how might we check all items in this row? We could do something like:
        column_1 = row[0]
        column_2 = row[1]
        column_3 = row[2]
        if column_1 == column_2 == column_3:
            print["WINNER!"]
win[game]
1 này tích tụ theo thời gian khi một dự án phát triển, gây ra ngày càng nhiều vấn đề và chỉ cộng dồn lượng thời gian cần thiết để thực sự làm cho mọi thứ trở nên đúng đắn. Hầu như sẽ không bao giờ xảy ra trường hợp mã bạn viết ban đầu trong một dự án sẽ không bao giờ được chạm vào nữa, vì vậy bạn muốn làm cho nó dễ dàng nhất có thể để quay lại sau này

Được rồi, vậy làm thế nào chúng ta có thể làm cho mã này động? . Nếu bạn không thể thì sao?

Chúng ta có thể làm gì ở đây? . Những hàng này là gì? . Vì vậy, chúng tôi muốn tìm hiểu xem tất cả các mục trong danh sách có giống nhau không. và không phải không. Chúng tôi khá chắc chắn rằng chúng tôi có thể thực hiện phần "không bằng 0", nhưng phần khác thì sao?

Mọi người luôn hỏi tôi học ở đâu mà nhiều thế. Đây là bí mật

Có thật không

Vì vậy, ở đây, tôi chỉ cần gõ vào google

Nó thực sự đơn giản. Chỉ cần tìm ra cách diễn đạt câu hỏi của bạn càng nhanh càng tốt, kết thúc bằng "python" và bùng nổ, bạn đã có câu hỏi của mình. Hãy xem những gì chúng ta nhận được

Người bạn thân nhất của bạn thường là Stack Overflow, và chắc chắn rồi, đó là kết quả hàng đầu ở đó. Tiêu đề không giống với truy vấn của chúng tôi, nhưng thật tốt là Google đã tìm ra nó cho chúng tôi. Cảm ơn Google

Hãy xem ví dụ tràn ngăn xếp trên cùng [SO] đó. Chỉ trong trường hợp tìm kiếm của bạn không mang lại kết quả tương tự, đây là liên kết cụ thể đến kết quả này. kiểm tra xem tất cả các phần tử trong danh sách có giống hệt nhau không

Được rồi, đây được coi là một hướng dẫn cơ bản, tất cả những đoạn mã mà chúng ta thấy ở đây là cái quái gì vậy?. Mọi người đang xây dựng các bảng và nói về rất nhiều thứ như kiểm tra tốc độ và tất cả những thứ đó. Người đăng ban đầu [OP] cho biết họ không muốn mã gây ra chi phí "không cần thiết", vì vậy điều xảy ra sau đó là một cuộc thi gay gắt về việc ai có thể viết mã nhanh nhất tuyệt đối để giải quyết vấn đề này. Chúng tôi không tìm cách mở rộng quy mô này trên một số VPS cho hàng triệu người dùng, chúng tôi chỉ muốn mã đơn giản có thể phát triển theo thời gian. Vì vậy, có lẽ chúng ta không cần phải quá điên cuồng ở đây. Tôi thấy câu trả lời hay thứ 2 theo bình chọn trông cực kỳ đơn giản

x.count[x[0]] == len[x]

Tôi nghĩ rằng tất cả chúng ta có thể đọc nó và hiểu nó. Chúng tôi đang đếm số lần giá trị đầu tiên trong danh sách

game = [[1, 1, 1],
        [2, 2, 0],
        [1, 2, 0]]

def win[current_game]:
    for row in game:
        print[row]
        # how might we check all items in this row? We could do something like:
        column_1 = row[0]
        column_2 = row[1]
        column_3 = row[2]
        if column_1 == column_2 == column_3:
            print["WINNER!"]
win[game]
3 và sau đó xem liệu giá trị đó xuất hiện nhiều lần như danh sách
game = [[1, 1, 1],
        [2, 2, 0],
        [1, 2, 0]]

def win[current_game]:
    for row in game:
        print[row]
        # how might we check all items in this row? We could do something like:
        column_1 = row[0]
        column_2 = row[1]
        column_3 = row[2]
        if column_1 == column_2 == column_3:
            print["WINNER!"]
win[game]
3 dài hay không. Để điều này đúng, tất cả các giá trị trong danh sách phải giống nhau. Được rồi, hãy thực hiện điều này

game = [[1, 1, 1],
        [2, 2, 0],
        [1, 2, 0]]


def win[current_game]:
    for row in game:
        print[row]
        if row.count[row[0]] == len[row] and row[0] != 0:
            print["Winner!"]

win[game]
[1, 1, 1]
Winner!
[2, 2, 0]
[1, 2, 0]
>>> 

Vì vậy, điều này không chỉ năng động mà còn cần ít mã hơn để làm điều đó. Bây giờ, các hàng của chúng tôi có thể dài bao lâu chúng tôi muốn. Rõ ràng là chúng tôi đang mã hóa cứng biến trò chơi của mình và chúng tôi có thêm một giá trị được mã hóa cứng nữa [các # hàng trên cùng], mà chúng tôi chắc chắn sẽ xử lý trước khi hoàn thành ở đây. Có lẽ chúng ta cũng nên xử lý xem ai là người chiến thắng. Chúng ta chỉ có thể làm điều đó ngay bây giờ

Chúng tôi có thể xác định người chiến thắng bằng cách in ra

game = [[1, 1, 1],
        [2, 2, 0],
        [1, 2, 0]]

def win[current_game]:
    for row in game:
        print[row]
        # how might we check all items in this row? We could do something like:
        column_1 = row[0]
        column_2 = row[1]
        column_3 = row[2]
        if column_1 == column_2 == column_3:
            print["WINNER!"]
win[game]
5

game = [[1, 1, 1],
        [2, 2, 0],
        [1, 2, 0]]

def win[current_game]:
    for row in game:
        print[row]
        # how might we check all items in this row? We could do something like:
        column_1 = row[0]
        column_2 = row[1]
        column_3 = row[2]
        if column_1 == column_2 == column_3:
            print["WINNER!"]
win[game]
1

đầu ra

game = [[1, 1, 1],
        [2, 2, 0],
        [1, 2, 0]]

def win[current_game]:
    for row in game:
        print[row]
        # how might we check all items in this row? We could do something like:
        column_1 = row[0]
        column_2 = row[1]
        column_3 = row[2]
        if column_1 == column_2 == column_3:
            print["WINNER!"]
win[game]
2

Chúng ta có thể làm sạch điều này một chút với

game = [[1, 1, 1],
        [2, 2, 0],
        [1, 2, 0]]

def win[current_game]:
    for row in game:
        print[row]
        # how might we check all items in this row? We could do something like:
        column_1 = row[0]
        column_2 = row[1]
        column_3 = row[2]
        if column_1 == column_2 == column_3:
            print["WINNER!"]
win[game]
6
game = [[1, 1, 1],
        [2, 2, 0],
        [1, 2, 0]]

def win[current_game]:
    for row in game:
        print[row]
        # how might we check all items in this row? We could do something like:
        column_1 = row[0]
        column_2 = row[1]
        column_3 = row[2]
        if column_1 == column_2 == column_3:
            print["WINNER!"]
win[game]
4

Ngoài ra, chúng ta có thể sử dụng cái được gọi là định dạng chuỗi, cụ thể là với

game = [[1, 1, 1],
        [2, 2, 0],
        [1, 2, 0]]

def win[current_game]:
    for row in game:
        print[row]
        # how might we check all items in this row? We could do something like:
        column_1 = row[0]
        column_2 = row[1]
        column_3 = row[2]
        if column_1 == column_2 == column_3:
            print["WINNER!"]
win[game]
7, để định dạng tốt hơn các biến thành chuỗi. Chuỗi f chỉ là một chuỗi được tạo bằng
game = [[1, 1, 1],
        [2, 2, 0],
        [1, 2, 0]]

def win[current_game]:
    for row in game:
        print[row]
        # how might we check all items in this row? We could do something like:
        column_1 = row[0]
        column_2 = row[1]
        column_3 = row[2]
        if column_1 == column_2 == column_3:
            print["WINNER!"]
win[game]
8 chứ không phải
game = [[1, 1, 1],
        [2, 2, 0],
        [1, 2, 0]]

def win[current_game]:
    for row in game:
        print[row]
        # how might we check all items in this row? We could do something like:
        column_1 = row[0]
        column_2 = row[1]
        column_3 = row[2]
        if column_1 == column_2 == column_3:
            print["WINNER!"]
win[game]
9. Bên trong chuỗi f, bạn có thể chuyển các biến bên trong dấu ngoặc nhọn [{ và }]

game = [[1, 1, 1],
        [2, 2, 0],
        [1, 2, 0]]

def win[current_game]:
    for row in game:
        print[row]
        # how might we check all items in this row? We could do something like:
        column_1 = row[0]
        column_2 = row[1]
        column_3 = row[2]
        if column_1 == column_2 == column_3:
            print["WINNER!"]
win[game]
8
game = [[1, 1, 1],
        [2, 2, 0],
        [1, 2, 0]]

def win[current_game]:
    for row in game:
        print[row]
        # how might we check all items in this row? We could do something like:
        column_1 = row[0]
        column_2 = row[1]
        column_3 = row[2]
        if column_1 == column_2 == column_3:
            print["WINNER!"]
win[game]
0

Được rồi, chúng tôi có một cách để kiểm tra các chiến thắng theo chiều ngang. Bây giờ chúng ta sẽ chinh phục các chiến thắng dọc trong hướng dẫn tiếp theo

Ai thắng tic tac toe Python?

Người chơi thay phiên nhau đánh dấu trên một lưới gồm ba ô ba ô. Nếu một người chơi nhất định ghi được ba điểm liên tiếp theo chiều ngang, chiều dọc hoặc đường chéo thì người chơi đó sẽ thắng trò chơi . Trò chơi sẽ hòa nếu không ai có được ba điểm liên tiếp vào thời điểm tất cả các ô được đánh dấu.

Có một mẹo để giành chiến thắng tic tac toe?

Khi bạn là người đầu tiên tham gia, có một chiến lược đơn giản để giành chiến thắng trong trò tic tac toe. đặt dấu 'X' của bạn vào bất kỳ góc nào . Nước đi này gần như sẽ đưa bạn đến vòng tròn của người chiến thắng mọi lúc, miễn là đối thủ của bạn không đặt chữ 'O' đầu tiên của họ vào ô trung tâm.

Cách kiểm tra win trong tic tac toe Java?

Trong tic tac toe, người chơi thắng nếu họ có 3 biểu tượng trong một hàng, cột hoặc đường chéo . Hãy bắt đầu với các hàng. Chúng ta có thể sử dụng vòng lặp for để lặp qua từng hàng i. Bên trong vòng lặp for, chúng ta có thể sử dụng một điều kiện để kiểm tra xem board[i][0] có bằng board[i][1] không và board[i][1] có bằng board[i][2] không.

Tic tac toe hoạt động như thế nào trong Python?

Thuật toán .
Hiển thị bảng cho người dùng để chọn vị trí cho nước đi tiếp theo
Yêu cầu người dùng nhập số hàng và số cột
Cập nhật vị trí với ký hiệu người chơi tương ứng
Kiểm tra xem người chơi hiện tại có thắng trò chơi hay không
Nếu người chơi hiện tại thắng trò chơi, hãy in thông báo chiến thắng và phá vỡ vòng lặp vô hạn

Chủ Đề