1. Trang chủ
  2. » Công Nghệ Thông Tin

CÀI đặt THUẬT TOÁN MINMAX áp DỤNG cài đặt GAME cờ CARO

33 1,5K 3

Đ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 33
Dung lượng 484 KB
File đính kèm DoMin_Done.rar (607 KB)

Nội dung

Tài liệu là báo cáo nằm trong chương trình học Trí tuệ nhân tạo, bao gồm file báo cáo lý thuyết giải thích rõ ràng thuật toán tìm kiếm minimax và đính kèm file lập trình giúp bạn đọc hiểu sâu và kỹ hơn về thuật toán minimax cũng như cải thiện kỹ năng lập trình

Trang 1

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG

KHOA CÔNG NGHỆ THÔNG TIN

-o0o -BÁO CÁO THỰC TẬP CƠ SỞ

ĐỀ TÀI: CÀI ĐẶT THUẬT TOÁN MINMAX ÁP DỤNG

CÀI ĐẶT GAME CỜ CARO

SINH VIÊN THỰC HIỆN: PHẠM THỊ LIÊN

Thái Nguyên, tháng 03 năm 2018

Trang 2

MỤC LỤC

CHƯƠNG I: Cơ sở lý thuyết – Lựa chọn ngôn ngữ lập trình 3

1.1 Giới thiệu về lý thuyết trò chơi và ứng dụng 3

1.2 Tổng quan về ngôn ngữ lập trình C# 4

1.2.1 Giới thiệu chung 4

1.2.3 Tại sao phải sử dụng ngôn ngữ lập trình C# 11

1.3 Tổng quan về winform trong C# 14

1.3.1 Tổng quan về winform 14

1.3.2 Ví dụ đơn giản và cấu trúc 1 chương trình Winform 18

CHƯƠNG 2: Cài đặt thuật toán 20

2.1 Thuật toán tìm kiếm tốt nhất - đầu tiên 20

2.2 Mô tả bài toán 22

2.2.1 Giới thiệu game dò mìn 22

2.2.2 Hướng dẫn chơi 22

2.3 Cài đặt thuật toán 23

2.3.1 Các bước thực hiện thuật toán 23

2.3.2 Giao diện chương trình 24

Trang 3

CHƯƠNG I

CƠ SỞ LÝ THUYẾT – LỰA CHỌN NGÔN NGỮ LẬP TRÌNH

1.1 Giới thiệu về lý thuyết trò chơi và ứng dụng

Theo một số tài liệu thì lần đầu tiên lý thuyết trò chơi xuất hiện trong một láthư viết bởi James Waldegrave năm 1713, trong lá thư thì tác giả đưa ra lời giảichiến thuật hỗn hợp Minimax cho một trò đánh bài 2 người Leher.Tuy nhiên thì Lýthuyết trò chơi chỉ thực sự tồn tại là một ngành khi John von Neumann xuất bảnmốt loạt các bài báo năm 1828.John von Neumann cũng là người đầu tiên hìnhthức hóa Lý thuyết trò chơi trong thời ký trước và trong chiến tranh lạnh, chủ yếu

do áp dụng của nó trong chiến lược quân sự, nổi tiếng là khái niệm đảm bảo pháhủy lẫn nhau (mutual assured destruction)

Sau nhiều năm phát triển thì hiện nay Lý thuyết trò chơi đã được sử dụngrộng rãi trong nhiều ngành khác nhau như : Kinh tế và kinh doanh, sinh học, chínhtrị học, triết học, khoa học máy tính và logic, viễn thông, một số show game trêntruyền hình …

Trong thời đại Công nghệ thông tin phát triển như hiện nay thì Lý thuyết tròchơi đóng một vai trò hết sức quan trọng, đặc biệt trong logic và khoa học máytính.Một số lý thuyết logic có cơ sở trong ngữ nghĩa trò chơi.Thêm vào đó nhữngkhoa học gia máy tính đã sử dụng trò chơi để mô phỏng những tính toán tương tácvới nhau

Một số thuật toán trong Lý thuyết trò chơi giúp xây dựng, phát triển nhữngtrò chơi hay, như : thiết kế trò chơi Nim; thiết kế kiểu trò chơi có nhân, có tính đốixứng; thuật toán liên quan đến chiến lược tìm kiếm,…Bài báo cáo đề cập đến thuậttoán tìm kiếm MinMax và thuật toán cắt tỉa Alpha-Beta trong việc xây dựngchương trình trò chơi cờ caro (Gomoku)

Trang 4

1.2 Tổng quan về ngôn ngữ lập trình C#

1.2.1 Giới thiệu chung

- C# là một ngôn ngữ lập trình đơn giản, hiện đại, mục đích tổng quát, hướngđối tượng được phát triển bởi Microsoft và được phê chuẩn bởi EuropeanComputer Manufacturers Association (ECMA) và International StandardsOrganization (ISO)

- C# được phát triển bởi Anders Hejlsberg kiến trúc sư phần mềm nổi tiếng vớicác sản phẩm Turbo Pascal, Delphi, J++, WFC và team của ông trong khi phát triển.Net Framework

- C# được thiết kế cho Common Language Infrastructure (CLI), mà gồmExecutable Code và Runtime Environment, cho phép chúng ta sử dụng các ngônngữ high-level đa dạng trên các nền tảng và cấu trúc máy tính khác nhau

- So sánh với C và C++, ngôn ngữ này bị giới hạn và được nâng cao ở một vàiđặc điểm nào đó, nhưng không bao gồm các giới hạn sau đây:

+ Các con trỏ chỉ có thể được sử dụng trong chế độ không an toàn Hầu hếtcác đối tượng được tham chiếu an toàn, và các phép tính đều được kiểm tra tràn bộđệm Các con trỏ chỉ được sử dụng để gọi các loại kiểu giá trị; còn những đối tượngthuộc bộ thu rác (garbage-collector) thì chỉ được gọi bằng cách tham chiếu

+ Các đối tượng không thể được giải phóng tường minh

+ Chỉ có đơn kế thừa, nhưng có thể cài đặt nhiều interface trừu tượng(abstract interfaces) Chức năng này làm đơn giản hóa sự thực thi của thời gianthực thi

+ C# thì an-toàn-kiểu (typesafe) hơn C++

+ Cú pháp khai báo mảng khác nhau(“int[] a = new int[5]” thay vì “inta[5]”)

+ Kiểu thứ tự được thay thế bằng tên miền không gian (namespace)

Trang 5

Phiên bản

C#

Phiên bản visual studio Các đặc điểm mới

C# 1.1 Visual Studio NET 2003 #line pragma and xml doc comments

iterators/yield, static classes, co/contra variance for delegates

Object and collection initializers, lambda expressions, extension methods, anonymous types, automatic properties, Language Integrated Query

local var type inference, LINQ

parameters, generic co/contra variance

C# 5

attributes Visual Studio NET 2013

Bug fixes, performance improvements, and technology previews of .NET Compiler Platform (“Roslyn”)

nameof, String conditional Member Access and Indexing, Index Initializers, Collection Initializer and Add Extension Methods, Overload Resolution, Exception Filters, Await in Catch and Finally Blocks, Auto-property Initializers, Getter-only Auto-properites, Function Members with Expression Bodies, Using Static

Interpolation,Null-1.2.2 Đặc điểm cơ bản của ngôn ngữ lập trình C#

1.2.2.1 Các đặc điểm quan trọng của C#

- Điều kiện Boolean,

- Tự động dọn rác bởi Garbage-Collector (GC),

- Thư viện chuẩn (Standard Library),

- Assembly,

Trang 6

- Property và sự kiện (Event),

- Delegate Quản lý sự kiện,

- Dễ dàng để sử dụng Generic,

- Indexer,

- Biên dịch có điều kiện (Conditional Compilation),

- Đa luồng dễ dàng (Multithreading),

- LINQ và Lambda Expression,

- Tích hợp với Windows

1.2.2.2 Các kiểu dữ liệu trong C#

- Các biến trong C# được phân chia thành các kiểu sau:

+ Kiểu giá trị (Value type)

+ Kiểu tham chiếu (Reference type)

+ Kiểu con trỏ (Pointer type)

Bảng sau liệt kê các kiểu giá trị có sẵn trong C# 2010

Trang 7

Kiểu Biểu diễn Dãy giá trị GTMĐ

Trang 8

bool Giá trị Boolean True hoặc False False

byte Kiểu unsigned integer (8

decimal Kiểu thập phân (128 bit) (-7.9x 1028tới7.9 x 1028) / 100 to 28 0.0M

double Kiểu double (64 bit) (+/-)5.0 x 10-324 tới

float Kiểu float (32 bit) -3.4 x 1038 tới + 3.4 x 1038 0.0F

int Kiểu integer (32 bit) -2,147,483,648 tới 2,147,483,647 0

long Kiểu signed integer (64

bit)

-9,223,372,036,854,775,808 tới9,223,372,036,854,775,807

b) Kiểu tham chiếu

- Kiểu tham chiếu không chứa dữ liệu thực sự được lưu giữ trong một biến,nhưng chúng chứa một tham chiếu tới các biến

- Nói cách khác, chúng tham chiếu tới một vị trí bộ nhớ Việc sử dụng nhiềubiến, thì kiểu tham chiếu có thể tham chiếu tới tới một vị trí bộ nhớ Nếu dữ liệutrong vị trí bộ nhớ bị thay đổi bởi một trong số các biến, thì biến khác tự động phảnánh sự thay đổi về giá trị này

- Ví dụ các kiểu tham chiếu có sẵn trong C# là: object, dynamic, và string

Trang 9

Kiểu object trong C#

- Kiểu object là lớp cơ sở cơ bản cho tất cả kiểu dữ liệu trong C# Common TypeSystem (CTS) Object là một alias cho lớp System.Object Các kiểu object có thểđược gán giá trị của bất kỳ kiểu, kiểu giá trị, kiểu tham chiếu, kiểu tự định nghĩa(user-defined) khác Tuy nhiên, trước khi gán các giá trị, nó cần một sự chuyển đổikiểu

- Khi một kiểu giá trị được chuyển đổi thành kiểu object, nó được gọi là boxing

và ngược lại, khi một kiểu object được chuyển đổi thành kiểu giá trị, nó được gọi làunboxing

Kiểu Dynamic trong C#

- Bạn có thể lưu giữ bất kỳ kiểu giá trị nào trong biến kiểu dữ liệu dynamic Việckiểm tra các kiểu biến này diễn ra tại run time

- Cú pháp để khai báo một kiểu dynamic trong C# là:

dynamic <tên_biến> = giá_trị;

Ví dụ

dynamic d = 20;

- Kiểu dynamic là tương tự với kiểu object, ngoại trừ việc kiểm tra cho các biếnkiểu object diễn ra tại compile time, trong khi việc kiểm tra các biến kiểu dynamicdiễn ra tại run time

Kiểu string trong C#

- Kiểu string trong C# cho phép bạn gán bất kỳ giá trị chuỗi nào cho một biến.Kiểu string là một alias cho lớp System.String Nó kế thừa từ kiểu object Giá trịcho một kiểu string có thể được gán bởi sử dụng các hằng chuỗi trong hai mẫu làquoted và @quoted

1.2.2.2 Các câu lệnh điều khiển trong C#

a) Các câu lệnh điều khiển lựa chọn

i Câu lệnh if-else

Mục đích của chúng là dùng để điều khiển chương trình khi chỉ thực thi mộtnhiệm vụ nào đó khi thỏa mãn điều kiện của biểu thức

Trang 10

Cú pháp câu lệnh :

if(điều kiện 1)

các câu lệnh ;else if(điều kiện 2)

các câu lệnh ;else

các câu lệnh ;

ii Câu lệnh switch-case

Cũng giống như câu lệnh if-else, switch-case là câu lệnh rẽ nhánh, sử dụngbiểu thức để quyết định chương trình sẽ đi theo hướng nào Switch – case cũngđược hỗ trợ hầu hết trong các ngôn ngữ lập trình như C,C++, java, javascript và C#

