Đề tài Niên luận 1: Sử dụng ngôn ngữ Borland Pascal 7.0 cài đặt chương trình theo yêu cầu, và giao diện xây dựng trên màn hình đồ họa

Quan điểm của giáo dục ĐH hiện nay là rèn luyện tư duy cho sinh viên hơn là cung cấp kiến thức. Ngay cả các bậc học thấp hơn như THPT phương pháp dạy học truyền thống được thay dần và lấy tích cực của người học làm trung tâm, giáo viên chỉ là người định hướng. Phương pháp này nhằm rèn luyện tư duy người học. Trong cuộc sống thường ngày, trong giao tiếp cũng như trong công việc, nếu một người có tư duy tốt chắc chắn sẽ xử lí các tình huống, các sự cố tốt hơn một người kém tư duy. Có nhiều phương pháp rèn luyện tư duy, thí dụ việc phân nhóm cho học sinh tự nghiên cứu bài học cũng là một cách trên ghế nhà trường, hay việc luyện tập tính nhẩm, cũng có thể là rèn luyện trí nhớ bằng cách nhớ lại kí ức, Nói chung trí thông minh rất quan trọng trong cuộc sống đờ thường, và nhất là đối với các bạn học sinh, sinh viên điều này càng cần thiết hơn. Tiện đây, xin được giới thiệu một trò chơi mang tính chất suy luận và lôgic rất cao, đó là Trò Chơi Đoán Màu. Và trò chơi này sẽ ít nhiều cho những đối tượng rèn luyện trí tuệ cũng như những người muốn thử sức mình I.1 Yêu cầu đề tài: Trò chơi “Đoán màu” được thể hiện: có từ 4 đến 7 màu, người chơi một lần đoán 4 màu. Máy sẽ đánh giá mỗi lần đoán và cho biết số vị trí đoán đúng. Sau 10 lần đoán máy sẽ cho kết quả người chơi thắng hay thua. I.2 Mục tiêu: Nắm vững ngôn ngữ Borland Pascal 7.0. Học cách trình bày khoa học đề tài. Luyện tập cách xây dựng các giài thuật để giải quyết các vấn đề. Cài đặt chương trình đúng yêu cầu đề tài. I.3 Hướng giải quyết: Về lý thuyết: nắm vững ngôn ngữ lập trình, xây dựng giải thuật đúng và phù hợp với yêu cầu đề tài. Về chương trình: Sử dụng ngôn ngữ Borland Pascal 7.0 cài đặt chương trình theo yêu cầu đề tài, và giao diện xây dựng trên màn hình đồ họa. -------------------------------------- Lời cảm tạ: Sau gần 2 tháng thực hiện, giờ đây niên luận 1 của em đã hoàn thành. Căn bản niên luận đúng theo yêu cầu đề tài. Đó là nhờ nổ lực của bản thân, cũng như nhờ nhận được sự hướng dẫn của quý thầy cô. Dù đã hoàn thành, nhưng chắc chắn không thể tránh khỏi những sai sót do hạn chế về khả năng của bản thân cũng như do giới hạn về thời gian. Em rất mong nhận được những ý kiến đóng góp quý báu của quý thầy cô để niên luận em được hoàn thiện hơn. Chân thành cảm ơn! Sinh viên thực hiện: Hà Văn Cường. Phần II: [IMG]file:///C:/Users/Heodat/AppData/Local/Temp/msohtml1/01/clip_image002.gif[/IMG] -------------------------------------------------------------------------------------------------- Chương 1:giới thiệu trò chơi. Nhìn chung, trò chơi đoán màu là một trò chơi không đòi hỏi nhiều lý thuyết, cũng như các khái niệm liên quan. Có thể nói chỉ cần nắm vững một ngôn ngữ lập trình cấu trúc nào đó là có thể cài đặt chương trình. 1.1 Tổng quát hóa đề tài: Trò chơi có M màu khác nhau nào đó, (M>1). Một dãy gồm N màu được xây dựng ngẫu nhiên bằng cách chon ra từ M màu trên. Công việc người chơi phải chỉ ra đúng vị trí từng màu trong dãy N màu, nếu chính xác cả 4 vị trí sẽ chiến thắng, ngược lại sẽ thua. Độ khó tăng lên theo vòng chơi kế tiếp theo quy luật: M=M+1, N vẫn được giữ nguyên. Và trò chơi sẽ kết thúc sau một số vòng hữu hạn nào đó. 1.2 Giới hạn đề tài: Giới hạn lại vấn đề trên như sau: - M từ 4 đến 7; tức là Min(M) = 4 và Max(M) = 7. - Thành phần M màu được chọn: Đỏ, Xanh dương, Xanh lá, Vàng, Lam, Tím, Trắng. - N = 4, và không đổi mỗi vòng chơi. - Các vòng chơi: Vòng 1 ứng với M = 4, gồm 4 màu: Đỏ, Xanh dương, Xanh lá, Vàng. Vòng 2 ứng với M = 5, gồm 5 màu: Đỏ, Xanh dương, Xanh lá, Vàng, Lam. Vòng 3 ứng với M = 6, gồm 6 màu: Đỏ, Xanh dương, Xanh lá, Vàng, Lam, Tím. Vòng 4 ứng với M = 7, gồm 7 màu: Đỏ, Xanh dương, Xanh lá, Vàng, Lam, Tím, Trắng. => Như vậy có 4 vòng chơi, N vẫn là 4, nhưng số màu M tăng 1 mỗi vòng sẽ là độ khó tăng lên. Theo yêu cầu đề tài toát lên 3 vấn đề quan trọng sau: Trước hết: phải có một dãy 4 màu được tạo ra một cách ngẫu nhiên từ một danh sách màu sẵn có cho người chơi đoán, thứ hai: chọn lựa màu từ phía người chơi, thứ ba: so sánh sự lựa chọn lựa của người chơi và dãy ngẫu nhiên đó. Ngoài ra việc thiết kế giao diện người dùng cũng là vấn đề quan trọng giúp trò chơi thành công hơn. Chương 2:Xây dựng các giải thuật và cài đặt bằng ngôn ngữ Pascal. 2.1 Xây dựng dãy màu ngẫu nhiên: Ý đồ tạo ra một dãy màu ngẫu nhiên, cụ thể là 4 màu được chọn từ một dãy màu cho trước. Có nghĩa là sự xuất hiện của từng màu trong dãy có thể là 0,1,2,3 hoặc 4 lần. Trong các ngôn ngữ lập trình như C, Pascal, VB có một hàm được định nghĩa trước thõa mãn tính chất trên – đó là hàm ngẫu nhiên. Hàm ngẫu nhiên trong Pascal: Random với cú pháp như sau Random(a); với a kiểu Word, hàm này cho giá trị là một số nguyên ngẫu nhiên trong phạm vi từ 0 đến a-1. Nhận thấy đây sẽ là sự chọn lựa tốt nhất cho việc xây dãy màu ngẫu nhiên. Với ý tưởng như sau: Mỗi lần dùng hàm sẽ được một con số, con số đó như một từ khóa cho ta một màu nào đó tự ta định nghĩa. Thí dụ: kết quả là 0 sẽ là màu đỏ, 1 sẽ cho ta màu xanh, và ta chỉ việc lưu lại kết quả. Khi cho vòng lặp chạy 4 lần ta sẽ có 4 màu. Ta dùng tham số thực tế trong hàm Random chính là số màu của từng vòng chơi. Cụ thể viết tổng quát Random(<Số màu>); Số màu là tổng số màu của dãy mà máy phải chọn, nói cách khác nó là tổng số màu của một vòng nào đó. Có thể dùng một mảng để lưu kết quả. Thí dụ dùng mảng Trong đó regs là kiểu thanh ghi Registers; Ngoài ra trong thư viện Pascal 7 có cung cấp một thư viện chuột MOUSE.TPU khá phong phú, nếu tự tạo các hàm xử lý chuột sẽ gặp khó khăn do sử dụng ngắt mềm và đụng chạm khá nhiều thanh ghi; tuy nhiên nếu tự định nghĩa lại thì sẽ dễ dàng hơn cho sử dụng, cụ thể dễ nhớ tên hàm. Vấn đề này không có gì mới mẽ, việc trình bày dù không mang nhiều ý nghĩa, nhưng thuận lợi hơn cho việc lập trình. 2.4.3 Vấn đề đồ họa khác: Việc kẻ khung chọn màu, đặt màu nền, màu chữ, tất cả dùng những thủ tục được định nghĩa trong thư viện đồ họa Graph xây dựng sẵn. 2.5 Tổng quát của trò chơi. Tập hợp tất cả các vấn đề nêu trên theo một trình tự hợp lý sẽ tạo thành một chương trình hoàn chỉnh. Lưu ý, nếu hết 4 vòng thì chơi tiếp là quay lại chơi từ đầu, còn nếu thua mà chơi lại sẽ chơi lại vòng vừa rồi, tất nhiên thành phần màu máy chọn bị thay đổi theo tránh tình trạng người chơi ghi nhận lại các kết quả lượt đoán trước kia của vòng thua vừa rồi. Trò chơi được thiết kế tổng quát theo sơ đồ sau CALL ME: ĐỂ CÓ PHẦN MODUL VA GIAO DIEN 01279522128 TIENTHANHPC@GMAIL.COM Trong đó regs là kiểu thanh ghi Registers; Ngoài ra trong thư viện Pascal 7 có cung cấp một thư viện chuột MOUSE.TPU khá phong phú, nếu tự tạo các hàm xử lý chuột sẽ gặp khó khăn do sử dụng ngắt mềm và đụng chạm khá nhiều thanh ghi; tuy nhiên nếu tự định nghĩa lại thì sẽ dễ dàng hơn cho sử dụng, cụ thể dễ nhớ tên hàm. Vấn đề này không có gì mới mẽ, việc trình bày dù không mang nhiều ý nghĩa, nhưng thuận lợi hơn cho việc lập trình. 2.4.3 Vấn đề đồ họa khác: Việc kẻ khung chọn màu, đặt màu nền, màu chữ, tất cả dùng những thủ tục được định nghĩa trong thư viện đồ họa Graph xây dựng sẵn. 2.5 Tổng quát của trò chơi. Tập hợp tất cả các vấn đề nêu trên theo một trình tự hợp lý sẽ tạo thành một chương trình hoàn chỉnh. Lưu ý, nếu hết 4 vòng thì chơi tiếp là quay lại chơi từ đầu, còn nếu thua mà chơi lại sẽ chơi lại vòng vừa rồi, tất nhiên thành phần màu máy chọn bị thay đổi theo tránh tình trạng người chơi ghi nhận lại các kết quả lượt đoán trước kia của vòng thua vừa rồi. Trò chơi được thiết kế tổng quát theo sơ đồ sau Trong đó regs là kiểu thanh ghi Registers; Ngoài ra trong thư viện Pascal 7 có cung cấp một thư viện chuột MOUSE.TPU khá phong phú, nếu tự tạo các hàm xử lý chuột sẽ gặp khó khăn do sử dụng ngắt mềm và đụng chạm khá nhiều thanh ghi; tuy nhiên nếu tự định nghĩa lại thì sẽ dễ dàng hơn cho sử dụng, cụ thể dễ nhớ tên hàm. Vấn đề này không có gì mới mẽ, việc trình bày dù không mang nhiều ý nghĩa, nhưng thuận lợi hơn cho việc lập trình. 2.4.3 Vấn đề đồ họa khác: Việc kẻ khung chọn màu, đặt màu nền, màu chữ, tất cả dùng những thủ tục được định nghĩa trong thư viện đồ họa Graph xây dựng sẵn. 2.5 Tổng quát của trò chơi. Tập hợp tất cả các vấn đề nêu trên theo một trình tự hợp lý sẽ tạo thành một chương trình hoàn chỉnh. Lưu ý, nếu hết 4 vòng thì chơi tiếp là quay lại chơi từ đầu, còn nếu thua mà chơi lại sẽ chơi lại vòng vừa rồi, tất nhiên thành phần màu máy chọn bị thay đổi theo tránh tình trạng người chơi ghi nhận lại các kết quả lượt đoán trước kia của vòng thua vừa rồi. Trò chơi được thiết kế tổng quát theo sơ đồ sau

