Để chơi được trò chơi này thì người chơi sử dụng bằng bốn phím mũi tên để duy chuyển qua lại giữa các ô trong bàn cờ và sử dụng phím backpace để đánh quân cờ vào vị trí mà mình đã chọn..
Trang 1NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN VÀ GIÁO VIÊN CHẤM
Trang 2
Nhóm chúng em xin chân thành cảm ơn quý Thầy (Cô) trường Đại học Trà Vinh nói chung và quý Thầy (Cô) Bộ môn Công nghệ Thông tin nói riêng đã tạo điều kiện và trang bị cho chúng em những kiến thức cơ bản để thực hiện niên luận này.
Đặc biệt chúng em xin cảm ơn Thầy Ngô Thanh Huy -giáo viên trường Đại học Trà Vinh, Bộ môn Công nghệ Thông tin đã tận tình hướng dẫn chúng em trong suốt thời gian thực hiện niên luận,và trong thời gian đó giúp cho chúng em có thêm nhiều kiến thức bổ ích cũng như ứng dụng của máy tính vào đời sống thiết thực.
Mặc dù bài niên luận đã hoàn tất nhưng không tránh được những sai xót Chúng em kính mong nhận được sự cảm thông cùng những lời góp ý quý báu từ quý Thầy (Cô) cùng các bạn để bài niên luận của chúng em được hoàn chỉnh, chính xác và tối ưu hơn Qua đó, chúng em có thể tích lũy những kinh nghiệm cho những bài niên luận tiếp sau
Cuối lời chúc quý Thầy (Cô) được nhiều sức khỏe và có nhiều thành công mới trong hiện tại cũng như tương lai.
Trang 3MỤC LỤC
Phần 1: Giới thiệu đề tài 4
1.1 Giới thiệu tổng quan 4
1.2 Giới hạn chương trình 4
1.3 Mục tiêu cần đạt 5
1.4 Hướng giải quyết 5
Phần 2: Cơ sở lý thuyết 6
2.1 Các định nghĩa 6
2.2 Thuật toán 8
Phần 3: Phân tích- Hiện thực 8
3.1 Công cụ lập trình 8
3.2 Giới thiệu chương trình 9
3.2.1 Giao diện chương trình 9
3.2.2 Các modules chương trình con 10
3.3 Thiết kế giải thuật: 11
3.4 Hàm Main 12
3.4.1 Chương trình 12
3.4.2 Lưu đồ 12
Phần 4: Kết luận- Đánh giá 13
4.1 Kết quả đạt được 13
4.2 Ưu điểm 13
4.3 Hạn chế
Trang 4CÀI ĐẶT TRÒ CHƠI CARO 9 Ô
Phần 1: GIỚI THIỆU ĐỀ TÀI
1.1 Giới thiệu tổng quan:
Carô 9 ô là 1 trò chơi đối kháng thông minh giữa hai người, người chơi thay phiên nhau đi những nước đi (bằng dấu X , O hoặc các quân cờ đen, trắng) tại các ô trống Bên nào đi được ba quân cờ liên tiếp thẳng hàng (ngang, dọc, xiên) thì thắng cuộc Có khi ván cờ không phân thắng bại khi không còn ô trống mà hai bên không đủ
ba quân cờ liên tiếp, lúc đó hai đấu thủ hòa nhau Chương trình trò chơi của chúng em
là chương trình trò chơi caro với 3 x 3 ô giữa người với người
Bàn cờ gồm có 9 ô, trong đó có 3 dòng, 3 cột được tạo nên từ các ký tự đặc biệt trong đồ họa graphics Để in ra được đúng vị trí mình muốn thì phải xác định được tọa
độ x, y trong hàm line (hàm vẽ đường thẳng)
Để chơi được trò chơi này thì người chơi sử dụng bằng bốn phím mũi tên để duy chuyển qua lại giữa các ô trong bàn cờ và sử dụng phím backpace để đánh quân cờ vào
vị trí mà mình đã chọn
1.2 Giới hạn chương trình:
Chương trình được thiết kế giới hạn trên bàn cờ 3x3 ô, giao diện Dos đơn giản dễ sử dụng, không có sử dụng đồ họa
X
Trang 51.3 Mục tiêu cần đạt:
Phải xác định được trạng thái thắng thua hoặc trạng thái hòa cờ giữa hai đấu thủ sau mỗi bàn chơi theo quy định của caro 9 ô
Phải tìm cách phân tích xem từ một trạng thái nào đó sẽ dẫn đến đấu thủ nào sẽ thắng với điều kiện cả hai đấu thủ đều có trình độ ngang nhau
Phải tìm đủ đáp án của bài toán, thời gian thực thi chương trình nhanh và chính xác cao
Giao diện thân thiện, dễ sử dụng và thể hiện được các qui luật của trò chơi
Thể hiện được các trạng thái thắng, thua, hòa tương ứng trong từng ván cờ
1.4 Hướng giải quyết:
Hiển thị được bàn cờ 3x3 ô ra màn hình sau mỗi nước đi
Khi bàn cờ kết thúc phải xuất ra thông báo về kết quả của cuộc chơi để xác định ai là người chiến thắng
Nắm vững cơ sở lý thuyết về cấu trúc dữ liệu, kỹ thuật thiết kế giải thuật, thiết kế giao diện để thực hiện các vấn đề trên
Chọn cấu trúc dữ kiệu thích hợp để lưu trạng thái của một bàn cờ ( chẳng hạn như dung mảng hai chiều, danh sách liên kết )
Dùng ngôn ngữ C để xây dựng các hàm, thư viện đồ họa để vẽ bàn cờ và các thuật toán cần thiết
Dùng mảng để lưu và kiểm tra các nước đi của hai người chơi để biết ai thắng ai thua và có khả năng xảy ra hòa khi hai người chơi đều xuất sắc
Trang 6 Sử dụng câu lệnh if và ifelse để người chơi sử dụng bốn phím mũi tên để duy chuyển con trỏ và phím backspace để đi O hay X trên bàn cờ
Phần 2: CƠ SỞ LÝ THUYẾT
2.1 Các định nghĩa
Bàn cờ là một bảng vuông 3x3, nên ta dùng một mảng hai chiều với kích thước 3x3 để tổ chức bàn cờ
Các ô nằm theo chiều ngang là các dòng, các ô nằm theo chiều dọc gọi
là các cột
Giải thuật vét cạn Min- Max.
Nút Max là nút mà người đi O chọn cho mình nước đi sao cho trạng thái có giá trị là 1
Nút Min là nút mà người đi chọn cho minh nước đi sao cho trạng thái
có giá trị là 2
Bàn cờ có n ô thì có thể có tới n! nút trên cây ta gọi là sự bùng nổ tổ hợp các nút
Hình ảnh minh họa cho nút Max và nút Min trong cây trò chơi
Trang 7 “Vét cạn” là kỉ thuật phải đi tới tất cả các điểm dừng rồi mới quay lui.
Giải thuật cắt tỉa Alpha- Beta:
Nếu A là một nút Max và ta đang xét một nút con B của nó (dĩ nhiên
B là nút Min) Giả sử Va là một giá trị tạm của A, Vb một giá trị tạm của B và nếu ta
có Va≥ Vb thì ta không cần xét các con chưa xét của B nữa Vì nếu có xét thì giá trị của B cũng sẽ nhỏ hơn hoặc bằng Vb và do đó không ảnh hưởng gì đến Va Tương tự nếu A là nút Min (tất nhiên B là nút Max) và Va ≤ Vb thì ta cũng không cần xét đến các con chưa xét của B nữa Việc không xét tiếp các con chưa được xét của nút B gọi là việc cắt tỉa Alpha-Beta các con của nút B
Trang 8 “Cắt tỉa alpha-beta” là kỉ thuật không nhất thiết phải đi tới tất cả các điểm dừng mà chỉ cần đi đến một số điểm nào đó và dựa vào một số suy luận nào đó để có thể quay lui sớm
2.2 Thuật toán:
Quay lui là một quá trình phân tich đi xuống và quay lui trở lại theo con đường đã đi qua Tại mỗi bước có thể chúng ta chưa giải quyết được vấn đề vì thế phải phân tích cho tới các điểm dừng
Tại đó chúng ta quay ngược trở lại theo con đường cũ để giải quyết vấn
đề tồn động
Phần 3: PHÂN TÍCH- HIỆN THỰC
Trang 9Ngôn ngữ lập trình C, với các phần mềm :
Visual C++
Borland C++ 3.1 Turbo C++ 3.0 Nhóm chúng em đã chọn Turbo C++ 3.0 để viết chương trình này
3.2 Giới thiệu chương trình
3.2.1 Giao diện chương trình
Chương trình có giao diện Dos đơn giản, thân thiện, dễ dùng
Có những phím tắt giúp cho quá trình sử dụng được thuận tiện với các phím tắt:
• Bấm ESC để thoát chương trình
• Bấm phím bất kì để bắt đầu trò chơi
Trang 10Trạng thái bàn cờ đang trong trạng thái chờ đợi , và lượt đi là của quân O.
Quân O mặt định ban đầu là ở chính giữa bàn cờ Muốn duy chyển quân O sang ô khác
ta sử dụng bằng bốn phím mũi tên
Khi ta đặt quân O vào trong ô vuông thì bước đi kế tiếp là thuộc về quân X, khi
đó bảng chỉ dẫn sẽ thể hiện là “ lượt đi: X ”
Khi đó ta sử dụng bốn phím mũi tên để đặt quân X vào vị trí mà ta muốn đặt
Cứ tiếp tục như vậy cho đến khi hai bên tìm ra con đường chiến thắng bằng cách
đi đủ ba quân cờ mà không bị đối phương chặn một trong hai đầu
Ở hình dưới thì quân cờ O đã chiến thắng vì đã đủ ba quân cờ
3.2.2 Các modules chương trình con
• Các kí hiệu được định nghĩa trong chương trình:
- Trang_thai= -1: bàn cờ trống (chưa gì hết)
Trang 11- Trang_thai= 1: cờ O thắng.
- Trang_thai= 2: cờ X thắng
- Row_size: có giá trị là 40
- Table_size: có giá trị là 3
• Các hàm được định nghĩa trong chương trình:
Void paint:
Void vi_tri_moi:
Void danh_dau:
Void kiem_tra:
Void init:
3.3 Thiết kế giải thuật:
Bắt đầu
Giới thiệu chương trình
Màn hình
chào mừng Xác định trạng thái Vẽ bàn cờ Vẽ bảng thông tin
Thoát ESC
Trang 123.4 Hàm main:
3.4.1 Chương trình:
Chương trình khởi tạo giá trị cho bàn cờ với kích thước là 3x3 ô
Tại mỗi ô trên bàn cờ xác định giá trị mới và xử lý bằng cách di chuyển 4 phím mũi tên: lên, xuống, trái, phải
Tiếp đến, nó sẽ gọi hàm đánh dấu đề tiến hành đặt quân cờ X (O) vào vị trí mới mà người chơi chọn
Sau khi đã đánh dấu lên bàn cờ nó sẽ gọi tiếp hàm kiểm tra để tìm ra kết quả trạng thái của bàn cờ (thắng, thua, hòa) Ngược lại, nếu chưa tìm được kết quả thì nó quay lui tiếp tục gọi hàm đánh dấu
Hàm main kết thúc khi hàm kiểm tra tìm được kết quả và xuất ra trạng thái của bàn cờ Dừng chương trình
3.4.2 Lưu đồ:
Tạo bàn cờ
Gọi hàm đánh dấu
BEGIN
Gọi hàm vị trí mới
Gọi hàm kiểm tra
Xuất Kết Quả
Trang 13Phần 4: KẾT LUẬN- ĐÁNH GIÁ
4.1 Kết quả đạt được
Khi làm xong niên luận này nhóm chúng em đã đạt được các kết quả như sau:
- Tạo được bàn cờ xuất hiện trên màn hình “ Dos”
- Quân cờ đầu tiên dành cho người đánh quân O
- Kiểm tra để xác định người chiến thắng
Về cơ bản thì nhóm chúng em đã hoàn thành được các yêu cầu của đề tài đặt ra Nắm được cấu trúc dữ liệu ( trên cơ sở sử dụng mảng) Biết cách cài đặt, các thao tác trên Turbo C
4.2 Ưu điểm:
Không giới hạn về thời gian
Giao diện đơn giản, dễ sử dụng
Có thể nâng cấp, phát triển lên thành một chương trình chơi cờ có quy mô lớn
Có phạm vi ứng dụng rộng
Giải thuật tương đối dễ hiểu
4.3 Hạn chế
Chưa áp dụng được giải thuật Alpha-Beta vào trong code
Giao diện chưa đẹp
Chưa tạo được menu chọn cách chơi
Chưa cho phép người chơi chọn lượt đi trước hay sau
4.4 Hướng phát triển
Khắc phục các hạn chế trên
Trang 14 Nâng cấp chương trình lên mức tối ưu.
Ghép thêm đồ họa để giao diện chương trình sinh động hơn
TÀI LIỆU THAM KHẢO
[1] Phạm Văn Ất Kỹ thuật lập trình C Nhà xuất bản Đại học Quốc gia TPHCM
[2] Cấu trúc Dữ liệu và giải thuật của Đỗ Xuân Lôi- NXB Khoa học Kỹ Thuật 2001 [3] Nhập môn cấu trúc Dữ liệu và thuật toán của Dương Anh Đức-Trần Hạnh Nhi, ĐHQG TPHCM 2003
[4] Link: http: // www.dec.ctu.edu.vn/cit/gtrinh/gthuat