Ai thắng tic tac toe Python?
Trong bài viết này, chúng tôi đã trình bày thuật toán kiểm tra thắng thua cho một cấu hình Tic Tac Toe cho trước. Show
GHI CHÚ. thuật toán này giả định rằng dữ liệu trò chơi được truyền ở định dạng sau
Tại sao lại là định dạng trên? . From the above image, we can see that there is one big block which is like the container, we have rows (the blocks that run horizontally from left to right) and columns (blocks that run vertically from up to down) and each row has 3 smaller blocks or tiles. Trong đoạn mã trên, chúng ta có cùng cấu trúc.
Bây giờ, hãy nói về việc triển khai thuật toán BƯỚC 1. Điều gì được coi là một chiến thắng?
BƯỚC 2. Cách tính win cho bước 1. 1. di chuyển tương tự kéo dài trên (theo chiều ngang) trên một hàng
Tạm thời chỉ thế thôi, đây cũng sẽ là cơ sở để tính toán các chiến thắng khác (hãy tiếp tục đọc và bạn sẽ hiểu tại sao). 2 để kiểm tra xem liệu có bất kỳ nước đi nào khác ngoài 'x' hay không và nếu có thì điều đó có nghĩa là điều kiện để giành chiến thắng đã bị vi phạm do đó không có chiến thắng nào cho hàng . Chúng tôi sử dụng điều này để kiểm tra tất cả các hàng và nếu bất kỳ giá trị nào khác ngoài 3 được trả về thì sẽ thắng. Để kiểm tra chiến thắng cho tất cả các hàng
BƯỚC 3. Cách tính win cho 1. 2. di chuyển tương tự kéo dài theo chiều dọc dọc theo một cộtBây giờ, đây là nơi mọi thứ trở nên thú vị và bạn sẽ thấy lý do tại sao tôi chọn cấu trúc dữ liệu theo cách tôi đã làm. Bạn có thể thấy rõ rằng hàng đầu tiên chứa các số 1, 2 và 3 hoặc dưới dạng danh sách 4 tương tự với các hàng khác. Nhưng một lần nữa, hãy nhìn vào cột, chỉ là cột đầu tiên. Nó chứa các ô 1, 4 và 7 hoặc dưới dạng danh sách 7. Vì vậy, những gì chúng ta phải làm là tìm cách nhóm các thành phần đó lại với nhau và tạo thành cấu trúc giống như dữ liệu của chúng ta, nhưng trông như thế nàyHãy xem xét nó từ góc độ này. 6Bây giờ tất cả đã được xếp thành hàng, tôi nghĩ nó rõ ràng hơn. Thật may mắn cho chúng tôi, python cung cấp một chức năng tích hợp có tên là 7 giúp chúng tôi làm điều đó khá nhiều. cứ thế. 7Thế thôi. hàm 7 trả về một đối tượng zip mang lại từng giá trị khi bạn lặp lại nó. Chúng tôi chuyển đổi nó thành một danh sách bằng cách sử dụng 9Bây giờ, để tính toán cho tất cả các hàng, chúng tôi sử dụng hàm tương tự như trong BƯỚC 2 0BƯỚC 4. Cách tính win 3. di chuyển tương tự kéo dài theo đường chéo trong trò chơiMột lần nữa, chúng ta cần tìm cách lọc ra các giá trị tạo thành các đường chéo của trò chơi. Đó là 0 và 1. Không giống như lần trước, chúng tôi không có chức năng tích hợp sẵn nhưng rất dễ triển khai một chức năng có thể làm điều đó cho chúng tôi. Hãy nghĩ về những gì chúng ta muốn làm trước, sau đó chúng ta xem chúng ta sẽ làm điều đó như thế nào. 3Chúng tôi muốn lấy phần tử thứ nhất từ danh sách thứ nhất, phần tử thứ 2 từ danh sách thứ 2 và phần tử thứ 3 từ danh sách thứ 3. Bây giờ đó là những gì tôi muốn gọi là một mô hình rõ ràng. 72 nàynhớ. Lập chỉ mục mảng bắt đầu từ 0. 5Hãy chia nhỏ mã Đầu ra của mã này sẽ là một danh sách, tức là một cạnh chéo. chúng tôi tạo một danh sách trống 73 trong đó chúng tôi sẽ lưu trữ các giá trị của mình (ô xếp). sau đó, chúng tôi duyệt qua các hàng và đối với mỗi hàng, chúng tôi nhận được ô xếp trước một bước so với hàng trước đó. 74 sẽ trả về 0 đến 2, tổng cộng là 3. sau đó, chúng tôi lặp qua từng ô và 75 đến danh sách đầu ra có giá trị của 76Chúng tôi đã khởi tạo biến 77 với giá trị 0. Chúng tôi chỉ tăng nó lên một sau khi tất cả các mục/ô trong một hàng đã được lặp lại và mục mong muốn đã được thêm vào danh sách đầu raNhưng vấn đề nằm ở đây, ở vòng lặp thứ hai, tức là vòng lặp bên trong. Nó chạy nhiều lần bằng số lượng vật phẩm/ô xếp chúng tôi có trong hàng của mình, tức là 3. Và mỗi lần, nó lưu trữ một giá trị, đó là, 78 đối với hàng đầu tiên. Điều này là do biến đếm không được tăng lên cho đến khi hoàn thành vòng lặp bên trongVì vậy, chúng tôi kết thúc với các bản sao. Một danh sách đầu ra trông như thế này 2Nếu danh sách của chúng tôi đơn giản như danh sách trên, chỉ với các con số, chúng tôi có thể làm một cái gì đó như thế này 3 79 là một cấu trúc dữ liệu không cho phép các đối tượng trùng lặp. Trong python, bạn có thể tạo một bộ mới bằng cách sử dụng 00Nhưng chỉ có một điều, bạn không thể làm điều này với một danh sách từ điển. Tại sao? Điều đó nghĩa là gì? Dù sao đi nữa, điều quan trọng là làm cho đối tượng 01 có thể băm được là sử dụng phương thức 02. Nó trả về một tuple của đối tượng. A 03 là một đối tượng bất biến, nghĩa là giá trị của nó không bao giờ thay đổi. 9Nếu tôi phải giải thích khái niệm băm và tính bất biến, thì điều này sẽ trở nên khá lớn, vì vậy tôi đã tiếp tục và tìm ra một lời giải thích thực sự hay Nhưng hãy nhớ rằng, chúng ta có hai đường chéo, vậy làm cách nào để lấy đường chéo còn lại, tôi sẽ đi thẳng vào vấn đề, chúng ta chỉ cần đảo ngược hoặc đảo ngược các ô 0Với các ô hoặc cấu trúc bị đảo ngược, chúng ta có thể dễ dàng lấy đường chéo khác bằng cách sử dụng cùng một phương pháp mà chúng ta đã sử dụng để lấy đường chéo đầu tiên. Nhờ có python, chúng tôi có một tích hợp khác có tên là 04 trả về một 05. Và do đó chúng ta có thể làm một cái gì đó như thế này 1Bây giờ chúng ta có mã để lấy danh sách dọc và danh sách ngang và để tính toán chiến thắng, chúng ta chỉ cần sử dụng mã từ BƯỚC 1 2Hãy thử nó ra. Tôi đã tạo ra một cách đơn giản để nhận thông tin đầu vào (chúng ta sẽ coi đó là trò chơi dành cho việc này) 3Điều này sẽ lấy 9 đầu vào, tức là cho 9 ô và sẽ định dạng dữ liệu theo cách phù hợp với cấu trúc mà chúng ta muốn Đây là một đầu ra mẫu Bây giờ một số người hoặc tất cả mọi người có thể xem và nói, đợi một chút, tất cả các ô được sử dụng hoặc cả hai đều thắng cho x và o. Và đó là lý do tại sao thuật toán này nên được sử dụng để tính toán chiến thắng sau khi bất kỳ người chơi nào thực hiện nước đi. Đó là một thử thách khác dành cho bạn, hãy thực hiện nó Ai thắng trong ticNgười chơi thành công trong việc đặt ba điểm của họ thành một hàng ngang, dọc hoặc chéo là người chiến thắng. Đây là một trò chơi đã được giải quyết, với một trận hòa bắt buộc với giả định chơi tốt nhất từ cả hai người chơi.
làm thế nào để làm cho ticCác bước để xây dựng trò chơi Tic Tac Toe trên Python . Tạo cửa sổ hiển thị cho trò chơi của chúng tôi Vẽ lưới trên canvas nơi chúng ta sẽ chơi Tic Tac Toe Vẽ thanh trạng thái bên dưới canvas để hiển thị lượt của người chơi nào và ai thắng trò chơi Khi ai đó thắng trò chơi hoặc trò chơi hòa thì chúng tôi đặt lại trò chơi Thuật toán nào được sử dụng cho ticThuật toán Minimax là một quy tắc quyết định được xây dựng cho các trò chơi có tổng bằng 0 của 2 người chơi (Tic-Tac-Toe, Cờ vua, Cờ vây, v.v. ). Thuật toán này đi trước một vài bước và đặt mình vào vị trí của đối thủ.
logic đằng sau tic là gìMột trong hai người chơi chọn 'O' và 'X' của người kia để đánh dấu các ô tương ứng của họ . Trò chơi bắt đầu với một trong những người chơi và trò chơi kết thúc khi một trong những người chơi có toàn bộ một hàng/cột/đường chéo chứa ký tự tương ứng của mình ('O' hoặc 'X'). Nếu không ai thắng, thì trò chơi được cho là hòa. |