Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 26 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
26
Dung lượng
2,64 MB
Nội dung
Chương 1: Tổng quan Csharp 1.1: Tổng quan 1.1.1: Mircosoft NET Framework - Common Language Runtime: -Thư viện lớp NET Framework: tập hợp kiểu liệu dùng lại kết hợp chặt chẽ với Common Language Runtime Thư viện lớp hướng đối tượng cung cấp kiểu liệu mà mã nguồn quản lý dẫn xuất Điều không làm cho kiểu liệu NET Framework dễ sử dụng mà làm giảm thời gian liên quan đến việc học đặc tính NET Framework Thêm vào đó, thành phần hãng thứ ba tích hợp với lớp NET Framework -Phát triển ứng dụng Client 1.1.2 Ngôn ngữ Csharp Tại phải sử dụng ngôn ngữ C# C# ngôn ngữ đại C# ngôn ngữ hướng đối tượng C# ngôn ngữ mạnh mẽ mềm dẻo C# ngôn ngữ từ khóa C# ngôn ngữ hướng module C# ngôn ngữ phổ biến 1.2: Window Forms 1.2.1: Control 1.2.2: Picture Box 1.2.3: Panel 1.2.4: Sự kiện (Event) 1.2.5: Message Box 1.2.6: Graphics Graphical Interface (GDI+) .7 Chương 2: Trò chơi cờ vua thuật toán xử lý 2.1: Giới thiệu trò chơi cờ vua 2.1.1: Lịch sử máy tính trò chơi cờ vua .8 *Sơ lược lịch sử máy tính cờ Vua 2.1.2: Mô tả trò chơi cờ vua 13 2.2: Các thuật toán xử lý 16 2.2.1: Thuật toán Minimax 16 2.2.2: Thuật toán cắt cụt alpha-beta 17 Chương 3: Ứng dụng CSharp lập trình trò chơi cờ vua 18 3.1: Phân tích toán 18 3.2: Xây dựng tính game 19 3.3: Một số hình ảnh demo 21 Chương 1: Tổng quan Csharp 1.1: Tổng quan 1.1.1: Mircosoft NET Framework Microsoft NET gồm phần : Framework Integrated Development Environment (IDE) - Framework cung cấp cần thiết bản, chữ Framework có nghĩa khung hay khung cảnh ta dùng hạ tầng sở theo qui ước định để công việc trôi chảy - IDE cung cấp môi trường giúp triển khai dễ dàng, nhanh chóng ứng dụng dựa tảng NET Nếu IDE dùng trình soạn thảo ví Notepad hay trình soạn thảo văn sử dụng command line để biên dịch thực thi, nhiên việc nhiều thời gian Tốt dùng IDE phát triển ứng dụng, cách dễ sử dụng - Thành phần Framework quan trọng NET cốt lõi tinh hoa môi trường, IDE công cụ để phát triển dựa tảng Trong NET toàn ngôn ngữ C#, Visual C++ hay Visual Basic.NET dùng IDE - NET Framework platform làm đơn giản phát triển ứng dụng môi trường phân tán Internet NET Framework thiết kế đầy đủ để đáp ứng theo quanđiểm sau: + Để cung cấp môi trường lập trình hướng đối tượng vững chắc, mã nguồn đối tượng lưu trữ thực thi cách cục Thực thi cục phân tán Internet, thực thi từ xa + Để cung cấp môi trường thực thi mã nguồn mà tối thiểu việc đóng gói phần mềm tranh chấp phiên + Để cung cấp 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 việc mã nguồn tạo hãng thứ ba hay hãng mà tuân thủ theo kiến trúc NET + Để cung cấp môi trường thực thi mã nguồn mà loại bỏ lỗi thực script hay môi trường thông dịch + Để làm cho người phát triển có kinh nghiệm vững nắm vững nhiều kiểu ứng dụng khác Như từ ứng dụng Windows đến ứng dụng dựa web + Để xây dựng tất thông tin dựa triên tiêu chuẩn công nghiệp để đảm bảo mã nguồn NET tích hợp với mã nguồn khác .NET Framework có hai thành phần chính: Common Language Runtime (CLR) thư viện lớp NET Framework - Common Language Runtime: + CLR thực quản lý 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 dịch vụ hệ thống khác + CLR thúc đẩy việc mã nguồn thực việc truy cập bảo mật + CLR thúc đẩy cho mã nguồn thực thi mạnh mẽ việc thực thi mã nguồn xác xác nhận mã nguồn -Thư viện lớp NET Framework: tập hợp kiểu liệu dùng lại kết hợp chặt chẽ với Common Language Runtime Thư viện lớp hướng đối tượng cung cấp kiểu liệu mà mã nguồn quản lý dẫn xuất Điều không làm cho kiểu liệu NET Framework dễ sử dụng mà làm giảm thời gian liên quan đến việc học đặc tính NET Framework Thêm vào đó, thành phần hãng thứ ba tích hợp với lớp NET Framework - Người phát triển sử dụng NET Framework để phát triển ứng dụng dịch vụ sau: + Ứng dụng Console + Ứng dụng giao diện GUI Windows (Windows Forms) + Ứng dụng ASP.NET + Dịch vụ XML Web + Dịch vụ Windows Trong lớp Windows Forms cung cấp tập hợp lớn kiểu liệu nhằm làm đơn giản việc phát triển ứng dụng GUI chạy Windows Còn viết ứng dụng ASP.NET sử dụng lớp Web Forms thư viện NET Framework -Phát triển ứng dụng Client Những ứng dụng client gần với ứng dụng kiểu truyền thống lập trình dựa Windows Đây kiểu ứng dụng hiển thị cửa sổ hay form desktop cho phép người dùng thực thao tác hay nhiệm vụ Những ứng dụng client bao gồm ứng dụng xử lý văn bản, xử lý bảng tính, ứng dụng lĩnh vực thương mại công cụ nhập liệu, công cụ tạo báo cáo Những ứng dụng client thường sử dụng cửa sổ, menu, toolbar, button hay thành phần GUI khác, chúng thường truy cập tài nguyên cục tập tin hệ thống, thiết bị ngoại vi máy in Trong NET Framework, chương trình không biên dịch vào tập tin thực thi mà thay vào chúng biên dịch vào tập tin trung gian gọi Microsoft Intermediate Language (MSIL) Những tập tin MSIL tạo từ C# tương tự tập tin MSIL tạo từ ngôn ngữ khác NET, platform không cần biết ngôn ngữ mã nguồn Điều quan trọng yếu CLR chung (common), runtime hỗ trợ phát triển C# VB.NET Mã nguồn C# biên dịch vào MSIL build project Mã MSIL lưu vào tập tin đĩa Khi chạy chương trình, MSIL biên dịch lần nữa, sử dụng trình biên dịch Just-InTime (JIT) Kết mã máy thực thi xử lý máy 1.1.2 Ngôn ngữ Csharp Ngôn ngữ C# đơn giản, khoảng 80 từ khóa mười kiểu liệu xây dựng sẵn Tuy nhiên, ngôn ngữ C# có ý nghĩa cao thực thi khái niệm lập trình đại C# bao gồm tất 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 diện ngôn ngữ lập trình đại Và ngôn ngữ C# hội đủ điều kiện vậy, xây dựng tảng hai ngôn ngữ mạnh C++ Java Phần cốt lõi hay gọi trái tim ngôn ngữ lập trình hướng đối tượng hỗ trợ cho việc định nghĩa làm việc với lớp Những lớp định nghĩa kiểu 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 để giải vấn đề Ngôn ngữ C# chứa từ khóa cho việc khai báo kiểu lớp đối tượng phương thức hay thuộc tính lớp, cho việc thực thi đóng gói, kế thừa, đa hình, ba thuộc tính ngôn ngữ lập trình hướng đối tượng Trong ngôn ngữ C# thứ liên quan đến khai báo lớp điều tìm thấy phần khai báo Định nghĩa lớp ngôn ngữ C# không đòi hỏi phải chia tập tin header tập tin nguồn giống ngôn ngữ C++ Hơn nữa, ngôn ngữ C# hỗ trợ kiểu XML, cho phép chèn tag XML để phát sinh tự động document cho lớp C# hỗ trợ giao diện interface, xem cam kết với lớp cho dịch vụ mà giao diện quy định Trong ngôn ngữ C#, lớp kế thừa từ lớp cha, tức không cho đa kế thừa ngôn ngữ C++, nhiên lớp thực thi nhiều giao diện Khi lớp thực thi giao diện hứa cung cấp chức thực thi giao diện Trong ngôn ngữ C#, cấu trúc hỗ trợ, khái niệm ngữ nghĩa thay đổi khác với C++ Trong C#, cấu trúc giới hạn, kiểu liệu nhỏ gọn, tạo thể yêu cầu hệ điều hành nhớ so với lớp Một cấu trúc kế thừa từ lớp hay kế thừa cấu trúc thực thi giao diện Tại phải sử dụng ngôn ngữ C# Nhiều người tin không cần thiết có ngôn ngữ lập trình Java, C++, Perl, Microsoft Visual Basic, ngôn ngữ khác nghĩ cung cấp tất chức cần thiết Ngôn ngữ C# ngôn ngữ dẫn xuất từ C C++, tạo từ tảng phát triển Microsoft bắt đầu với công việc C C++ thêm vào đặc tính để làm cho ngôn ngữ dễ sử dụng Nhiều số đặc tính giống với đặc tính có ngôn ngữ Java Không dừng lại đó, Microsoft đưa số mục đích xây dựng ngôn ngữ Những mục đích được tóm tắt sau: C# ngôn ngữ đơn giản C# ngôn ngữ đại C# ngôn ngữ hướng đối tượng C# ngôn ngữ mạnh mẽ mềm dẻo C# ngôn ngữ có từ khóa C# ngôn ngữ hướng module C# trở nên phổ biến C# ngôn ngữ đơn giản C# loại bỏ vài phức tạp rối rắm ngôn ngữ Java c++, bao gồm việc loại bỏ macro, template, đa kế thừa, lớp sở ảo (virtual base class) Chúng nguyên nhân gây nhầm lẫn hay dẫn đến vấn đề cho người phát triển C++ Nếu người học ngôn ngữ chắn ta không trải qua thời gian để học nó! Nhưng ta hiệu ngôn ngữ C# loại bỏ vấn đề Ngôn ngữ C# đơn giản dựa tảng C C++ Nếu thân thiện với C C++ hoậc chí Java, thấy C# giống diện mạo, cú pháp, biểu thức, toán tử chức khác lấy trực tiếp từ ngôn ngữ C C++, cải tiến để làm cho ngôn ngữ đơn giản Một vài cải tiến loại bỏ dư thừa, thêm vào cú pháp thay đổi Ví dụ như, C++ có ba toán tử làm việc với thành viên ::, , -> Để biết dùng ba toán tử phức tạp dễ nhầm lẫn Trong C#, chúng thay với toán tử gọi (dot) Đối với người học điều việc cải tiến khác làm bớt nhầm lẫn đơn giản Ghi chú: Nếu sử dụng Java tin đơn giản, tìm thấy C# đơn giản Hầu hết người không tin Java ngôn ngữ đơn giản Tuy nhiên, C# dễ Java C++ C# ngôn ngữ đại Điều làm cho ngôn ngữ đại? Những đặc tính xử lý ngoại lệ, thu gom nhớ tự động, kiểu liệu mở rộng, bảo mật mã nguồn đặc tính mong đợi ngôn ngữ đại C# chứa tất đặc tính Nếu người học lập trình cảm thấy đặc tính phức tạp khó hiểu Ghi chú: Con trỏ tích hợp vào ngôn ngữ C++ Chúng nguyên nhân gây rắc rối ngôn ngữ C# loại bỏ phức tạp rắc rối phát sinh trỏ Trong C#, thu gom nhớ tự động kiểu liệu an toàn tích hợp vào ngôn ngữ, loại bỏ vấn đề rắc rối C++ C# ngôn ngữ hướng đối tượng Những đặc điểm ngôn ngữ hướng đối tượng (Object-oriented language) đóng gói (encapsulation), kế thừa (inheritance), đa hình (polymorphism) C# hỗ trợ tất Ngôn Ngữ C# đặc tính Phần hướng đối tượng C# trình bày chi tiết chương riêng phần sau C# ngôn ngữ mạnh mẽ mềm dẻo Như đề cập trước, với ngôn ngữ C# bị giới hạn thân trí tưởng tượng Ngôn ngữ không đặt ràng buộc lên việc làm C# sử dụng cho nhiều dự án khác tạo ứng dụng xử lý văn bản, ứng dụng đồ họa, tính, hay chí trình biên dịch cho ngôn ngữ khác C# ngôn ngữ từ khóa C# ngôn ngữ sử dụng giới hạn từ khóa Phần lớn từ khóa sử dụng để mô tả thông tin Chúng ta nghĩ ngôn ngữ có nhiều từ khóa mạnh Điều thật, trường hợp ngôn ngữ C#, tìm thấy ngôn ngữ sử dụng để làm nhiệm vụ C# ngôn ngữ hướng module Mã nguồn C# viết phần gọi lớp, lớp chứa phương thức thành viên Những lớp phương thức sử dụng lại ứng dụng hay chương trình khác Bằng cách truyền mẫu thông tin đến lớp hay phương thức tạo mã nguồn dùng lại có hiệu C# ngôn ngữ phổ biến Một lý Microsoft cam kết NET Microsoft Nhiều sản phẩm công ty chuyển đổi viết lại C# Bằng cách sử dụng ngôn ngữ Microsoft xác nhận khả C# cần thiết cho người lập trình Micorosoft NET lý khác để đem đến thành công C# .NET thay đổi cách tạo thực thi ứng dụng Ngoài hai lý ngôn ngữ C# trở nên phổ biến đặc tính ngôn ngữ đề cập mục trước như: đơn giản, hướng đối tượng, mạnh mẽ Ngôn ngữ C# ngôn ngữ NET khác Microsoft nói C# mang đến sức mạnh ngôn ngữ C++ với dễ dàng ngôn ngữ Visual Basic Có thể không dễ Visual Basic, với phiên Visual Basic.NET (Version 7) ngang Bởi chúng viết lại từ tảng Chúng ta viết nhiều chương trình với mã nguồn dùng C# Mặc dù C# loại bỏ vài đặc tính C++, bù lại tránh lỗi mà thường gặp ngôn ngữ C++ Điều tiết kiệm hàng hay chí hàng ngày việc hoàn tất chương trình Chúng ta hiểu nhiều điều chương giáo trình Một điều quan trọng khác với C++ mã nguồn C# không đòi hỏi phải có tập tin header Tất mã nguồn viết khai báo lớp Như nói bên NET runtime C# thực việc thu gom nhớ tự động Do điều nên việc sử dụng trỏ C# quan trọng C++ Những trỏ sử dụng C#, đoạn mã nguồn đánh dấu không an toàn (unsafe code) 1.2: Window Forms 1.2.1: Control - Control lớp (class) thành phần thêm vào Windows Forms dùng để tương tác người sử dụng với Windows - Có nhiều loại control Windows Forms như: Label, TextBox, ListBox, ComboBox, Button, … - Các control sử dụng Windows Forms dùng namespace System.Windows.Forms 1.2.2: Picture Box PictureBox control hữu dụng C# NET Nó cung cấp vùng hình chữ nhật để chèn ảnh kích cỡ tùy chỉnh nhiều cách khác Picturebox hỗ trợ nhiều định dạng ảnh: BMP, GIF, JPEG, EXIF, PNG TIFF, ICO (các định dạng GDI+ hỗ trợ) Thuộc tính: + Mage: Cho phép thiết lập ảnh lúc thiết kế runtime + BorderStyle: quy định kiểu khung None: border FixedSingle: Một khung đơn Fixed3D: Một dung dạng 3D + SizeMode: Normal: hiển thị ảnh lúc thiết kế StretchImage: tự động giãn ảnh cho vừa với không gian hiển thị khung AutoSize: kích thước tự động CenterImage: Ảnh canh giữ + Enable: Nếu chọn False vô hiệu hóa điều khiển bên + Visible: ẩn/hiện ảnh + Location: tọa độ ảnh + Size: kích thước + BackColor: ảnh + PictureBack 1.2.3: Panel Một phần mềm có nhiều control để quản lý nhanh control Hoặc có "nhóm" control phục vụ chức liên quan đến nhau, cần show, hide chúng đồng loại lại phải gọi control??? Panel đời để giải vấn đề Panel dùng để tạo nhóm control Là container với dạng khung đơn giản để chưa sub-control (button, textbox, ) Cho phép chứa đựng đ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 Dock: Vị trí điều khiển form Enable: Nếu chọn False vô hiệu hóa điều khiển bên BackColor: màu BorderStyle: Hình thức trình bày điều khiển - Các sub-control nằm panel bị ảnh hưởng thuộc tính enable, visible panel 1.2.4: Sự kiện (Event) Là hành động người dùng, ví dụ nhấn phím, click, di chuyển chuột, … Các Application cần phản hồi kiện chúng xuất Ví dụ, ngắt (interrupt) Các kiện (Event) sử dụng để giao tiếp bên tiến trình Tham số event: - Sender mang kiểu liệu object dùng chung, tổng quát + Sender chứa tham chiếu tới control/object gây event Chúng ta ép kiểu sender lại trở thành control/object để xử lý - MouseEventArgs: Tham số nơi hành động thực xảy ra, tham số e chứa đối tượng, kiểu cụ thể loại tham số mouse event, chứa liệu event - MouseEventArgs chứa: + Clicks: trả số lần người dùng click chuột vào control + Button: trả nút nhấp (trái, giữa, phải) + X, Y: trả tọa độ trỏ chuột thực thi kiện 1.2.5: Message Box MessageBox Dùng để đưa 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 MessageBox hỗ trợ sẵn: MessageBoxButtons. + Button Type: AbortRetryIgnore, OK, OKCancel, RetryCancel,YesNo, YesNoCancel - Icon 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 nhiều tùy chọn khác (Default button, options, Help button, using the specified Help file, HelpNavigator, Help topic) 1.2.6: Graphics Graphical Interface (GDI+) - GDI+ API(Application Programming Interface) cung cấp lớp: + Tạo đồ họa 2D vector + Thao tác font + Hiển thị ảnh - Khởi động thư viện đồ họa: using System.Drawing; -Chọn ngữ cảnh vẽ: Graphics g = panel.CreateGraphics() Graphics g = form.CreateGraphics() *Color: kết hợp giá trị Red, Green, Blue dải -> 255 VD: Color.FromArgb(alpha, Color.Blue) + alpha độ suốt: -> 255 *Font : có 13 phiê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ị ả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 kiện Repaint: Private void Form1_Paint(object sender, PaintEventArgs e) - Màn hình giống khung vẽ, Windows không nhớ bên => Do bạn di chuyển picturebox hay control ảnh vẽ bị tượng "rách" Chương 2: Trò chơi cờ vua thuật toán xử lý 2.1: Giới thiệu trò chơi cờ vua 2.1.1: Lịch sử máy tính trò chơi cờ vua Tiền thân cờ vua xuất đất nước điệu múa bụng tiếng Ấn Độ, thời kỳ đế chế Gupta, vào khoảng kỷ thứ sau công nguyên Vào thời đó, người ta gọi trò chơi chaturanga – trò chơi với nhiều loại binh chủng xuất bàn cờ gồm binh, kỵ binh, tượng binh xa binh tương ứng với quân cờ đại chốt, mã, tượng xe Ở đất nước Ba Tư khoảng 600 năm sau công nguyên, tên trò chơi gọi chatrang luật lệ bắt đầu phát triển cao hơn, đặc biệt số người ta gọi “Shāh!” công vào Vua đối phương, “Shāh māt!” quân Vua bị công cách để thoát khỏi Điểm tồn với cờ vua mang đến nhiều vùng đất khác giới Cuộc chinh phục người Ba Tư đưa trò chơi đến đất nước Tây Á tên trò chơi sửa lại đôi chút cho hợp với giọng đọc người dân vùng shatranj Sau đó, người Maroc vùng Bắc Phi đổi tên thành shaterej, đọc theo tiếng Tây Ban Nha acedrez, axedrez hay ajedrez Khi cờ vua đến với châu Âu, tùy theo âm điệu giọng nói dân tộc, quốc gia mà thành nhiều tên khác scacchi (Italy), échecs (Pháp), schack (Thụy Điển)… Cờ vua du nhập đến nhiều vùng miền giới nhiều đường khác từ phát triển mạnh số người chơi cờ vua Vì có nhiều người chơi từ nhiều đất nước dân tộc nên nảy sinh nhu cầu phải có luật lệ thống để người giao lưu với dù khác biệt ngôn ngữ, văn hóa Các luật lệ phát triển mạnh mẽ sớm hình thành hệ thống châu Âu vào cuối kỷ 15 thời Phục Hưng Chúng ta điểm qua phát triển quân cờ qua thời gian đến vùng đất, dân tộc khác Ở Ấn Độ ngày trước, quân Hậu chéo ô, quân Tượng chéo ô không không quân chốt chưa thể ô từ đầu Tuy có luật phong cấp chốt phong thành Hậu, thành quân cờ khác Riêng Xe, Tượng, Mã nhiều thay đổi Ở châu Âu, người ta thêm luật cho chốt có khả nhảy ô từ vạch xuất phát từ hình thành nên luật ăn chốt qua đường Tiếp theo đó, Vua cho thêm khả nhảy ô lần ván, tiền đề cho hình thành nước nhập thành “nhất cử lưỡng tiện” để Vua an toàn Xe công Hậu phép ngang dọc chéo bàn cờ, ô Tuy nhiên, lại không cho quân bị ghim thực nước chiếu Qua nhiều cải cách giới, cờ vua dần hoàn thiện đến với người Luật cờ vua từ mà dần hợp Thế nhưng, quân cờ chưa phát huy mạnh nó, cụ thể Hậu Tượng yếu Điều nguyên nhân, cờ vua du nhập châu Âu người ta Tượng binh phụ nữ chưa xem trọng Quân Tượng từ Ấn Độ biến thành quân cố vấn (Councilor) cố vấn quanh vẩn vua nên sức mạnh quân cao kỵ binh (Mã) hay xa binh (Xe) Nhưng sau đó, người ta dần nhận tầm quan trọng quý bà muốn làm cho cờ vua trở nên hoàn thiện, Hậu Tượng nâng cao giá trị qua việc biến chúng trở thành quân tầm xa đặc biệt Hậu ngang dọc khắp bàn cờ Cũng từ đó, việc phong cấp cho chốt giá trị quân chốt yếu ớt ngày này, người ta xem trọng nhiều Những câu lạc bộ, tổ chức, trung tâm cờ xuất Đó nơi nhiều tay cờ tiếng tụ hội để thi đấu học hỏi lẫn nơi để người biết chơi rèn luyện khả tư bàn cờ Nổi tiếng số trung tâm cờ quán cà phê Régence Pháp, nơi hai nhà chơi cờ kiệt xuất Paul Morphy Andre Philidor đặt chân đến thi đấu Các tổ chức cờ hình thành nhằm mục đích xây dựng hệ thống thi đấu Quốc gia Quốc tế, thống làng cờ giới để tìm người giỏi Và này, có tổ chức cờ vua giới với tên viết tắt FIDE *Sơ lược lịch sử máy tính cờ Vua Chiếc máy đánh cờ đầu tiên: Năm 1769 kỹ sư người Hungary Baron Wolfgang von Kempelen thiết kế máy chơi cờ để làm vui cho nữ hoàng Áo Maria Theresia Đây cỗ máy khí hoàn toàn, có hình dáng giống người Thổ Tất nhiên sức mạnh bật nhờ kiện tướng khéo léo giấu bên Chiếc máy đồ giả mạo Chiếc “máy giấy” Turing Một điều đáng kinh ngạc chương trình chơi cờ viết trước máy tính phát minh Nó viết người nhìn xa trông rộng, biết máy tính lập trình đời phát minh ra, chơi cờ Người Alan Turing, nhà toán học lớn thời kỳ Turing đứng đầu nhóm phá mã bí mật “Enigma” Đức, có ảnh hưởng lớn đến kết cục chiến tranh giới lần thứ Ông thích chơi cờ thông minh giành nhiều công sức để học cờ ông người chơi tương đối yếu Sau chiến tranh, ông viết lệnh hướng dẫn để máy tính chơi cờ Vào thời điểm chưa có máy tính chạy lệnh nên ông thực lệnh đó, đóng vai xử lý trung tâm cần khoảng nửa tiếng cho nước Một ván cờ ghi lại, “paper machine” Turing thua đồng nghiệp Đây ván cờ lịch sử: Turing’s paper machine – Alick Glennie, Manchester 1952: 1.e4 e5 2.Nc3 Nf6 3.d4 Bb4 4.Nf3 d6 5.Bd2 Nc6 6.d5 Nd4 7.h4 Bg4 8.a4 Nxf3+ 9.gxf3 Bh5 10.Bb5+ c6 11.dxc6 0-0 12.cxb7 Rb8 13.Ba6 Qa5 14.Qe2 Nd7 15.Rg1 Nc5 16.Rg5 Bg6 17.Bb5 Nxb7 18.0-0-0 Nc5 19.Bc6 Rfc8 20.Bd5 Bxc3 21.Bxc3 Qxa4 22.Kd2? [22.h5 would have trapped the bishop] 22…Ne6 23.Rg4 Nd4? [23 Rxb2! 24.Bxb2 Rxc2+] 24.Qd3 Nb5 25.Bb3 Qa6 26.Bc4 Bh5 27.Rg3 Qa4 28.Bxb5 Qxb5 29.Qxd6 Rd8 0-1 Chiến lược Shanon Cũng vào thời với Turing, nhà toán học lớn khác, Claude Shanon Bell Laboratorié nghĩ tới việc dạy máy tính chơi cờ Ông nhận vấn đề chỗ có nhiều khả tiếp diễn sau nước Do ông phân biệt “chiến lược A”, tìm kiếm tất nước tiếp theo, “chiến lược B”, bỏ đường không cần thiết Ngày phân biệt chương trình theo loại “cục súc” (brute force) hay “lựa chọn” tất chương trình mạnh nhiều thuộc loại “cục súc” Cờ thay bom nguyên tử Trong năm chiến tranh, Mĩ xây dựng phòng thí nghiệm khổng lồ Los Alamos sa mạc bang New Mexico Mục đích nghiên cứu chế tạo bom nguyên tử Để tìm dạng cấu tạo phần kích nổ để tạo thành phản ứng dây chuyền đòi hỏi nhiều tính toán Năm 1946, nhà toán học Hungary/Mỹ John von Neumann giao nhiệm vụ thiết kế máy tính để thực công việc nhanh Năm 1950, máy khổng lồ goi MANIAC I chế tạo Nó có hàng nghìn bóng chân không công tắc thực 10000 lệnh giây Nó lập trình Thay bắt tay vào việc chế tạo bom, nhà khoa học bắt đầu thí nghiệm với máy Một điều họ làm viết chương trình chơi cờ Nó chơi bàn cờ thu nhỏ 6×6 Tượng Mặc dù chương trình cần 12 phút để tìm kiếm trước ply (ply nửa nước đi, ví dụ e4 hay …d5; 1.e4 e5 nước đi) (với Tượng bàn cờ cần khoảng tiếng) Chương trình chơi ba ván cờ năm 50 Ván thi đấu với (Trắng thắng), ván thứ hai với người chơi hay, chấp hậu Ván cờ kéo dài 10 tiếng người thắng Cuối chơi với phụ nữ trẻ, học chơi cờ tuần trước Chương trình thắng vòng 23 nước Đó lần người thua máy tính trò chơi trí tuệ Đây ván cờ lịch sử thứ hai (bàn cờ 6×6, không tượng, tốt không phép hai ô nước đầu tiên, không nhập thành) MANIAC – Human, Los Alamos 1956: 1.d3 b4 2.Nf3 d4 3.b3 e4 4.Ne1 a4 5.bxa4? [5.Nd2 and 6.Nd2-c4+ Nbcxc4 7.b3xc4 with a good game] 5…Nxa4 6.Kd2? Nc3 7.Nxc3 bxc3+ 8.Kd1 f4 9.a3 Rb6 10.a4 Ra6 11.a5 Kd5 12.Qa3 Qb5 13.Qa2+ Ke5 14.Rb1 Rxa5 15.Rxb5 Rxa2 16.Rb1 [to prevent 16 Ra1 mate!] 16…Ra5 17.f3 Ra4 18.fxe4 c4 19.Nf3+ Kd6 20.e5+ Kd5 21.exf6Q Nc5 22.Qf6xd4+ Kc6 23.Nf3-e5 mate Cờ toán học Vấn đề với chương trình chơi cờ số lượng lớn nước phải tính toán Một ví trí trung bình có 40 nươc hợp lệ Nếu bạn tính tất nước đối phương trả lời bạn có 40×40 = 1600 vị trí Điều có nghĩa sau hai ply, coi nước cờ Vua, 16000 vị trí xảy Sau hai nước 2.5 triệu vị trí sau ba nước 4.1 tỷ Trung bình ván cờ kéo dài khoảng 40 nước Số vị trí cần tính khoảng 10 mũ 128, lớn số nguyên tử có vũ trụ (chỉ khoảng 10 mũ 80) Deep Blue Garry Kasparov thi đấu với Deep blue Philadelphia New York Nó gồm có máy chủ IBM SP/2 với số lớn chip đặc biệt để tính toán nhanh Mỗi chip xử lý hai đến ba triệu vị trí giây Với việc sử dụng 200 chip này, tốc độ tổng cộng chương trình tăng lên tới 200 triệu vị trí giây Độ sâu tìm kiếm khả chơi cờ Xử lý 200 triệu vị trí giây có nghĩa với máy tính đánh cờ ? Ken Thompson, cha đẻ Belle (cũng Unix ngôn ngữ lập trình C) tiến hành số thí nghiệm thú vị năm 80 cho thấy tương quan độ sâu tìm kiếm khả chơi cờ Thompson chơi Belle với với bên tính toán sâu Trung bình tính trước thêm ply ngang với khoảng 200 điểm ELO Với ply Belle khoảng 1230 với ply đạt tới 2328 điểm ELO Bằng cách tiếp tục tăng độ sâu tìm kiếm (càng sau ELO tăng chậm) ta kết luận cần tính trước 14 ply để đạt đến trình độ vô địch giới (2800) Kết luận chuyên gia: bạn cần chế tạo máy tính xử lý tỷ vị trí giây (và tính trước 14 ply) bạn muốn thách đấu với nhà vô địch cờ vua giới Deep Blue tiến gần, chưa đạt tới điểm Những máy nhỏ bé Tất nhiên chất lượng lập trình có vị trí quan trọng Những chương trình chơi cờ PC ngày Fritz hay Junior xử lý triệu vị trí giây Chúng đạt đến sức mạnh khoảng 2700 ELO đối thủ cho nhóm 100 kỳ thủ đứng đầu giới Trong cờ nhanh có khoảng 10 kỳ thủ đứng đầu cạnh tranh với chơi blitz có lẽ hai ba người sống sót Tấn công hai mặt trận Một điểm quan trọng sức mạnh máy tính có khả chơi theo sách khai Những kiến thức kinh nghiệm qua bao đời kiện tướng dễ dàng lưu trữ đĩa cứng máy tính truy cập chơi khai Ngay chương trình PC biết khoảng 10 triệu vị trí khai truy cập đầy đủ thống kê chúng (những nước đi, kết nào, thứ hạng người chơi v.v…) Thường máy tính chơi mười lăm hai mươi nước trước phải tính toán nước Nếu lợi từ kiến thức người khai cuộc, máy tính yếu nhiều Máy tính lợi từ khối lượng kiến thức khổng lồ khai từ lịch sử cờ Vua mà có lợi từ nghiên cứu cờ tàn Cơ sở liệu cờ tàn Một lần lại gặp lại Ken Thompson, người tiên phong lĩnh vực Trong năm 80, ông bắt đầu tạo ghi lại tất vị trí tàn với bốn năm quân bàn cờ Một cờ tàn bình thường với quân, ví dụ Vua với hai Tượng Vua với Mã, có khoảng 121 triệu vị trí Với tốt, không (nước hai ô), số vị trí tăng lên 335 triệu Thompson viết chương trình tính toán tất vị trí hợp lệ tìm tất đường bắt buộc dẫn tàn Ông nén liệu lưu trữ khoảng 20 loại tàn đĩa CD-ROM chuẩn Sử dụng sở liệu này, máy tính chơi tàn với độ xác tuyệt đối (“như chúa trời”) Cho tàn nào, biết trận thắng, hoà hay thua nước Thường thông báo chiến thắng hay chiếu hết trước khoảng 50 nước Khi bên thua chơi theo đường tốt Deep Blue sử dụng sở liệu tàn Thompson chương trình cho PC Fritz sử dụng tìm kiếm Điều ảnh hưởng đến sức mạnh cần thời gian để trả lời Một số tàn với quân tiếng khó cho người làm chủ Một ví dụ điển hình Hậu chống lại Hậu Tốt, trường hợp người hội thắng máy tính Nhưng tàn với quân tic-tac-toe (một trò chơi đơn giản) so với tàn với quân mà Thompson tạo Trong số tàn với quân, bạn cần xác 200 nước để dành chiến thắng Thường kỳ thủ mạnh giới biết tiến đến đâu sau 100 nước mà máy tính nói với bắt buộc Sự phát triển công nghệ phần cứng làm tăng lợi máy tinhs Các tàn với quân Thompson, với đến 20 tỷ vị trí loại, nén lưu trữ DVD May mắn thay tàn với quân, gồm khoảng 500 nghìn tỷ vị trí cho loại, tương lai xa Và may mắn hai đầu – nghiên cứu khai sở liệu tàn – không gặp Có lẽ bạn không thấy máy tính 1.e4 thông báo chiếu hết nước thứ 40 Nhưng vấn đề thời gian, vài năm hay thập kỷ, trước máy tính liên tục đánh bại nhà vô địch cờ Vua giới 2.1.2: Mô tả trò chơi cờ vua - Cờ vua trò chơi trí tuệ đánh theo lượt, chia làm quân: trắng đen - Bàn cờ: 64 ô vuông trắng, đen luân phiên - Mỗi quân có : xe, mã, tịnh, hậu, tướng, tốt - Rule: Hậu trắng bên trắng, hậu đen bên đen - Trừ Knight ra, tất quân không xuyên *Pawn: thẳng ăn chéo, không lùi - Ngoài tốt xuống tới ô cuối thăng cấp thành quân khác trừ vua *Knight: hình chữ L, quân cờ xuyên *Rook: thẳng ăn thẳng *Bishop: Đi chéo ăn chéo *King: ăn xung quanh ô - Ngoài King nhập thành với Rook với điều kiện King Rook chưa di chuyển + Đây nước vua ô + Chỉ nhập thành lần ván cờ + Vua bị chiếu chưa di chuyển nhập thành - Không nhập thành gặp vào trường hợp sau: + Vua bị chiếu + Trên đường di chuyển vua bị quân địch công + Đường từ King tới Rook không giải tỏa (có quân chặn) *Queen: Rook Bishop Checkmate : chiếu vua - Thông báo chiếu vua không bắt buộc - Khi vua bị chiếu 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 chiếu Thắng: Nếu quân ta chiếu vua vua không tìm nước tránh chiếu Thua: Nếu vua ta bị chiếu không tìm cách tránh chiếu Hòa bên không quân thỏa mãn điều kiện: + Một bên quân kiểm soát di chuyển vua đối phương không chiếu vua đối phương + Đối phương không quân để di chuyển 2.2: Các thuật toán xử lý 2.2.1: Thuật toán Minimax Hai đối thủ trò chơi gọi MIN MAX luân phiên thay MAX đại diện cho người dành thắng lợi cố gắng tối đa hóa ưu 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ố MAX cố gắng làm cho điểm số âm tốt Giả thiết đưa MIN MAX có kiến thức không gian trạng thái trò chơi hai đối thủ cố gắng Mỗi Node biểu diễn trạng thái trò chơi Node Node chứa trạng thái kết thúc tròcchơi Giải thuật Minimax thể cách định trị Node trò chơi: • Node thuộc lớp MAX gán cho giá trị lớn Node • Node thuộc lớp MIN gán cho giá trị nhỏ Node Từ giá trị người chơi lựa chọn cho nước hợp lý - Xét trạng thái (trạng thái cùng) + Minimax: gọi quét hết trạng thái có tìm trạng thái có lợi - Cắt tỉa alphabeta : + Một nhược điểm minimax phải quét toàn trạng thái + Trạng thái nhánh toàn trạng thái + Nếu phải xét toàn trạng thái để xét nước tối ưu nhiều thời gian + Đối với cờ vua có 64 ô cờ điều + Tuy nhiên người hoàn hảo + Do cần tính toán tới độ sâu định đánh *Phân tích : Trạng thái trò chơi trạng thái U đến lượt quân x trước *TH1 : x computer - Thuật toán minimax xét toàn trạng thái tiếp diễn KẾT QUẢ chọn kết thuận lợi - Sau xét toàn trạng thái tiếp diễn, computer nhận thấy kết win trạng thái B1 B2 (full trạng thái – trạng thái), computer đánh x trạng thái B *TH2: o computer bạn người chơi không giỏi - You (X) : trạng thái A - Computer (0) : trạng thái A1 + xét trạng thái tiếp diễn, computer nhận thấy thắng bạn, computer chọn kết thuận lợi cho mình, A1 TH3 : o computer bạn người chơi bình thường - You(X) : trạng thái B - Commputer(0) : random(B1, B2) + computer nhận thấy trạng thái lợi cho mình, nên thực random Ưu điểm Tìm kiếm nước sau lựa chọn random nước tốt nhất, 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 trò chơi có không gian trạng thái lớn caro, cờ tướng… việc áp dụng giải thuật Minimax có lẽ không hiệu bùng nổ tổ hợp lớn Giải thuật áp dụng nguyên lý vét cạn không tận dụng thông tin trạng thái để lựa chọn nước đi, duyệt hết trạng thái nên tốn thời gian 2.2.2: Thuật toán cắt cụt alpha-beta - Theo thuật toán minimax: + Đỉnh max nhận giá trị lớn + Đỉnh nhận giá trị nhỏ - Tại đỉnh c muốn chọn giá trị lớn phải thực so sánh u với b + Việc kiểm tra a thừa u > v + Đỉnh b nhận giá trị nhỏ : Giả sử v > a => b nhận giá trị v sai + Nhưng u > v giá trị c - Ta không cần quan tâm giá trị bắt buộc phải đúng, mà cần quan tâm giá trị cuối => Không cần quan tâm tới a u > v Chương 3: Ứng dụng CSharp lập trình trò chơi cờ vua 3.1: Phân tích toán *Các chức bản: - Di chuyển quân cờ (kéo thả) - Chỉ nước quân cờ - Kiểm tra tính hợp lệ di chuyển - Hightlight công quân khác - Lưu lại trạng thái di chuyển cuối - Hiển thị quân giết bên - Thông báo chiếu vua - Khống chế nước di chuyển vua (vua vào ô an toàn) - Phong cấp cho Pawn - Nhập thành - xác định thắng, thua, hòa (chưa xác định hoàn toàn trạng thái thắng) *Phi chức năng: Không cho phép kéo thả khu vực bàn cờ *Hạn chế: - Chưa xây dựng AI (chế độ người đánh với máy) - Chưa xây dựng hoàn toàn theo hướng đối tượng - Chưa tìm cách xử lý màu quân ăn + Do ảnh di chuyển, quân di chuyển số mảng + Nếu xóa ảnh quân bị ăn ảnh hưởng tới mảng, ảnh hưởng tới vua, xe nhiều thứ liên quan - Ô cờ sử dụng paint nên bắt buộc phải repaint lại, ô cờ có bị lỗ hổng - Chưa tìm cách tạo quân cờ khung + Nếu cố tình Draw Clear quân cờ dẫn tới tình trạng quân cờ bị nhấp nháy + Có thể tạo quân cờ Draw chưa thể tùy ý kéo thả (tức kéo thả theo ô) Clear theo ô dễ Clear vùng ô tạo cứng ngắc cho game *Hướng phát triển: - Nếu có thời gian em xây dựng lại ô cờ picturebox + Không phải repaint lại tạo mượt mà cho game + Xử lý nhanh chạy lại hàm tạo bàn cờ - Tự động nạp quân cờ (không nạp vào cách trực tiếp - hiển thị phần design => xóa được) - Cố gắng phân tích thật kỹ trước bắt tay vào thực hành - Hoàn thiện phần AI chưa làm xong - Tìm phương pháp chỉnh color cho quân ăn - Tìm phương pháp nạp quân cờ khung mà không bị nhấp nháy - Thêm phần resize chương trình - Cải thiện đồ họa tốt 3.2: Xây dựng tính game *Di chuyển quân cờ: không nên tạo kiện cho quân cờ: 32 mouse down, 32 mouse move, 32 mouse up - Chỉ cần tạo kiện chính: Form_MouseDown, Form_MouseMove, Form_MouseUp kiện Form_Paint - Enable = false cho tất quân cờ - Tạo đồ quân cờ, quân ứng với giá trị: + White: -> 16 + Dark: -1 -> -16 Tọa độ sử dụng để thiết lập quân cờ từ -> 15 danh sách List từ -> 15 - Game bắt đầu với di chuyển quân White: - Khi nhấp chuột (mouse down) vào quân bàn cờ + Đổi color quân cờ vừa chọn + Hightlight ô cờ vừa nhấp chuột theo tọa độ Form (tọa độ -> 7, tọa độ thực nhân với edge) + Kiểm tra lượt có thỏa mãn, thỏa, dựa vào đồ quân cờ xác định quân cờ + Thực tính toán nước di chuyển hợp lệ quân cờ mảng di chuyển + Duyệt mảng di chuyển để hight light nước quân cờ + Xét điểm di chuyển (dựa vào đồ map xây dựng) gặp quân địch đổi color quân địch - Khi di chuyển quân cờ (mouse move): + Lọc trường hợp di chuyển khống chế không cho phép di chuyển qua bàn cờ + Tính toán di chuyển Left, Top quân cờ dựa theo Form - Khi nhả chuột (mouse up): + Nếu tọa độ nhả chuột không nằm tọa độ mảng di chuyển: + Hủy di chuyển (trả tọa độ mouse down) + Cập nhật lại color quân cờ vừa bị công default + Cập nhật lại color quân cờ vừa di chuyển default quân di chuyển cuối + Nếu tọa độ nhả chuột nằm tọa độ mảng di chuyển: + Nhận tọa độ mouse up + Cập nhật lại đồ (điểm mouse down = 0, điểm mouse up = selected) + Nếu tọa độ nhả chuột ăn quân địch: + Đưa giá trị pInit = -1 (hủy tọa độ di chuyển) + Xóa tọa độ đồ (cập nhật = 0) + Đưa quân địch vào danh sách quân chết + Hiển thị quân vừa ăn bàn cờ + Hightlight nước di chuyển cuối (mouse down) theo bên *Thông báo chiếu vua: - Khi mousedown (nhấp) thực tính toán đường di chuyển, mouse up (nhả) xác định quân vua có bị chiếu hay không - Đồng thời nhận biết dấu hiệu từ MouseDown cho biết chiếu - Do mouse up thành công (di chuyển hợp lệ): + Mặc định cho checkmate = false + Thực thực tính ngầm lại lần kiểm tra xem vua có bị chiếu không, có checkmate = true + Nếu nhận dấu hiệu vua bị chiếu, hiển thị thông báo - Ngay sau vua bị chiếu: + Khi click vào quân vua + Nếu quân không ăn quân chiếu + Tạo tường giả với ô == 0, thay giá trị khác giá trị bàn cờ, giả dụ 100 + Thực ngầm định chiếu lại lần quân vừa chiếu vua + Nếu thực chiếu lại thành công, tức tường giả không ngăn chiếu vua + Phá tường giả (update lại đồ, giá trị 100 thay 0) + select = , return mouse down (không chọn quân này) + Nếu thực chiếu không thành công (bức tường giả ngăn chiếu vua) + phá tường giả + Thực cho phép di chuyển quân - Bức tường giả có nhược điểm: Chỉ xác định quân phép đi, chưa xác định giao điểm để tránh chiếu Nói cách khác xác định quân phép chưa thể khống chế quân phải vào nước chặn chiếu - Để xác định ô chặn chiếu, phải xác định mảng di chuyển từ quân chiếu tới vua, sau hủy hết mảng di chuyển quân chặn chiếu, để lại nước chặn chiếu - Nếu làm theo phương pháp không cần xây dựng tường giả, ngõ cụt mà em đâm đầu vào xác định nửa tìm cách xác định quân chặn chiếu trước, sau tìm cách xét điểm chặn chiếu sau *Khống chế nước di chuyển vua (vua vào ô an toàn): - Ở em sử dụng phương pháp kiểm tra ô có bị công hay không phương pháp tạo quân ảo + Xét nước di chuyển vua hủy nước không hợp lệ (bị quân khác chắn, bàn cờ) + Đưa mảng di chuyển hợp lệ vua vào phương thức quân ảo: + Tạo quân ảo: King, Pawn, Knight, Castle, Bishop + Riêng King vẽ đường di chuyển, không tạo qua lớp King + Kiểm tra xem nước di chuyển quân ảo có tìm thấy quân đối phương skill không (VD: Castle tìm thấy quân Castle địch) + Nếu tìm quân đối phương skill => Hủy điểm di chuyển - Phương thức tạo quân ảo có điểm mù: + Nếu bên phải có quân Castle chiếu, nước di chuyển bên phải bị hủy + Nhưng Castle quân ăn theo đường thẳng, điểm di chuyển bên trái phải hủy + Phương pháp tạo quân ảo tìm thấy quân xe bên phải (do bị King chắn) + Do điểm di chuyển bên trái không bị hủy (điểm mù) - Khắc phục: + Lưu lại giá trị King, xóa tọa độ King đồ = + Do điểm bên trái quét quân Castle bên phải (do King = không chặn) + Hủy điểm di chuyển tìm quân skill + Sau hoàn thành, cập nhật lại giá trị King đồ - Phương pháp tạo quân ảo có điểm lợi: Có thể xác định có quân yểm trợ không + Giả sử quân hậu công vua, hậu mã yểm trợ + Do dùng tạo quân ảo điểm quân Hậu nên không tìm quân hậu => King ăn Hậu + Nhưng mà điểm quân hậu giả tưởng gặp quân Mã, lý nước ăn Hậu bị hủy bỏ hay nói cách khác ăn quân có quân hỗ trợ => King tuyệt đối an toàn *Phong cấp cho Pawn - Khi Pawn xuống tới ô cuối cùng, nhận tín hiệu dừng MouseDown - Hiển thị Panel quân phong cấp: Castle, Knight, Bishop, Queen - Do bị tín hiệu stopMouseDown khống chế, làm khác việc phong quân - Nhấn vào quân phong, cập nhật tín hiệu phong cho Pawn + Đổi picture cho Pawn theo quân phong + Nhận tín hiệu phong cấp, xét điểm di chuyển theo quân vừa phong cấp * Nhập thành - Xác định quân chọn có phải vua không? - Kiểm tra xem có quân chặn không? (Nếu tọa độ di chuyển vua tọa độ thời quân (điểm khác đồ)) => Có quân chặn - Nếu đường di chuyển từ vua tới Castle thông thoáng, kiểm tra xem vua di chuyển chưa, quân Castle tham gia nhập thành di chuyển chưa - Nếu chưa kiểm tra xem vua có bị chiếu không? - Nếu không duyệt đường di chuyển phương thức tạo quân ảo để xác định xem điểm di chuyển đường từ vua tới xe có bị quân khống chế không? - Từ xác định có phép nhập thành hay không? *Xác định Hòa: - Nếu bên không nước hợp lệ để hòa - Phải lắng nghe động thái từ King liên tục + Nếu King không nước di chuyển, phải duyệt xem nước di chuyển hợp lệ không *Xác định Thắng - Thua: -Đơn giản: Nếu bàn cờ có quân (King), King bị khống chế tất nước di chuyển King bị chiếu => Win - Nâng cao: Khi King bị chiếu + Kiểm tra xem King có di chuyển không + Kiểm tra xem có quân ăn quân chiếu không + Kiểm tra xem có quân chặn quân chiếu không -Nếu King di chuyển + Không có quân ăn quân chiếu + Không có quân chặn quân chiếu => Thắng - Không cần xác định thua bên thắng tức bên lại thua 3.3: Một số hình ảnh demo - Giao diện Game: - Di chuyển quân cờ (kéo thả) – Khống chế không di chuyển biên - Chỉ nước quân cờ - Kiểm tra tính hợp lệ di chuyển - Hightlight công quân khác - Lưu lại trạng thái di chuyển cuối - Hiển thị quân giết bên - Thông báo chiếu vua - Khống chế nước di chuyển vua (vua vào ô an toàn) - Phong cấp cho Pawn - Nhập thành - Không thể nhập thành bị quân hậu khống chế - Khống chế nước di chuyển quân vua bị chiếu - Không phép di chuyển để bị chiếu - Xác định trạng thái hòa: Khi bên không quân di chuyển vua không bị chiếu - Tốt đen di chuyển => Cờ hòa - Xác định trạng thái thắng