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 1 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

Thông tin cơ bản

Tiêu đề Ứng Dụng Game Caro AI Với Ngôn Ngữ Python
Tác giả Phan Quốc Trường, Trần Thị Thúy, Võ Thị Minh Khuyên, Nguyễn Hoàng Uyên Nhi, Lê Thị Thùy Trinh
Người hướng dẫn Nguyễn Đỗ Công Pháp
Trường học Trường Đại Học Sư Phạm Đà Nẵng
Chuyên ngành Trí Tuệ Nhân Tạo
Thể loại Đồ Án Cuối Kỳ
Năm xuất bản 2023-2024
Thành phố Đà Nẵng
Định dạng
Số trang 23
Dung lượng 1,49 MB

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ẴNG

Khoa : Tin học

ĐỒ ÁN CUỐI KÌ

MÔN : TRÍ TUỆ NHÂN TO

ỨNG DỤNG GAME CARO AI VỚI

NGÔN NGỮ PYTHONGiảng viên hướng dẫn :

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

Nhóm : Nhóm : AI 11 Ngành :

Ngành : Công Nghệ Thông Tin Sinh Viên Thực Hiện : Phan Quốc Trường Trần Thị Thúy

Võ Thị Minh Khuyên Nguyễ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à

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ơi

là 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áo

về 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

c) Giao diện :

- Nền của trò chơi màu xanh dương

- Được chia làm 9 ô vuông

- “O” sẽ có màu trắng và “X” sẽ có màu đen để phân biệt

- Khi thắng sẽ có dấu gạch cùng màu “X” or “O” thể hiện đường chiến thắng của người tham gia

IV CODE GAME

import copy

import sys

Trang 8

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

-class Board :

def init ( self ):

Trang 9

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

self empty_sqrs = self squares # [squares]

self marked_sqrs = 0

def final_state ( self show , = False ):

'''

@return 0 if there is no win yet

@return 1 if player 1 wins

@return 2 if player 2 wins

 Đ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 in range (COLS):

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

color CIRC_COLOR = if self 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)

return self 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 in range (ROWS):

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

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

fPos (WIDTH = - 20 , row SQSIZE SQSIZE ) * + // 2

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

return self 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)

return self 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

line

fPos = (WIDTH - 20, 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 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

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ơi 2), sẽ sử dụng màu CIRC_COLOR, ngược lại sẽ sử dụng màu

4. return self.squares[1][1]: Trả về giá trị của ô giữa bàn cờ, có thể được

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

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

return self squares[ ][ ] 1 1

# no win yet

return

f) mark_sqr method : để đánh dấu ô trên bàn cờ

def mark_sqr ( self row col player , , , ):

self squares[row][col] player =

Trang 14

self marked_sqrs += 1

empty_sqr method: được thiết kế để kiểm tra xem một ô trên bàn cờ

có trống (chưa được đánh dấu) hay không

def empty_sqr ( self row col , , ):

return self squares[row][col] == 0

g)get_empty_sqrs method: được thiết kế để trả về danh sách các ô trống trên bàn cờ

def get_empty_sqrs ( self ):

empty_sqrs [] =

for row in range (ROWS):

for col in range (COLS):

if self empty_sqr(row, col):

empty_sqrs.append( (row, col) )

return empty_sqrs

h)isfull , isempty method: được thiết kế để kiểm tra trạng thái của bàn cờ.

def isfull ( self ):

return self marked_sqrs == 9

def isempty ( self ):

return self marked_sqrs == 0

i) AI class: Hàm init là một phương thức khởi tạo trong Python và nó được gọi tự động khi một đối tượng mới của lớp được tạo

class AI :

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

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w