Luyện cờ tướng bằng Excel VBA (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

dohuuthuc

Thành viên thường trực
Tham gia
18/8/08
Bài viết
201
Được thích
524
Trên bàn cờ , em tự đi quân cho 2 bên ví dụ được 42 nước , tới giờ đi làm , tạm ngưng lại , lưu file với tên ván 1.xls chẳng hạn để mai chơi tiếp . ngày hôm sau vào lại từ đầu ván , chỉ cần nhấn 1 nút ,thì tự động tái hiện lại từ nước đi thứ nhất cho đến nước thứ 42.
Vậy nhờ các bạn viết giúp cho đoạn code sẽ tái hiện lại những nước đi như trên.


P/s : Mỗi ván cờ sẽ là những nước đi hoàn toàn khác nhau , thiên biến vạn hoá y như quy luật của cờ tướng.

Sao file chỉ có 32kb gởi lên bị báo lỗi upload erro
 
Mỗi lần đi 1 nước cờ, bạn dùng code ghi nước cờ xuống 1 ô của Excel theo mã quy ước, mã này gồm 3 phần:
1 phần là mã xác định quân cờ
1 phần là mã xác định màu quân cờ
1 phần xác định vị trí trước và sau khi di chuyển

khi muốn replay, đọc lại các ô đã ghi, dịch chuyển quân cờ tương ứng
 
Upvote 0
To Ptm0412 :Em đang tìm cách gởi bàn cờ bằng êxccl lên GPE , qua đó mới hình dung được và nhờ cao thủ viết giùm.
 

File đính kèm

Upvote 0
To Ptm0412 :Em đang tìm cách gởi bàn cờ bằng êxccl lên GPE , qua đó mới hình dung được và nhờ cao thủ viết giùm.
Ôi... bàn cờ... xấu quá... Ít ra cũng phải được như trong file đính kèm dưới đây! (file 1)
Ai có khiếu thẩm mỹ có thể "cắt" từng con cờ ra rồi đưa vào bảng tính
Nói thêm: Muốn nước đi được đẹp mắt và chính xác (đúng vào các điểm nút của bàn cờ) thì nên đặt chế độ Snap To Gird cho Object

Tôi gửi lên bàn cờ đã được "chế tác" giống như 1 bàn cờ thật (file 2)
(Snap to Gird đã được kích hoạt sẵn)
Phần còn lại thuộc về các chuyên gia (tôi tự thấy mình không đủ khả năng)
 

File đính kèm

Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
To ndu96081631 :Cám ơn bác đã hoàn chỉnh dùm bàn cờ và quân cờ . ý tưởng ban đầu của là khi đã thực hiện đuợc yêu cầu trên thì sẽ dùng nó để lưu lại những ván cờ thế từ cổ chí kim, những ván cờ hay của tất cả các danh thủ hàng đầu trên thế giới với mục tiêu sẽ học tập các nước tuyệt chiêu thông qua bấm nút tái hiện ,từng quân cờ sẽ di chuyển từ đầu cho đến cuối của ván cờ ; Với nhã ý rất hay của bác em lại nảy sinh nhu cầu cao hơn qua 4 bước như sau :


  • Bước 1 : Hoàn thiện quân cờ và bàn cờ đến độ sắc nét và đẹp mắt.( sức của em chỉ được như trên _ xin thông cảm )


  • Bước 2 : Tái hiện đuợc những nước đã đi quân cho 2 bên nhằm đạt mục tiêu như trên ( ngôn ngữ lập trình bằng VBA ).


  • Bước 3 : Từ cơ sở bước 2 , phát triển thêm lên 1 bậc , đó là ta chỉ đi quân cho 1 bên , còn bên kia thì EXCEL sẽ tự đáp trả bằng những nước đi đúng và đơn giản ở dạng sơ cấp ,dùng cho người mới biết chơi cờ học tập.


  • Bước 4 : Cao hơn một chút , EXCEL bằng những thuật toán thông minh và sáng tạo sẽ đi đuợc những nước cờ sắc bén dành cho các bạn thuộc trình độ trung cấp và cao cấp . ( lỡ đi sai , vẫn có thể hồi lại nước đó )

Mong các bạn cao thủ ra tay trợ giúp . Trân trọng cám ơn !!!

p/s : Sử dụng bằng software thì em cũng có , nhưng xài đuợc bằng VBA sao cho vừa nhẹ, vừa nhanh ,vừa hay thì có lẽ chỉ có ở “ GIẢI PHÁP EXCEL “ mới tạo đuợc mà thôi.( giống như file lịch của Thầy Thu Nghi chỉ tạo bằng công thức Excel đuợc giới thiệu trên khá nhiều website khác mà em đọc đuợc )

PHP:
' * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * '
:-=

Cám ơn bác ndu96081631 ! quân cờ , bàn cờ được tạo ra rất đẹp , con cờ di chuyển được nằm đúng trên bảng tính excêl ,có toạ độ của hàng , cột ; có vậy mới viết code được , nhưng bác ơi , chữ trên các quân cờ theo như nguyên gốc thì có thể hiện vào code được không và bằng cách nào hay phải phiên dịch tắt cũng được ,ví dụ pháo thì chỉ cần chữ P là đủ ?
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
chữ trên các quân cờ theo như nguyên gốc thì có thể hiện vào code được không và bằng cách nào hay phải phiên dịch tắt cũng được ,ví dụ pháo thì chỉ cần chữ P là đủ ?
Bạn đặt tên lại cho chúng là được:
- click chọn quân cờ
- sửa tên trong namebox (nên có 3 phần: tên quân, màu, số TT)
Số TT phải có vì xe có 2 con, pháo 2 con, chốt 5 con, phải phân biệt được dịch chuyển con chốt nào

Thí dụ XeDo1, XeDo2, XeX1, XeX2, ...

Code dịch chuyển cũng dễ:

[highlight=vb]With ActiveSheet
.shapes("XeDo1").Left= Cells(,3).Left ' Xa 9 bình 8
.shapes("XeDo1").Top= Cells(6,).Top ' Xa 9 tấn 6
.........
End With[/highlight]
 
Upvote 0
Còn rất nhiều việc để làm :

1. Chế bàn cờ, đặt tên các quân cờ, đặt tên các tọa độ

2. Các quân cờ luôn nằm trên giao điểm của các Cell (để đảm bảo tọa độ đúng)

3. Đặt ra luật di chuyển quân cờ (1 UDF chẳng hạn), với quân cờ đó thì khi đang ở tọa độ đó thì chỉ được phép di chuyển đến những tọa độ nào (Tham số : Quân cờ; Vị trí hiện tại --> Vị trí có thể đến)

4. Khi có 1 quân cờ di chuyển
- So sánh vị trí toàn bộ quân cờ trong bộ nhớ với vị trí mới thay đổi để phát hiện ra quân cờ nào mới di chuyển (Vì không có sự kiện Shaps.Move)
- Kiểm tra xem vị trí di chuyển đó có hợp lý hay không (Hàm UDF VITRIMOI = True)
- Nếu vị trí đó có tồn tại 1 quân cờ của TA thì sẽ không thực hiện được
- Nếu vị trí đó có tồn tại 1 quân cờ của ĐỊCH thì sẽ đồng thời với việc nhận vị trí mới thì quân cờ của ĐỊCH phải bị xóa đi (Trên màn hình và trong bộ nhớ)
- Nếu OK tất cả thì ghi lại vị trí mới đó, lấy đó làm vị trí hiện tại của quân cờ
......................................................
.....................................................

Mệt mỏi đấy.

Thân!
 
Upvote 0
Còn rất nhiều việc để làm :

1. Chế bàn cờ, đặt tên các quân cờ, đặt tên các tọa độ

2. Các quân cờ luôn nằm trên giao điểm của các Cell (để đảm bảo tọa độ đúng)

3. Đặt ra luật di chuyển quân cờ (1 UDF chẳng hạn), với quân cờ đó thì khi đang ở tọa độ đó thì chỉ được phép di chuyển đến những tọa độ nào (Tham số : Quân cờ; Vị trí hiện tại --> Vị trí có thể đến)

4. Khi có 1 quân cờ di chuyển
- So sánh vị trí toàn bộ quân cờ trong bộ nhớ với vị trí mới thay đổi để phát hiện ra quân cờ nào mới di chuyển (Vì không có sự kiện Shaps.Move)
- Kiểm tra xem vị trí di chuyển đó có hợp lý hay không (Hàm UDF VITRIMOI = True)
- Nếu vị trí đó có tồn tại 1 quân cờ của TA thì sẽ không thực hiện được
- Nếu vị trí đó có tồn tại 1 quân cờ của ĐỊCH thì sẽ đồng thời với việc nhận vị trí mới thì quân cờ của ĐỊCH phải bị xóa đi (Trên màn hình và trong bộ nhớ)
- Nếu OK tất cả thì ghi lại vị trí mới đó, lấy đó làm vị trí hiện tại của quân cờ
......................................................
.....................................................

Mệt mỏi đấy.

Thân!
2 mục đầu đã làm xong rồi ---> Còn lại thì bạn và các cao thủ làm tiếp vậy!
 
Upvote 0
Theo tôi, B3, B4 theo yêu của Thầy Thực, excel chắc không làm được.
 
Upvote 0
Xin bổ sung

Mr BAB mới nói về nước đi thôi; còn nước bị đi nữa;
Đó là khi tướng bị chiếu thì phải loại trừ ngay bằng mọi giá con tướng của ta bị tấn công.
Nước chiếu bí: Nước mà con tướng bị chiếu mà không thể tránh được cũng như không có quân hầu che đạn giúp hay loại trừ nước chiếu này bằng cách thủ tiêu quân đang chiếu của đối phương!

Tuy nhiên phải gỡ từ từ từng bước 1 mà thôi!
 
Upvote 0
DoHuuThuc đã viết:
Bước 2 : Tái hiện đuợc những nước đã đi quân cho 2 bên nhằm đạt mục tiêu như trên ( ngôn ngữ lập trình bằng VBA ).

Tạm thời tái hiện những ván cờ hay để xem chơi, như file đính kèm
 

File đính kèm

Upvote 0
Thí dụ :các bác xem tạm thí dụ sau
hình kèm theo
 

File đính kèm

Upvote 0
Thí dụ :các bác xem tạm thí dụ sau
hình kèm theo

Bác thân!

Viết Code dĩ nhiên là phải biết cách đi rồi:-=:-=
Cái quan trọng là việc giải thuật như thế nào cho nhanh.
Vì với bằng đó quân cờ với bằng đó tọa độ thì việc để tổng quát hết các trường hợp rất mất thời gian (Mất thời gian chứ không khó để hình dung)
Sau đó mới nghĩ đến việc cô gọn code lại để thành 1 UDF.

Thân!
 
Upvote 0
Phép ra quân khai cuộc điển hình của Bình Phong Mã, các bạn copy và paste vào sheet2!F1 của file trên.

MaXa1|8|3
PhDo1|3|5
TinhXa1|8|5
MaDo1|3|3
MaXa2|8|7
CDo4|5|7
CXa2|6|3
XeDo1|1|2
XeXa1|10|2
MaDo2|3|7
PhXa2|6|8
XeDo1|5|2
MaXa1|6|2

Các bạn thích thì viết tiếp xuống dưới, name động sẽ tự cập nhật.
 
Upvote 0
Phép ra quân khai cuộc điển hình của Bình Phong Mã, các bạn copy và paste vào sheet2!F1 của file trên.

MaXa1|8|3
PhDo1|3|5
TinhXa1|8|5
MaDo1|3|3
MaXa2|8|7
CDo4|5|7
CXa2|6|3
XeDo1|1|2
XeXa1|10|2
MaDo2|3|7
PhXa2|6|8
XeDo1|5|2
MaXa1|6|2
Các bạn thích thì viết tiếp xuống dưới, name động sẽ tự cập nhật.
Vậy là đánh cờ ở đây là đáng bằng miệng hay gõ, thấy hơi khác là click chuột nhỉ!
Trước mắt nhờ Bác viết hộ code như sau:
- Chốt không đi ngược.
- Tướng, Sĩ, Tượng không được đi ra vùng cấm.
Em thua món này. Vừa rồi tính thi Kỳ Vương cấp nhà ($ tổ dân phố) mà không được.
 
Upvote 0
Cái này chỉ là xem lại những cuộc cờ hay, sưu tầm được thôi. Hoặc là những bài cờ khai cuộc, trung cuộc, tàn cuộc, cờ thế, ... sưu tầm, gõ lại vào đây để lâu lâu xem lại.
Chưa có code tính nước đi, hay code ràng buộc gì cả. VBA hạng ruồi của lão giả chết tiệt Ptm chỉ tới đó thôi.
 
Upvote 0
Em rất cám ơn là các bác đã quan tâm và đưa ra nhiều ý kiến xác đáng .Không phải là em nêu cách đi quân , mà em muốn minh hoạ ví dụ trên với mục đích sau khi có code rồi ( chuyện tái hiện đối với các bác thì không khó ) thì em sẽ có yêu cầu tiếp trong bước 2 , đó là khi đi các quân cờ đến đâu thì bên dưới sẽ là biên bản tự động xuất hiện dựa trên nút bấm tới lui trên excel vì chẳng những dùng để lưu các ván cờ thế , các ván cờ hay mà còn sử dụng làm trọng tài ghi biên bản giao đấu giữa 2 đấu thủ _ phần này em sẽ nói sau khi mà sau này theo gợi ý của bác BNTT là sẽ thư giãn 1,2 ván cờ trong chính GPE.


P/s ; thật ra khi đưa đề tài lên em cũng không dám vọng tưởng là đạt đuọc B3,B4 , nên chỉ mong tới bước 2 hoàn chỉnh là mừng rồi .( chỉ khi nào đã đủ diều kiện và thời gian thì mới tính tiếp )
 
Upvote 0
Nếu chỉ cần "tái hiện" thì tôi đang nghĩ đến hướng:
- Mình "nhập" cách đi quân (dạng text) vào 2 cột ---> Xanh 1 cột, đỏ 1 cột, từ trên xuống
- Dùng vòng lập quét 2 cột này ---> Code phải "dịch" từ text nhập sang thành nước đi
Tiếp theo:
- Ta đi quân ---> Text tự động được nhập vào 2 cột nói trên
Vậy mấu chốt vấn đề là:
- Phải "nhập liệu" như thế nào đó theo quy định để code có thể "nhận dạng" và "dịch ra" được nước đi
Từ đó suy ra với yêu cầu của tác giả thì ta cũng chẳng cần phải tạo ra các quy định cho các quân cờ mà chỉ cần làm sao cho nó "hiểu được" ta đang "đi quân" như thế nào (nhằm tái hiện lại sau đó)
Không biết tôi nói thế có đúng ý tác giả không nhỉ?
 
Upvote 0
Đã hoàn chỉnh file cờ tướng, 2 bước thôi, đạt yêu cầu bài #1.
Hướng dẫn sử dụng trước khi dùng:

- Nhấn Reset trước khi chơi để sắp cờ lại.
- Chơi cờ (bằng chuột)
- khi ăn quân, nhớ lôi quân cờ ăn được ra ngoài
- Ghi lại mỗi nước đi (nhấn Ctrl + T, kể cả động tác ăn quân), không muốn ghi thì thôi.
- Lưu lại cuộc cờ (nhấn Save Game), nếu chưa lưu mỗi nước đi thì đừng làm bước này.
- chơi lại cuộc cờ đã lưu, hông lưu hông chơi lại được (chọn cuộc cờ bằng combobox, nhấn Play)
- xoá cuộc cờ bất kỳ đã lưu (chọn cuộc cờ bằng combobox, nhấn Delete Game)

Xin ý kiến quý vị!
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Gởi đến bác NDU... :bác định ra hướng đó coi như gần hoàn thành được ý của em 80% .Vẫn là bàn cờ của bác cho , em đã chèn xuống 1 dòng và gõ các con số từ 1 đến 9 ngược dòng cho cả 2 bên chính là làm gọn lại vị trí các quân , dù xe đang ở bất kỳ vị trí nào trái hay phải ,trên hay dưới...cũng đều xác định được ngay , không cần phải xe 1 hay là xe 2 và đi dến vị tí nào cũng đều có toạ độ chính xác ; từ đó việc hình thành doạn code sẽ dễ rất nhiều.
Cái này hơi liên quan đến bước thứ 3 đó là thay vì bên em đi quân ,thì bác ở bên kia sẽ click chuột và đi cờ theo ý bác ( không phải do excell đi cờ ), em đi 1 nước , bên dưới sẽ xuất hiện nước đi củe em, khi bác vừa dịch chuyển là nước của bác củng xuất hiện ngay ở kế bên ( biên bản ) , tạo test như bác gợi ý thì sẽ khó khăn cho các bác rất nhiều.
Qua phần này , bác co lại bàn cờ, quân cờ cho nhỏ lại để 2 bên không phải cuộn màn hình. Bên trên các bác tạo dùm em 4 nút bấm :1nút lui đôi ( <<) để quay về đầu ván , 1 nút lui đơn ( < ) quay về 1 nước trước đó , tương tư tạo nút tới .
Ben cạnh trái ( hay phải của màn hình ) tạo hộp đựng 32 quân cờ , lúc này bàn cờ sẽ trống , mục đích là khi ta muốn xếp bàn cờ thế thì chỉ click vào lôi đi vào trong bàn cờ đặt vào vị trí ta muốn hoặc khi ta ăn quân thì tự động quâ của dối phương sẽ tự bay ra ngoai hộp.


P/s : từ từ thôi các bác , không có gì gấp hết , em biết là các bác cũng bận lắm !!
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom