Hướng dẫn tic tac toe in python using lists - tic tac toe trong python sử dụng danh sách


Danh sách và trò chơi Tic Tac Toe - Học cách lập trình với Python 3 (cơ bản)

Xin chào và chào mừng đến phần 3 của các hướng dẫn cơ bản của Python 3. Trong video này, chúng tôi sẽ bắt đầu giải quyết một thử thách thực tế: tạo ra một trò chơi Tictactoe!

Trò chơi Tictactoe, trong khi đơn giản để chúng ta hiểu, có khá nhiều thách thức để chúng ta đối phó trong khi mã hóa. Những thứ như hiển thị bảng của trò chơi, cho phép người chơi nhập các động tác, cập nhật bảng trò chơi, phát hiện người chiến thắng, v.v. Ngoài ra, chúng tôi cũng phải suy nghĩ về nơi mọi thứ có thể sai, chẳng hạn như người chơi đang cố gắng chơi nơi người khác đã chơi, hoặc chơi ở một vị trí không tồn tại, v.v.

Như bạn có thể nhận ra bây giờ, mặc dù sự đơn giản của Tictactoe, có rất nhiều điều phức tạp nhỏ hơn mà chúng tôi phải đối phó và xử lý cho việc chúng tôi chỉ đưa ra khi chúng tôi chơi trên một tờ giấy. Với bất kỳ nhiệm vụ nào như thế này, nơi có nhiều việc phải làm, chúng ta cần phải phá vỡ toàn bộ mục tiêu, trong đầu hoặc trong một số ghi chú. Trong trường hợp này, chúng tôi biết rằng chúng tôi cần một số điều cơ bản:

  1. Hình dung trò chơi bằng cách nào đó
  2. Cho phép người chơi tham gia các động tác
  3. Đảm bảo di chuyển là hợp lệ và xử lý nếu không.
  4. Xác định xem có người chiến thắng không.

Chúng ta có thể giải quyết những thứ này theo thứ tự, vì vậy hãy bắt đầu với #1. Làm thế nào chúng ta sẽ hình dung bảng này? Tôi đề xuất, để bắt đầu, chúng tôi chỉ sử dụng danh sách. Trong trường hợp này, một danh sách các danh sách. Sau đó, chúng tôi có thể chuyển đổi danh sách các danh sách này thành một thứ gì đó đẹp hơn một chút, nhưng nó sẽ có ý nghĩa hơn đối với chúng tôi trong khi lập trình điều này để giữ cho nó một chương trình hiểu.

Vậy làm thế nào chúng ta có thể xác định bản đồ trò chơi của chúng ta? Chúng ta có thể bắt đầu bằng cách thử một cái gì đó như:

game = (0, 0, 0,
        0, 0, 0,
        0, 0, 0)

Rõ ràng đó là lưới 3x3, phải không? Vừa đủ dễ!

Chà, không quá nhanh ở đó, hãy in nó ra:

print(game)
(0, 0, 0, 0, 0, 0, 0, 0, 0)
>>> 

Ngoài ra, đây là một tuple, vì vậy nó là bất biến và chúng tôi không thể thay đổi nó theo thời gian. Vì vậy, chúng tôi sẽ sử dụng danh sách!

game = [0, 0, 0,
        0, 0, 0,
        0, 0, 0]

print(game)
[0, 0, 0, 0, 0, 0, 0, 0, 0]
>>> 

Vẫn chưa hoàn toàn những gì chúng tôi muốn. Thay vào đó, hãy chuyển đổi nó thành một danh sách danh sách.

game = [[0, 0, 0],
        [0, 0, 0],
        [0, 0, 0]]

print(game)
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
>>> 

Vẫn bằng phẳng, nhưng chúng ta có thể thấy họ bây giờ rõ ràng là 3 nhóm. Làm thế nào chúng ta có thể tách những thứ này ra? Bạn có thể hỏi ....

(0, 0, 0, 0, 0, 0, 0, 0, 0)
>>> 
1. Ah, một vòng lặp!

game = [[0, 0, 0],
        [0, 0, 0],
        [0, 0, 0]]

for row in game:
    print(row)
[0, 0, 0]
[0, 0, 0]
[0, 0, 0]
>>> 

Bây giờ chúng tôi đang tiến bộ! Tôi nghĩ rằng chúng tôi đã có bảng trò chơi của chúng tôi để bắt đầu. Vì vậy, suy nghĩ của tôi bây giờ là 0 có nghĩa là không ai chơi ở đó, sau đó chúng tôi sẽ sử dụng số 1 cho người chơi 1 và số 2 cho người chơi 2. Sau này, chúng tôi có thể đến và sử dụng danh sách này để tạo ra một Phiên bản của trò chơi, nhưng, bây giờ, logic này sẽ hoạt động tốt.

Vì vậy, chúng tôi đã có một bảng trò chơi, điều gì tiếp theo? Chúng tôi cần một số cách để người chơi chơi. Bước này có 2 phần. Một phần là tìm ra nơi chính xác người dùng muốn chơi và phần còn lại thực sự đánh dấu vị trí đó trên bảng của trò chơi. Trong hướng dẫn tiếp theo, chúng tôi sẽ đề cập đến cách chúng tôi có thể xác định từ người dùng nơi họ muốn chơi.

Hướng dẫn tiếp theo:


Gần đây tôi đã viết một bài về tầm quan trọng của việc bắt đầu nhỏ khi bạn học một ngôn ngữ hoặc khuôn khổ mới.

Trong bài đăng đó, tôi đã đề xuất một loạt các thí nghiệm nhỏ, vứt bỏ bạn có thể làm để ngừng sử dụng các hướng dẫn và bắt đầu mã hóa độc lập bằng một ngôn ngữ mới.

Cái nhìn sâu sắc từ bài đăng đó, tuy nhiên, là chủ nghĩa gia tăng. Bạn học bằng cách xây dựng một cái gì đó dễ dàng và sau đó dần dần làm cho mọi thứ chỉ một cấp độ phức tạp hơn. Kéo dài giới hạn của sự hiểu biết của bạn, nhưng theo những cách có thể quản lý.

Ứng dụng đơn giản dạy các bài học lớn

Trong loạt bài viết này, tôi muốn minh họa những gì tôi muốn nói bằng cách gia tăng.

Chúng tôi sẽ bắt đầu bằng cách xây dựng một cái gì đó tầm thường, và sau đó chúng tôi sẽ liên tục làm cho nó phức tạp hơn.

Ai biết nơi chúng ta sẽ kết thúc vào cuối loạt bài này? Nhưng mỗi bài viết trong loạt bài sẽ có thể đứng một mình và dạy một số bài học tốt.

Ý tưởng là để tôi kéo dài giới hạn của sự hiểu biết phát triển phần mềm và python của tôi. Như vậy, don lồng đối xử với những bài báo này như một hướng dẫn. Thay vào đó, hãy nghĩ về nó như một nỗ lực hợp tác. Vui lòng theo dõi, xây dựng phiên bản ứng dụng của riêng bạn và đề xuất các cải tiến cho ứng dụng của tôi!

Ok, vậy chúng ta đang xây dựng gì?

Tôi nghĩ rằng một trò chơi đơn giản của tic-tac-toe là một điểm khởi đầu tốt.

Bản thân trò chơi nên khá dễ thực hiện. Nhưng nó cũng sẽ cung cấp tất cả các loại cơ hội để phát triển và phức tạp trong tương lai mà không quá lớn.

Tôi đã có tất cả các loại ý tưởng cho trò chơi cuối cùng-bao gồm việc tạo ra một AI không bao giờ thua Tic-Tac-Toe cho người chơi để chơi. Nghe có vẻ vui phải không?

Trên đường đi, chúng tôi sẽ sử dụng Git để kiểm soát phiên bản, kiểm tra ứng dụng bằng pytest, có thể chuyển nó để có thể chơi trực tuyến? Có rất nhiều lựa chọn!

Nhưng bây giờ, chúng ta cần xây dựng cơ sở của trò chơi. Vì vậy, hãy để chỉ xây dựng một phiên bản đơn giản của tic-tac-toe cho dòng lệnh.

Bắt đầu siêu nhỏ - gia tăng nhỏ!

Điểm của ứng dụng này là để chứng minh giá trị của chủ nghĩa gia tăng. Vì vậy, don lồng bị choáng ngợp nếu bạn không biết gì về thử nghiệm, kiểm soát phiên bản hoặc triển khai các ứng dụng Python trực tuyến.

Cuối cùng, chúng tôi sẽ nhận được tất cả những điều đó, nhưng trước tiên, chúng tôi sẽ bắt đầu với một ứng dụng nhỏ tầm thường mà thậm chí còn làm bất cứ điều gì.

Trước tiên, hãy để cho bảng Tic-Tac-Toe, trước tiên. Đó là nó!

Mini-Step #1: Xác định bảng

Được rồi, vì vậy hãy để Lừa nghĩ về một bảng Tic-Tac-Toe:

Nó có một bảng 3x3. Mỗi điểm trên bảng là ở một trong ba trạng thái: trống, x hoặc o.

Vì vậy, hãy để Lôi chỉ tạo ra một bảng tĩnh cho đến bây giờ để chúng ta có thể thực hành kết xuất nó trong Python.

CHỜ ĐÃ! Trước khi bạn nhìn vào ý tưởng của tôi về cách chúng ta nên xác định bảng, hãy nghĩ về chính bạn!

Đây là một hướng dẫn. Don Chỉ cần sao chép mã của tôi hoặc lướt qua nó. Hãy nghĩ về vấn đề cho chính mình trước khi bạn nhìn vào những gì tôi đã nghĩ ra!

Được rồi, đây là ý tưởng của tôi về cách xác định bảng.

board = [
["_", "_", "O"],
["X", "O", "_"],
["O", "_", "X"]
]

Tôi đã tạo bảng làm danh sách các danh sách, theo cách đó chúng ta có thể theo dõi các hàng một cách dễ dàng. Nhưng bạn cũng có thể làm điều đó như một danh sách duy nhất.

print(game)
0

Cả hai đều làm việc. Có sự đánh đổi trong khả năng đọc so với hiệu suất thời gian/không gian. Nhưng vì ứng dụng này rất nhỏ và cho mục đích học tập, tôi quyết định sai về phía khả năng đọc.

Tôi cũng quyết định sử dụng

(0, 0, 0, 0, 0, 0, 0, 0, 0)
>>> 
2 cho các ô vuông trống của mình, nhưng bạn có thể tưởng tượng bằng cách sử dụng một giá trị khác, như
(0, 0, 0, 0, 0, 0, 0, 0, 0)
>>> 
3 hoặc bất cứ điều gì thực sự. Lý do tại sao tôi chọn
(0, 0, 0, 0, 0, 0, 0, 0, 0)
>>> 
2is vì nó sẽ hiển thị độc đáo trên bảng điều khiển. Ngoài ra, sẽ dễ dàng kiểm tra bình đẳng với
(0, 0, 0, 0, 0, 0, 0, 0, 0)
>>> 
2 sau đó, thay vì xử lý sự nhầm lẫn của việc kiểm tra bình đẳng với
(0, 0, 0, 0, 0, 0, 0, 0, 0)
>>> 
3.

Chúng tôi sẽ sử dụng phiên bản danh sách đầu tiên.

Đó là nó! Chúng tôi đã nghĩ về và xác định bảng của chúng tôi! Bạn có thể khác với tôi, và điều đó ổn. Đó thực sự là toàn bộ quan điểm của loạt bài này.

Mini-Step #2: In bảng

Được rồi, chúng tôi có bảng xác định. Bây giờ, hãy để in nó.