Khác với câu lệnh if-else nơi mà biểu thức dựa trên so sánh giá trị của biểuthức với kiểu boolean để quyết định rẽ nhánh Biểu thức switch case dựa trên việc

so sánh với biểu thức với nhiều giá trị cụ thể

Trong C#, giá trị mà biểu thức có thể so sánh có kiểu dữ liệu số, chuỗi, hoặcenum với các biểu thức so sánh với một tập các giá trị ý nghĩa, nên đặt tập các giátrị ý nghĩa đó thành một enum và sử dụng nó trong switch-case

Mục đích: Câu lệnh for thường được sử dụng để thực hiện những công việcmang tính lặp đi lặp lại nhiều lần Trong đó sốtổng số lần công việc cần thực hiệnlặp người lập trình phải tiên đoán được trước

Trang 11

Ví dụ: Sử dụng vòng lặp for để tính tổng các số từ 1 đến 10

for(int i=1; i<10; i++){

tong = tong + i;

return tong;

}

ii Câu lệnh foreach-in

Câu lệnh foreach – in là một câu lệnh điều khiển lặp, là một câu lệnh tiện ích,một trường hợp đặc biệt của câu lệnh điều khiển lặp for

Mục đích: thường dược sử dụng khi cần thực hiện công việc mang tính lặplại với việc thao tác lần lượt các phần tử trong một mảng hay một tập hợp các đốitượng trong ( Array, Collection,…)

+ item: là một phẩn từ của tập hợp+ statement : nhiệm vụ cần thực hiệniii Câu lệnh while

Câu lệnh while là một câu lệnh điều khiển lặp dùng tính đúng sai của biểuthức dạng boolean để quyết định có thực hiện tiếp công việc hay không Chừng nàobiểu thức còn đúng thì còn thực hiện câu lệnh, nếu sai thì câu lệnh while dừng lại

Mục đích: Khác với câu lệnh điều khiển lặp for thường dùng cho khi biếttrước số lần cần lặp, thì mục đích chính của câu lệnh điều khiển lặp while lạithường dùng để thực hiện cho các công việc cần lặp lại mà không biết số lần cầnlặp

Trang 12

iv Câu lệnh do-while

Giống như câu lệnh while, câu lệch do-while là một câu lệnh điều khiển lặpdùng tính đúng sai của biểu thức dạng boolean để quyết định có thực hiện tiếp côngviệc hay không Chừng nào biểu thức còn đúng thì còn thực hiện câu lệnh, nếu saithì câu lệnh do-while dừng lại

Mục đích: Khác với câu lệnh điều khiển lặp for thường dùng cho khi biếttrước số lần cần lặp Và giống với vòng lặp while, vòng lặp do-while lại thườngdùng để thực hiện cho các công việc cần lặp lại mà không biết số lần cần lặp.Nhưng điểm khác biệt với while là do-while sẽ thực hiện nhiệm vụ ít nhất 1 lầntrước khi sự so sánh của biểu thức xảy ra

Cú pháp:

do{

1.2.2.3 Các loại tham số của hàm trong C#

a Tham số bình thường

b Tham số dạng params

c Tham số dạng ref

d Tham số dạng out

1.2.3 Tại sao phải sử dụng ngôn ngữ lập trình C#

Ngôn ngữ C# là một ngôn ngữ được dẫn xuất từ C và C++, nhưng nó đượctạo từ nền tảng phát triển hơn Microsoft bắt đầu với công việc trong C và C++ vàthêm vào những đặc tính mới để làm cho ngôn ngữ này dễ sử dụng hơn Nhiều

Trang 13

trong số những đặc tính này khá giống với những đặc tính có trong ngôn ngữ Java.Không dừng lại ở đó, Microsoft đưa ra một số mục đích khi xây dựng ngôn ngữnày.

Những mục đích này được được tóm tắt như sau:

 C# là ngôn ngữ đơn giản

 C# là ngôn ngữ hiện đại

 C# là ngôn ngữ hướng đối tượng

 C# là ngôn ngữ mạnh mẽ và mềm dẻo

 C# là ngôn ngữ có ít từ khóa

 C# là ngôn ngữ hướng module

 C# sẽ trở nên phổ biến

1.2.3.1 C# là ngôn ngữ đơn giản

C# loại bỏ một vài sự phức tạp và rối rắm của những ngôn ngữ như Java vàc++, bao gồm việc loại bỏ những macro, những template, đa kế thừa, và lớp cơ sở

ảo (virtual base class) Chúng là những nguyên nhân gây ra sự nhầm lẫn hay dẫnđến những vấn đề cho các người phát triển C++ Nếu chúng ta là người học ngônngữ này đầu tiên thì chắc chắn là ta sẽ không trải qua những thời gian để học nó!Nhưng khi đó ta sẽ không biết được hiệu quả của ngôn ngữ C# khi loại bỏ nhữngvấn đề trên

Ngôn ngữ C# đơn giản vì nó dựa trên nền tảng C và C++ Nếu chúng ta thânthiện với C và C++ hoậc thậm chí là Java, chúng ta sẽ thấy C# khá giống về diệnmạo, cú pháp, biểu thức, toán tử và những chức năng khác được lấy trực tiếp từngôn ngữ C và C++, nhưng nó đã được cải tiến để làm cho ngôn ngữ đơn giản hơn.Một vài trong các sự cải tiến là loại bỏ các dư thừa, hay là thêm vào những cú phápthay đổi Ví dụ như, trong C++ có ba toán tử làm việc với các thành viên là ::, , và-> Để biết khi nào dùng ba toán tử này cũng phức tạp và dễ nhầm lẫn Trong C#,chúng được thay thế với một toán tử duy nhất gọi là (dot) Đối với người mới họcthì điều này và những việc cải tiến khác làm bớt nhầm lẫn và đơn giản hơn

Ghi chú: Nếu chúng ta đã sử dụng Java và tin rằng nó đơn giản, thì chúng ta

cũng sẽ tìm thấy rằng C# cũng đơn giản Hầu hết mọi người đều không tin rằngJava là ngôn ngữ đơn giản Tuy nhiên, C# thì dễ hơn là Java và C++

1.2.3.2 C# là ngôn ngữ hiện đại

Điều gì làm cho một ngôn ngữ hiện đại? Những đặc tính như là xử lý ngoại

lệ, thu gom bộ nhớ tự động, những kiểu dữ liệu mở rộng, và bảo mật mã nguồn lànhững đặc tính được mong đợi trong một ngôn ngữ hiện đại C# chứa tất cả nhữngđặc tính trên Nếu là người mới học lập trình có thể chúng ta sẽ cảm thấy nhữngđặc tính trên phức tạp và khó hiểu Tuy nhiên, cũng đừng lo lắng chúng ta sẽ dầndần được tìm hiểu những đặc tính qua các chương trong cuốn sách này

Trang 14

Ghi chú: Con trỏ được tích hợp vào ngôn ngữ C++ Chúng cũng là nguyên

nhân gây ra những rắc rối của ngôn ngữ này C# loại bỏ những phức tạp và rắc rốiphát sinh bởi con trỏ Trong C#, bộ thu gom bộ nhớ tự động và kiểu dữ liệu an toànđược tích hợp vào ngôn ngữ, sẽ loại bỏ những vấn đề rắc rối của C++

1.2.3.3 C# là ngôn ngữ hướng đối tượng

Những đặc điểm chính của ngôn ngữ hướng đối tượng (Object-orientedlanguage) là sự đóng gói (encapsulation), sự kế thừa (inheritance), và đa hình(polymorphism) C# hỗ trợ tất cả những đặc tính trên

1.2.3.4 C# là ngôn ngữ mạnh mẽ và cũng mềm dẻo

Như đã đề cập trước, với ngôn ngữ C# chúng ta chỉ bị giới hạn ở chính bởibản thân hay là trí tưởng tượng của chúng ta Ngôn ngữ này không đặt những ràngbuộc lên những việc có thể làm C# được sử dụng cho nhiều các dự án khác nhaunhư là tạo ra ứng dụng xử lý văn bản, ứng dụng đồ họa, bản tính, hay thậm chínhững trình biên dịch cho các ngôn ngữ khác

1.2.3.5 C# là ngôn ngữ ít từ khóa

C# là ngôn ngữ sử dụng giới hạn những từ khóa Phần lớn các từ khóa được

sử dụng để mô tả thông tin Chúng ta có thể nghĩ rằng một ngôn ngữ có nhiều từkhóa thì sẽ mạnh hơn Điều này không phải sự thật, ít nhất là trong trường hợpngôn ngữ C#, chúng ta có thể tìm thấy rằng ngôn ngữ này có thể được sử dụng đểlàm bất cứ nhiệm vụ nào Bảng sau liệt kê các từ khóa của ngôn ngữ C#

abstract default foreach object sizeof unsafe

as delegate goto operator stackalloc unshort

bool double implicit override string virtual

case event interface protected this while

catch explicit internal public thow

1.2.3.6 C# là ngôn ngữ hướng module

Trang 15

Mã nguồn C# có thể được viết trong những phần được gọi là những lớp,những lớp này chứa các phương thức thành viên của nó Những lớp và nhữngphương thức có thể được sử dụng lại trong ứng dụng hay các chương trình khác.Bằng cách truyền các mẫu thông tin đến những lớp hay phương thức chúng ta cóthể tạo ra những mã nguồn dùng lại có hiệu quả.

1.2.3.7 C# sẽ là một ngôn ngữ phổ biến

C# là một trong những ngôn ngữ lập trình mới nhất Vào thời điểm cuốn sáchnày được viết, nó không được biết như là một ngôn ngữ phổ biến Nhưng ngôn ngữnày có một số lý do để trở thành một ngôn ngữ phổ biến Một trong những lý dochính là Microsoft và sự cam kết của NET

Microsoft muốn ngôn ngữ C# trở nên phổ biến Mặc dù một công ty khôngthể làm một sản phẩm trở nên phổ biến, nhưng nó có thể hỗ trợ Cách đây khônglâu, Microsoft đã gặp sự thất bại về hệ điều hành Microsoft Bob Mặc dù Microsoftmuốn Bob trở nên phổ biến nhưng thất bại C# thay thế tốt hơn để đem đến thànhcông sơ với Bob Thật sự là không biết khi nào mọi người trong công ty Microsoft

sử dụng Bob trong công việc hằng ngày của họ Tuy nhên, với C# thì khác, nó được

sử dụng bởi Microsoft Nhiều sản phẩm của công ty này đã chuyển đổi và viết lạibằng C# Bằng cách sử dụng ngôn ngữ này Microsoft đã xác nhận khả năng của C#cần thiết cho những người lập trình

Micorosoft NET là một lý do khác để đem đến sự thành công của C# .NET

là một sự thay đổi trong cách tạo và thực thi những ứng dụng

Ngoài hai lý do trên ngôn ngữ C# cũng sẽ trở nên phổ biến do những đặctính của ngôn ngữ này được đề cập trong mục trước như: đơn giản, hướng đốitượng, mạnh mẽ

1.3 Tổng quan về winform trong C#

1.3.1 Tổng quan về winform

Windows Form là công cụ dùng để tạo các ứng dụng Windows, nó mượn các

ưu điểm mạnh của ngôn ngữ Visual Basic : dễ sử dụng, hỗ trợ mô hình RAD đồngthời kết hợp với tính linh động, hướng đối tượng của ngôn ngữ C# Việc tạo ứngdụng Windows trở lên hấp dẫn và quen thuộc với các lập trình viên

Trang 16

- Nhiều kiểu giao diện,

- Hỗ trợ cải tiến về đồ họa,

- Hỗ trợ khả năng truy cập các thuộc tính Control,

- Thuận lợi cho việc thiết kế Form

Mô hình 3 lớp trong Winform.

H8: Cấu trúc các

Ngày đăng: 05/12/2018, 07:54

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w