Python: Tạo một game hai người chơi đơn giản bằng Turtle-Python
Điều kiện tiên quyết: Lập trình Turtle bằng Python
Trò chơi có tên TurtleMove mà chúng ta sẽ tạo sau đây về cơ bản là một trò chơi dựa trên sự may rủi. Trong trò chơi này hai người chơi (Đỏ & Xanh), sử dụng (đối tượng) rùa của riêng họ để chơi trò chơi.
Cách chơi
Trò chơi được chơi trong lưới được xác định trước có một số ranh giới.
- Cả hai người chơi di chuyển con rùa trong một khoảng cách đơn vị.
- Bây giờ cả hai người chơi lật đồng xu:
- 1) nếu HEAD thì rẽ phải
- 2) nếu không thì rẽ trái
- 3) lặp lại các bước 1 và 2 cho đến khi cả hai con rùa nằm trong ranh giới
Triển khai bằng Turtle Python
- Đầu tiên, một đối tượng màn hình con rùa được tạo cho ranh giới lưới.
- Bây giờ hai con rùa (Đỏ & Xanh) được tạo ra, mỗi người chơi một con.
- Cả hai con rùa được di chuyển một khoảng cách đơn vị bằng cách sử dụng phương thức turtle_obj.osystem(50).
- Sử dụng random.randrange(0, 2) tức là 0 thì rẽ trái còn 1 thì rẽ bên phải.
- Sau mỗi lần di chuyển, vị trí của mỗi con rùa được kiểm tra, nếu con rùa nào vượt qua ranh giới thì con rùa đó thua cuộc chơi.
Dưới đây là code thực hiện
import random import turtle # hàm kiểm tra xem con rùa đã chạm # mép của cửa sổ def isInScreen(win, turt): # lấy điểm cuối của màn hình leftBound = -win.window_width() / 2 rightBound = win.window_width() / 2 topBound = win.window_height() / 2 bottomBound = -win.window_height() / 2 # lấy vị trí hiện thời của rùa turtleX = turt.xcor() turtleY = turt.ycor() # biến dùng để lưu trạng thái còn trong màn hình hay không stillIn = True # kiểm tra xem rùa còn trong màn hình hay không if turtleX > rightBound or turtleX < leftBound: stillIn = False if turtleY > topBound or turtleY < bottomBound: stillIn = False # trả về kết quả kiểm tra return stillIn # hàm kiểm tra xem 2 con rùa có # vị trí khác nhau hay không def sameposition(Red, Blue): if Red.pos() == Blue.pos(): return False else: return True # hàm điều khiển chương trình def main(): # tạo màn hình wn = turtle.Screen() # tạo rùa đỏ Red = turtle.Turtle() # thiết lập màu đỏ cho rùa đỏ Red.pencolor("red") # thiết lập độ dày nét vẽ Red.pensize(5) # thiết lập dạng rùa Red.shape('turtle') pos = Red.pos() # tạo rùa xanh Blue = turtle.Turtle() # thiết lập màu blue cho rùa Blue.pencolor("blue") # thiết lập độ dày nét vẽ Blue.pensize(5) # thiết lập dạng rùa Blue.shape('turtle') # ẩn rùa xanh Blue.hideturtle() # không vẽ khi di chuyển rùa Blue.penup() # di chuyển rùa xanh đến vị trí cách # rùa đỏ 50 đơn vị Blue.goto(pos[0] + 50, pos[1]) # hiện rùa xanh Blue.showturtle() # đặt rùa xuống Blue.pendown() # biến lưu trữ trạng thái rùa # đã chạm màn hình hay chưa mT = True jT = True # vòng lặp để thực hiện trò chơi while mT and jT and sameposition(Red, Blue): # tung đồng xu cho rùa đỏ coinRed = random.randrange(0, 2) # góc xoay cho rùa đỏ angleRed = 90 # kiểm tra để xoay rùa đỏ if coinRed == 0: Red.left(angleRed) else: Red.right(angleRed) # tung đồng xu cho rùa xanh coinBlue = random.randrange(0, 2) # góc xoay của rùa angleBlue = 90 # kiểm tra để xoay rùa xanh if coinBlue == 0: Blue.left(angleBlue) else: Blue.right(angleBlue) # rùa đỏ di chuyển Red.forward(50) # rùa xanh di chuyển Blue.forward(50) # kiểm tra xem có rùa nào chạm # màn hình không mT = isInScreen(wn, Blue) jT = isInScreen(wn, Red) # thiết lập màu vẽ cho cả 2 rùa là black Red.pencolor("black") Blue.pencolor("black") # kiểm tra xem rùa nào thắng if jT == True and mT == False: # đưa ra kết quả Red.write("Red Won", True, align="center", font=("arial", 15, "bold")) elif mT == True and jT == False: # đưa ra kết quả Blue.write("Blue Won", True, align="center", font=("arial", 15, "bold")) else: # đưa ra kết quả Red.write("Draw", True, align="center", font=("arial", 15, "bold")) Blue.write("Draw", True, align="center", font=("arial", 15, "bold")) # thoát chương trình wn.exitonclick() # gọi hàm main main()
Kết quả chạy thử: