1. Trang chủ
  2. » Luận Văn - Báo Cáo

ứng dụng game caro ứng dụng game caro ai với

23 0 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Nội dung

Mục tiêu của thuật toán là tìm ra nước đi tối ưu cho một người chơi, giả sử cả hai đối thủ chơi với chiến lược tối ưu.Cách thuật toán Minimax hoạt động:1.Xây dựng cây trò chơi Game Tree:

Trang 1

TRƯNG ĐI HC SƯ PHM ĐÀ NẴNGKhoa : Tin học

ĐỒ ÁN CUỐI KÌ MÔN : TRÍ TUỆ NHÂN TO

ỨNG DỤNG GAME CARO AI VỚINGÔN NGỮ PYTHON

Giảng viên hướng dẫn :

Giảng viên hướng dẫn : Nguyễn Đỗ Công PhápNhóm :

Nhóm : AI 11Ngành :

Ngành : Công Nghệ Thông TinSinh Viên Thực Hiện :

Phan Quốc TrườngTrần Thị ThúyVõ Thị Minh KhuyênNguyễn Hoàng Uyên Nhi

Lê Thị Thùy Trinh

Năm Học 2023- 2024

Trang 2

Sự bùng nổ của công nghệ thông tin toàn cầu hiện nay, đã có những bước phát triển mạnh mẽ của các công nghệ số Những chiếc điện thoạismart phone thông minh với nhiều hệ điều hành khác nhau ngày càng được nhiều người sử dụng tin dùng Nắm bắt được xu thế những người lập trình game đưa ra các ý tưởng và tạo ra các ứng dụng game hay và rất hấp dẫn người chơi và có những trò chơi đã đi vào huyền thoại ai cũng biết đến nó Đó là một thành công của lập trình viên trong đó có Việt Nam Để biết rõ hơn về vấn đề này chúng ta cùng nhau tìm hiểu về

GAME "Tic Tac Toe AI" một game đã quá quen thuộc với giới trẻ hiện nay.

II Giới thiệu về ngôn ngữ Python,Visual Studio Code và thuật toán MINMAX

a)Ngôn Ngữ Python

 Python là một ngôn ngữ lập trình được sử dụng rộng rãi trong các ứng dụng web, phát triển phần mềm, khoa học dữ liệu và máy học (ML) Các nhà phát triển sử dụng Python vì nó hiệu quả, dễ học và có thể chạy trên nhiều nền tảng khác nhau Phần mềm Python được tải xuống miễn phí, tích hợp tốt với tất cả các loại hệ thống và tăng tốc độ phát triển

 Những lợi ích của Python bao gồm:

- Các nhà phát triển có thể dễ dàng đọc và hiểu một chương trình Python vì ngôn ngữ này có cú pháp cơ bản giống tiếng Anh

- Python giúp cải thiện năng suất làm việc của các nhà phát triển vì so với những ngôn ngữ khác, họ có thể sử dụng ít dòng mã hơn để viết một chương trình Python.

Trang 3

- Python có một thư viện tiêu chuẩn lớn, chứa nhiều dòng mã có thể tái sử dụng cho hầu hết mọi tác vụ Nhờ đó, các nhà phát triển sẽ không cần phải viết mã từ đầu.

- Các nhà phát triển có thể dễ dàng sử dụng Python với các ngôn ngữ lập trình phổ biến khác như Java, C và C++.

- Cộng đồng Python tích cực hoạt động bao gồm hàng triệu nhà phát triển nhiệt tình hỗ trợ trên toàn thế giới Nếu gặp phải vấnđề, bạn sẽ có thể nhận được sự hỗ trợ nhanh chóng từ cộng đồng.

- Trên Internet có rất nhiều tài nguyên hữu ích nếu bạn muốn học Python Ví dụ: bạn có thể dễ dàng tìm thấy video, chỉ dẫn, tài liệu và hướng dẫn dành cho nhà phát triển.

- Python có thể được sử dụng trên nhiều hệ điều hành máy tính khác nhau, chẳng hạn như Windows, macOS, Linux và Unix.

