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

Trí tuệ nhân tạo Xây dựng chương trình cờ caro đánh với máy tính

25 1,3K 7

Đ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

Định dạng
Số trang 25
Dung lượng 217,77 KB

Nội dung

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘIKHOA CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG ---*---BÁO CÁO MÔN: PROJECT 1 Đề tài: Lập trình chương trình game cờ caro đánh với máy tính Sinh viên thực hiện:

Trang 1

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘIKHOA CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG

-* -BÁO CÁO MÔN: PROJECT 1

Đề tài:

Lập trình chương trình game cờ caro đánh với máy tính

Sinh viên thực hiện: Nguyễn Văn Thành

Lớp: CNTT 1 K55

Giảng viên hướng dẫn: TS Trần Hải Anh

Trang 2

MỤC LỤC

LỜI GIỚI THIỆU ……… 3

PHẦN I MÔ TẢ BÀI TOÁN……… 4

PHẦN II GIẢI QUYẾT BÀI TOÁN……… 5

A Ngôn ngữ thực hiện……… 5

B Giải quyết bài toán……… 5

1 Thiết kế giao diện……… 5

2 Xây dựng chức năng và thiết kế lớp……… 6

a Các chức năng cần thiết……… 6

b Phân tích và thiết kế lớp……… 6

3 Xây dựng chức năng người chơi với người chơi……… 10

4 Thực hiện chức năng Undo, Redo……… 11

5 Xử lý thắng thua……… 12

6 Trí tuệ nhân tạo cho máy trong cờ Caro……… 12

a Sơ lược về trí tuệ nhân tạo……… 13

b Trí tuệ nhân tạo trong cờ Caro………13

C Giao diện và cách chơi……… 14

1 Giao diện……… 15

2 Cách chơi……….15

PHẦN III MÃ NGUỒN……… 15

TÀI LIỆU THAM KHẢO……… 24

Trang 3

LỜI GIỚI THIỆU

Cờ caro là trò chơi logic cổ xưa nhất trên Trái Đất Nó được sáng tạo từ nhiều nền văn minh khác nhau một cách độc lập Nó bắt đầu xuất hiện từ năm 2000 trước CN

ở sông Hoàng Hà, Trung Quốc Một số nhà khoa học đã tìm thấy bằng chứng chứng minh Caro đã được phát minh ở Hy lạp cổ đại và ở Châu Mỹ trước thời Colombo.Môn cờ cổ của Trung Quốc là Wutzu Cờ Caro du nhập từ Trung Quốc vào Nhật Bản từ khoảng năm 270 trước CN Nó thường được gọi là Gomoku nhưng cũng có các tên gọi khác tuỳ theo thời gian và địa phương như Kakugo, gomoku-narabe, Itsutsu-ishi Người ta đã tìm thấy một trò chơi cổ từ một di tích ởNhật năm 100 sau CN và thấy nó là một biến thể của Caro.Nó đã lan truyền nhanh chóng với cái tên Kakugo (trò 5 quân) Các nhà sử học nói rằng vào các thế kỷ 17

và 18, mọi người đều chơi trò này-người già cũng như người trẻ.Năm 1858, khi quyển sách đầu tiên về trò chơi này được xuất bản, nó được gọi là Kakugo Nó tiếptục được chơi, được gọi với nhiều tên khác nhau như Goren, Goseki, rồi

Gomokunarabe, Gomoku và phát triển cho đến ngày nay thành thể loại phức tạp nhất trong họ hàng đông đúc của nó, là Renju (chuỗi ngọc trai)

Trong cuộc sống hằng ngày, game cờ caro cũng rất phổ biến và được đa số các bạnhọc sinh, sinh viên thường xuyên chơi Nó vừa là một game giải trí rất tốt sau những giờ học căng thẳng, vừa là trò chơi có tính trí tuệ cao kích thích tư duy của người chơi

Trang 4

PHẦN I MÔ TẢ BÀI TOÁN

Xây dựng trò chơi cờ caro trên một bàn cờ gồm 20 hàng và 20 cột, tạo thành một hình chữ nhật kích thước 20*20

Các tính năng của trò chơi:

- Tính năng cho 2 người chơi với nhau

- Tính năng cho người chơi đấu với máy

- Các chức năng khác như: New Game để bắt đầu ván chơi mới, Undo, Redo cho phép đánh lại nước đi trước đó, Exit để đóng trò chơi

- Ngoài ra bổ sung thêm các chức năng phụ như Option lưu thông tin về luật chơi, Help trợ giúp hướng dẫn cách chơi…

Trên cơ sở của đề tài em đã xây dựng chương trình game cờ caro đơn giản bao gồm các tính năng trên

Dù rất cố gắng nhưng chương trình của em chắc chắn không thể tránh khỏi những thiếu xót, em mong nhận được những ý kiến nhận xét, góp ý của các thầy cô bộ môn để chương trình được hoàn thiện hơn

Trang 5

PHẦN II GIẢI QUYẾT BÀI TOÁN

A Ngôn ngữ thực hiện

Ngôn ngữ thực hiện chương trình: C#

Trình biên dịch sử dụng: Visual Studio 6.1

B Giải quyết bài toán

1 Thiết kế giao diện

Tạo project mới: Mở visual studio, vào mục visual C#, chọn Windows forms

Application, đặt tên project: TroChoiCoCaro

Cửa sổ chương trình ban đầu hiện lên giao diện Form1.cs[Design] dùng để thiết kếgiao diện Mở hộp toolbox, trong mục Menus & Toolbars ta chọn Menu Strip, kéo thả sang giao diện form Ta đặt tên MenuStrip tương ứng với các chức năng như: File (New Game, Exit), Edit (Undo, Redo), Option, Help Trong New Game ta đặt

2 chế độ chơi là Player vs Player (người chơi với người) và Player vs Com (người chơi với máy)

Các chức năng được sử dụng trong Toolbox:

- PictureBox dùng để chèn ảnh biểu tượng trò chơi hiện thị trên giao diện

- Các Button dùng để xây dựng các nút: Player vs Player, Player vs Com, New Game, Exit

- Panel là khung thực hiện trò chơi, để vẽ bàn cờ thực hiện các chức năng chơicờ

Tùy vào thẩm mỹ của người thiết kế, ta có thể chỉnh sửa màu sắc, size, cỡ chữ cho các chức năng trên trong mục System.Windows.Forms

Trang 6

2 Xây dựng chức năng và thiết kế lớp

a Các chức năng cần thiết

- Chơi game: Chơi với người, chơi với máy

- Xử lý thắng thua

- Các chức năng Edit( Undo, Redo): cho phép đánh lại và khôi phục lại nước đi

- Trí tuệ cho máy tính: Có thể chia theo level: Dễ, Trung Bình, Khó

- Thêm 1 vài chức năng khác như: Save Game, Load Game…

b Phân tích thiết kế lớp

 Lớp

Ô cờ:

Thực hiện các chức năng lưu thông

tin về ô cờ như chiều dài, chiều

public const int

_ChieuRong

= 25;

public const int

_ChieuCao

= 25;

private int _Dong;

public int Dong

Void VeBanCo(graphics g)Void XacDinhOCo(int x, int y, Graphics g)

Void ChoiVoiNguoi()Void ChoiVoiMay()Bool DuyetChienThang()// AI: Trí tuệ nhân tạo

g, int Dong, int Cot, image

img O_Co[][] MangOCo)

// AI: Trí tuệ nhân tạo

O_Co

const int ChieuDai;

const int ChieuRong;

const int SoHuu;

Void VeOco(graphics g, int

SoHuu)

Trang 7

{

get { return _Dong; }

set { _Dong = value ; }

}

private int _Cot;

public int Cot

{

get { return _Cot; }

set { _Cot = value ; }

}

private Point _ViTri;

public Point ViTri

{

get { return _ViTri; }

set { _ViTri = value ; }

}

private int _SoHuu;

public int SoHuu

{

get { return _SoHuu; }

set { _SoHuu = value ; }

class BanCo

{

private int _SoDong;

Trang 8

public int SoDong

{

get { return _SoDong; }

}

private int _SoCot;

public int SoCot

g.DrawLine( CaroChess pen, 0, j * OCo _ChieuCao, _SoCot

* OCo _ChieuRong, j * OCo _ChieuCao);

g.FillRectangle(sb, point.X +1, point.Y +1,

OCo _ChieuRong-2, OCo _ChieuCao-2);

}

}

 Lớp CaroChess

Trang 9

Đây là lớp quan trọng nhất cũng là lớp thực hiện hầu hết các chức năng của trò chơi, lưu trữ thông tin về cờ như trạng thái của trò chơi, các bước đi, chế

độ chơi, lượt đi của mỗi bên, kiểm tra chiến thắng, đánh với người hay đánh với máy Trong chức năng đánh với máy còn có các hàm khởi tạo

computer, tìm kiếm nước đi…

class CaroChess

{

public static Pen pen;

public static SolidBrush sbRed;

public static SolidBrush sbBlack;

public static SolidBrush sbGreenWhite;

private OCo [,] _MangOCo;

private BanCo _BanCo;

private int _CheDoChoi;

public int CheDoChoi

{

get { return _CheDoChoi; }

}

private int _LuotDi;

private bool _SanSang;

public bool SanSang

{

get { return _SanSang; }

}

private Stack < OCo > stkCacNuocDaDi;

private Stack < OCo > stkCacNuocUndo;

private KETTHUC _KetThuc;

public CaroChess()

{

pen = new Pen ( Color Blue);

sbRed = new SolidBrush ( Color Red);

sbBlack = new SolidBrush ( Color Black);

sbGreenWhite = new SolidBrush ( Color FromArgb(192, 255, 255));

_BanCo = new BanCo (20, 20);

_MangOCo = new OCo [_BanCo.SoDong, _BanCo.SoCot];

stkCacNuocDaDi = new Stack < OCo >();

stkCacNuocUndo = new Stack < OCo >();

_LuotDi = 1;

}

Trang 10

3 Xây dựng chức năng người chơi với người chơi

Chức năng này sẽ thực hiện việc đánh cờ giữa 2 người chơi dùng chuột: Lần lượt người chơi thứ nhất đánh sau đó đến lượt người chơi thứ 2 đánh Các class được sửdụng để thực hiện chức năng này: CaroChess, Ban_Co, O_Co

Trong hàm khởi tạo người đánh với người (Player vs Player) ta lưu trữ các thông tin sau:

- _SanSang = true; Thể hiện trạng thái của bàn cờ, đã sẵn sàng để được chơi hay chưa (có thể bắt đầu đánh cờ được hay chưa)

- _LuotDi = 1 ; Gán ngay bên đi đầu tiên là lượt đi bằng 1 và làm người chơi thứ nhất

- _CheDoChoi = 1: Người đánh với người

- KhoiTaoMangOco(); Gọi đến hàm KhoiTaoMangOco và thực hiện chức năng lưu thông tin của mảng ô cờ mới được gọi

- VeBanCo(g); Thực hiện chức năng vẽ bàn cờ với biến graphics g

public void StartPlayerVsPlayer( Graphics g)

{

_SanSang = true ;

stkCacNuocDaDi = new Stack < OCo >();

stkCacNuocUndo = new Stack < OCo >();

4 Thực hiện chức năng Undo, Redo

Để thực hiện 2 chức năng này ta lưu danh sách các nước đã đi và danh sách các nước đã được undo vào các Stack <ô cờ> (chức năng Redo chỉ thực hiệnđược sau khi sử dụng chức năng Undo)

public void Undo( Graphics g)

{

if (stkCacNuocDaDi.Count != 0)

{

OCo oco = stkCacNuocDaDi.Pop();

stkCacNuocUndo.Push( new OCo (oco.Dong, oco.Cot,

oco.ViTri, oco.SoHuu));

Trang 11

OCo oco = stkCacNuocUndo.Pop();

stkCacNuocDaDi.Push( new OCo (oco.Dong, oco.Cot,

oco.ViTri, oco.SoHuu));

_MangOCo[oco.Dong, oco.Cot].SoHuu = oco.SoHuu;

_BanCo.VeQuanCo(g, oco.ViTri, oco.SoHuu == 1 ? sbBlack : sbRed);

Trang 12

5 Xử lý thắng thua

Như theo luật chơi, nếu bên nào xếp được 5 quân của mình theo một phương bất

kỳ (ngang, dọc, chéo) bất kỳ trước mà không bị quân đối phương chặn 2 đầu thì bên đó được xem như là thắng cuộc Khi đó sẽ có một thông báo hiện ra cho người chơi biết kết quả đồng thời dừng ván chơi ngay tại thời điểm đó

6 Trí tuệ nhân tạo cho máy trong cờ caro

a Sơ lược về trí tuệ nhân tạo

Trí tuệ nhân tạo hay trí thông minh nhân tạo (Tiếng Anh: Artification intelligence thường được viết tắt là AI) là trí tuệ được biểu diễn bởi bất cứ hệ thống nhân tạo nào Thuật ngữ này dùng đển nói đến các máy tính có được trí tuệ của một phần não người, thông qua việc nghiên cứu của các ngành khoa học khiến máy tính có được suy nghĩ, suy luận như con người

Trí tuệ nhân tạo được chia làm 2 trường phái: Truyền thống và trí tuệ tính toán

b Trí tuệ nhân tạo trong cờ Caro

Sử dụng cấu trúc cây:

Tại lượt đi A, tìm kiếm các nước đi có thể đánh B và C

Tính trước các nước D, E tương ứng với B và F, G,H tương ứng với C

Tiếp tục tính các nước đi tương ứng với E và M, N tương ứng với I

Tương ứng với mỗi nước đi, cần lần lượt quét các hướng:

Lần lượt duyệt các hướng và tính toán cả việc tấn công và phòng ngự có lợi ở nướcđó

Trang 13

Dùng 2 mảng để lưu trữ điểm tấn công và phòng ngự:

- Điểm tấn công = {0, 9, 54, 162, …}

- Điểm phòng ngự = {0, 3, 27, 99, …}

Theo hướng đó có bao nhiêu quân thì ta cộng vào bấy nhiêu điểm tấn công hay phòng ngự và ngược lại

Lặp lại với các nước con có thể đánh ở lượt sau

C Giao diện và cách chơi

1 Giao diện

Trang 14

2 Cách chơi

Giao diện chơi game rất đơn giản và trực quan Các chức năng chính là New Game, Exit, Player vs Player và Player vs Com Trò chơi hỗ trợ được 2 người chơi với nhau và người chơi đánh với máy Ngoài ra còn có các chức năng như Undo, Redo để chơi lại và khôi phục lại nước đi

Để chơi với 2 người người chơi có thể ấn vào nút “Player vs Player” hoặc vào File  New  Player vs Player Để giành được chiến thắng thì người chơi phảitạo được 1 dãy 5 con liên tiếp cùng màu theo 1 phương bất kỳ (dọc, ngang, chéo) và thỏa mãn điều kiện không bị đối phương chặn 2 đầu

Để chơi với máy người chơi có thể ấn vào nút “Player vs Com” hoặc cũng vào File  New  Player vs Com

Sau mỗi ván chơi, người chơi click vào nút New Game để chơi ván mới hoặc thoát ra khỏi trò chơi bằng nút Exit

Trang 15

public const int _ChieuRong = 25;

public const int _ChieuCao = 25;

private int _Dong;

public int Dong

{

get { return _Dong; }

set { _Dong = value ; }

}

private int _Cot;

public int Cot

Trang 16

{

get { return _Cot; }

set { _Cot = value ; }

}

private Point _ViTri;

public Point ViTri

{

get { return _ViTri; }

set { _ViTri = value ; }

}

private int _SoHuu;

public int SoHuu

{

get { return _SoHuu; }

set { _SoHuu = value ; }

Trang 17

private int _SoDong;

public int SoDong

{

get { return _SoDong; }

}

private int _SoCot;

public int SoCot

g.DrawLine( CaroChess pen, i *

OCo _ChieuRong, 0, i * OCo _ChieuRong, _SoDong *

OCo _ChieuCao);

}

for ( int j = 0; j <= _SoDong; j++)

{

g.DrawLine( CaroChess pen, 0, j *

OCo _ChieuCao, _SoCot * OCo _ChieuRong, j * OCo _ChieuCao);

Trang 18

g.FillEllipse(sb, point.X + 2, point.Y + 2,

OCo _ChieuRong - 4, OCo _ChieuCao - 4);

}

public void XoaQuanCo( Graphics g, Point point,

SolidBrush sb)

{

g.FillRectangle(sb, point.X +1, point.Y +1,

OCo _ChieuRong-2, OCo _ChieuCao-2);

Trang 20

private void frmCoCaro_Load( object sender,

Trang 22

private void editToolStripMenuItem_Click( object

Trang 23

Application SetCompatibleTextRenderingDefault( false );

Application Run( new frmCoCaro ());

}

}

}

Trang 25

TÀI LIỆU THAM KHẢO

-Hướng dẫn lập trình C# nâng cao – MinhDangThanh’blog

http://minhdangthanh.wordpress.com/l%E1%BA%ADp-trinh-c-nang-cao/

-Bài giảng hướng dẫn lập trình c# căn bản, lập trình c# nâng cao của anh Lê Nguyễn Anh Huy

Ngày đăng: 15/01/2016, 21:22

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w