doc20 trang | Chia sẻ: lvcdongnoi | Ngày: 03/07/2013 | Lượt xem: 2179 | Lượt tải: 1download
Bạn đang xem nội dung tài liệu Đề tài Niên luận 1: Sử dụng ngôn ngữ Borland Pascal 7.0 cài đặt chương trình theo yêu cầu, và giao diện xây dựng trên màn hình đồ họa, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Phần I: -------------------------------------------------------------------------------------------------- Quan điểm của giáo dục ĐH hiện nay là rèn luyện tư duy cho sinh viên hơn là cung cấp kiến thức. Ngay cả các bậc học thấp hơn như THPT phương pháp dạy học truyền thống được thay dần và lấy tích cực của người học làm trung tâm, giáo viên chỉ là người định hướng. Phương pháp này nhằm rèn luyện tư duy người học. Trong cuộc sống thường ngày, trong giao tiếp cũng như trong công việc, nếu một người có tư duy tốt chắc chắn sẽ xử lí các tình huống, các sự cố tốt hơn một người kém tư duy. Có nhiều phương pháp rèn luyện tư duy, thí dụ việc phân nhóm cho học sinh tự nghiên cứu bài học cũng là một cách trên ghế nhà trường, hay việc luyện tập tính nhẩm, cũng có thể là rèn luyện trí nhớ bằng cách nhớ lại kí ức,… Nói chung trí thông minh rất quan trọng trong cuộc sống đờ thường, và nhất là đối với các bạn học sinh, sinh viên điều này càng cần thiết hơn. Tiện đây, xin được giới thiệu một trò chơi mang tính chất suy luận và lôgic rất cao, đó là Trò Chơi Đoán Màu. Và trò chơi này sẽ ít nhiều cho những đối tượng rèn luyện trí tuệ cũng như những người muốn thử sức mình.. I.1 Yêu cầu đề tài: Trò chơi “Đoán màu” được thể hiện: có từ 4 đến 7 màu, người chơi một lần đoán 4 màu. Máy sẽ đánh giá mỗi lần đoán và cho biết số vị trí đoán đúng. Sau 10 lần đoán máy sẽ cho kết quả người chơi thắng hay thua. I.2 Mục tiêu: Nắm vững ngôn ngữ Borland Pascal 7.0. Học cách trình bày khoa học đề tài. Luyện tập cách xây dựng các giài thuật để giải quyết các vấn đề. Cài đặt chương trình đúng yêu cầu đề tài. I.3 Hướng giải quyết: Về lý thuyết: nắm vững ngôn ngữ lập trình, xây dựng giải thuật đúng và phù hợp với yêu cầu đề tài. Về chương trình: Sử dụng ngôn ngữ Borland Pascal 7.0 cài đặt chương trình theo yêu cầu đề tài, và giao diện xây dựng trên màn hình đồ họa. -------------------------------------- Lời cảm tạ: Sau gần 2 tháng thực hiện, giờ đây niên luận 1 của em đã hoàn thành. Căn bản niên luận đúng theo yêu cầu đề tài. Đó là nhờ nổ lực của bản thân, cũng như nhờ nhận được sự hướng dẫn của quý thầy cô. Dù đã hoàn thành, nhưng chắc chắn không thể tránh khỏi những sai sót do hạn chế về khả năng của bản thân cũng như do giới hạn về thời gian. Em rất mong nhận được những ý kiến đóng góp quý báu của quý thầy cô để niên luận em được hoàn thiện hơn. Chân thành cảm ơn! Sinh viên thực hiện: Hà Văn Cường. Phần II: -------------------------------------------------------------------------------------------------- Chương 1: giới thiệu trò chơi. Nhìn chung, trò chơi đoán màu là một trò chơi không đòi hỏi nhiều lý thuyết, cũng như các khái niệm liên quan. Có thể nói chỉ cần nắm vững một ngôn ngữ lập trình cấu trúc nào đó là có thể cài đặt chương trình. 1.1 Tổng quát hóa đề tài: Trò chơi có M màu khác nhau nào đó, (M>1). Một dãy gồm N màu được xây dựng ngẫu nhiên bằng cách chon ra từ M màu trên. Công việc người chơi phải chỉ ra đúng vị trí từng màu trong dãy N màu, nếu chính xác cả 4 vị trí sẽ chiến thắng, ngược lại sẽ thua. Độ khó tăng lên theo vòng chơi kế tiếp theo quy luật: M=M+1, N vẫn được giữ nguyên. Và trò chơi sẽ kết thúc sau một số vòng hữu hạn nào đó. 1.2 Giới hạn đề tài: Giới hạn lại vấn đề trên như sau: - M từ 4 đến 7; tức là Min(M) = 4 và Max(M) = 7. - Thành phần M màu được chọn: Đỏ, Xanh dương, Xanh lá, Vàng, Lam, Tím, Trắng. - N = 4, và không đổi mỗi vòng chơi. - Các vòng chơi: Vòng 1 ứng với M = 4, gồm 4 màu: Đỏ, Xanh dương, Xanh lá, Vàng. Vòng 2 ứng với M = 5, gồm 5 màu: Đỏ, Xanh dương, Xanh lá, Vàng, Lam. Vòng 3 ứng với M = 6, gồm 6 màu: Đỏ, Xanh dương, Xanh lá, Vàng, Lam, Tím. Vòng 4 ứng với M = 7, gồm 7 màu: Đỏ, Xanh dương, Xanh lá, Vàng, Lam, Tím, Trắng. => Như vậy có 4 vòng chơi, N vẫn là 4, nhưng số màu M tăng 1 mỗi vòng sẽ là độ khó tăng lên. Theo yêu cầu đề tài toát lên 3 vấn đề quan trọng sau: Trước hết: phải có một dãy 4 màu được tạo ra một cách ngẫu nhiên từ một danh sách màu sẵn có cho người chơi đoán, thứ hai: chọn lựa màu từ phía người chơi, thứ ba: so sánh sự lựa chọn lựa của người chơi và dãy ngẫu nhiên đó. Ngoài ra việc thiết kế giao diện người dùng cũng là vấn đề quan trọng giúp trò chơi thành công hơn. Chương 2: Xây dựng các giải thuật và cài đặt bằng ngôn ngữ Pascal. 2.1 Xây dựng dãy màu ngẫu nhiên: Ý đồ tạo ra một dãy màu ngẫu nhiên, cụ thể là 4 màu được chọn từ một dãy màu cho trước. Có nghĩa là sự xuất hiện của từng màu trong dãy có thể là 0,1,2,3 hoặc 4 lần. Trong các ngôn ngữ lập trình như C, Pascal, VB có một hàm được định nghĩa trước thõa mãn tính chất trên – đó là hàm ngẫu nhiên. Hàm ngẫu nhiên trong Pascal: Random với cú pháp như sau Random(a); với a kiểu Word, hàm này cho giá trị là một số nguyên ngẫu nhiên trong phạm vi từ 0 đến a-1. Nhận thấy đây sẽ là sự chọn lựa tốt nhất cho việc xây dãy màu ngẫu nhiên. Với ý tưởng như sau: Mỗi lần dùng hàm sẽ được một con số, con số đó như một từ khóa cho ta một màu nào đó tự ta định nghĩa. Thí dụ: kết quả là 0 sẽ là màu đỏ, 1 sẽ cho ta màu xanh,…và ta chỉ việc lưu lại kết quả. Khi cho vòng lặp chạy 4 lần ta sẽ có 4 màu. Ta dùng tham số thực tế trong hàm Random chính là số màu của từng vòng chơi. Cụ thể viết tổng quát Random(); Số màu là tổng số màu của dãy mà máy phải chọn, nói cách khác nó là tổng số màu của một vòng nào đó. Có thể dùng một mảng để lưu kết quả. Thí dụ dùng mảng A lưu các giá trị màu. Cụ thể bước lặp như sau: B1: Gán i=1; B2: Trong khi (i<=4) làm các công việc. Random(số màu); Lấy kết quả hàm Random(số màu) gán màu cho A[i]. Tăng i một đơn vị. B3: Quay lên B2 kiểm tra điều kiện i. Lưu đồ máy chọn màu ngẫu nhiên: GT1 Bắt đầu Vào số màu i = 1 Máy chọn ngẫu nhiên 1 giá trị trong khoảng số màu Màu thứ i = Đỏ Màu thứ i = Xanh Màu thứ i = … i = i + 1 i <= 4 Kết thúc GT2 GT… Đúng Sai Đoạn cài đặt hàm chọn màu ngẫu nhiên bằng ngôn ngữ Pascal: procedure chonmaungaunhien(somau:word;var dm:day); var color,i:word; begin randomize; for i:=1 to 4 do begin color:=(random(somau)); case color of 0: dm[i]:='do'; 1: dm[i]:='xanh'; 2: dm[i]:='la'; 3: dm[i]:='vang'; 4: dm[i]:='lam'; 5: dm[i]:='tim'; 6: dm[i]:='trang'; else halt; end; end; end; 2.2 Lượt chọn màu của người chơi. Sau khi đã có được bước thứ nhất là chọn được dãy 4 màu, tiếp theo sẽ là việc xây dựng lựa chọn của người chơi. Bây giờ ta xây dựng việc chọn màu; có hai cách cho việc này: người chơi dùng bàn phím hoặc chuột để chọn màu. Thứ nhất: Dùng bàn phím, người chơi chọn màu bằng cách ấn bàn phím, nếu ấn một trong các phím màu thích hợp thì sẽ được chấp nhận và kết quả sẽ được lưu lại, nếu ấn sai các phím đó, người chơi sẽ phải ấn tiếp đến khi nào được chấp nhận, có nghĩa là đã chọn thích hợp. Và sự lựa chọn này được thực hiện 4 lần. Thứ hai: Sử dụng chuột, tương tự như bàn phím, người chơi chỉ khác bằng cách Click chuột ngay nút màu tương ứng muốn chọn, nếu Click ngay vùng màu này thể hiện, màu này được lưu lại, nếu Click sai vị trí, tương tự như ấn bàn phím, người chơi phải Click đến khi nào được chấp nhận. Và sự lựa chọn vẫn phải thực hiện 4 lần. Xét cho cùng, việc dùng bàn phím hay chuột cùng một cách xây dựng giải thuật. Minh họa giải thuật bằng ngôn ngữ giả: For i=1 to 4 do { B1: Chọn màu B2: If (chọn màu thích hợp) lưu kết quả. Else quay lên B1. } Biểu diển giải thuật trên một cách khác bằng lưu đồ dưới đây: Lưu đồ người chơi chọn lựa 1 lượt 4 màu Bắt đầu Người chơi chọn i = 1 Lưu màu thứ i Thích hợp? Kết thúc Đúng Sai i <= 4 i = i + 1 Đúng Sai Sau đây đoạn cài đặt bằng ngôn ngữ Pascal dùng bàn phím chọn màu, việc dùng chuột không trình bày ở đây vì tương tự chỉ sai khác đôi chút: {--------------------------------doan mau bang ban phim----------------------} procedure select_keyboard(dem:word; var color1:day;var thoattructiep:boolean); var i,m:integer; mau:char; x,y,k:integer; ngung:boolean; begin x:=265; y:=165; k:=0; i:=1; thoattructiep:=false; while (i<=4) and (thoattructiep=false) do begin mau:=readkey; mau:=upcase(mau); ngung:=true; repeat if not ngung then begin ngung:=true; mau:=readkey; mau:=upcase(mau); end; case mau of 'D':begin color1[i]:='do';m:=4; end; 'G':begin color1[i]:='la';m:=2; end; 'V':begin color1[i]:='vang'; m:=14; end; 'X':begin color1[i]:='xanh'; m:=1; end; 'L':begin color1[i]:='lam'; m:=3; end; 'T':begin color1[i]:='tim'; m:=5; end; 'W':begin color1[i]:='trang'; m:=15; end; 'E':thoattructiep:=true; else begin write(#7); ngung:=false; end; end; until ngung or thoattructiep=true; if thoattructiep=false then begin nut(x+k,y+dem*30,m); k:=k+30; end; i:=i+1; end; end; Nhận xét đôi chút về cách cài đặt này, nhận thấy phần so sánh điều kiện các trường hợp màu dùng nhiều lệnh if lồng nhau vẫn được, tuy nhiên cấu trúc Case của các trường hợp màu làm chương trình đẹp hơn, cả hai cách đều cùng kết quả. Trong đoạn chương trình này có thêm tính năng giúp người chơi có thể thoát chương trình ngay lúc chơi mà không cần hết vòng, do đó, có sai khác đôi chút so với giải thuật. Cụ thể khi vào chương trình là ấn E để thoát 2.3 Giải thuật so sánh màu. Đây là vấn đề then chốt của trò chơi, có thể hình dung bằng hình ảnh tượng trưng sau đây cho một lượt đoán(4 màu): Máy chọn: Người chơi chọn: Kết quả Đúng Giống Màu 1 Màu 1 Sai Khác Màu 2 Màu 2 Màu 3 Màu 3 Màu 4 Màu 4 ````````````` ` Nếu tổng số Đúng của cột kết quả = 4 thì người chơi chiến thắng(ở đây chỉ đề cập tới một vòng của trò chơi). Tuy nhiên theo yêu cầu, người chơi có tới 10 lượt đoán trong một vòng chơi, nếu đoán sai, dãy màu máy chọn vẫn được giữ nguyên, người chơi thực hiện lượt đoán tiếp theo cho tới hết lượt thứ 10, nếu đoán đúng 4 màu tại bất kì lượt nào thì sẽ thắng. Khi đó việc dùng vòng lặp không xác định là giải pháp tối ưu cho vấn đề này, tức là: vòng lặp sẽ thực hiện đến khi nào người chơi hoặc đoán đúng 4 màu theo thứ tự của dãy hoặc đã đoán hết 10 lượt, một trong hai xảy ra sẽ kết thúc vòng lặp và xuất kết quả. Tuy nhiên nhắc lại đây chỉ gói gọn trong một vòng chơi, xen giữa các vòng sẽ là các tùy chọn được đề cập đến sau. Minh họa cụ thể hơn là lưu đồ giải thuật cho một vòng chơi bên dưới: Lưu đồ so sánh màu tìm số đúng: Bắt đầu Số lượt = 0 i = 1; Số đúng = 0 i <=4 Ra kết quả và kết thúc Đúng Sai Màu máy chọn thứ i = Màu người chon thứ i Số đúng=Số đúng +1 Sai Đúng Máy chọn màu Người chơi đoán i = i + 1 Kết quả số đúng Số lượt =số lượt +1 Số đúng=4 hoặc Số lượt=10 Sai Đúng Đoạn cài đặt: chonmaungaunhien(somau,dm); dem:=0;{ dung:=0;} {dem=0 dùng dem so luot} if select_mouse then nut_mouse else nut_keyboard; setcolor(2); level(somau); thoattructiep:=false; while (dung4) and (dem10) and (thoattructiep=false) do begin if select_mouse {chọn màu bằng chuột} then doanmau(dem,color1,thoattructiep) else {chọn màu bằng phím} select_keyboard(dem,color1,thoattructiep); dung:=0; if thoattructiep=false then begin for i:=1 to 4 do if (dm[i]=color1[i]) then dung:=dung+1; xuatkq(dung,dem); dem:=dem+1; if select_mouse then nut_mouse else nut_keyboard; end else exit; end; Phần mã code nhạt trong đoạn chương trình vẫn có những chức năng nhất định, tuy nhiên, trình bày như vậy cho dễ thấy hơn. Hơn nữa, vẫn còn dính vào biến Thoattructiep kiểu Boolean dùng thoát chương trình lúc đang chơi mà giải thuật không đề cập tới, vì nó chỉ là một tính năng nhúng vào. 2.4 Giao diện người dùng. 2.4.1 Xây dựng chọn lựa bằng chuột: Khi bắt đầu chương trình, hoặc khi kết thúc một vòng chơi, cũng như là chiến thắng cả vòng cuối cùng, một hộp thoại tùy chọn sẽ xuất hiện. Người chơi chỉ được dùng chuột thực hiện các tùy chọn. Hướng giải quyết tốt nhất là dùng một thủ tục định vị con trỏ chuột. Hình ảnh sau giúp minh họa trực quan dễ hiểu hơn: X ( Xmouse,Ymouse ) X2 N X1 Y Y2 Y1 Vùng màu xanh tượng trưng cho vùng chọn thích hợp, đối với trong chương trình các vùng này là nút chọn, tức là nếu click vào vùng này sẽ có một tác dụng nào đó như chọn màu hoặc là thoát, nếu click ra ngoài thì click đó không có tác dụng. Giải quyết vấn đề này như sau: Nếu đồng thời: Xmouse >= X1 và Xmouse = Y1 và Ymouse <= Y2 Thì kết quả là vùng chọn thích hợp và được chấp nhận. Ngược lại người chơi phải click chọn tiếp tục đến khi vùng click thích hợp. Như vậy chỉ cần ghép lại các vùng như vậy sẽ có các tùy chọn khác nhau. Tham khảo giải thuật này bằng lưu đồ: Lưu đồ người chơi tùy chọn Bắt đầu Click chọn Thực hiện theo yêu cầu Click vị trí thích hợp Kết thúc Đúng Sai Thí dụ một đoạn tùy chọn: {hàm kiểm tra vị trí con trỏ có trong phạm vi x1,y1,x2,y2 không} function check_botton(x1,y1,x2,y2:integer):boolean; begin if ((xmouse>x1) and (xmousey1) and (ymouse<y2)) then check_botton:=true { vị trí con trỏ nằm trong hình chử nhật cho kết quả đúng} else check_botton:=false; end; { minh họa việc bấm chuột tại các vị trí } select: mouseshow; waitmousepress; { chờ nhấp chuột } getmouseposition(xmouse,ymouse); {lấy vị tri chuột} if check_botton(202,222,318,288) then select_mouse:=true else if check_botton(322,222,438,288) then select_mouse:=false else goto select; Đoạn chương trinh trên chờ ấn chuột, có gọi đến hàm kiểm tra vị trí giới hạn bởi hình chữ nhật với các tọa độ lần lượt x1,y1,x2,y2. Nếu click vào (202,222,318,288) thì sẽ thực hiện lệnh gán select_mouse là true. Nếu click vào vùng chữ nhật (322,222,438,288) sẽ gán select_mouse là false. Ở đây, select_mouse là điều kiện kiểm tra việc người chơi dùng chuột (nếu đúng) và dùng bàn phím (nếu sai). Nếu không click vào hai vị trí trên thì phải click lại, tức chương trình thực lệnh nhảy đến nhản select buộc người chơi lựa chọn lại nếu nhấp ra bên ngoài 2 vùng trên. 2.4.2 Xử lý chuột: Muốn thực hiện được sự chọn lựa bằng chuột thay vì bằng bàn phím thông thường là một vấn đề không đơn giản, việc định nghĩa các thủ tục về xử lý chuột khá phức tạp và rất khó, do phải nhúng các đoạn mã từ lập trình hệ thống Asemple xen vào, để minh họa cho điều trên, ta có thể xem xét một số thù tục đơn giản nhất về xử lý chuột được sử dụng trong chương trình: Hiển thị chuột: ...................................... Procedure MouseShow; Begin Regs.ax := $1; intr($33,Regs); End; ……………………….. Ẩn chuột: Procedure MouseHide; Begin Regs.ax := $2; intr($33,Regs); End; ………………………… Chờ nhấn chuột: Procedure WaitMousePress; begin repeat with mouse1 do StatesMouse(left,right,newx,newy); until mouse1.left or mouse1.right; end; ………………………….. Click chuột: function mouseclick:char; var n:char; begin regs.ax:=$003; intr($33,regs); if(regs.bx and 1)=1 then n:='L'; if(regs.bx and 2)=2 then n:='R'; mouseclick:=n; end; ………………………….. Lấy tọa độ con trỏ: procedure getmouseposition(var xmouse,ymouse:integer); begin regs.ax:=$0003; intr($33,regs); xmouse:=regs.cx; ymouse:=regs.dx; end; Trong đó regs là kiểu thanh ghi Registers; Ngoài ra trong thư viện Pascal 7 có cung cấp một thư viện chuột MOUSE.TPU khá phong phú, nếu tự tạo các hàm xử lý chuột sẽ gặp khó khăn do sử dụng ngắt mềm và đụng chạm khá nhiều thanh ghi; tuy nhiên nếu tự định nghĩa lại thì sẽ dễ dàng hơn cho sử dụng, cụ thể dễ nhớ tên hàm. Vấn đề này không có gì mới mẽ, việc trình bày dù không mang nhiều ý nghĩa, nhưng thuận lợi hơn cho việc lập trình. 2.4.3 Vấn đề đồ họa khác: Việc kẻ khung chọn màu, đặt màu nền, màu chữ,…tất cả dùng những thủ tục được định nghĩa trong thư viện đồ họa Graph xây dựng sẵn. 2.5 Tổng quát của trò chơi. Tập hợp tất cả các vấn đề nêu trên theo một trình tự hợp lý sẽ tạo thành một chương trình hoàn chỉnh. Lưu ý, nếu hết 4 vòng thì chơi tiếp là quay lại chơi từ đầu, còn nếu thua mà chơi lại sẽ chơi lại vòng vừa rồi, tất nhiên thành phần màu máy chọn bị thay đổi theo tránh tình trạng người chơi ghi nhận lại các kết quả lượt đoán trước kia của vòng thua vừa rồi. Trò chơi được thiết kế tổng quát theo sơ đồ sau Bắt đầu Chơi Game Đúng Tiếp? Thoát? Sai Thắng? Đúng Sai Sai Đúng Kết thúc Do chương trình khá dài, nên không tiện trình bày ở đây. Ấn Ctrl + click xem chương trình nguồn Chương 3: Hướng dẫn sử dụng: 3.1 Hướng dẫn cài đặt: Ban đầu, chạy file Setup, đến bước nhập key, key lấy từ file text kèm theo, phải nhập key 1th1003 chính xác mới cài tiếp được. Bước kế tiếp như chọn đường đến ổ đĩa(vùng) cài đặt…Khi cài thành công, nếu bước cài đặt có chọn Create Shortcut, thì trên Desktop xuất hiện biểu tượng có tên Selectcolors, việc cài tương tự các ứng dụng khác trên Windows. 3.2 Hướng dẫn cách chơi. Khi bắt đầu chơi sẽ có hộp thoại tùy chọn bằng cách Click chuột: Chọn Use Mouseà dùng giao diện chuột đoán màu. Chọn Keyàdùng bàn Phím đoán màu. Nếu người chơi dùng chuột sẽ có giao diện như sau: Thành phần màu hiển thị bên phải cụm từ:Contain colors. 4 màu ngẫu nhiên được chọn từ đây. Danh sách màu dưới dòng:You choose color from…là khu vực người chơi chọn bằng cách Click chuột(chuột phải hoặc). Các màu tính theo hàng ngang dưới dòng chữ You choose Becoming kèm theo các con số tương ứng với lựa chọn từ khu vực chọn, các con số là số vị trí đúng trong dãy Outcome, tức đúng so với máy chọn. Khi người chơi đúng 4 vị trí tại bất cứ lượt lựa chọn nào, sẽ thắng cuộc và qua vòng kế tiếp số màu trên thành phần tăng thêm 1, cho tới vòng cuối cùng là vòng 4 với số màu là 7. Hoặc nếu hết 10 lượt đón mà chưa đưa ra được kết quả đúng sẽ thua và có tùy chọn chơi tiếp hoặc dừng. Trong quá trình chơi có thể thoát bằng cách click vào nút trên cùng góc bên phải màu xanh có chéo đỏ. Ngược lại người chơi dùng bàn phím giao diện cũng không khác nhiều: Tương tự như việc dùng chuột, chỉ khác là cách ấn phím kí tự thích hợp trong thành phần vùng chọn màu có ghi các kí tự trên đó đại diện cho màu. Phím E có tác dụng thoát khỏi trò chơi. Đoán sai sẽ có kết quả cho người chơi so sánh, ấn Enter sẽ có giao diện chọn lựa phía dưới bên phải. Thoát: chọn Exit. Chơi lại vòng vừa rồi: chọn Retry now. Nếu thắng vòng nào đó: Thắng cuộc(thắng cả 4 vỏng chơi) Chọn Continue tiếp tục chơi, trường hợp chưa chơi hết vòng 4 thì qua vòng kế tiếp, chọn Exit sẽ thoát, Khi chơi hết vòng 4 (xuất hiện bảng bên phải) Re_Play sẽ chơi lại từ đầu, Exit tương tự sẽ thoát. Số 2 marks hay 4 marks là điểm mỗi vòng chơi, điểm này tính theo lượt, nếu số lượt đoán trong một vòng ít tính đến thời điểm đoán đúng-điểm cao; ngược lại thì điểm thấp. 3.3 Gỡ bỏ ứng dụng. Có thể gỡ bỏ ứng dụng bằng một trong hai cách sau: Cách 1: Vào: StartàControl PanelàAdd or Remove ProgramsàChange or Remove ProgramsàSelectcolor 1.00 sau đó chọn Remove. Cánh 2: Vào ổ đĩa cài đặtàVào thư mục bạc lieuàSelectcolorsàUninstall. Phần III: --------------------------------------------------------------------------------------------------- Chương 1: Nhận xét kết quả đạt được: Nhìn chung chương trình đáp ứng đúng yêu cầu của đề tài, hiện giờ tạm thời vẫn chưa phát hiện lỗi (trừ những lỗi trên hệ điều hành sẽ đề cập tới sau).. Sự tùy chọn dùng chuột hoặc bàn phím là linh hoạt đối với người chơi, thích hợp đối với cả người quen dùng chuột và người quen với bàn phím. Trò chơi đoán màu không phải quá xa lạ với mọi người, tuy nhiên việc đưa con trỏ vào có thể xem là một điều mới mẽ. Do không phải là trò chơi dễ, lại mang tính chất suy luận cao, ngay cả bản thân xây dựng chương trình mà cũng khó thắng liên tiếp 4 vòng, nên quyết định nếu chơi thua, người chơi có quyền chơi lại vòng vừa rồi theo tùy chọn mà không phải chơi lại từ đầu. Điều này giúp người chơi bớt nản; Chúng ta có thể thấy rõ điều này như sau: Vòng 1 gồm 4 màu, máy chọn 1 trong 4 sẽ có một tổ hợp chập 1 của 4 sẽ có:4 cách chọn cho 1 vị trí thứ nhất, và vị trí thứ 2,3,4 tương tự. Vậy muốn có một dãy 4 màu do máy chọn thì máy chọn 4 lần. 4 màu như vậy theo công thức nhân là:44 =256 cách, trong khi đó người chơi chỉ có tổng số 40 lần nhấp chuột chọn hoặc ấn phím thích hợp. Đó chỉ là vòng đơn giản nhất, vòng khó nhất máy chọn 4 màu từ 7 màu, số khả năng xảy ra sẽ là 74=2401, trong khi số lần ấn phím hoặc Click chuột tối đa của người chọn vẫn là con số 40. Tuy nhiên, theo suy luận con số sẽ giảm đáng kể, song trên thực tế tới vòng 4, người chơi giỏi tới mức độ nào đi chăng nữa thì cũng rất rất khó, yếu tố may mắn trở nên quan trọng và cũng phải kể đến. Do đó, nếu thua mà chơi lại từ đầu sẽ mau nản, việc chơi lại vòng vừa thua sẽ cần thiết thay vì chơi lại từ đầu, và nó là một tính năng được đưa vào trò chơi. Một vấn đề khác nảy sinh, nếu lỡ Click hoặc ấn phím vô tình sai mong muốn, người chơi không có quyền xóa bỏ màu đó để chọn lại. Ban đầu, tính năng này được đưa vào, nhưng thấy không phù hợp nên nó bị gở bỏ; bởi vì nếu tại một vị trí chọn đi chọn lại nhiều lần thì việc thắng cuộc khá dễ dàng, còn nếu chỉ cho phép đặt lại màu một lần, thì cũng giảm bớt độ khó. Do đó tính năng này bị gỡ bỏ. Về giao diện, theo hướng dẫn trên thanh trạng thái, người chơi dễ dàng hơn cho những lựa chọn, tuy giao diện không mấy thân thiện người dùng nhưng vẫn có thể đáp ứng tối thiểu: thoát khỏi trò chơi nếu không muốn tiếp tục. Chương 2: Hạn chế: Khi sử dụng Demo hoặc khi chỉnh sửa chương trình, những hạn chế sau bộc lộ. 2.1 Đối với người chơi: Giao diện không được đẹp lắm, con chuột rê trên nút là một thí dụ điển hình, một ý tưởng khi rê chuột vào, nút màu sẽ bị chìm xuống, tuy nhiên vẫn chưa thể đưa vào chương trình, do khả năng bản thân còn hạn chế. Lại thêm một khía cạnh rất quan trọng trong việc lập trình Game, bên cạnh đồ họa bắt mắt, tính dễ chơi thì âm thanh giúp làm Game hấp dẫn hơn, tuy nhiên, cho tới giờ phút này việc đưa âm thanh vào vẫn còn là một ý tưởng. Không hiểu vì sao thủ tục phát ra âm thanh trên Pascal không phát ra tác dụng, dù không phát hiện một lỗi nào, và hiện giờ không phải với bản thân em, mà với nhiều người nó vẫn còn là một ẩn số. Những lỗi lạ, thí dụ chạy chương trình trên máy ảo Virtual PC 2007 gọi hàm trì hoãn Delay lại luôn theo mong muốn, trong khi trên máy thực lại thường chạy nhanh hơn, việc làm dòng chữ chạy ngang nhanh hơn bình thường là thí dụ, hay mỗi lần Click chuột vào một nút chữ Click sẽ hiện ra trên nút và mất đi, nhưng lúc lại được, lúc lại không, trong khi trên máy ảo lại hoàn toàn theo ý muốn. 2.2 Đối với việc chỉnh sửa: Tuy các thủ tục làm cho chương trình sáng sủa hơn, các chú thích hỗ trợ tốt cho việc lập trình hơn. Bên cạnh hiệu quả của lệnh nhảy không điều kiện Goto trong Pascal lại phát sinh một vấn đề khác. Có thể nói lệnh nhảy Goto viết một cách rất có hiệu quả các thay đổi tuần tự, cụ thể ở đây là dùng trong tùy chọn của người chơi thông qua các hộp tùy chọn, dùng lệnh này không cần vất vã như các cấu trúc điều khiển được cung cấp sẳn có, có thể nói thấy như thế nào thì viết như thế đó. Nhưng đó mới là vấn đề, việc lạm dụng lệnh nhảy goto làm chương trình khó hiểu, rất khó trong việc chỉnh sửa chương trình, nhất là đối với người không phải chính là người viết nên chương trình. 2.3 Đối với việc chọn ngôn ngữ cài đặt: Thường một người tập viết Game thường bắt đầu bằng các ngôn ngữ cơ bản nhất như C, Pascal do nó quen thuộc, và tài liệu tham khảo về nó khá nhiều. Tuy nhiên,khi viết bằng các ngôn ngữ này sẽ khó hơn so với các ngôn ngữ mới phát triển sau này, VB 2005 là thí dụ tiêu biểu. Ban đầu, việc chọn VB 2005 là lựa chọn đúng đắn, nhưng do yêu thích ngôn ngữ Pascal, gắn bó với ngôn ngữ này từ thời phổ thông, nên quyết định chọn ngôn ngữ này để cài đặt, chấp nhận sự hạn chế. Khó khăn lớn nhất là việc xây dựng giao diện. Việc định nghĩa các chương trình con điều khiển chuột là quá khó, do đó trong trò chơi, chỉ dừng lại ở việc Click chuột trái hoặc chuột phải, tuy nhiên chỉ cùng tác dụng là nhấp chọn mà thôi. Hơn nữa theo xu thế hiện nay ít ai dùng tới Pascal trong việc lập trình Game. Có thể nói việc chọn ngôn ngữ này cũng là hạn chế. 2.4 Phạm vi chạy ứng dụng: Do một số hệ điều hành không hỗ trợ Dos như Windows 7 hay Windows Vista trò chơi này không chạy được. Do đó muốn chơi được trò này phải cài Windows XP hay các đời Windows sau XP như là một ứng dụng trên Windows 7 hay Vista. Vấn đề khác, khi chạy chương trình trên máy Laptop thì Font hiển thị không còn đúng nữa. Chương 3: Hướng phát triển: Từ những phân tích ở trên, có hai đề xuất cho hướng phát triển như sau: 3.1 Hướng thứ nhất: Dùng lại chương trình sẵn có, làm giao diện thân thiện hơn với người sử dụng, có thể đưa thêm các tính năng như âm thanh,…và khắc phục tình trạng nhiều lệnh nhảy, thay vào đó bằng các lệnh có cấu trúc để chương trình dể bảo trì, sửa chữa hơn… 3.2 Hướng thứ hai: Cài đặt lại bằng một ngôn ngữ mới phù hợp hơn cho việc lập trình Game, và đưa các tính năng mới thích hợp như đã nêu trên vào chương trình và kế thừa những tính năng cũ. Hướng thứ nhất: tiết kiệm được nhiều thời gian, cũng như phù hợp đối với sự yêu thích ngôn ngữ Pascal. Tuy nhiên theo xu hướng phát triển của hệ điều hành, MS.Dos không được hỗ trợ nữa và không thể chạy ứng dụng. Hướng thứ hai: thích hợp hơn đối với lập trình Game, tuy nhiên phải cài đặt từ đầu. Chương 4: Bài học kinh nghiệm: Thứ nhất: thông gì khác trước nhất là lòng kiên trì, làm giao diện chuột quá khó trên thư viện Dos; nhiều lúc định bỏ cuộc, cuối cùng mọi cố gắng cũng không vô ích. Điều này khiến em tin các hạn chế của chương trình sẽ khắc phục trong thời gian ngắn, cũng như là bài học về kiên nhẫn, nói xa hơn có thể áp dụng khi gặp những khó khăn trong thực tế, như là việc xây dựng giải thuật giải quyết vấn đề khó khăn. Thứ hai: Giúp bản thân nắm vững hơn về ngôn ngữ Pascal, cũng như có kinh nghiệm hơn trong việc lập trình cấu trúc, (các cấu trúc lệnh ngôn ngữ lập trình chỉ khác nhau về hình thức, bản chất vẫn giống nhau), hay là cách định nghĩa chương trình con, các chú thích khi viết chương trình cũng là cần thiết…thuận lợi cho việc viết chương trình. Ngoài ra, việc trình bày niên luận cũng là một bày học tốt cho việc trình bày báo cáo khoa học. Phần 4: --------------------------------------------------------------------------------------------------- TÀI LIỆU THAM KHẢO 1. Trần Phước Nghĩa Bài giảng Lập trình Pascal, ĐH. Bạc Liêu. 2. Bùi Việt Hà Lập trình Pascal, Tập ba, NXB. Giáo dục. 3. Tô Văn Nam Tin học đại cương, Turbo Pascal, NXB. Khoa Học và Kĩ Thuật. 4. Tin học 11 Tin học 11, NXB Giáo Dục.

Các file đính kèm theo tài liệu này:

  • docNiên luận 1- Sử dụng ngôn ngữ Borland Pascal 70 cài đặt chương trình theo yêu cầu đề tài, và giao diện xây dựng trên màn hình đồ họaTrò Chơi Đoán Màu.doc