Từ 1 tới 3 trên tổng số 3 kết quả

Đề tài: [Game 1] Trò chơi đoán số

  1. #1
    Ngày gia nhập
    11 2008
    Bài viết
    186

    Wink [Game 1] Trò chơi đoán số

    Bài tập của Kim:

    Máy tính sẽ ngẫu nhiên tạo ra một số bất kì trong một khoảng (0, 100) và yêu cầu người chơi phải đoán ra số đó là số bao nhiêu.

    + Nhiều bạn mới học lập trình chắc sẽ bị thầy cho bài này
    + Các bạn có thể tham khảo ở đây
    + Bài này có thể nói tương đối dễ, nhưng nếu có cái nhìn sâu vào mẫu thiết kê để xử lý bài toán, bạn sẽ thấy cái hay trong đó.

    ps: Kim mới học C++ nên biết sao diễn đạt vậy, nếu có gì sai mong các anh em bỏ qua

    Kim viết nháp dần dần
    đây là kiểu thiết kế thứ nhất:

    = Thiết kế theo dạng chia thành từng module nhỏ rồi lắp ghép vào chương trình chính =

    . Bản nháp chỉ thỏa mãn yêu cầu là game chơi được, không hề catch các exception nảy sinh trong quá trình chơi. Game đảm bảo những yêu cầu tối thiểu nhất.

    . Số lượng file: 3 file
    C++ Code:
    1. 1. game_header.h
    2. Khai báo các module sử dụng
    3.  
    4. 2. game_header.cpp
    5. Định nghĩa các module khai báo trong game_header.h
    6.  
    7. 3. game_main.cpp
    8. Chương trình chính để chạy game.

    Đây là nội dung các file:

    1. game_header.h
    C++ Code:
    1. ///////////////////////////////////////////////////
    2. // @author: bvKim
    3. // @file: game_header.h
    4. // @date 15-Nov-2008
    5. // @purpose:
    6. ///////////////////////////////////////////////////
    7.  
    8. /****************/
    9. /* Preprocessor */
    10. /****************/
    11. #ifndef _GAME_HEADER_H_
    12. #define _GAME_HEADER_H_
    13.  
    14. #include <iostream>
    15. #include <ctime>
    16. #include <cstdlib>
    17.  
    18. #if defined _WIN32_I386_
    19.     #define  CLRSCR   "CLS"
    20.     #include <windows.h>
    21. #elsif defined _NIX_I386_
    22.     #define  CLRSCR   "CLEAR"
    23. #else
    24.     #define  CLRSCR   "CLS"
    25. #endif // CLEAR
    26.  
    27. /******************/
    28. /* Member declare */
    29. /******************/
    30.  
    31. void header();
    32. void footer();
    33. void clear();
    34. void print(const char* _desc, bool _new_line);
    35. int generate(int _min, int _max);
    36. void get_input(int& _in);
    37. enum CMPTYPE {
    38.     SMALL = -1,
    39.     EQUAL = 0,
    40.     GREAT = 1
    41. };
    42. CMPTYPE compare(int const& __pre, int const& __post);
    43.  
    44.  
    45. #endif // _GAME_HEADER_H_

    2. game_header.cpp
    C++ Code:
    1. //////////////////////////////////////////
    2. // @author: bvKim
    3. // @file: game_header.cpp
    4. // @date: 15-Nov-2008
    5. // @purpose:
    6. //////////////////////////////////////////
    7.  
    8. #include "game_header.h"
    9.  
    10. void header()
    11. {
    12.     std::cout <<
    13.         "=== === === GAME: GUESS NUMBER === === ===" << std::endl;
    14. }
    15.  
    16. void footer()
    17. {
    18.     std::cout <<
    19.         "=== === === THE GAME: END === === ===" << std::endl;
    20. }
    21. void clear()
    22. {
    23.     system(CLRSCR);
    24. }
    25. void print(const char* _desc, bool _new_line)
    26. {
    27.     std::cout << _desc;
    28.     if(_new_line)
    29.         std::cout << std::endl;
    30. }
    31.  
    32. int generate(int _min, int _max)
    33. {
    34.     srand(time(NULL));
    35.     return ( rand() % _max +  _min );
    36. }
    37.  
    38. void get_input(int& _in)
    39. {
    40.     std::cin >> _in;
    41. }
    42.  
    43. CMPTYPE compare(int const& __pre, int const& __post)
    44. {
    45.     if ( __pre < __post )
    46.         return SMALL;
    47.     else if ( __pre == __post )
    48.         return EQUAL;
    49.     else
    50.         return GREAT;
    51. }

    3. game_main.cpp
    C++ Code:
    1. //////////////////////////////////////////
    2. // @author: bvKim
    3. // @file: game_main.cpp
    4. // @date: 15-Nov-2008
    5. // @purpose:
    6. //////////////////////////////////////////
    7. /****************/
    8. /* Preprocessor */
    9. /****************/
    10. #include <iostream>
    11. #include "game_header.h"
    12.  
    13. // define architecture
    14. #define _WIN32_I386_
    15.  
    16. /***************/
    17. /* Entry point */
    18. /***************/
    19. int main(int argc, char *argv[])
    20. {
    21.     header();
    22.     int target = generate(0, 100);
    23.     int user_input;
    24.     print("I own a number. Guess it!", true);
    25.     while(EQUAL != compare(user_input, target)) {
    26.         print("Guess: ", false);
    27.         get_input(user_input);
    28.         switch(compare(user_input, target))
    29.         {
    30.             case SMALL:
    31.                 print("# too small...", true); break;
    32.             case EQUAL:
    33.                 print("@ Congratulation! It's the one.", true); break;
    34.             case GREAT:
    35.                 print("# too big...", true); break;
    36.         }
    37.     }
    38.     footer();
    39.  
    40.     // return on success
    41.     return EXIT_SUCCESS;
    42. }

  2. #2
    Ngày gia nhập
    11 2008
    Bài viết
    186

    Red face [Game 1] Trò chơi đoán số = Mẫu thiết kế 2

    Nếu đánh giá mẫu thiết kế trên thì phải gọi là cực kì chuối .

    Vì vậy Kim đưa ra mẫu thiết kế 2 sử dụng OOP để thiết kế đơn giản thế này:



    Và cuối cùng đưa vào xử lý.

    Chú ý: Mẫu này chưa hoàn thiện hoàn toàn ^^!, vẫn như mẫu trước chưa bắt các exception

    1. game_header.h
    C++ Code:
    1. ///////////////////////////////////////////////////
    2. // @author: bvKim
    3. // @file: game_header.h
    4. // @date 15-Nov-2008
    5. // @purpose:
    6. ///////////////////////////////////////////////////
    7.  
    8. /****************/
    9. /* Preprocessor */
    10. /****************/
    11. #ifndef _GAME_HEADER_H_
    12. #define _GAME_HEADER_H_
    13.  
    14. #include <iostream>
    15. #include <ctime>
    16. #include <cstdlib>
    17.  
    18. #if defined _WIN32_I386_
    19.     #define  CLRSCR   "CLS"
    20.     #include <windows.h>
    21. #elsif defined _NIX_I386_
    22.     #define  CLRSCR   "CLEAR"
    23. #else
    24.     #define  CLRSCR   "CLS"
    25. #endif // CLEAR
    26.  
    27. /******************/
    28. /* Member declare */
    29. /******************/
    30.  
    31. class GameUtils {
    32.     public:
    33.         void clear_screen();
    34. };
    35.  
    36. class GameOfNumber {
    37.  
    38.     private:
    39.         int _target;
    40.         int _guess;
    41.  
    42.     public:
    43.         // 1. xu ly lop
    44.         //GameOfNumber();
    45.         //~GameOfNumber();
    46.  
    47.         // 2. cac ham xu ly trang tri
    48.         void header(std::string const&) const;
    49.         void footer(std::string const&) const;
    50.         void print(std::string const&, bool) const;
    51.  
    52.         // 3. ham chinh
    53.         void generate(int const&, int const&);
    54.         void guess();
    55.         int  check() const;
    56. };
    57.  
    58.  
    59. #endif // _GAME_HEADER_H_

    2. game_header.cpp
    C++ Code:
    1. //////////////////////////////////////////
    2. // @author: bvKim
    3. // @file: game_header.cpp
    4. // @date: 15-Nov-2008
    5. // @purpose:
    6. //////////////////////////////////////////
    7.  
    8. #include "game_header.h"
    9.  
    10. /*
    11.  * @class: GameUtils
    12.  */
    13. void GameUtils::clear_screen()
    14. {
    15.     system(CLRSCR);
    16. }
    17.  
    18. /*
    19.  * @class: GameOfNumber
    20.  */
    21.  
    22. /* 1. xu ly lop */
    23.  
    24. /* 2. cac ham trang tri */
    25. void GameOfNumber::header (std::string const& __header_desc) const
    26. {
    27.     std::cout << __header_desc << std::endl;
    28. }
    29.  
    30. void GameOfNumber::footer (std::string const& __footer_desc) const
    31. {
    32.     std::cout << __footer_desc << std::endl;
    33. }
    34.  
    35. void GameOfNumber::print (std::string const& __desc, bool __new_line) const
    36. {
    37.     std::cout << __desc;
    38.     if(__new_line)
    39.         std::cout << std::endl;
    40. }
    41.  
    42. /* 3. ham chinh */
    43.  
    44. void GameOfNumber::generate (int const& __min, int const& __max)
    45. {
    46.     srand( time(NULL) );
    47.  
    48.     this->_target = rand() % __max + __min;
    49. }
    50.  
    51. void GameOfNumber::guess ()
    52. {
    53.     std::cin >> this->_guess;
    54. }
    55.  
    56. int GameOfNumber::check () const
    57. {
    58.     return this->_guess - this->_target;
    59. }

    3. game_main.cpp
    C++ Code:
    1. //////////////////////////////////////////
    2. // @author: bvKim
    3. // @file: game_main.cpp
    4. // @date: 15-Nov-2008
    5. // @purpose:
    6. //////////////////////////////////////////
    7. /****************/
    8. /* Preprocessor */
    9. /****************/
    10. #include <iostream>
    11. #include "game_header.h"
    12. #include <conio.h>
    13. // define architecture
    14. #define _WIN32_I386_
    15.  
    16. /***************/
    17. /* Entry point */
    18. /***************/
    19. int main(int argc, char *argv[])
    20. {
    21.     GameUtils utils;
    22.     GameOfNumber game;
    23.  
    24.     char is_next;
    25.     do {
    26.         utils.clear_screen();
    27.         game.header("=== GAME: NUMBER GUESS ===");
    28.         game.generate(0, 100);
    29.         game.print("I have made a number range 0-100. Guess it!", true);
    30.         while(1) {
    31.             game.print("Guess: ", false);
    32.             game.guess();
    33.             int res = game.check();
    34.             if (res < 0)
    35.                 game.print("# too small ... ", true);
    36.             else if (res > 0)
    37.                 game.print("# too big ... ", true);
    38.             else {
    39.                 game.print("@ Yes! It's the one.", true);
    40.                 break;
    41.             }
    42.         }
    43.         game.footer("=== THE GAME END ===");
    44.  
    45.         game.print("Do you want to continue the game? (Y/N)", false);
    46.  
    47.         is_next = getch();
    48.  
    49.         if (is_next == 'N')
    50.             break;
    51.  
    52.  
    53.     } while ( is_next != 'N' );
    54.     // return on success
    55.     return EXIT_SUCCESS;
    56. }

  3. #3
    Ngày gia nhập
    11 2008
    Bài viết
    186

    Red face [Game 1] Trò chơi đoán số - Thiết kế 2 (addup)

    Đây vẫn là mẫu thiết kế 2 nhưng Kim thêm vào trình xử lý input của user, nếu không nhập vào giá trị số thì bắt nhập lại

    1. game_header.h
    C++ Code:
    1. ///////////////////////////////////////////////////
    2. // @author: bvKim
    3. // @file: game_header.h
    4. // @date 15-Nov-2008
    5. // @purpose:
    6. ///////////////////////////////////////////////////
    7.  
    8. /****************/
    9. /* Preprocessor */
    10. /****************/
    11. #ifndef _GAME_HEADER_H_
    12. #define _GAME_HEADER_H_
    13.  
    14. #include <iostream>
    15. #include <ctime>
    16. #include <cstdlib>
    17. #include <cctype>
    18. #include <sstream>
    19.  
    20. #if defined _WIN32_I386_
    21.     #define  CLRSCR   "CLS"
    22.     #include <windows.h>
    23. #elsif defined _NIX_I386_
    24.     #define  CLRSCR   "CLEAR"
    25. #else
    26.     #define  CLRSCR   "CLS"
    27. #endif // CLEAR
    28.  
    29. /******************/
    30. /* Member declare */
    31. /******************/
    32.  
    33. /********************
    34.  * @class: GameUtils
    35.  ********************/
    36. class GameUtils {
    37.     public:
    38.         void clear_screen() const;
    39.         bool validate(std::string);
    40. };
    41.  
    42. /***********************
    43.  * @class: GameOfNumber
    44.  ***********************/
    45. class GameOfNumber {
    46.  
    47.     private:
    48.         int _target;
    49.         int _guess;
    50.         std::string _input;
    51.         GameUtils utils;
    52.     public:
    53.         // 1. xu ly lop
    54.         //GameOfNumber();
    55.         //~GameOfNumber();
    56.  
    57.         // 2. cac ham xu ly trang tri
    58.         void header(std::string const&) const;
    59.         void footer(std::string const&) const;
    60.         void print(std::string const&, bool) const;
    61.  
    62.         // 3. ham chinh
    63.         void generate(int const&, int const&);
    64.         void guess();
    65.         int  check() const;
    66. };
    67.  
    68.  
    69. #endif // _GAME_HEADER_H_


    2. game_header.cpp
    C++ Code:
    1. //////////////////////////////////////////
    2. // @author: bvKim
    3. // @file: game_header.cpp
    4. // @date: 15-Nov-2008
    5. // @purpose:
    6. //////////////////////////////////////////
    7.  
    8. #include "game_header.h"
    9.  
    10.  
    11. /********************
    12.  * @class: GameUtils
    13.  ********************/
    14.  
    15. /*
    16.  * @method clear_screen()
    17.  * @type void
    18.  * @param
    19.  * @purpose
    20.  *      clear the screen
    21.  */
    22. void GameUtils::clear_screen() const
    23. {
    24.     system(CLRSCR);
    25. }
    26.  
    27. /*
    28.  * @method validate()
    29.  * @type bool
    30.  * @param __int std::string
    31.  * @purpose
    32.  *      validate an input
    33.  */
    34. bool GameUtils::validate(std::string __in)
    35. {
    36.     typedef std::string::iterator IT;
    37.     IT it = __in.begin();
    38.     for(IT e  = __in.end(); it != e; ++it) {
    39.         if(!isdigit(*it))
    40.             return false;
    41.     }
    42.     return true;
    43. }
    44.  
    45.  
    46. /***********************
    47.  * @class: GameOfNumber
    48.  ***********************/
    49.  
    50. /* 1. xu ly lop */
    51.  
    52. /* 2. cac ham trang tri */
    53. /*
    54.  * @method header()
    55.  * @type void
    56.  * @param __header_desc std::string const&
    57.  * @purpose
    58.  *      print the game header
    59.  */
    60. void GameOfNumber::header (std::string const& __header_desc) const
    61. {
    62.     std::cout << __header_desc << std::endl;
    63. }
    64.  
    65. /*
    66.  * @method footer()
    67.  * @type void
    68.  * @param __footer_desc std::string const&
    69.  * @purpose
    70.  *      print the game footer
    71.  */
    72. void GameOfNumber::footer (std::string const& __footer_desc) const
    73. {
    74.     std::cout << __footer_desc << std::endl;
    75. }
    76.  
    77. /*
    78.  * @method print()
    79.  * @type void
    80.  * @param __desc std::string const&
    81.  * @param __new_line bool
    82.  * @purpose
    83.  *      print an output string
    84.  */
    85. void GameOfNumber::print (std::string const& __desc, bool __new_line) const
    86. {
    87.     std::cout << __desc;
    88.     // if new line is set
    89.     if(__new_line)
    90.         std::cout << std::endl;
    91. }
    92.  
    93. /* 3. ham chinh */
    94.  
    95. /*
    96.  * @method generate()
    97.  * @type void
    98.  * @param __min int const&
    99.  * @param __max int const&
    100.  * @purpose
    101.  *      generate a random number in range [__min...__max]
    102.  */
    103. void GameOfNumber::generate (int const& __min, int const& __max)
    104. {
    105.     srand( time(NULL) );
    106.  
    107.     this->_target = rand() % __max + __min;
    108. }
    109.  
    110. /*
    111.  * @method guess()
    112.  * @type void
    113.  * @param
    114.  * @purpose
    115.  *      player makes a guess
    116.  */
    117. void GameOfNumber::guess ()
    118. {
    119.     // get input
    120.     std::cin >> this->_input;
    121.     // validate player's input
    122.     while (!utils.validate(this->_input)) {
    123.         this->print("<!> Invalid input...again plz", true);
    124.         std::cin >> this->_input;
    125.     }
    126.     // as long as input valid, convert it to number
    127.     std::istringstream buffer(this->_input);
    128.     buffer >> this->_guess;
    129. }
    130.  
    131. /*
    132.  * @method check()
    133.  * @type void
    134.  * @param
    135.  * @purpose
    136.  *      make a comparison
    137.  */
    138. int GameOfNumber::check () const
    139. {
    140.     return this->_guess - this->_target;
    141. }


    3. game_main.cpp
    C++ Code:
    1. //////////////////////////////////////////
    2. // @author: bvKim
    3. // @file: game_main.cpp
    4. // @date: 15-Nov-2008
    5. // @purpose:
    6. //////////////////////////////////////////
    7. /****************/
    8. /* Preprocessor */
    9. /****************/
    10. #include <iostream>
    11. #include "game_header.h"
    12. #include <conio.h>
    13. // define architecture
    14. #define _WIN32_I386_
    15.  
    16. /***************/
    17. /* Entry point */
    18. /***************/
    19. int main(int argc, char *argv[])
    20. {
    21.     // tao doi tuong game
    22.     GameUtils utils;
    23.     GameOfNumber game;
    24.  
    25.     char is_next;
    26.     do {
    27.         // xoa man hinh truoc khi choi
    28.         utils.clear_screen();
    29.         // in ra header
    30.         game.header("=== GAME: NUMBER GUESS ===");
    31.         // thuc hien tao so
    32.         game.generate(0, 100);
    33.         // in ra de bai
    34.         game.print("I have made a number range 0-100. Guess it!", true);
    35.         while(1) {
    36.             // nguoi choi phai doan
    37.             game.print("Guess: ", false);
    38.             game.guess();
    39.             // kiem tra gia tri doan
    40.             int res = game.check();
    41.             if (res < 0)
    42.                 game.print("# too small ... ", true);
    43.             else if (res > 0)
    44.                 game.print("# too big ... ", true);
    45.             else {
    46.                 // neu chinh xac thi thoat ra khoi vong lap
    47.                 game.print("@ Yes! It's the one.", true);
    48.                 break;
    49.             }
    50.         }
    51.         // in ra footer
    52.         game.footer("=== THE GAME END ===");
    53.         // hoi nguoi choi xem co muon choi tiep hay ko
    54.         game.print("Do you want to continue the game? (Y/N)", false);
    55.         // cho lay input
    56.         is_next = getch();
    57.         // neu la n hoac N thi thoi nghi game di :D
    58.         if (is_next == 'N' || is_next == 'n')
    59.             break;
    60.  
    61.     } while ( is_next != 'N' ); // neu ma nguoi choi van muon tiep tuc
    62.  
    63.     // return on success
    64.     return EXIT_SUCCESS;
    65. }

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn