b đang là sv hay là gì mà đã làm như thế này rồi
Game cờ caro 3x3 sau 4 ngày học C++, xin góp ý chỉnh sửa
@Nguyen_Dinh_Nam @quanghien95 Mình chưa học đến Array , mảng 2 chiều các bạn ơi, Mới học loop và tạo function, include header file thôi à. Khi nào học đến thì mình edit lại code nhé.
@chanhbc Mình lớp 10 (post xưng hô bằng “em” mà), mới học C++ thôi, chưa phải sinh viên đại học đâu.
lại giỏi trước tuổi rồi
Mới lớp 10 học 4 ngày như thế là giỏi rồi, tích cực luyện c++ vào đại học thi acm là vừa. hoặc học pascal để thi olympic phổ thông
Nhận xét
Nếu bạn ms học đc c++ 4 ngày (mà trc đó chưa học lập trình hoặc lâp trình nhiều) thì thế này là rất tốt rồi.
Một vài gợi ý
Mình sẽ đưa ra 1 vài gợi ý cho bạn để hoàn thiện trò chơi (mình sẽ tổng hợp lại cả 1 số ý kiến ở trên):
- Sử dụng mảng 2 chiều để lưu trạng thái các ô thay vì dùng các a, b, c, d,… Việc này giúp cho bạn khai báo ngắn gọn, có thể mở rộng bàn cờ tuỳ ý, thuận lợi cho việc kiểm tra và xử lí với các ô.
- Vì mỗi ô cờ giống nhau nên bạn ko cần phải cout nhiều lần để vẽ hết cả bàn cờ. Hãy dùng vòng lặp và thử in ra bàn cờ MxN với M, N là 2 số nhập vào. Thử xem
- Khi sử dụng mảng 2 chiều thì theo mình có 2 cách để bạn cho người chơi nhập vị trí:
- cho họ nhập 2 chỉ số i, j là vị trí hàng và vị trí cột (như trong toán thì kiểu đây là toạ độ ý). Với cách này bạn nên vẽ thêm 2 cột ở rìa bàn cờ điền các số để ng chơi nhìn dễ dàng dóng xuống và biết đc chỉ số của ô muốn chọn.
- cách 2 (Khó hơn) là cho họ sử dụng các phím mũi tên để di chuyển cái nhấp nháy ý, khi cái nhấp nháy đến ô nào và họ chọn (bấm Space chẳng hạn) thì ô đó đc điền. Cách này giúp ng chơi dễ hơn nhưng mình lại bị khó hơn
- Ở phần xét thắng thua của bạn, ở đây là bàn cờ 3x3 nên mới có 16 TH thắng xảy ra nên bạn có thể tự code chay đc chứ nếu bàn cờ 10x10 thì bạn làm thế nào. 1 phép tính đơn giản để tính số TH (mình tự nghĩ): 4(n-c+1)(m-c+1) + (c-1)(n+m-2c+2) trong đó m, n là kích thước bàn cờ, c là số xo liên tiếp cần để thắng. Nếu là mxn = 10x10, c = 5 thì số TH = 4(10-5+1)(10-5+1) + (5-1)(10+10-2.5+2) = 192(đây mới là TH thắng của 1 ng, 2 ng sẽ là 384) Bạn code đc hết chứ?
Giờ ta đã có mảng 2 chiều, bạn có thể dùng vòng lặp để duyệt từng ô, hãy nghĩ ở mỗi ô bạn xét cái gì để biết có ai thắng ko?
Đó đây là 1 số gợi ý nhỏ (thực ra ko nhỏ lắm), hãy thử thách mình xem làm đc ko nhé. Cứ tiếp tục học theo cách này đi, vừa làm các trò chơi vừa học rất hữu ích!
bị bí chỗ nào bạn cứ hỏi mình và mọi ng sẽ trả lời
@Maskma Cảm ơn bạn nhiều, mình chưa học mảng 2 chiều nên chưa hiểu lắm về cái này. Để mình tìm hiểu thêm rồi edit lại code. Sau này làm GUI với tạo đối thủ AI là xong ứng dụng
trc tiên cứ học mảng 2 chiều xong áp dụng đc là ngon rồi. GUI với AI cứ để sau vì 2 cái đấy phải học thêm nhiều thứ -> dễ nản đấy
Bước chậm mà chắc còn hơn. Trc mình cũng ms làm đc tí đã muốn GUI đẹp, xong “tự nghĩ” thuật toán AI xong ~~> fail
@Maskma
Cho mình hỏi bạn có cách tư duy nào để nghĩ ra công thức tính số trường hợp thắng cờ này
Bạn lý giải công thức được không vì mình không hiểu lắm, theo mình nghĩ (n-c+1)(m-c+1) là số khả năng theo 2 chiều dọc và ngang, vậy bạn tính số trường hợp theo chiều chéo như thế nào vậy?
Theo mình số TH thắng ở đường chéo là 2*(m-c+1)*(n-c+1)
Giả sử xét 1 đường chéo chính từ ô 0;0
nó có thể di chuyển sang trái là n-c+1
ô, sang phải là m-c+1
ô nên số khả năng thắng ở đường chéo chính = chéo phụ =(m-c+1)(n-c+1)
Cách tính số th thắng ở hàng, cột mình nghĩ là. Xét ở 1 hàng thì số th thắng có thể có là (n-c+1) như vậy m hàng sẽ có m*(n-c+1)
cách thắng theo hàng ngang và tương tự có n*(m-c+1)
cách thắng theo chiều dọc
Cho em hỏi: sao em dùng visual c++ express 2010 thì chạy không được ? @@
thực ra là mình hơi kết hợp nhiều nên khó hiểu
(n-c+1)(m-c+1) như bạn giải thích nhưng chỉ là 1 chiều, mình nhân 4 vì mình xét theo 4 chiều.
Vd: từ một ô mình sẽ có 8 chiều đi ra, nhưng chỉ cần xét 4 chiều. Lý do là mình duyệt hết các ô theo thứ tự từ trên xuống, trái sang chẳng hạn thì ko cần kt các chiều góc trên bên trái vì nó đã đc các ô duyệt trc nó check.
(c+1)(n+m-2c+2) thực ra là (c-1)(n-c+1) + (c-1)(m-c+1) là các cái ô mà chỉ có khả năng đc chiều dọc với ngang.
Thực ra công thức mình tính hơi ẩu vs ko rõ ràng chắc viết ntn tốt hơn:
(m-c+1)n: số kiểu ăn hàng dọc
(n-c+1)m: số kiểu ăn hàng ngang
2(m-c+1)(n-c+1): số kiểu ăn 2 đường chéo
Tổng 3 cái là tất cả số TH
(cái này giống @Gio)
cho anh xin face của em
người vs máy mới hay chứ.
c3 trường mình hồi đó mấy đứa nó đồ họa trò Tic Tac Toe bằng pascal rồi. (Human VS Computer)
Đam mê vậy là tốt
Anh lớp 11, đang tìm thêm về arduino nhưng đam mê không được như thế
https://www.facebook.com/ngocduy.nguyen.180 ạ!
Dạo này em không được chăm như trước, phần vì bài trên lớp với lại tham gia các hoạt động ngoại khóa để kiếm chứng chỉ đi du học. Có gì em bây giờ mới bắt đầu quay lại với tự học thôi
Em mới lớp 7 nè, có gì xin chỉ giáo
em chỉnh sửa lại code này như sau
em chạy dùng được, dùng system(“cls”) để xóa vài kí tự rác
Học 4 ngày mà giỏi vậy trời !!!
Học gần 2 tháng còn lơ tơ mơ k hiểu cái gì đây ==