Đầu tiên, hãy để xem nó trông như thế nào nếu chúng ta chỉ in bảng.

print(game)
1

Chạy nó:

print(game)
2

Hmm, in bảng, nhưng nó không trực quan. Nghĩ rằng chúng ta có thể xếp các hàng lên nhau?

Mini-bước: Cố gắng in từng hàng vào bảng điều khiển trên một dòng khác nhau. Hãy nhìn vào giải pháp của tôi cho đến khi bạn có một trong những của riêng bạn!

print(game)
3

Chạy nó:

print(game)
4

Trông tôt đây!

Mini-Step #3: Làm cho nó có thể tái sử dụng

Một yếu tố chính của phát triển phần mềm là làm cho mã có thể tái sử dụng.

Chúng tôi có thể cần phải in bảng của chúng tôi nhiều lần trong ứng dụng cuối cùng. Chúng ta không nên lặp lại vòng lặp

(0, 0, 0, 0, 0, 0, 0, 0, 0)
>>> 
7 ở mọi nơi chúng ta muốn in bảng.

Ngoài ra, nếu chúng ta muốn thay đổi cách chúng ta in bảng thì sao? Nếu chúng ta lặp lại vòng

(0, 0, 0, 0, 0, 0, 0, 0, 0)
>>> 
7 ở nhiều nơi, thì chúng ta sẽ cần thực hiện các thay đổi ở nhiều nơi.

Nó tốt hơn nhiều nếu chúng ta xác định hàm

(0, 0, 0, 0, 0, 0, 0, 0, 0)
>>> 
9. Điều đó khá dễ dàng để làm.

Thử nó!

print(game)
5

Mini-Step #4: Danh sách hiểu biết để tạo bảng

Tuyệt vời, chúng tôi đang trên đường chơi tic-tac-toe.

Bây giờ, hãy để loại bỏ bảng mẫu của chúng tôi và khởi tạo bảng ở trạng thái trống khi bắt đầu một trò chơi.

Chúng tôi có thể dễ dàng làm điều gì đó như thế này:

print(game)
6

Và điều đó sẽ hoạt động hoàn toàn tốt.

Nhưng chúng tôi đang cố gắng tăng dần tốt hơn tại Python. Sáng tạo bảng này đang khóc cho một danh sách hiểu! Chúng ta có thể làm điều này trong một dòng mã duy nhất!

Thử nó!

print(game)
7

Mini-Step #4: Danh sách hiểu biết để tạo bảng

Tuyệt vời, chúng tôi đang trên đường chơi tic-tac-toe.

Bây giờ, hãy để loại bỏ bảng mẫu của chúng tôi và khởi tạo bảng ở trạng thái trống khi bắt đầu một trò chơi.

Chúng tôi có thể dễ dàng làm điều gì đó như thế này:

Và điều đó sẽ hoạt động hoàn toàn tốt.

Nhưng chúng tôi đang cố gắng tăng dần tốt hơn tại Python. Sáng tạo bảng này đang khóc cho một danh sách hiểu! Chúng ta có thể làm điều này trong một dòng mã duy nhất!

print(game)
8

Lưu ý cách tôi sử dụng

game = [0, 0, 0,
        0, 0, 0,
        0, 0, 0]

print(game)
0. Nếu bạn chưa từng thấy điều đó trước đây, thì đó là một cách phổ biến trong Python để tạo ra một vòng lặp khi chúng tôi thực sự cần quyền truy cập vào chính trình lặp.

Nó có một giá trị vứt bỏ, trong số những thứ khác. Trên thực tế, đọc câu trả lời của StackoverFlow đã dạy tôi về việc sử dụng chính thức được xác định chính thức của dấu gạch dưới trong Python mà tôi đã thực sự biết! Học công cụ tăng dần!

Điểm thưởng:

Bạn có thể đang nghĩ,

(0, 0, 0, 0, 0, 0, 0, 0, 0)
>>> 
0

“Này, đợi một phút! Nếu chúng ta có thể làm một danh sách hiểu để tạo bảng, chúng ta cũng có thể in bảng theo một dòng không?