b)Giới thiệu về Visual Studio Code

 Visual Studio Code chính là ứng dụng cho phép biên tập, soạn thảo các đoạn code để hỗ trợ trong quá trình thực hiện xây dựng, thiết kế website một cách nhanh chóng Visual Studio Code hay còn được viết tắt là VS Code Trình soạn thảo này vận hành mượt mà trên các nền tảng như Windows, macOS, Linux Hơn thế nữa, VS Code còn cho khả năng tương thích với những thiết bị máy tính có cấu hình tầm trung vẫn có thể sử dụng dễ dàng.

 Trong đó có thể kể đến những ưu điểm sau:

- Đa dạng ngôn ngữ lập trình giúp người dùng thỏa sức sáng tạo và sử dụng như HTML, CSS, JavaScript, C++,…

- Ngôn ngữ, giao diện tối giản, thân thiện, giúp các lập trình viên dễ dàng định hình nội dung.

- Các tiện ích mở rộng rất đa dạng và phong phú.

Trang 4

- Tích hợp các tính năng quan trọng như tính năng bảo mật (Git), khả năng tăng tốc xử lý vòng lặp (Debug),…

- Đơn giản hóa việc tìm quản lý hết tất cả các Code có trên hệ thống.

c) Thuật toán MINIMAX:

Thuật toán Minimax là một thuật toán tìm kiếm cây quyết định được sửdụng trong trò chơi với hai đối thủ, như Tic Tac Toe, Chess, hoặc các tròchơi giống nhau Mục tiêu của thuật toán là tìm ra nước đi tối ưu cho một người chơi, giả sử cả hai đối thủ chơi với chiến lược tối ưu.

Cách thuật toán Minimax hoạt động:

1.Xây dựng cây trò chơi (Game Tree): Mỗi nút trong cây đại diện

cho một trạng thái của trò chơi, và mỗi cạnh đại diện cho một nước đi có thể được thực hiện từ một trạng thái cụ thể.2.Đánh giá giá trị của các nút lá (Leaf Nodes): Các nút lá là những

trạng thái cuối cùng của trò chơi Mỗi nút lá được đánh giá một giá trị -1 (nếu người chơi khác thắng), 0 (nếu hòa), hoặc 1 (nếu người chơi hiện tại thắng).

3.Lấy giá trị của các nút cha (Parent Nodes): Giá trị của một nút cha

được xác định bằng cách chọn giá trị lớn nhất (nếu đến lượt ngườichơi hiện tại) hoặc giá trị nhỏ nhất (nếu đến lượt đối thủ).4.Lặp lại quá trình đánh giá và lấy giá trị: Thuật toán lặp lại quá

trình này từ trên xuống đến dưới cho đến khi nó đến nút gốc của cây Tại nút gốc, nó chọn nước đi tối ưu dựa trên giá trị của các nút con.

5.Chọn nước đi tối ưu: Sau khi thuật toán đã đánh giá toàn bộ cây,

nó chọn nước đi tối ưu dựa trên giá trị của các nút con trực tiếp kết nối với nút gốc Nếu đây là lượt của người chơi hiện tại, thuật

Trang 5

toán sẽ chọn nước đi với giá trị lớn nhất; nếu là lượt của đối thủ, thuật toán sẽ chọn nước đi với giá trị nhỏ nhất.

Thuật toán Minimax đảm bảo rằng người chơi sẽ chọn nước đi tối ưu dựa trên giả định rằng cả hai đối thủ chơi với chiến lược tối ưu, và nó làmột trong những phương pháp quan trọng trong trí tuệ nhân tạo liên quan đến trò chơi.

III Báo cáo làm game 'TIC TAC TOE AI' với ngôn ngữ Python

a) Giới thiệu về game 'TIC TAC TOE AI'

-"Tic Tac Toe AI" là một phiên bản của trò chơi caro kinh điển, nơi haingười chơi lần lượt đánh dấu trên một bảng 3x3 Mục tiêu của trò chơilà tạo thành một dãy 3 ký hiệu giống nhau theo chiều ngang, dọc hoặcchéo Trong phiên bản này, có sự tích hợp của trí tuệ nhân tạo (AI), giúpngười chơi thưởng thức trải nghiệm chơi đơn với máy tính.

-Đặc điểm của trò chơi:

+Giao diện đồ họa thân thiện: Trò chơi có một giao diện đồ họa sẽthuận tiện cho việc chơi và theo dõi trạng thái của bảng.

+Chế độ chơi: Người chơi có thể chọn giữa chế độ chơi với người khác(Player vs Player - PvP) hoặc chế độ chơi với máy tính (Player vs AI -PvAI).

+Mức độ khó khăn của AI: Trong chế độ PvAI, người chơi có thể thửthách bản thân với các mức độ khó khăn khác nhau của trí tuệ nhântạo Các mức độ này có thể bao gồm cả mức dễ (AI ngẫu nhiên) đếnmức khó (AI sử dụng thuật toán Minimax).

Trang 6

+Khả năng chơi lại: Người chơi có thể khởi động lại trò chơi bất kỳ lúc

nào, cung cấp sự thuận tiện khi muốn chơi lại sau khi kết thúc một ván +Hiển thị kết quả: Khi trò chơi kết thúc, người chơi sẽ được thông báovề kết quả của ván đấu, liệu có người chiến thắng hay trò chơi hòa."Tic Tac Toe AI" cung cấp một trải nghiệm chơi caro đơn giản nhưng thúvị với sự thách thức từ trí tuệ nhân tạo, tạo điểm nhấn cho người chơimuốn trải nghiệm caro một cách mới lạ.

Game Tic Tac Toe AI Trên PC

b) Luật chơi :

Trang 7

a) Bảng chơi: Trò chơi được thực hiện trên một bảng 3x3 ô vuông.

b) Người chơi: Có hai người chơi, một đại diện cho ký hiệu "X" (cross),

và người còn lại đại diện cho ký hiệu "O" (circle).

c) Mục tiêu: Mục tiêu của mỗi người chơi là tạo thành một dãy 3 ký hiệu

giống nhau theo chiều ngang, dọc hoặc chéo trên bảng.

d) Lượt đi: Người chơi "X" thường đi trước Sau đó, lượt đi chuyển qua

lại giữa "X" và "O" cho đến khi có người chiến thắng hoặc bảng đầy (hòa).

e) Đánh dấu ô: Mỗi người chơi, khi đến lượt, chọn một ô trống trên

bảng để đánh dấu ký hiệu của mình vào đó.

f) Chế độ chơi AI: Nếu trong chế độ PvAI, người chơi sẽ đối mặt với trí

tuệ nhân tạo AI có thể sử dụng thuật toán Minimax để đưa ra nước đi tối ưu.

g) Kết thúc trò chơi: Trò chơi kết thúc khi có một người chiến thắng

hoặc bảng đầy Người chiến thắng là người đầu tiên tạo thành một dãy 3 ký hiệu liên tiếp Nếu bảng đầy mà không có người chiến thắng, trò chơi được coi là hòa.

chiến thắng của người tham gia.

IV CODE GAME

import copy

import sys

Trang 8

import pygame

import random

import numpy npasfrom constants import*

# PYGAME SETUP pygame.init()

-screen pygame.display.set_mode( (WIDTH, HEIGHT) )=

pygame.display.set_caption('TIC TAC TOE AI')screen.fill( BG_COLOR )

a) Trong đoạn mã này:

1.self.squares: Đây là một thuộc tính của đối tượng được tạo ra từ

lớp Nó là một mảng hai chiều có kích thước (ROWS, COLS), trong đó ROWS và COLS là các hằng số không được định nghĩa trong phần mã bạn đã chia sẻ Đối tượng này chứa các ô vuông (squares) và được khởi tạo với giá trị 0.

2.self.empty_sqrs: Đây là một thuộc tính khác của đối tượng,

nhưng nó được gán bằng tham chiếu đến self.squares Điều này có nghĩa là self.empty_sqrsself.squares trỏ đến cùng một đối tượng mảng trong bộ nhớ Bất kỳ thay đổi nào thực hiện trên

self.squares cũng sẽ ảnh hưởng đến self.empty_sqrs, và ngược lại.

3.self.marked_sqrs: Đây là một biến khác của đối tượng, khởi tạo

với giá trị 0 Đây có thể là một biến để theo dõi số lượng ô vuông đã được đánh dấu (marked).

# CLASSES

def init (self):

