BÁO CÁO BÀI TẬP LỚN
MÔN TRÍ TUỆ NHÂN TẠO
Đề tài: Cờ Caro
Giảng viên hướng dẫn: Nguyễn Thế Cường
Nhóm sinh viên thực hiện lớp CNT50ĐH2:
Đặng Thị Lan
Vũ Thị Hiển
Vũ Văn Đích
Giới thiệu
• Cờ Caro là một trong các trò chơi phổ biến hiện nay. Từ
thủa ban đầu con người thi đấu trên giấy, trên bề mặt viết
kẻ được rồi dần dần tiến tới con người lập trình thi đấu
trên máy. Cờ Caro thể hiện tính chất đối kháng cao trong
thi đấu game đòi hỏi suy nghĩ của người chơi.
• Chương trình có chế độ chơi giữa người và máy, khi chạy
sẽ có bàn cờ được hiện ra, trong quá trình chơi sẽ có
thông báo máy(người) thắng cuộc.
Mô tả
• Không gian bàn cờ chơi sẽ có kích thước là 15 hàng x 15
cột (được miêu tả chi demo chương trình).
• Khi tham gia chơi người và máy thay phiên nhau đi nước
đi của mình vào ô trống trên bàn cờ bằng ký tự đã quy
định là O với máy( đi sau), X với người chơi( đi trước).
• Cuộc chơi sẽ kết thúc khi mà bên nào đánh được 5 ô liên
tiếp nhau theo: Hàng, Cột, Hai đường chéo; mà không
cần quan tâm rằng chúng có bị chặn hai đầu hay không.
Ví dụ
Trường hợp máy thắng người chơi
Trường hợp người chơi thắng máy
Các thuật toán xử lý
• 1. Đánh dấu ô trong không gian chơi
• 2. Duyệt tìm kiếm tốt nhất đầu tiên
Các thuật toán xử lý
• 1. Đánh dấu ô trong không gian chơi
- Khi người chơi kích vào một ô trống bất kỳ trên bàn cờ sẽ
được đánh dấu tại ô đó sẽ gán giá trị là -2, và tại vị trí
những ô đã đi thì người chơi không kích đè nước đi của
mình được.
- Tương tự như đối với người thì máy cũng có cách đánh
và gán giá trị tại ô đã đi là -1.
TRÒ CHƠI CỜ CARO
.
Biến bitmap
Dim ResWidth As Integer = 950
Dim ResHeight As Integer = 550
Const TitleSize = 32
Biến của Graphics
Dim BBG, G, Graphic, L As Graphics
Dim BB, BBM As Bitmap
Dim r, e, h As Rectangle
Dim random As New Random
Biến đếm giây
Dim tSec As Integer = TimeOfDay.Second
Dim tTicks As Integer = 0
Dim MaxTicks As Integer = 0
Biến của chương trình chạy
Dim Isrunning As Boolean = True
Dim EndGame As Boolean = True
Giới thiệu về các biến hệ thống
Biến xác định vị trí quân đi trên bàn cờ. Quy ước X hàng, Y cột
Const Max = 15
Dim Map(Max, Max) As Integer
Dim Undo As New Stack
Dim mMapX As Integer = 20
Dim mMapY As Integer = 20
Biến
Dim MouseX As Integer
Dim MouseY As Integer
Dim MapX As Integer
Dim MapY As Integer
Dim mcX As Integer
Dim mcY As Integer
Biến về người chơi
Dim CountMay, CountNguoi
Dim Diem_PT = {0, 20, 55, 120, 400}
Dim Diem_TC = {0, 22, 60, 130, 400}
Hàm khởi tạo đầu tiên CreateGraphics
Có tác dụng: Để sử dụng những đối tượng đồ họa trong thư viện System.Drawing
ta gọi thông qua hàm này.
FillRectangle: tô màu cho ô trống trong bàn cờ.
DrawRectangle: tô màu đường kẻ bàn cờ.
Đoạn chương trình khởi tạo như sau:
G = Me.CreateGraphics
BB = New Bitmap(ResWidth, ResHeight)
BBM = New Bitmap(Me.Pic1.Image)
Graphic = Me.CreateGraphics
Const LocalX = 220
Const LoCalY = 140
Dim ToaDo_Quan_X = 0, ToaDo_Quan_X2 = 0
Dim ToaDo_Quan_Y = 2, ToaDo_Quan_Y1 = 0
Dim VT(30)
Dim rand
Ta tạo ra ô
bàn cờ như
sau:
Bàn cờ kích
thước [15,15].
Ngoài ra tạo 3
button:
New Games
UnDo
Exit
Khởi tạo nước đi đầu tiên của bàn cờ
Private Sub DrawGraphics()
mMapX = 0, mMapY = 0
For X = 0 To 14 'chi so cot
For Y = 0 To 14 'chi so hang
r = New Rectangle(X * TitleSize, Y * TitleSize, TitleSize,
TitleSize)
G.FillRectangle(Brushes.Tan, r) 'to mau cho trong o ban co
G.DrawRectangle(Pens.Black, r) 'to mau but ke duo
If Map(mMapX + X, mMapY + Y) = -2 And Map(mMapX + X,
mMapY + Y) <> -1 Then
e = New Rectangle(TitleSize * ToaDo_Quan_X, TitleSize *
ToaDo_Quan_X2, TitleSize, TitleSize)
G.DrawImage(BBM, r, e, GraphicsUnit.Pixel)
If Map(mMapX + X, mMapY + Y) = -1 And Map(mMapX + X, mMapY +
Y) <> -2 Then
.
e = New Rectangle(TitleSize * ToaDo_Quan_Y, TitleSize *
ToaDo_Quan_Y1, TitleSize, TitleSize)
G.DrawImage(BBM, r, e, GraphicsUnit.Pixel)
End If Next Next
If mcX <> 0 Then
r = New Rectangle(MouseX * TitleSize, MouseY * TitleSize,
TitleSize, TitleSize)
h = New Rectangle(TitleSize * ToaDo_Quan_X, TitleSize *
ToaDo_Quan_X2, TitleSize, TitleSize)
Graphic.DrawImage(BBM, r, h, GraphicsUnit.Pixel)
End If
G = Graphics.FromImage(BB)
BBG = Me.CreateGraphics
BBG.DrawImage(BB, 0, 0, ResWidth, ResHeight)
G.Clear(Color.Wheat)
End Sub
Mô tả nước đi của quân cờ