Và bạn có quyền nghĩ rằng! Về mặt kỹ thuật, chúng ta có thể in bảng trong một dòng bằng cách sử dụng danh sách hiểu:

Nhưng tôi đã tò mò, đây có thực sự là một ý kiến ​​hay không? Có vẻ như sự hiểu biết danh sách có thể thêm chi phí cho các câu lệnh in, tạo ra một danh sách không cần thiết.

Vì vậy - luôn luôn được học dần - Tôi đã thử nghiệm nó!

print(game)
9

Và hóa ra sử dụng khả năng hiểu danh sách trong trường hợp này là chậm gấp đôi, trung bình:

(Lưu ý ký hiệu khoa học

game = [0, 0, 0,
        0, 0, 0,
        0, 0, 0]

print(game)
1 ở cuối, nếu bạn nhầm lẫn.)

Vì vậy, đây là một ví dụ tuyệt vời về nơi viết một lớp là một sự vượt qua. Nó thực sự làm chậm chương trình của chúng tôi.

Bây giờ, công bằng mà nói, chúng tôi đã nói chuyện vài trăm nghìn giây trong một trò chơi tic-tac-toe. Nếu bạn học cách học cách hiểu, điều này có thể rất thú vị để thực hiện và sự khác biệt về tốc độ là vô hại.

Tuy nhiên, tôi đã có thử nghiệm vui vẻ và thời gian cả hai cách tiếp cận! Tôi đã học được điều gì đó tăng dần và đẩy các giới hạn của sự hiểu biết của tôi.

Kiểm tra mã kiểm tra tốc độ trên GitHub

Kết thúc cho ngày hôm nay

Có lẽ cảm giác như chúng tôi đã làm rất nhiều ngày hôm nay. Nếu đây là một hướng dẫn, bạn sẽ có quyền thất vọng. Tất cả những gì chúng tôi đã làm là tạo một danh sách các danh sách và sau đó in nó.

Làm cách nào để hiển thị tic tac toe trong python?

Các bước để xây dựng một trò chơi Python Tic Tac Toe..
Tạo cửa sổ hiển thị cho trò chơi của chúng tôi ..
Vẽ lưới trên vải nơi chúng tôi sẽ chơi tic tac toe ..
Vẽ thanh trạng thái bên dưới khung vẽ để hiển thị lượt của người chơi nào là nó và ai thắng trò chơi ..
Khi ai đó thắng trò chơi hoặc trò chơi là một trận hòa thì chúng tôi thiết lập lại trò chơi ..

Làm thế nào để bạn tạo ra một ngón chân tic tic?

Thứ tự chung của các bước để thực hiện: Tạo bảng TAC TAC TOE và lấp đầy nó bằng dấu gạch ngang.Tạo một chức năng vẽ bảng như một hình vuông.Theo dõi lượt của người chơi và biểu tượng họ đang sử dụng.Tiếp tục yêu cầu người dùng nhập một hàng và col cho đến khi họ hợp lệ.Create a Tic Tac Toe board and fill it with dashes. Create a function that draws the board like a square. Keep track of the player's turn and what symbol they are using. Keep asking the user to enter a row and col until they are valid.

Làm thế nào để bạn làm kéo giấy đá trong Python?

Nếu user_action == máy tính_action: print (f "Cả hai người chơi đã chọn {user_action}. Đó là một mối quan hệ!") Elif user_action == "rock": nếu máy tính) Khác: In ("Giấy bìa đá!

Làm thế nào để bạn tạo ra một trò chơi rắn ở Python?

Làm thế nào để thực hiện trò chơi rắn trong Python ?..
Cài đặt pygame ..
Tạo màn hình ..
Tạo con rắn ..
Di chuyển con rắn ..
Trò chơi kết thúc khi rắn chạm vào ranh giới ..
Thêm thức ăn ..
Tăng chiều dài của con rắn ..
Hiển thị điểm số ..