Trang 9

self.squares np.zeros( (ROWS, COLS) )=

self.empty_sqrs =self.squares # [squares] self.marked_sqrs = 0

deffinal_state(self show, =False): '''

@return 0 if there is no win yet @return 1 if player 1 wins @return 2 if player 2 wins '''

b) Phần mã này xem xét trạng thái chiến thắng theo chiều dọc (vertical) trong bảng các ô vuông của trò chơi.Giải thích mã:

 Vòng lặp for col in range(COLS) duyệt qua từng cột của bảng (COLS có thể là một hằng số đại diện cho số lượng cột trong bảng).

 Điều kiện self.squares[0][col] == self.squares[1][col] ==

self.squares[2][col] != 0 kiểm tra xem các giá trị trong cột hiện tại

có giống nhau và khác 0 không Nếu có, nó chỉ ra một dãy ô vuông giống nhau theo chiều dọc và không có ô nào trống (giá trị khác 0).

 Nếu điều kiện trên đúng, có nghĩa là có một chiến thắng theo chiều dọc Nếu show là True, mã sẽ vẽ một đường line mô phỏng việc kết nối các ô vuông chiến thắng, và trả về giá trị của người chơi chiến thắng (1 hoặc 2) tại cột đó.

# vertical wins for col inrange(COLS):

ifself.squares[0][col] ==self.squares[1][col] ==self.squares[2][col] :!=0 show:if

color CIRC_COLOR =ifself.squares[0][col] ==2 else CROSS_COLOR iPos (col SQSIZE SQSIZE =*+// 2 20, )

fPos (col SQSIZE SQSIZE , HEIGHT =*+//2- 20) pygame.draw.line(screen, color, iPos, fPos, LINE_WIDTH) returnself.squares[ ][col]0

Trang 10

c) Phần mã này đang kiểm tra trạng thái chiến thắng theo chiều ngang (horizontal) trong bảng các ô vuông của trò chơi.Giải thích mã:

 Vòng lặp for row in range(ROWS) duyệt qua từng hàng của bảng (ROWS có thể là một hằng số đại diện cho số lượng hàng trong bảng).

 Điều kiện self.squares[row][0] == self.squares[row][1] ==

self.squares[row][2] != 0 kiểm tra xem các giá trị trong hàng hiện

tại có giống nhau và khác 0 không Nếu có, nó chỉ ra một dãy ô vuông giống nhau theo chiều ngang và không có ô nào trống (giá trị khác 0).

 Nếu điều kiện trên đúng, có nghĩa là có một chiến thắng theo chiều ngang Nếu show là True, mã sẽ vẽ một đường line mô phỏng việc kết nối các ô vuông chiến thắng, và trả về giá trị của người chơi chiến thắng (1 hoặc 2) tại hàng đó.

# horizontal wins for row inrange(ROWS):

ifself.squares[row][0] ==self.squares[row][1] ==self.squares[row][2] != 0: show:if

color CIRC_COLOR =ifself.squares[row][0] == 2else CROSS_COLOR iPos (=20, row SQSIZE SQSIZE *+// 2)

fPos (WIDTH =- 20, row SQSIZE SQSIZE )*+//2 pygame.draw.line(screen, color, iPos, fPos, LINE_WIDTH) returnself.squares[row][ ]0

d)if self.squares[0][0] == self.squares[1][1] == self.squares[2][2] != 0: Điều kiện kiểm tra xem có ba ô vuông giống nhau theo chiều

chéo giảm dần không và không có ô nào trống (khác 0).

o Nếu điều kiện trên đúng, có nghĩa là có một chiến thắng theo chiều chéo giảm dần Trong trường hợp này, đoạn mã sẽ:

Trang 11

if show:: Kiểm tra nếu tham số show là True, tức là nếu bạn

muốn hiển thị đường line mô phỏng việc kết nối các ô vuôngchiến thắng.

color = CIRC_COLOR if self.squares[1][1] == 2 else CROSS_COLOR: Xác định màu sắc của đường line dựa trên

giá trị của ô vuông ở giữa trên đường chéo.

iPos = (20, 20): Xác định tọa độ bắt đầu của đường line.

fPos = (WIDTH - 20, HEIGHT - 20): Xác định tọa độ kết thúc

của đường line.

pygame.draw.line(screen, color, iPos, fPos,

CROSS_WIDTH): Vẽ đường line trên màn hình Pygame.

return self.squares[1][1]: Trả về giá trị của người chơi chiến

thắng (1 hoặc 2) tại ô vuông giữa trên đường chéo.

Mã này kiểm tra chiến thắng theo chiều chéo giảm dần và có thể là mộtphần của hàm kiểm tra trạng thái kết thúc của trò chơi.

fPos (WIDTH =- 20, HEIGHT -20)

pygame.draw.line(screen, color, iPos, fPos, CROSS_WIDTH) returnself.squares[ ][ ]1 1

e)if self.squares[2][0] == self.squares[1][1] == self.squares[0][2] != 0: Điều kiện kiểm tra xem có ba ô vuông giống nhau theo chiều

chéo tăng dần không và không có ô nào trống (khác 0).

o Nếu điều kiện trên đúng, có nghĩa là có một chiến thắng theo chiều chéo tăng dần Trong trường hợp này, đoạn mã sẽ:

Trang 12

if show:: Kiểm tra nếu tham số show là True, tức là nếu bạn

muốn hiển thị đường line mô phỏng việc kết nối các ô vuôngchiến thắng.

color = CIRC_COLOR if self.squares[1][1] == 2 else CROSS_COLOR: Xác định màu sắc của đường line dựa trên

giá trị của ô vuông ở giữa trên đường chéo.

iPos = (20, HEIGHT - 20): Xác định tọa độ bắt đầu của đường

fPos = (WIDTH - 20, 20): Xác định tọa độ kết thúc của đường

pygame.draw.line(screen, color, iPos, fPos,

CROSS_WIDTH): Vẽ đường line trên màn hình Pygame.

return self.squares[1][1]: Trả về giá trị của người chơi chiến

thắng (1 hoặc 2) tại ô vuông giữa trên đường chéo.

Mã này kiểm tra chiến thắng theo chiều chéo tăng dần và có thể là một phần của hàm kiểm tra trạng thái kết thúc của trò chơi.

 Trinh:

Code trên là một phần của một trò chơi Caro (Tic-Tac-Toe) được viết bằng ngôn ngữ Python và sử dụng thư viện pygame để hiển thị trò chơiđồ họa Đoạn mã kiểm tra xem có người chiến thắng hay không dựa trên việc kiểm tra các ô trên bàn cờ.

1. self.squares: Đây là một thuộc tính của đối tượng hiện tại, chứa thông tin về tình trạng của các ô trên bàn cờ Có thể đây là một mảng 2 chiều(ma trận) trong đó mỗi phần tử đại diện cho một ô trên bàn cờ.2. self.squares[2][0] == self.squares[1][1] == self.squares[0][2] != 0:

Điều kiện này kiểm tra xem có người chiến thắng hay không dựa trên đường chéo từ góc phải lên góc trái của bàn cờ Cụ thể:

self.squares[2][0]: Ô nằm ở góc dưới cùng bên trái. self.squares[1][1]: Ô ở giữa bàn cờ.

: Ô nằm ở góc trên cùng bên phải.

Trang 13

Nếu giá trị của các ô này bằng nhau và khác 0 (tức là không phải ô trống), thì điều kiện này sẽ đúng, và đoạn mã trong khối if sẽ được thực thi.

3. if show:: Nếu show là True, tức là cần hiển thị đường chéo của người chiến thắng, thì thực hiện các bước sau:

color = CIRC_COLOR if self.squares[1][1] == 2 else CROSS_COLOR:Chọn màu sắc cho đường chéo dựa trên giá trị của ô giữa bàn cờ (self.squares[1][1]) Nếu giá trị này là 2 (đại diện cho người chơi2), sẽ sử dụng màu CIRC_COLOR, ngược lại sẽ sử dụng màu

sử dụng để xác định người chiến thắng là người chơi 1 hay người chơi 2

f) mark_sqr method: để đánh dấu ô trên bàn cờ defmark_sqr(self row col player, , , ):

self.squares[row][col] player=

Ngày đăng: 16/08/2024, 17:36

w