-
Thông tin
-
Hỏi đáp
Đồ án Kỹ thuật lập trình đề tài "Game cờ vua" | Đại học Sư phạm Kỹ thuật Thành phố Hồ Chí Minh
Đồ án Kỹ thuật lập trình đề tài "Game cờ vua" của Đại học Sư phạm Kỹ thuật Thành phố Hồ Chí Minh với những kiến thức và thông tin bổ ích giúp sinh viên tham khảo, ôn luyện và phục vụ nhu cầu học tập của mình cụ thể là có định hướng ôn tập, nắm vững kiến thức môn học và làm bài tốt trong những bài kiểm tra, bài tiểu luận, bài tập kết thúc học phần, từ đó học tập tốt và có kết quả cao cũng như có thể vận dụng tốt những kiến thức mình đã học vào thực tiễn cuộc sống. Mời bạn đọc đón xem!
Môn: Kỹ thuật lập trình (PRTE230385)
Trường: Đại học Sư phạm Kỹ thuật Thành phố Hồ Chí Minh
Thông tin:
Tác giả:
Preview text:
lOMoARcPSD|36991220
TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT THÀNH PHỐ HỒ CHÍ MINH
KHOA ĐÀO TẠO CHẤT LƯƠNG CAO
ĐỒ ÁN TỐT NGHIỆP GAME CỜ VUA SVTH :QUÁCH THỊ MAI ANH MSSV :20110610 SVTH : MSSV : Khoá: 20
Ng 愃 nh: CÔNG NGHỆ THÔNG TIN
GVHD: TS. LÊ VĨNH THỊNH lOMoARcPSD|36991220
1. Lí thuyết về lập trình hướng đối tượng
1.1:Tổng quan về lập trình hướng đối tượng
1.1.1: Mircosoft .NET Framework
Microsoft .NET gồm 2 phần chính : Framework và Integrated Development Environment (IDE) -
Framework cung cấp những gì cần thiết và căn bản, chữ Framework có nghĩa là khung
hay khung cảnh trong đó ta dùng những hạ tầng cơ sở theo một qui ước nhất định
để công việc được trôi chảy. -
IDE thì cung cấp một môi trường giúp chúng ta triển khai dễ dàng, và nhanh
chóng các ứng dụng dưa trên nền tảng .NET. Nếu không có IDE chúng ta cũng có
thể dùng một trình soạn thảo ví như Notepad hay bất cứ trình soạn thảo văn bản
nào và sử dụng command line để biên dịch và thưc thi, tuy nhiên việc này mất
nhiều thời gian. Tốt nhất là chúng ta dùng IDE phát triển các ứng dụng, và cũng là cách dễ sử dụng nhất. -
Thành phần Framework là quan trọng nhất .NET là cốt lõi và tinh hoa của môi trường,
còn IDE chỉ là công cụ để phát triển dưa trên nền tảng đó thôi. Trong .NET toàn bộ
các ngôn ngữ C#, Visual C++ hay Visual Basic.NET đều dùng cùng một IDE. -
NET Framework là một platform làm đơn giản phát triển ứng dụng trong
môi trường phân tán Internet.
NET Framework được thiết kế đầy đủ để đáp ứng theo quanđiểm sau:
+ Để cung cấp một môi trường lập trình hướng đối tượng vững chắc, trong đó mã
nguồn đối tượng được lưu trữ và thưc thi một cách cục bộ. Thưc thi cục bộ nhưng
được phân tán trên Internet, hoặc thưc thi từ xa.
+ Để cung cấp một môi trường thưc thi mã nguồn mà tối thiểu được việc đóng gói
phần mềm và sư tranh chấp về phiên bản.
+ Để cung cấp một môi trường thưc thi mã nguồn mà đảm bảo việc thưc thi an toàn
mã nguồn, bao gồm cả việc mã nguồn được tạo bởi hãng thứ ba hay bất cứ hãng
nào mà tuân thủ theo kiến trúc .NET.
+ Để cung cấp một môi trường thưc thi mã nguồn mà loại bỏ được những lỗi thưc
hiện các script hay môi trường thông dịch.
+ Để làm cho những người phát triển có kinh nghiệm vững chắc có thể nắm vững
nhiều kiểu ứng dụng khác nhau. Như là từ những ứng dụng trên nền Windows đến
những ứng dụng dưa trên web. lOMoARcPSD|36991220
+ Để xây dưng tất cả các thông tin dưa triên tiêu chuẩn công nghiệp để đảm bảo
rằng mã nguồn trên .NET có thể tích hợp với bất cứ mã nguồn khác.
.NET Framework có hai thành phần chính: Common Language Runtime (CLR) và
thư viện lớp .NET Framework.
- Common Language Runtime:
+ CLR thưc hiện quản lý bộ nhớ, quản lý thưc thi tiểu trình, thưc thi mã nguồn, xác
nhận mã nguồn an toàn, biên bịch và các dịch vụ hệ thống khác. + CLR thúc đẩy
việc mã nguồn thưc hiện việc truy cập được bảo mật.
+ CLR còn thúc đẩy cho mã nguồn được thưc thi mạnh mẽ hơn bằng việc thưc thi
mã nguồn chính xác và sư xác nhận mã nguồn.
-Thư viện lớp .NET Framework: là một tập hợp những kiểu dữ liệu được dùng lại
và được kết hợp chặt chẽ với Common Language Runtime. Thư viện lớp là hướng
đối tượng cung cấp những kiểu dữ liệu mà mã nguồn được quản lý của chúng ta có
thể dẫn xuất. Điều này không chỉ làm cho những kiểu dữ liệu của .NET Framework
dễ sử dụng mà còn làm giảm thời gian liên quan đến việc học đặc tính mới
của .NET Framework. Thêm vào đó, các thành phần của các hãng thứ ba có thể tích
hợp với những lớp trong .NET Framework.
- Người phát triển có thể sử dụng .NET Framework để phát triển những ứng dụng và dịch vụ như sau: + Ứng dụng Console
+ Ứng dụng giao diện GUI trên Windows (Windows Forms) + Ứng dụng ASP.NET + Dịch vụ XML Web + Dịch vụ Windows
Trong đó những lớp Windows Forms cung cấp một tập hợp lớn các kiểu dữ liệu
nhằm làm đơn giản việc phát triển các ứng dụng GUI chạy trên Windows. Còn nếu
như viết các ứng dụng ASP.NET thì có thể sử dụng các lớp Web Forms trong thư viện .NET Framework.
-Phát triển ứng dụng Client
Những ứng dụng client cũng gần với những ứng dụng kiểu truyền thống được lập
trình dưa trên Windows. Đây là những kiểu ứng dụng hiển thị những cửa sổ hay
những form trên desktop cho phép người dùng thưc hiện một thao tác hay nhiệm
vụ nào đó. Những ứng dụng client bao gồm những ứng dụng như xử lý văn bản, xử
lý bảng tính, những ứng dụng trong lĩnh vưc thương mại như công cụ nhập liệu, lOMoARcPSD|36991220
công cụ tạo báo cáo. .Những ứng dụng client này thường sử dụng những cửa sổ,
menu, toolbar, button hay các thành phần GUI khác, và chúng thường truy cập các
tài nguyên cục bộ như là các tập tin hệ thống, các thiết bị ngoại vi như máy in.
Trong .NET Framework, chương trình không được biên dịch vào các tập tin thưc
thi mà thay vào đó chúng được biên dịch vào những tập tin trung gian gọi là
Microsoft Intermediate Language (MSIL). Những tập tin MSIL được tạo ra từ C#
cũng tương tư như các tập tin MSIL được tạo ra từ những ngôn ngữ khác của .NET,
platform ở đây không cần biết ngôn ngữ của mã nguồn. Điều quan trọng chính yếu
của CLR là chung (common), cùng một runtime hỗ trợ phát triển trong C# cũng như trong VB.NET.
Mã nguồn C# được biên dịch vào MSIL khi chúng ta build project. Mã MSIL này
được lưu vào trong một tập tin trên đĩa. Khi chúng ta chạy chương trình, thì MSIL
được biên dịch một lần nữa, sử dụng trình biên dịch Just-In-Time (JIT). Kết quả là
mã máy được thưc thi bởi bộ xử lý của máy.
1.1.2 Ngôn ngữ Csharp
Ngôn ngữ C# khá đơn giản, chỉ khoảng 80 từ khóa và hơn mười mấy kiểu dữ liệu
được xây dưng sẵn. Tuy nhiên, ngôn ngữ C# có ý nghĩa cao khi nó thưc thi những
khái niệm lập trình hiện đại. C# bao gồm tất cả những hỗ trợ cho cấu trúc, thành
phần component, lập trình hướng đối tượng. Những tính chất đó hiện diện trong
một ngôn ngữ lập trình hiện đại. Và ngôn ngữ C# hội đủ những điều kiện như vậy,
hơn nữa nó được xây dưng trên nền tảng của hai ngôn ngữ mạnh nhất là C++ và Java.
Phần cốt lõi hay còn gọi là trái tim của bất cứ ngôn ngữ lập trình hướng đối tượng
là sư hỗ trợ của nó cho việc định nghĩa và làm việc với những lớp. Những lớp thì
định nghĩa những kiểu dữ liệu mới, cho phép người phát triển mở rộng ngôn ngữ
để tạo mô hình tốt hơn để giải quyết vấn đề. Ngôn ngữ C# chứa những từ khóa cho
việc khai báo những kiểu lớp đối tượng mới và những phương thức hay thuộc tính
của lớp, và cho việc thưc thi đóng gói, kế thừa, và đa hình, ba thuộc tính cơ bản
của bất cứ ngôn ngữ lập trình hướng đối tượng.
Trong ngôn ngữ C# mọi thứ liên quan đến khai báo lớp điều được tìm thấy trong
phần khai báo của nó. Định nghĩa một lớp trong ngôn ngữ C# không đòi hỏi phải
chia ra tập tin header và tập tin nguồn giống như trong ngôn ngữ C++. Hơn thế nữa,
ngôn ngữ C# hỗ trợ kiểu XML, cho phép chèn các tag XML để phát sinh tư động
các document cho lớp. C# cũng hỗ trợ giao diện interface, nó được xem như một lOMoARcPSD|36991220
cam kết với một lớp cho những dịch vụ mà giao diện quy định. Trong ngôn ngữ C#,
một lớp chỉ có thể kế thừa từ duy nhất một lớp cha, tức là không cho đa kế thừa
như trong ngôn ngữ C++, tuy nhiên một lớp có thể thưc thi nhiều giao diện. Khi
một lớp thưc thi một giao diện thì nó sẽ hứa là nó sẽ cung cấp chức năng thưc thi giao diện.
Trong ngôn ngữ C#, những cấu trúc cũng được hỗ trợ, nhưng khái niệm về ngữ
nghĩa của nó thay đổi khác với C++. Trong C#, một cấu trúc được giới hạn, là kiểu
dữ liệu nhỏ gọn, và khi tạo thể hiện thì nó yêu cầu ít hơn về hệ điều hành và bộ
nhớ so với một lớp. Một cấu trúc thì không thể kế thừa từ một lớp hay được kế
thừa nhưng một cấu trúc có thể thưc thi một giao diện.
Tại sao phải sử dụng ngôn ngữ C#
Nhiều người tin rằng không cần thiết có một ngôn ngữ lập trình mới. Java, C++,
Perl, Microsoft Visual Basic, và những ngôn ngữ khác được nghĩ rằng đã cung cấp
tất cả những chức năng cần thiết.
Ngôn ngữ C# là một ngôn ngữ được dẫn xuất từ C và C++, nhưng nó được tạ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 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
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ôn ngữ 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ững vấn đề trên. lOMoARcPSD|36991220
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ân thiệ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ện mạ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áp thay
đổ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ọc
thì đ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ằng Java là ngôn
ngữ đơn giản. Tuy nhiên, C# thì dễ hơn là Java và C++.
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.
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ối phá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++.
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-oriented language)
là sư đóng gói (encapsulation), sư kế thừa (inheritance), và đa hình
(polymorphism). C# hỗ trợ tất Ngôn Ngữ C# cả những đặc tính trên. Phần hướng
đối tượng của C# sẽ được trình bày chi tiết trong một chương riêng ở phần sau.
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ởi bả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àng
buộ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 nhau
như 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. lOMoARcPSD|36991220
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ợp ngô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.
C# là ngôn ngữ hướng module
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ững phươ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ả.
C# sẽ là một ngôn ngữ phổ biến
Một trong những lý do chính là Microsoft và sư cam kết của .NET Microsoft
Nhiều sản phẩm của công ty này đã chuyển đổi và viết lại bằ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 đặc tính của
ngôn ngữ này được đề cập trong mục trước như: đơn giản, hướng đối tượng, mạnh
mẽ. . Ngôn ngữ C# v 愃 những ngôn ngữ .NET khác
Microsoft nói rằng C# mang đến sức mạnh của ngôn ngữ C++ với sư dễ dàng của
ngôn ngữ Visual Basic. Có thể nó không dễ như Visual Basic, nhưng với phiên bản
Visual Basic.NET (Version 7) thì ngang nhau. Bởi vì chúng được viết lại từ một
nền tảng. Chúng ta có thể viết nhiều chương trình với ít mã nguồn hơn nếu dùng
C#. Mặc dù C# loại bỏ một vài các đặc tính của C++, nhưng bù lại nó tránh được
những lỗi mà thường gặp trong ngôn ngữ C++. Điều này có thể tiết kiệm được
hàng giờ hay thậm chí hàng ngày trong việc hoàn tất một chương trình. Chúng ta
sẽ hiểu nhiều về điều này trong các chương của giáo trình.
Một điều quan trọng khác với C++ là mã nguồn C# không đòi hỏi phải có tập tin
header. Tất cả mã nguồn được viết trong khai báo một lớp.
Như đã nói ở bên trên .NET runtime trong C# thưc hiện việc thu gom bộ nhớ tư
động. Do điều này nên việc sử dụng con trỏ trong C# ít quan trọng hơn trong C++.
Những con trỏ cũng có thể được sử dụng trong C#, khi đó những đoạn mã nguồn
này sẽ được đánh dấu là không an toàn (unsafe code). lOMoARcPSD|36991220 1.1.3: Window Forms 1: Control -
Control là lớp (class) các thành phần được thêm vào Windows Forms dùng
để tương tác giữa người sử dụng với Windows. -
Có rất nhiều loại control trong Windows Forms như: Label, TextBox, ListBox, ComboBox, Button, … -
Các control sử dụng trên Windows Forms dùng namespace System.Windows.Forms. 2: Picture Box
PictureBox là một control khá hữu dụng của C# .NET. Nó cung cấp một vùng hình
chữ nhật để chèn ảnh bất kỳ và kích cỡ có thể tùy chỉnh bằng nhiều cách khác nhau.
Picturebox hỗ trợ nhiều định dạng ảnh: BMP, GIF, JPEG, EXIF, PNG và
TIFF, ICO. . (các định dạng được GDI+ hỗ trợ) Thuộc tính:
+ Mage: Cho phép thiết lập ảnh lúc thiết kế hoặc runtime
+ BorderStyle: quy định kiểu khung
None: không có border.
FixedSingle: Một khung đơn.
Fixed3D: Một dung dạng 3D + SizeMode:
Normal: hiển thị ảnh như lúc thiết kế.
StretchImage: tư động giãn ảnh cho vừa với không gian hiển thị của khung.
AutoSize: kích thước tư động.
CenterImage: Ảnh được canh giữ
+ Enable: Nếu chọn False thì vô hiệu hóa mọi điều khiển bên trong + Visible: ẩn/hiện ảnh + Location: tọa độ ảnh + Size: kích thước + BackColor: ảnh nền + PictureBack 3: Panel
Một phần mềm khi có quá nhiều control thì làm sao để quản lý nhanh các control
đó. Hoặc khi có những "nhóm" các control phục vụ các chức năng liên quan đến
nhau, khi cần show, hide chúng đồng loại lại phải gọi từng control??? Panel đã ra
đời để giải quyết vấn đề đó lOMoARcPSD|36991220
Panel dùng để tạo nhóm các control. Là một container với dạng một khung đơn
giản để chưa các sub-control (button, textbox, . .) ở trong nó.
Cho phép chứa đưng các điều khiển khác như: Button, RadioButton, Checkbox… Thuộc tính:
AutoSizeMode: GroupOnly cho phép tư động mở lớn kích thước phù hợp với điều khiển bên trong
Dock: Vị trí của điều khiển trên form
Enable: Nếu chọn False thì vô hiệu hóa mọi điều khiển bên trong BackColor: màu nền
BorderStyle: Hình thức trình bày của điều khiển
- Các sub-control nằm trong panel sẽ bị ảnh hưởng bởi thuộc tính enable, visible của panel 4: Sự kiện (Event)
Là các hành động của người dùng, ví dụ như nhấn phím, click, di chuyển chuột, …
Các Application cần phản hồi các sư kiện này khi chúng xuất hiện. Ví dụ, các ngắt
(interrupt). Các sư kiện (Event) được sử dụng để giao tiếp bên trong tiến trình. Tham số event:
- Sender mang kiểu dữ liệu object dùng chung, tổng quát.
+ Sender chứa một tham chiếu tới control/object đã gây ra event. Chúng ta có thể
ép kiểu sender lại trở thành control/object để xử lý lOMoARcPSD|36991220
- MouseEventArgs: Tham số này là nơi hành động thưc sư xảy ra, tham số e cũng
chứa một đối tượng, nhưng là kiểu cụ thể của một loại các tham số của mouse
event, chứa các dữ liệu của event - MouseEventArgs sẽ chứa:
+ Clicks: trả về số lần người dùng đã click chuột vào control
+ Button: trả về nút được nhấp (trái, giữa, phải)
+ X, Y: trả về tọa độ con trỏ chuột khi thưc thi sư kiện 5: Message Box
MessageBox Dùng để đưa ra thông báo thông qua phương thức Show: MessageBox.Show("text")
- Thiết lập tiêu đều: MessageBox.Show("text", "title")
- Các button trên MessageBox hỗ trợ sẵn: MessageBoxButtons. + Button Type:
AbortRetryIgnore, OK, OKCancel, RetryCancel,YesNo, YesNoCancel.
- Icon của MessageBox: MessageBoxIcon.
+ Icon Type: Warning (tam giác vàng có dấu chấm than), Error (hình tròn đỏ có
chữ X), Information (hình tròn xanh lam có chữ i), Question (hình tròn lam có dấu chấm hỏi).
- MessageBox.Show("Hello World", "First CSharp Program",
MessageBoxButons.YesNoCancel, MessageBoxIcon.Question);
- Còn rất nhiều tùy chọn khác (Default button, options, Help button, using the
specified Help file, HelpNavigator, Help topic)
6: Graphics Graphical Interface (GDI+)
- GDI+ là API(Application Programming Interface) cung cấp các lớp: + Tạo đồ họa 2D vector + Thao tác trên font + Hiển thị ảnh
- Khởi động thư viện đồ họa: using System.Drawing;-Chọn ngữ cảnh
vẽ: Graphicsg=panel.CreateGraphics()
Graphics g = form.CreateGraphics() lOMoARcPSD|36991220
*Color: kết hợp 3 giá trị Red, Green, Blue trong dải 0 -> 255
VD: Color.FromArgb(alpha, Color.Blue)
+ alpha là độ trong suốt: 0 -> 255
*Font : có 13 phiên bản constructor. Thông dụng :
Font fa = new Font("Times New Roman", 8);
Font fb = new Font("Arial", 36, FontStyle.Bold);
Font fc = new Font(fb, FontStyle.Bold | FontStyle.Italic);
Font fd = new Font("Arial", 1, GraphicsUnit.Inch);
*Image: Lớp Image hiển thị các ảnh bitmap dạng *.bmp, *.gif, *.jpg, *.ico…
Image img = Image.FromFile("Image1.bmp")
- Đường dẫn thư mục mặc định: [Program Folder]\\bin\\Debug
- Phương thức GrawImage xuất ảnh lên Graphics: g.DrawImage(image, int x, int y,int width, int height)
*Vẽ lại ảnh: Nhận sư kiện Repaint: Private void Form1_Paint(object sender, PaintEventArgs e)
- Màn hình giống như một khung vẽ, Windows không nhớ cái gì bên dưới của nó
=> Do đó khi bạn di chuyển picturebox hay control nào đó ảnh đã vẽ bị hiện tượng "rách".
1.2:Các tính chất của lập trình hướng đối tượng Đối tượng (Object)
Đối tượng trong OOP bao gồm 2 thành phần chính:
• Thuộc tính (Attribute): là những thông tin, đặc điểm của đối tượng
• Phương thức (Method): là những hành vi mà đối tượng có thể thưc hiện
Để dễ hình dung, ta có một ví dụ thưc tế về đối tượng là smartphone. Đối tượng này sẽ có:
• Thuộc tính: màu sắc, bộ nhớ, hệ điều hành…
• Phương thức: gọi điện, chụp ảnh, nhắn tin, ghi âm… Lớp (Class)
Lớp là sư trừu tượng hóa của đối tượng. Những đối tượng có những đặc tính tương
tư nhau sẽ được tập hợp thành một lớp. Lớp cũng sẽ bao gồm 2 thông tin là thuộc tính và phương thức. lOMoARcPSD|36991220
Một đối tượng sẽ được xem là một thưc thể của lớp.
Tiếp nối ví dụ ở phần đối tượng (object) phía trên, ta có lớp (class) smartphone gồm 2 thành phần:
• Thuộc tính: màu sắc, bộ nhớ, hệ điều hành…
• Phương thức: gọi điện, chụp ảnh, nhắn tin, ghi âm…
Các đối tượng của lớp này có thể là: iPhone, Samsung, Oppo, Huawei…
Ưu điểm của lập trình hướng đối tượng OOP
• OOP mô hình hóa những thứ phức tạp dưới dạng cấu trúc đơn giản.
• Code OOP có thể sử dụng lại, giúp tiết kiệm tài nguyên.
• Giúp sửa lỗi dễ dàng hơn. So với việc tìm lỗi ở nhiều vị trí trong code thì
tìm lỗi trong các lớp (được cấu trúc từ trước) đơn giản và ít mất thời gian hơn.
• Có tính bảo mật cao, bảo vệ thông tin thông qua đóng gói. • Dễ mở rộng dư án.
4 đặc tính cơ bản của OOP
Tính đóng gói (Encapsulation)
Tính đóng gói cho phép che giấu thông tin và những tính chất xử lý bên trong của
đối tượng. Các đối tượng khác không thể tác động trưc tiếp đến dữ liệu bên trong lOMoARcPSD|36991220
và làm thay đổi trạng thái của đối tượng mà bắt buộc phải thông qua các phương
thức công khai do đối tượng đó cung cấp.
Tính chất này giúp tăng tính bảo mật cho đối tượng và tránh tình trạng dữ liệu bị hư hỏng ngoài ý muốn.
Tính kế thừa (Inheritance)
Đây là tính chất được sử dụng khá nhiều. Tính kế thừa cho phép xây dưng một lớp
mới (lớp Con), kế thừa và tái sử dụng các thuộc tính, phương thức dưa trên lớp cũ
(lớp Cha) đã có trước đó.
Các lớp Con kế thừa toàn bộ thành phần của lớp Cha và không cần phải định nghĩa
lại. Lớp Con có thể mở rộng các thành phần kế thừa hoặc bổ sung những thành phần mới. Ví dụ:
• Lớp Cha là smartphone, có các thuộc tính: màu sắc, bộ nhớ, hệ điều hành…
• Các lớp Con là iPhone, Samsung, Oppo cũng có các thuộc tính: màu sắc,
bộ nhớ, hệ điều hành… Tính đa hình (Polymorphism)
Tính đa hình trong lập trình OOP cho phép các đối tượng khác nhau thưc thi chức
năng giống nhau theo những cách khác nhau. Ví dụ:
• Ở lớp smartphone, mỗi một dòng máy đều kế thừa các thành phần của
lớp cha nhưng iPhone chạy trên hệ điều hành iOS, còn Samsung lại chạy
trên hệ điều hành Android.
• Chó và mèo cùng nghe mệnh lệnh “kêu đi” từ người chủ. Chó sẽ “gâu
gâu” còn mèo lại kêu “meo meo”. lOMoARcPSD|36991220
Tính trừu tượng (Abstraction)
Tính trừu tượng giúp loại bỏ những thứ phức tạp, không cần thiết của đối tượng và
chỉ tập trung vào những gì cốt lõi, quan trọng.
Ví dụ: Quản lý nhân viên thì chỉ cần quan tâm đến những thông tin như: • Họ tên • Ngày sinh • Giới tính • …
Chứ không cần phải quản lý thêm thông tin về: • Chiều cao • Cân nặng • Sở thích • Màu da • …
2.Lí thuyết về các thuật toán được dùng trong đồ án
2.1: Thuật toán Minimax
Hai đối thủ trong trò chơi được gọi là MIN và MAX luân phiên thay thế nhau đi.
MAX đại diện cho người quyết dành thắng lợi và cố gắng tối đa hóa ưu thế của lOMoARcPSD|36991220
mình, ngược lại người chơi đại diện cho MIN lại cố gắng giảm điểm số của MAX
và cố gắng làm cho điểm số của mình càng âm càng tốt. Giả thiết đưa ra MIN và
MAX có kiến thức như nhau về không gian trạng thái trò chơi và cả hai đối thủ đều cố gắng như nhau.
Mỗi Node biểu diễn một trạng thái trên cây trò chơi. Node lá là Node chứa trạng
thái kết thúc của tròcchơi.
Giải thuật Minimax thể hiện bằng cách định trị các Node trên cây trò chơi:
• Node thuộc lớp MAX thì gán cho nó giá trị lớn nhất của con Node đó.
• Node thuộc lớp MIN thì gán cho nó giá trị nhỏ nhất của con Node đó.
Từ các giá trị này người chơi sẽ lưa chọn cho mình nước đi tiếp theo hợp lý nhất.
- Xét trạng thái hiện tại (trạng thái trên cùng)
+ Minimax: có thể gọi là quét hết các trạng thái có thể có và tìm trạng thái có lợi nhất - Cắt tỉa alphabeta :
+ Một nhược điểm của minimax phải quét toàn bộ các trạng thái
+ Trạng thái trên cùng chỉ là một nhánh của toàn bộ trạng thái
+ Nếu phải xét toàn bộ trạng thái để xét được nước đi tối ưu nhất mất rất nhiều thời gian
+ Đối với cờ vua có 64 ô cờ thì điều này là không thể
+ Tuy nhiên con người cũng không phải là hoàn hảo
+ Do đó chỉ cần tính toán tới độ sâu nhất định nào đó là có thể đánh được lOMoARcPSD|36991220
*Phân tích : Trạng thái hiện tại của trò chơi là trạng thái U và đến lượt quân x đi trước *TH1 : x là computer
- Thuật toán minimax xét toàn bộ trạng thái tiếp diễn ra K 쨃ĀT QUẢ và chọn kết quảthuận lợi nhất
- Sau khi xét toàn bộ trạng thái tiếp diễn, computer nhận thấy kết quả sẽ là win
nếuđi trạng thái B1 hoặc B2 (full trạng thái – 2 trạng thái), do đó computer sẽ
đánh x tại trạng thái B
*TH2: o là computer và bạn là người chơi không giỏi - You (X) : trạng thái A
- Computer (0) : trạng thái A1
+ xét các trạng thái tiếp diễn, computer nhận thấy không thể thắng được bạn, do đó
computer sẽ chọn kết quả thuận lợi nhất cho mình, đó là A1
TH3 : o là computer và bạn là người chơi bình thường - You(X) : trạng thái B
- Commputer(0) : random(B1, B2) lOMoARcPSD|36991220
+ computer nhận thấy cả 2 trạng thái đều không có lợi cho mình, nên thưc hiện random Ưu điểm
Tìm kiếm được mọi nước đi tiếp theo sau đó lưa chọn random nước đi tốt nhất, vì
giải thuật có tính chất vét cạn nên không bỏ sót trạng thái. Khuyết điểm
Đối với các trò chơi có không gian trạng thái lớn như caro, cờ tướng… việc chỉ áp
dụng giải thuật Minimax có lẽ không còn hiệu quả nữa sư bùng nổ tổ hợp quá lớn.
Giải thuật áp dụng nguyên lý vét cạn không tận dụng được thông tin của trạng thái
hiện tại để lưa chọn nước đi, vì duyệt hết các trạng thái nên tốn thời gian.
2.2: Thuật toán cắt cụt alpha-beta - Theo thuật toán minimax:
+ Đỉnh max sẽ nhận giá trị lớn nhất
+ Đỉnh min sẽ nhận giá trị nhỏ nhất
- Tại đỉnh c muốn chọn giá trị lớn nhất phải thưc hiện so sánh u với b lOMoARcPSD|36991220
+ Việc kiểm tra a là thừa nếu u > v
+ Đỉnh b nhận giá trị nhỏ nhất : Giả sử v > a => b nhận giá trị v là sai
+ Nhưng nếu u > v thì giá trị của c là đúng
- Ta không cần quan tâm các giá trị bắt buộc phải đúng, mà chỉ cần quan tâm giá trịcuối cùng đúng
=> Không cần quan tâm tới a nếu u > v
CHƯƠNG 3: Triển khai đồ án 1.Mô tả trò chơi:
- Cờ vua là trò chơi trí tuệ đánh theo lượt, chia làm 2 quân: trắng và đen
- Bàn cờ: 64 ô vuông trắng, đen luân phiên
- Mỗi quân đều có : 2 xe, 2 mã, 2 tịnh, 1 hậu, 1 tướng, 8 tốt
- Rule: Hậu trắng bên trắng, hậu đen bên đen
- Trừ Knight ra, tất cả các quân đều không được đi xuyên
*Pawn: đi thẳng ăn chéo, không được lùi lOMoARcPSD|36991220
- Ngoài ra khi tốt xuống tới ô cuối cùng thì ngay lập tức được thăng cấp thành các quân khác trừ vua
*Knight: đi hình chữ L, là quân cờ duy nhất có thể đi xuyên
*Rook: đi thẳng ăn thẳng lOMoARcPSD|36991220
*Bishop: Đi chéo ăn chéo
*King: đi và ăn xung quanh 1 ô
- Ngoài ra King có thể nhập thành với Rook với điều kiện King và Rook chưa di chuyển
+ Đây là nước duy nhất vua có thể đi 2 ô lOMoARcPSD|36991220
+ Chỉ được nhập thành một lần duy nhất trong ván cờ + Vua đã
bị chiếu nhưng chưa di chuyển vẫn có thể nhập thành - Không
được nhập thành nếu gặp vào 1 trong 3 trường hợp sau: + Vua đang bị chiếu
+ Trên đường di chuyển của vua bị quân địch tấn công
+ Đường đi từ King tới Rook không được giải tỏa (có quân chặn)
*Queen: đi được như Rook và Bishop Checkmate : chiếu vua
- Thông báo chiếu vua là không bắt buộc
- Khi vua bị chiếu thì phải tìm nước tránh chiếu:
+ Di chuyển vua sang ô khác + Lấy quân khác chặn + Ăn quân đang chiếu
Thắng: Nếu quân ta chiếu vua và vua không tìm được nước nào tránh chiếu
Thua: Nếu vua ta bị chiếu và không tìm được cách nào tránh chiếu Hòa khi
một bên không còn quân và thỏa mãn 2 điều kiện: lOMoARcPSD|36991220
+ Một bên quân kiểm soát hết các nước di chuyển vua đối phương nhưng không chiếu vua đối phương
+ Đối phương không còn quân nào để di chuyển
2.Các chưc năng chính của chương trình: Kèm hình ảnh demo - Di chuyển các quân cờ
- Chỉ ra các nước có thể đi của quân cờ đó
- Kiểm tra tính hợp lệ khi di chuyển
- Hightlight tấn công quân khác
- Lưu lại trạng thái di chuyển cuối cùng
- Hiển thị các quân đã giết được của 2 bên - Thông báo chiếu vua
- Khống chế nước di chuyển của vua (vua chỉ có thể đi vào ô an toàn) - Phong cấp cho Pawn - Nhập thành
- Thông báo kết thúc ván cờ
2.Thiết kế giao diện
- Mainform:Sử dụng windown form để thiết kế giao diện bàn cờ. lOMoARcPSD|36991220
- Music: Dùng user control =>thêm nó đến Mainform Sử dụng windown media
player trong toolbox để phát nhạc.
4.Tổng quan về các lớp v 愃 đối tượng được sử dụng trong chương trình 1.Cấu trúc con cờ: Quân đen: Quân trắng:
Âm thanh bắt đầu , kết thúc trò chơi và âm thanh di chuyển quân cờ 2.Enum lOMoARcPSD|36991220
MoveType: Liệt kê các hướng di chuyển
NodeType:Hai hằng số là Max,Min được sư dụng trong thuật toán minimax, cắt tỉa alpha beta
PieceType:Tên của các con cờ có trong cờ vua 4.Struct - Class Constants:
Định nghĩa kiểu dữ liệu struct và phương thức BoardHistory để lưu lại
bàn cờ, các con cờ trắng, đen bị mất đi.
Định nghĩa kiểu dữ liệu struct và phương thức MoveAndScore để lưu lại các bước di chuyển và điểm số
Định nghĩa kiểu dữ liệu struct và phương thức ZobristEntry để xác
định độ sâu, giới hạn trên, dưới của thuật toán,bước di chuyển tốt nhất. hashKey được sử dụng
để phát hiện va chạm. Chỉ cần lOMoARcPSD|36991220
thay thế nếu điều này xảy ra; age phải luôn lớn hơn 0, vì sử dụng để kiểm tra
xem nên cập nhật hoặc thêm;
Phương thức ZobristCheck được tạo ra để kiểm tra 4.Interface
IEquatable :Cho biết đối tượng hiện tại có bằng đối tượng khác cùng loại
hay không=>true nếu đối tượng hiện tại bằng với tham số khác; ngược lại, sai. bool Equals(T other);
Icloneable: Hỗ trợ sao chép, tạo ra một phiên bản mới của một lớp có cùng giá
trị; như một thưc thể hiện có.
Tạo một đối tượng mới là bản sao của phiên bản hiện tại.Trả về một đối tượng
mới là bản sao của trường hợp này. object Clone(); 5.Class - Class Constants
Khai báo các hằng số về giá trị của các con cờ theo
Larry Kaufam để có các giá trị cụ thể để phục vụ tính lOMoARcPSD|36991220 điểm hai bên quân cờ.
Hai phương thức được sử dụng là GetPieceWorth và GetPieceAttack được tạo
ra để trả về giá trị của các con cờ ,điểm tấn công tương ứng.
-Class Move: kế thừa 2 interface
Equals():Lưu vị trí lúc đầu và sau của con cờ Move():Tạo bản sao mới - Static class Bitops: lOMoARcPSD|36991220 thành viên tĩnh.
Biêủ diễn bảng Bitboards : BitScan: một hàm xác định chỉ số bit
Tính số điểm tấn công của quân cờ… -Class Bishop: Tất cả các
mục tiêu-> trả về giá trị mục tiêu lOMoARcPSD|36991220
-Class KoggeStone: Sử dụng thuật toán KoggeStone
để định hướng các hướng tấn công cho quân cờ: - Class Board: lOMoARcPSD|36991220
Khởi tạo các con cờ trắng đen
Tính điểm số ban đầu của hai bên cờ: lOMoARcPSD|36991220
Phương thức tạo ra các bước di chuyển: MakeMove( Move move)
Nếu là lượt chơi của quân trắng: tạo ra các bước di chuyển của quân trắng
và tính điểm, tính điểm khi quân đen bị ăn . Nếu là lượt chơi của quân đen thì ngược lại.
Phương thức quay lại bước di chuyển: reverseMove( Move move)
Nếu bên thưc hiện quay lại là màu trắng thì quay lại bước di chuyển trước đó
và tính điểm,nếu như có quân đen bị ăn thì cộng lại điểm cho quân đen.
Nếu bên thưc hiện là quân trắng thì ngược lại.
Phương thức sao chép bước đi: CopyMake( Move move)
Sao chép lại các bước di chuyển của các con cờ còn lại chưa bị thay đổi vị trí,
nó đơn giản hơn là tạo lại các bước di chuyển cho các quân cờ. Chức năng trợ giúp
-Các class như king, queen, rook, pawn,knight… chỉ ra mục tiêu tấn công của
các con cờ, khởi tạo mảng các bước di chuyển được tính toán trước,tấn công
Chương 4:C 愃 i đặt v 愃 kiểm thử 1.Môi trường lập trình
2.Phần mềm v 愃 thư viện sử dụng 3.Kiểm thử CHƯƠNG 5:Kết luận 1.Kết quả 2.Khó khăn 3.Kinh nghiệm
T 䄃 I LIỆU THAM KHẢO lOMoARcPSD|36991220
Document Outline
- 1.1.1: Mircosoft .NET Framework
- -Phát triển ứng dụng Client
- 1.1.2 Ngôn ngữ Csharp
- Tại sao phải sử dụng ngôn ngữ C#
- 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à cũng mềm dẻo
- C# là ngôn ngữ ít từ khóa
- C# là ngôn ngữ hướng module
- C# sẽ là một ngôn ngữ phổ biến
- 1: Control
- 2: Picture Box
- 3: Panel
- 4: Sự kiện (Event)
- 5: Message Box
- 6: Graphics Graphical Interface (GDI+)
- 2.1: Thuật toán Minimax