1 111Equation Chapter 1 Section 1 TRƯỜNG ĐẠI HỌC ĐIỆN LỰC KHOA ĐIỆN TỬ VIỄN THÔNG BÁO CÁO CHUYÊN ĐỀ ĐỒ HỌA MÁY TÍNH XÂY DỰNG CHƯƠNG TRÌNH GAME CỜ CARO Sinh viên thực hiện Vũ Quang Đông Hoàng Văn Bắc V[.]
-1- 111Equation Chapter Section TRƯỜNG ĐẠI HỌC ĐIỆN LỰC KHOA ĐIỆN TỬ - VIỄN THÔNG BÁO CÁO CHUYÊN ĐỀ ĐỒ HỌA MÁY TÍNH XÂY DỰNG CHƯƠNG TRÌNH GAME CỜ CARO Sinh viên thực : Vũ Quang Đông : Hoàng Văn Bắc : Vũ Huy Hiệu Lớp : D14CNPM3 Mã SV : 19810310176 : 19810310160 : 19810310143 Giảng viên hướng dẫn : GS Ngô Quốc Tạo HÀ NỘI – 27/03/2022 h -2- PHIẾU CHẤM ĐIỂM STT Họ tên sinh viên Hoàng Văn Bắc Vũ Quang Đông Vũ Huy Hiệu Họ tên giảng viên Nội dung thực Chữ ký Giảng viên chấm 1: Giảng viên chấm 2: h Điểm Ghi Chữ ký -3- MỤC LỤC MỞ ĐẦU Đặt vấn đề Mục tiêu nghiên cứu đề tài .4 Nhiệm vụ đề tài 4 Kết đạt đề tài Bố cục đề tài CHƯƠNG 1: TÌM HIỂU VỀ CÁC THUỘC TÍNH, PHƯƠNG THỨC, SỰ KIỆN TRONG C# WINFORM 1.1 Thuộc tính đối tượng 1.2 Phương thức đối tượng .7 1.3 Các kiện đối tượng Chương 2: GIỚI THIỆU VỀ ĐỒ HỌA TRONG C# 10 2.1 Các đối tượng đồ họa sở .10 2.1.1 Hệ tọa độ thực hệ tọa độ thiết bị 10 2.1.2 Điểm – Pixel .10 2.1.3 Hình học đồ họa máy tính 11 2.1.4 Đối tượng Graphics c# 12 2.2 Sự kiện Paint vấn đề repaint cho chương trình 13 2.2.1 Sự kiện Paint .13 2.2.2 Vấn đề repaint cho chương trình .14 CHƯƠNG 3: THIẾT KẾ CHƯƠNG TRÌNH GAME CARO 15 3.1 Mơ tả chương trình 15 3.2 Thực chương trình 15 3.3 Phân tích chương trình 17 3.3.1 Lớp Oco.cs .18 3.3.2 Lớp BanCo.cs 18 3.3.3 Lớp MannagerChessboad.cs .19 3.3.4 Lớp Form1.cs 21 3.4 Giao diện chương trình 22 3.4.1 Giao diện trạng thái bắt đầu 22 3.4.2 Giao diện người chơi đánh cờ 22 3.4.3 Giao diện kết thúc trò chơi .23 KẾT LUẬN .25 TÀI LIỆU THAM KHẢO 26 h -4- MỞ ĐẦU Đặt vấn đề Game caro trò chơi quen thuộc nhiều đối tượng, đặc biệt bạn học sinh, sinh viên hẳn khơng cịn xa lạ với trị chơi Trị chơi mang tính trí tuệ cao, bổ ích cho việc rèn luyện tư duy, đơn giản giải trí, thư giãn để bớt căng thẳng sau tiết học mệt mỏi Bản thân nhóm em yêu thích trị chơi này, chọn đề tài nghiên cứu “Xây dựng chương trình game caro” nhóm em thấy thân học hỏi nhiều kiến thức bổ ích Như biết cách áp dụng ngơn ngữ c# để tạo chương trình, sử dụng kiến thức đồ họa để thiết kế giao diện, sử dụng thuật tốn để xử lí việc thắng thua game, bước chân vào để nghiên cứu lĩnh vực ưa chuộng trí tuệ nhân tạo hay cịn gọi tắt AI cho máy Những lợi ích lí để nhóm em chọn đề tài Mục tiêu nghiên cứu đề tài - Mục tiêu nghiên cứu đề tài để rèn luyện lại kiến thức học kiến thức đồ họa máy tính, ngơn ngữ lập trình hướng đối tượng C# - Áp dụng học để tạo chương trình, ứng dụng thực tế cụ thể Game Caro Nhiệm vụ đề tài - Thiết kế giao diện chương trình - Xác định cách thức chơi (1 người chơi với máy, người chơi với nhau…) - Xây dựng thuật tốn tính điểm cho hình thức chơi - Xây dựng thuật tốn xác định trường Game over Kết đạt đề tài Sau trình nghiên cứu, thực đề tài nhóm em xây dựng giao diện chương trình, xác định cách thức chơi cho hai người chơi với nhau, xử lí, xét trường hợp thắng thua, thêm chức undo, redo cho chương trình Bên cạnh yêu cầu đạt cịn số vấn đề nhóm em cịn gặp phải khó khăn nghiên cứu đề tài, xây dựng cách thức chơi người chơi với máy, lĩnh vực trí tuệ nhân tạo cho máy Bố cục đề tài Đề tài gồm chương sau: Chương 1: TÌM HIỂU VỀ CÁC THUỘC TÍNH, PHƯƠNG THỨC, SỰ KIỆN TRONG C# WINFORM Chương 2: GIỚI THIỆU VỀ ĐỒ HỌA TRONG C# h -5- Chương 3: THIẾT KẾ CHƯƠNG TRÌNH GAME CARO h -6- CHƯƠNG 1: TÌM HIỂU VỀ CÁC THUỘC TÍNH, PHƯƠNG THỨC, SỰ KIỆN TRONG C# WINFORM 1.1 Thuộc tính đối tượng Ở ngồi thực tế, thuộc tính đặc điểm vật Ví dụ: chân: dài, dáng: cao, da: trắng Anh mũi: thấp, tóc: ngắn v v Đối với Console App, thuộc tính biến kiểu private, nằm một Class và hay dùng phương thức get - set để lấy giá trị cho nó. Cịn lập trình Winform C# thuộc tính đặc điểm - tính bên ngồi bên đối tượng (Form, Control, Container ) Trong bảng 1.1 thuộc tính giống nhau của Control C# Bảng 1.1 : Các thuộc tính thường dùng winform c# Thuộc tính Chức (Name) Tên đại diện cho control Nó tên biến Rất quan trọng Achor Cố định control thay đổi kích thước form BackColor Màu nên control BackgroundImage Hình control contextMenuStrip Menu ấn chuột phải lên control Cursor Hình chuột rê lên control Dock Gần giống với Anchor chiếm toàn phần đặt Vd chọn Dock bottom tồn phần form khơng đặt phần tử khác Enabled Có cho phép sử dụng hay khơng Font Chứa thuộc tính màu,cỡ,kiểu chữ mơ tả(hoặc nội dung,giá trị) control Location Vị trí control form Tag Nội dung đánh dấu control Nó giúp control có hai giá trị miêu tả control Hoặc giá trị Text Nội dung miêu tả control Hoặc giá trị TextAlign Căn lề nội chữ miêu tả control Visible Hiển thị lên form hay khơng - Chúng ta thay đổi thuộc tính khung Properties trong lúc thiết kế Form, thay đổi thuộc tính code h -7- 1.2 Phương thức đối tượng Trong lập trình Console ta hay gọi phương thức là "hàm" Nhưng lập trình C# hướng đối tượng hàm đặt class gọi là “phương thức”. Mỗi class dù class thường Form, hay Control khác có phương thức riêng cho Chúng ta gọi (call) đến phương thức nó, giống lệnh cho phải làm hành động Cũng giơng cịn nhỏ có phương thức Học(), Ăn(), QuétNhà(), Bảng 1.2: Các phương thức thường dùng winform c# Phương thức Chức Active Khởi động form Và focus vào BringToFront Đưa control ngồi cùng, phía theo trục Z CenterToParent Căn chỉnh control nằm khung viền form cha CenterToScree Căn chỉnh control nằm hình Close Đóng form lại Dispose Giải phóng tài nguyên sử dụng component Focus Tập trung vào form Giống Alt – Tab để chọn Form Hide Ẩn control khỏi người dùng OnActive Khởi động kiện Activated (Thực hành động sau Form Active) OnClick Khởi động kiện Click (Thực sau control Click) Refresh Làm lại Form/Control, vơ hiệu hóa client vẽ lại control Show() Hiển thị Control hình ShowDialog() Hiển thị Form Dialog ToString() Hiển thị chuỗi tương ứng cho nội dung 1.3 Các kiện đối tượng - Để hiểu rõ kiện đối tượng ta tìm hiểu trả lời câu hỏi chủ chốt sau: Sự kiện gì? Ta tưởng tượng nhảy, kiện ghi nhận hành động nhảy Con chim hót kiện chim hót Vậy winform C# theo nghĩa đen nó, kiện hành động vừa xảy Ví dụ người dùng ấn vào nút đó, kiện Click, ấn phím kiên KeyPress Làm máy tính nhận biết kiện? h -8- Nếu đời nhìn mắt, nghe tai biết kiện hành động diễn C# hỗ trợ cho một bộ lắng nghe kiện EventHandler Chúng ta hiểu đơn giản dựa chế ngắt vi xử lý gửi nhận tín hiệu trả phương thức cho ta Nếu tìm hiểu sâu ta đụng tới Delegate Bảng 1.3: Các kiện thường dùng Sự kiện Điều kiện xảy Click Ẩn vào control DoubleClick Nháy kép vào control KepDown Bắt đầu ấn phím KeyUp Đã ấn phím xong KeyPress Trong ấn phím MouseDown Ấn chuột MouseUp Thả chuột MouseHover Rê chuột qua control MouseLeave Rê chuột khỏi control Vậy cần kiện để làm gì? Các bạn tưởng tượng kiện một câu lệnh điều kiện if, nếu xảy kiện - ta xử lý để làm việc Ví dụ Click chuột vào button đăng nhập game, xử lý kiểm tra tài khoản mật khẩu, xuất thông báo đăng nhập thành cơng chẳng hạn Cứ lấy ví dụ game cho dễ hình dung Sự kiện khởi chạy nào? - Người dùng khởi chạy event cách tương tác với chương trình bạn Ví dụ: Việc nhấp button khởi chạy event Click button - Các control tự khởi chạy event riêng Ví dụ: control Timer kích hoạt event Tick vào khoảng thời gian đặn - Hệ điều hành (bất kỳ phiên Windows) khởi chạy event Bạn khởi chạy event cách gọi chúng giống gọi phương thức Làm cách để thêm kiện cho Form control? Chúng ta thêm kiện code, hoặc click đúp vào control muốn thêm để thêm kiện thường dùng nó, hoặc đúp chuột vào tên kiện cần thêm khung kiện ô Properties thiết kế form Khi Visual Studio tự động generate code cho kiện vào .Designer.cs và gọi hàm vào class để bạn thiết lập xử lý kiện h -9- Hình 1.1: Thêm kiện khung properties h - 10 - Chương 2: GIỚI THIỆU VỀ ĐỒ HỌA TRONG C# 2.1 Các đối tượng đồ họa sở 2.1.1 Hệ tọa độ thực hệ tọa độ thiết bị - Hệ tọa độ giới thực: + Mô tả đối tượng giới thực + Thường sử dụng hệ tọa độ Descartes Hình 2.1: Hệ tọa độ thực - Hệ tọa độ thiết bị: + Dùng thiết bị xuất máy in, hình… + Tọa độ nguyện giới hạn khoảng Hình 2.2: Hệ tọa độ thiết bị 2.1.2 Điểm – Pixel - Là thành phần sở định nghĩa hệ tọa độ - Thông tin: + (x,y) hệ tọa độ chiều gọi điểm + (x,y,z) hệ tọa độ chiều(Hay hệ tọa độ thiết bị) gọi Pixel h - 12 - - Bình thường đường thẳng vẽ thẳng nhìn vào mắt thường Nhưng đánh lừa thị giác Khi phóng to hình ảnh lên thấy điểm pixel đường thẳng vẽ có sữ chênh lệnh nhau,và tạo thành hình cưa.(xem hình 2.6) Hình 2.6: Đường thẳng có hình cưa phóng to * Hình trịn - Thơng tin gồm có: Tọa độ tâm bán kính - Thuộc tính: + Màu sắc + Kiểu nét vẽ + Độ rộng nét vẽ - Có loại đường trịn là: Đường trịn có tâm năm gốc tọa độ nằm ngồi gốc tọa độ Hình 2.7: đường trịn tâm O(0,0) Hình 2.8: Đường trịn tâm C(xc,yc) 2.1.4 Đối tượng Graphics c# - Khái quát: Khi muốn vẽ hình dùng đến đối tượng Graphics, đối tượng Graphics cọ phết lên Frame, Canvas hay Applet h - 13 - - Muốn vẽ hình thường phải cài đặt phương thức: Public void paint(Graphics grp){} - Phương thức : Repaint() dùng để vẽ lại hình ảnh(thực chất repaint() gọi đến phương thức update(),update() gọi đến Paint()) - Nếu muốn vẽ lại phần ta sử dụng phương thức repaint(int x,int y ,int width,int higth) - Trong lớp Graphics gồm có: Vẽ hình học, vẽ chữ, vẽ ảnh, chế độ vẽ, Lớp color, vùng cắt, lớp tiện ích khác Ví dụ: Vẽ đường thẳng Drawline(int x1,int y1,int x2,int y2) Y(y1,y2) X(x1,x2) Ví dụ: Vẽ Đường tròn: Ta dùng phương thức sau: drawOval(int x,int y,int width,int height) - Cịn để vừa vẽ vừa tơ màu ta dùng phương thức sau : fillOval(int x,int y,int width,int height) Hình 2.9: Minh họa phương thức vẽ hình trịn, elip 2.2 Sự kiện Paint vấn đề repaint cho chương trình - Tại lại phải nghiên cứu vấn đề này, chương trình game caro có thứ cần sử dụng kiện paint xử lí vấn đề repaint cho chương trình, giao diện tương tác khơng bị gặp lỗi Vậy kiện paint xử lí vấn đề repain nghiên cứu sau 2.2.1 Sự kiện Paint Sự kiện paint giống bao kiện khác có lắng nghe kiện phương thức để sử lí kiện dĩ nhiên cần phải có đối tượng tượng nhận kiện Đối tượng nhận kiện form chương trình h - 14 - Hình 2.10: Sự kiện paint - Vậy kiện paint dùng để làm gì? Sự kiện dùng để giải vấn đề repaint chương trình hiểu đơn giản chức làm cho thứ ta vẽ lên chương trình không bị biến lần form không Focus(form không ý) - Để hiểu rõ vấn để repaint việc sử dụng kiệ paint để khác phục ta tiếp tục tìm hiểu phần 2.2.2 Vấn đề repaint cho chương trình - Các hình vẽ bị giao diện bị “khuất”: Khi có giao diện chương trình khác đè lên bấm minimize từ cửa sổ chương trình hình vẽ bị biến - Chương trình không ghi nhớ đối tượng vẽ lên hình : Những phiên GDI lưu lại hình vẽ phiên GDI+ sau loại bỏ việc ghi nhớ lại hình vẽ phải dùng thuật toán phức tạp giải vấn đề tràn nhớ - Vì nên ta phải vẽ lại chương trình bị “khuất” bắng kiện paint, kiện paint chạy lại form Focus lại nên hiệu ứng ảnh bình thường khơng bị đi.Việc giúp bàn cờ quân cờ vẽ lên chương trình khơng bị giúp việc chơi cờ thuận lợi h - 15 - CHƯƠNG 3: THIẾT KẾ CHƯƠNG TRÌNH GAME CARO 3.1 Mơ tả chương trình - Trị chơi đối kháng (two-agent,conflicting game): Gồm người chơi,đối thủ tìm cách dành chiến thắng trước đối thủ số hữu hạn nước đo,mỗi nước tạo dựa từ trạng thái trận đấu Nếu sau số hữu hạn nước đi, chưa dành chiến thắng xem hịa Ngồi ra, thơng tin trận đấu hồn tồn biết (perfect information) đối thủ - Cờ caro (hay gọi Gomoku) loại trị chơi đối kháng, đối thủ lượt chọn trống cịn lại bàn cờ (kẻ sẵn lưới) cho tạo thành n liên tiếp để chiến thắng… Nếu n = có tên khác “Tic Tac Toe”, bổ sung thêm luật cho đổi tên Penta, Pentix (có ăn qn)… Ngồi ra, có luật thi đấu mà người chứng minh người chơi trước bào có thuật tốn để thắng, để hạn chế thuận lợi người trước, người ta đặt luật sau (Luật sử dụng cho trình phát triển chương trình ): + Bàn cờ có kích thước tùy ý N x M, chọn N = 21, M = 24; + Nếu tồn liên tiếp tren hàng thắng (chéo, ngang, dọc) (Luật gắt sau: Đúng không bị chặn hai đầu, em áp dụng chương trình này) + Nếu hết chỗ bên hịa 3.2 Thực chương trình Chương trình có form frmCocaro chứa tất giao diện chương trình Hình 3.1 giao diện hình chính, bàn cờ Hai người chơi chơi với hình h - 16 - Hình 3.1: Giao diện chương trình Chương trình có thêm chức undo redo nằm menu tool Edit ( xem hình 3.2): Hình 3.2: Chức Undo, Redo Undo: Chức cho phép người chơi đánh lại quân cờ vừa đánh, bị đánh nhầm h - 17 - Redo: Chức hoàn toàn ngược lại với Redo, Cho phép người chơi đánh lại nước đánh trước bị Undo Ngồi cịn có số Menu tool bổ trợ cho chương trình như: - Flie: chứa Item như: + New: Bên có mục nhỏ cho người dùng chọn chế độ chơi, Player vs player chế độ người chơi chơi với nhau, player vs computer chế độ dành cho người chơi với máy (xem hình 3.3) Hình 3.3: Menu Tool File + Exit: Thốt chương trình - Help: Chưá item như: + About: thơng tin chương trình + Tutorial: Hướng dẫn chơi trị chơi 3.3 Phân tích chương trình - Thơng tin bàn cờ ô cờ lưu vào mảng chiều kích thước 21 x 24, phần tử mảng tương ứng với ô cờ bàn cờ - Mỗi cờ có trạng tháng (chưa đi), ( người thứ đi) ( người thứ đi) Ban đầu tất cờ đề có trạng thái 0, sau nước thay đổi trạng thái thành tùy theo người nước cờ - Sau nước chương trình kiểm tra điều kiện tiếp tục trò chơi: Trò chơi tiếp tục cịn nước chưa có người thắng (Nếu có nghĩa người hịa nhau) - Điều kiện thắng có nước liên tiếp hàng ngang (hoặc hàng dọc ,hoặc hàng chéo) - Chương trình gồm có lớp để thuận tiện cho việc viết code nhanh hơn, gọn gàng, rõ ràng dễ hiểu class: + Oco.cs + BanCo.cs + Mannager + Chessboad.cs + Form1.cs - Sau nhóm em phân tích rõ chức class h - 18 - 3.3.1 Lớp Oco.cs - Lớp Oco lớp nhỏ nên nhóm em xin trình bày Trong lớp Oco có thuộc tính như: + _Chieurong: Chiều rộng cờ + _ChieuCao: Chiều cao cờ + _SoHuu: Ơ cờ thuộc quyền sở hữu người chơi nào, mặc định khởi tạo mảng cờ sở hữu ô cô mặc đinh nghĩa chưa có sử hữu + _Vitri: Ơ cờ vị trí bàn cờ, thuộc tính khai báo kiểu liệu Point Để xác đinh vị trí cờ xét xử lí cờ theo mục đích + _Dong, _Cot: thuộc tính dùng để định vị cờ dịng nào, cột để gọi tới phần tử ô cờ tạo mảng ô cờ - Các thuộc tính em đặt tên có dấu “_” đàng trước nhằm mục đích phân biệt biến để đóng gói thuộc tính, cơng cụ Visual studio tạo phương thức get, set tự loại bỏ dấu‘_’ trông gọn gàng rành mạch - Ngoài lớp cịn có phương thức khởi tạo mặc định phương thức khởi tạo có truyền tham số, nhằm thiết lập động giá trị thuộc tính gọi phương thức khác public Oco() {} public Oco(int dong,int cot,Point vitri,int sohuu) { _Dong = dong; _Cot = cot; _Vitri = vitri; _Sohuu = sohuu; } 3.3.2 Lớp BanCo.cs - Trong lớp BanCo có thuộc tính phương thức sau: + Thuộc tính _Dong _Cot Chỉ số dòng cột bàn cờ Được khởi tạo với hàm khởi tạo _Dong = 0, _Cot = truyền vào giá trị tùy ý qua hàm khơi tạo mặc định có tham số public BanCo(int SoDong,int SoCot) { _Dong = SoDong; _Cot = SoCot; } h - 19 - - Gồm có phương thức sau: + public void VeBanCo(Graphics g) Phương thức có chức quan trọng để vẽ bàn cờ cho đánh Ở phương thức ta sử dụng đối tượng Graphics với phương thức kèm Drawline để vẽ đường kẻ sọc đường kẻ ngang theo tham số mà ta truyền vào Đối tượng Graphics khởi tạo gán cho panelBanCo để quản lí vẽ lên panel + public void VeQuanCo(Graphics gr,Point point,SolidBrush sb) Phương thức có chức vẽ quân cờ đánh,dùng đối tượng SolidBrush gọi tới phương thức FillEllipse để vừa vẽ vừa tô màu đối tượng hình trịn,hay cụ thể màu viên cờ Ở chương trình em sử dụng cọ màu đen màu trắng sbwhite sbblack + public void XoaQuanCo(Graphics gr,SolidBrush sb,Point VitriXoa) Hàm có tác dụng xóa qn cờ, mục đích để hỗ trợ cho chức Undo,theo ta nhìn thấy bấm undo quân cờ bị xóa khỏi bàn cờ, thực chất chế hoạt động hàm có phải nhìn thấy khơng? Hồn tồn không, thực chất hàm vẽ thêm xóa đi, màu mà vẽ lên lại màu bàn cờ, nên nhìn mắt khơng cịn nhìn thấy qn cờ vừa đánh Kết hợp theo việc phủ màu lên qn cờ mà xóa, thêm vào gán lại quyền sở hữu 0(tức chưa bị người chơi chiếm hữu) loại khỏi mảng quân cờ đánh Vậy có hàm xóa quân cờ theo nghĩa 3.3.3 Lớp MannagerChessboad.cs - Đây lớp bao hàm lại lớp Oco BanCo Các phương thức, thuộc tính lớp sử dụng lại lớp Đồng thời lớp có thêm nhiều phương thức khác quan trọng để hồn thành đủ chức năng, liệu để xử lí chương trình - Trong lớp MannagerChessboad có số thuộc tính quan trọng cần nói đến thuộc tính sau : + Biến _Sansang biến có kiểu giá kiểu bool Mục đích tạo biến nhằm báo hiệu cho chương trình biết người chơi kích chọn nút Player hay chưa, tức người chơi chọn chế độ chơi cho phép bắt đầu đánh quân cờ lên ô cờ + Tiếp đến Stack _CacNuocDaDi _CacNuocDaUndo biến có chức lưu lại nước đi.và nước bị đánh lại Cách sử dụng stack giống kiểu liệu List để lấy phần tử stack thường ta đưa vào vòng lặp foreach Nhưng điểm hay stack chế hoạt động theo kiểu h - 20 - vào sau trước Nên cần lấy quân cờ cuối khơng có tuyệt vời sử dụng stack chẳng hạn sử dụng tính Undo Thì phải Undo quân cờ vừa đánh, lấy qn cờ để xử lí + Phương thức KhoiTaoOco() : Phương thức nhằm tạo mảng cờ có thuộc tính khởi tạo thuộc tính cờ, cờ mà thấy xuất hình chưa khởi tạo dùng để thị chưa có giá trị hay thuộc tính đối tương cờ Phương thức khởi tạo cách dùng vòng lặp for lòng với số i chạy theo số dòng bàn cờ số j chạy theo số cột bàn cờ Cụ thể sau : for (int i = 0; i < _BanCo.Dong;i++ ) { for (int j = 0; j < _BanCo.Cot;j++ ) { MangOco [ i, j ] = new Oco(i, j, new Point(j * Oco._Chieurong, i * Oco._ChieuCao), 0); } } + Phương thức DanhCo(): Phương thức phương thức quan trọng nhất, khơng có phương thức có lẽ khơng cịn gọi trị chơi nữa, mà chương trình hiển thị giao diện bàn cờ mà Bản chất việc đánh cờ thực chất việc xác định quân cờ mà người chơi trỏ chuột vào vị trí nào, sau kiểm tra xem cờ thuộc lượt nào.nếu lượt thứ tơ màu đen,nếu lượt thứ tơ màu trắng, Mỗi lần chương trình gọi đến phương thức đánh cờ ta phải gán lại giá trị cho biến lượt đi, giá trị khác để thực việc đổi lượt đánh Demo Phương thức: Switch (_LuotDi) { case 1: MangOco[dong, cot].Sohuu = 1; _BanCo.VeQuanCo(gr, MangOco[dong, cot].Vitri,sbblack); _LuotDi = 2; break; case 2: MangOco[dong, cot].Sohuu = 2; _BanCo.VeQuanCo(gr, MangOco[dong, cot].Vitri,sbwhite); _LuotDi = 1; h