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

Đề tài: Mã nguồn C | Thiết kế trò chơi xe tăng theo OOP

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

    Mặc định Mã nguồn C | Thiết kế trò chơi xe tăng theo OOP

    Để ôn luyện lại 1 số kiến thức đã học về C++, mình thiết kế lại 1 đoạn trong game xe tăng của mình viết hồi trước nhưng viết theo chuẩn mới để compile trên 1 số compiler mới như VC++ 2008
    Mời các bạn xem qua và góp ý thêm cho hoàn thiện.
    Mô hình thiết kế như sau:

    Chú thích:
    ox,oy, odir là các tọa độ x,y cũ và phương hướng cũ (old x, old y,old direction)
    pat là kí tự đại diện cho đạn hoặc xe tăng.
    processInput sẽ xử lý các phím ng` dùng nhập vào:
    __di chuyển: w,a,s,d
    __bắn: space bar
    ConsoleFunction lấy từ 1 số code của bạn bvKim
    Để tiện debug nên mình ko tách các file class và cpp ra riêng -.-'

    File Const_Enum.h
    C++ Code:
    1. /*
    2. * Class: ConsoleFunction
    3. * Enum: Direction, ColorType
    4. * const varriable: MAXX,MAXY,MINX,MINY,DELAY
    5. */
    6. #ifndef __CONST_ENUM__H__
    7. #define __CONST_ENUM__H__
    8. #include<windows.h>
    9. #include<iostream>
    10. //////////////////////////////////////////////////////////////
    11. const int MAXX=79,MAXY=23,MINX=0,MINY=0;
    12. const int DELAY=10;
    13. //////////////////////////////////////////////////////////////
    14. enum Direction { UP,DOWN,LEFT,RIGHT};
    15. enum ColorType
    16. {
    17.     // foreground  
    18.     FG_BLACK        = 0x0000,
    19.     FG_NAVY         = 0x0001,
    20.     FG_GREEN        = 0x0002,
    21.     FG_TEAL         = 0x0003,
    22.     FG_BROWN        = 0x0004,
    23.     FG_PURPLE       = 0x0005,
    24.     FG_OLIVE        = 0x0006,
    25.     FG_LIGHT_GRAY   = 0x0007,
    26.     FG_INTENSITY    = 0x0008,
    27.     FG_MEDIUM_BLUE  = 0x0009,  
    28.     FG_GRAY         = 0x0008 | 0x0000,
    29.     FG_BLUE         = 0x0008 | 0x0001,
    30.     FG_LIME         = 0x0008 | 0x0002,
    31.     FG_CYAN         = 0x0008 | 0x0003,
    32.     FG_RED          = 0x0008 | 0x0004,
    33.     FG_FUCHSIA      = 0x0008 | 0x0005,
    34.     FG_YELLOW       = 0x0008 | 0x0006,
    35.     FG_WHITE        = 0x0008 | 0x0007,
    36.     FG_SILVER       = 0x0008 | 0x0008,  
    37.  
    38.     // background  
    39.     BG_BLUE         = 0x0010,
    40.     BG_GREEN        = 0x0020,
    41.     BG_RED          = 0x0040,
    42.     BG_INTENSITY    = 0x0080,
    43. };
    44. //////////////////////////////////////////////////////////////
    45. class ConsoleFunction
    46. {
    47.     public:
    48.         static void gotoxy(const int &_x,const int &_y)
    49.         {
    50.             COORD coord={_x,_y};
    51.             SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord);
    52.         }
    53.  
    54.         static void put_char(const char &_c)
    55.         {
    56.             std::cout.put(_c);
    57.         }
    58.  
    59.         static void textcolor(const ColorType _color)
    60.         {
    61.             SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),_color);
    62.         }
    63. };
    64. //////////////////////////////////////////////////////////////
    65. #endif
    66. //////////////////////////////////////////////////////////////

    File Bullet.h
    C++ Code:
    1. #ifndef __BULLET_H__
    2. #define __BULLET_H__
    3. #include"Const_Enum.h"
    4. //////////////////////////////////////////////////////////////
    5. class Bullet
    6. {
    7.     friend class Tank;
    8.     friend class Game;
    9.     private:
    10.         int x,y,ox,oy;
    11.         ColorType color;
    12.         int dir,ban;
    13.         char pat;
    14.     public:
    15.         Bullet();
    16.         Bullet(const ColorType&,const char&);
    17.         void draw() const;
    18.         void del() const;
    19.         bool isHit() const;
    20. };
    21. //////////////////////////////////////////////////////////////
    22. Bullet::Bullet(): ox(1),oy(1),x(1),y(1),
    23.                     color(FG_WHITE),dir(UP),pat('o'),ban(0)
    24. { }
    25. //////////////////////////////////////////////////////////////
    26. Bullet::Bullet(const ColorType &_color,const char &_pat):
    27.     ox(1),oy(1),x(1),y(1),dir(UP),color(_color),pat(_pat),ban(0)
    28. { }
    29. //////////////////////////////////////////////////////////////
    30. void Bullet::draw() const
    31. {
    32.     ConsoleFunction::textcolor(color);
    33.     ConsoleFunction::gotoxy(x,y);
    34.     ConsoleFunction::put_char(pat);
    35. }
    36. //////////////////////////////////////////////////////////////
    37. void Bullet::del() const
    38. {
    39.     ConsoleFunction::gotoxy(ox,oy);
    40.     ConsoleFunction::put_char(' ');
    41. }
    42. //////////////////////////////////////////////////////////////
    43. bool Bullet::isHit() const
    44. {
    45.     if( x<MINX || y<MINY || x>MAXX || y>MAXY )
    46.         return true;
    47.     return false;
    48. }
    49. //////////////////////////////////////////////////////////////
    50. #endif
    51. //////////////////////////////////////////////////////////////

    File Tank.h
    C++ Code:
    1. #ifndef __TANK_H__
    2. #define __TANK_H__
    3. #include"Bullet.h"
    4. class Tank
    5. {
    6.     friend class Game;
    7.     private:
    8.         int x,y,ox,oy;
    9.         ColorType color;
    10.         int dir,odir;
    11.         char pat;
    12.         Bullet dan;
    13.     public:
    14.         Tank();
    15.         Tank(const int&,const int&,const ColorType,const Direction,const char&,const char&);
    16.         void draw() const;
    17.         void del() const;
    18.         bool isOk() const;
    19.         void moveLeft();
    20.         void moveRight();
    21.         void moveUp();
    22.         void moveDown();
    23.         void shoot();
    24. };
    25. //////////////////////////////////////////////////////////////
    26. Tank::Tank() : ox(12),x(12),oy(12),y(12),odir(UP),dir(UP),
    27.                                         color(FG_WHITE),pat('*'),dan()
    28. {
    29.     //
    30.     Tank::draw();
    31. }
    32. //////////////////////////////////////////////////////////////
    33. Tank::Tank(const int &_x,const int &_y,
    34.             const ColorType _color,const Direction _dir,
    35.             const char &_tankpat,const char &_danpat) :
    36.             ox(_x),x(_x),oy(_y),y(_y),color(_color),
    37.             pat(_tankpat),dir(_dir),odir(_dir),dan(_color,_danpat)
    38. {
    39.     if(!isOk())
    40.     {
    41.         ox=x=12;
    42.         oy=y=12;
    43.     }
    44.     Tank::draw();
    45. }
    46. //////////////////////////////////////////////////////////////
    47. void Tank::draw() const
    48. {
    49.     ConsoleFunction::textcolor(color);
    50.     switch(dir)
    51.     {
    52.         case UP:
    53.             ConsoleFunction::gotoxy(x,y-1),ConsoleFunction::put_char(pat);
    54.             ConsoleFunction::gotoxy(x-1,y),ConsoleFunction::put_char(pat);
    55.             ConsoleFunction::gotoxy(x,y),ConsoleFunction::put_char(pat);
    56.             ConsoleFunction::gotoxy(x+1,y),ConsoleFunction::put_char(pat);
    57.             ConsoleFunction::gotoxy(x-1,y+1),ConsoleFunction::put_char(pat);
    58.             ConsoleFunction::gotoxy(x+1,y+1),ConsoleFunction::put_char(pat);
    59.             break;
    60.         case LEFT:
    61.             ConsoleFunction::gotoxy(x-1,y),ConsoleFunction::put_char(pat);
    62.             ConsoleFunction::gotoxy(x,y),ConsoleFunction::put_char(pat);
    63.             ConsoleFunction::gotoxy(x,y-1),ConsoleFunction::put_char(pat);
    64.             ConsoleFunction::gotoxy(x,y+1),ConsoleFunction::put_char(pat);
    65.             ConsoleFunction::gotoxy(x+1,y-1),ConsoleFunction::put_char(pat);
    66.             ConsoleFunction::gotoxy(x+1,y+1),ConsoleFunction::put_char(pat);
    67.             break;
    68.         case RIGHT:
    69.             ConsoleFunction::gotoxy(x+1,y),ConsoleFunction::put_char(pat);
    70.             ConsoleFunction::gotoxy(x,y),ConsoleFunction::put_char(pat);
    71.             ConsoleFunction::gotoxy(x,y-1),ConsoleFunction::put_char(pat);
    72.             ConsoleFunction::gotoxy(x,y+1),ConsoleFunction::put_char(pat);
    73.             ConsoleFunction::gotoxy(x-1,y-1),ConsoleFunction::put_char(pat);
    74.             ConsoleFunction::gotoxy(x-1,y+1),ConsoleFunction::put_char(pat);
    75.             break;
    76.         case DOWN:
    77.             ConsoleFunction::gotoxy(x,y+1),ConsoleFunction::put_char(pat);
    78.             ConsoleFunction::gotoxy(x,y),ConsoleFunction::put_char(pat);
    79.             ConsoleFunction::gotoxy(x-1,y),ConsoleFunction::put_char(pat);
    80.             ConsoleFunction::gotoxy(x+1,y),ConsoleFunction::put_char(pat);
    81.             ConsoleFunction::gotoxy(x-1,y-1),ConsoleFunction::put_char(pat);
    82.             ConsoleFunction::gotoxy(x+1,y-1),ConsoleFunction::put_char(pat);
    83.             break;
    84.     }
    85. }
    86. //////////////////////////////////////////////////////////////
    87. void Tank::del() const
    88. {
    89.     switch(odir)
    90.     {
    91.         case UP:
    92.             ConsoleFunction::gotoxy(ox,oy-1),ConsoleFunction::put_char(' ');
    93.             ConsoleFunction::gotoxy(ox-1,oy),ConsoleFunction::put_char(' ');
    94.             ConsoleFunction::gotoxy(ox,oy),ConsoleFunction::put_char(' ');
    95.             ConsoleFunction::gotoxy(ox+1,oy),ConsoleFunction::put_char(' ');
    96.             ConsoleFunction::gotoxy(ox-1,oy+1),ConsoleFunction::put_char(' ');
    97.             ConsoleFunction::gotoxy(ox+1,oy+1),ConsoleFunction::put_char(' ');
    98.             break;
    99.         case LEFT:
    100.             ConsoleFunction::gotoxy(ox-1,oy),ConsoleFunction::put_char(' ');
    101.             ConsoleFunction::gotoxy(ox,oy),ConsoleFunction::put_char(' ');
    102.             ConsoleFunction::gotoxy(ox,oy-1),ConsoleFunction::put_char(' ');
    103.             ConsoleFunction::gotoxy(ox,oy+1),ConsoleFunction::put_char(' ');
    104.             ConsoleFunction::gotoxy(ox+1,oy-1),ConsoleFunction::put_char(' ');
    105.             ConsoleFunction::gotoxy(ox+1,oy+1),ConsoleFunction::put_char(' ');
    106.             break;
    107.         case RIGHT:
    108.             ConsoleFunction::gotoxy(ox+1,oy),ConsoleFunction::put_char(' ');
    109.             ConsoleFunction::gotoxy(ox,oy),ConsoleFunction::put_char(' ');
    110.             ConsoleFunction::gotoxy(ox,oy-1),ConsoleFunction::put_char(' ');
    111.             ConsoleFunction::gotoxy(ox,oy+1),ConsoleFunction::put_char(' ');
    112.             ConsoleFunction::gotoxy(ox-1,oy-1),ConsoleFunction::put_char(' ');
    113.             ConsoleFunction::gotoxy(ox-1,oy+1),ConsoleFunction::put_char(' ');
    114.             break;
    115.         case DOWN:
    116.             ConsoleFunction::gotoxy(ox,oy+1),ConsoleFunction::put_char(' ');
    117.             ConsoleFunction::gotoxy(ox,oy),ConsoleFunction::put_char(' ');
    118.             ConsoleFunction::gotoxy(ox-1,oy),ConsoleFunction::put_char(' ');
    119.             ConsoleFunction::gotoxy(ox+1,oy),ConsoleFunction::put_char(' ');
    120.             ConsoleFunction::gotoxy(ox-1,oy-1),ConsoleFunction::put_char(' ');
    121.             ConsoleFunction::gotoxy(ox+1,oy-1),ConsoleFunction::put_char(' ');
    122.             break;
    123.     }
    124. }
    125. //////////////////////////////////////////////////////////////
    126. bool Tank::isOk() const
    127. {
    128.     //check if tank is outside of display
    129.     if( x<MINX+1 || y<MINY+1 || x>MAXX-1 || y>MAXY-1 )
    130.         return false;
    131.     //if bound map or else...not write yet
    132.     return true;
    133. }
    134. //////////////////////////////////////////////////////////////
    135. void Tank::moveLeft()
    136. {
    137.     if(dir==LEFT)
    138.     {
    139.         x--;
    140.         if(!isOk())
    141.         {
    142.             x++;
    143.             return;
    144.         }
    145.         del();
    146.         draw();
    147.         ox=x;
    148.     }
    149.     else
    150.     {
    151.         dir=LEFT;
    152.         del();
    153.         draw();
    154.         odir=dir;
    155.     }
    156. }
    157. //////////////////////////////////////////////////////////////
    158. void Tank::moveRight()
    159. {
    160.     if(dir==RIGHT)
    161.     {
    162.         x++;
    163.         if(!isOk())
    164.         {
    165.             x--;
    166.             return;
    167.         }
    168.         del();
    169.         draw();
    170.         ox=x;
    171.     }
    172.     else
    173.     {
    174.         dir=RIGHT;
    175.         del();
    176.         draw();
    177.         odir=dir;
    178.     }
    179. }
    180. //////////////////////////////////////////////////////////////
    181. void Tank::moveUp()
    182. {
    183.     if(dir==UP)
    184.     {
    185.         y--;
    186.         if(!isOk())
    187.         {
    188.             y++;
    189.             return;
    190.         }
    191.         del();
    192.         draw();
    193.         oy=y;
    194.     }
    195.     else
    196.     {
    197.         dir=UP;
    198.         del();
    199.         draw();
    200.         odir=dir;
    201.     }
    202. }
    203. //////////////////////////////////////////////////////////////
    204. void Tank::moveDown()
    205. {
    206.     if(dir==DOWN)
    207.     {
    208.         y++;
    209.         if(!isOk())
    210.         {
    211.             y--;
    212.             return;
    213.         }
    214.         del();
    215.         draw();
    216.         oy=y;
    217.     }
    218.     else
    219.     {
    220.         dir=DOWN;
    221.         del();
    222.         draw();
    223.         odir=dir;
    224.     }
    225. }
    226. //////////////////////////////////////////////////////////////
    227. void Tank::shoot()
    228. {
    229.     if(dan.ban)return;
    230.     dan.dir=dir;
    231.     switch(dir)
    232.     {
    233.         case UP:
    234.             dan.ox=dan.x=x;
    235.             dan.oy=dan.y=y-2;
    236.             break;
    237.         case DOWN:
    238.             dan.ox=dan.x=x;
    239.             dan.oy=dan.y=y+2;
    240.             break;
    241.         case LEFT:
    242.             dan.ox=dan.x=x-2;
    243.             dan.oy=dan.y=y;
    244.             break;
    245.         case RIGHT:
    246.             dan.ox=dan.x=x+2;
    247.             dan.oy=dan.y=y;
    248.     }
    249.     if(!dan.isHit())
    250.     {
    251.         dan.draw();
    252.         dan.ban=1;
    253.     }
    254. }
    255. //////////////////////////////////////////////////////////////
    256. #endif
    257. //////////////////////////////////////////////////////////////

    File Game.h
    C++ Code:
    1. #ifndef __GAME_H__
    2. #define __GAME_H_
    3. #include<conio.h>
    4. #include"Tank.h"
    5. #include<time.h>
    6. //////////////////////////////////////////////////////////////
    7. class Game
    8. {
    9.     private:
    10.         Tank player1;
    11.         char key;
    12.     public:
    13.         Game();
    14.         void processInput(char& );
    15.         void Run();
    16.         void moveBullet();
    17. };
    18. //////////////////////////////////////////////////////////////
    19. Game::Game(): player1(12,12,FG_BLUE,UP,'x',2),key(';') //edit the last 2 parameters for fun ;)
    20. {}
    21. //////////////////////////////////////////////////////////////
    22. void Game::processInput(char &c)
    23. {
    24.     switch(c)
    25.     {
    26.         case 'w':
    27.             player1.moveUp();
    28.             break;
    29.         case 's':
    30.             player1.moveDown();
    31.             break;
    32.         case 'd':
    33.             player1.moveRight();
    34.             break;
    35.         case 'a':
    36.             player1.moveLeft();
    37.             break;
    38.         case ' ':
    39.             player1.shoot();
    40.     }
    41. }
    42. //////////////////////////////////////////////////////////////
    43. void Game::Run()
    44. {
    45.     //clock_t start,end;
    46.     while(key!=27)
    47.     {
    48.         if(player1.dan.ban==1)moveBullet();
    49.         else
    50.         {
    51.             if(_kbhit())
    52.             {
    53.                 key=_getch();
    54.                 processInput(key);
    55.             }
    56.             //vs comp...not write yet
    57.         }
    58.     }
    59. }
    60. //////////////////////////////////////////////////////////////
    61. void Game::moveBullet()
    62. {
    63.     clock_t start,end;
    64.     start=clock();
    65.     while(player1.dan.ban==1)
    66.     {
    67.         if(_kbhit())
    68.         {
    69.             key=_getch();
    70.             processInput(key);
    71.             if(key==27)return;
    72.         }
    73.         end=clock();
    74.         if(end-start>DELAY)
    75.         {
    76.             switch(player1.dan.dir)
    77.             {
    78.                 case UP:
    79.                     player1.dan.y--;
    80.                     break;
    81.                 case DOWN:
    82.                     player1.dan.y++;
    83.                     break;
    84.                 case LEFT:
    85.                     player1.dan.x--;
    86.                     break;
    87.                 case RIGHT:
    88.                     player1.dan.x++;
    89.                     break;
    90.             }
    91.  
    92.             if(player1.dan.isHit())
    93.             {
    94.                 player1.dan.del();
    95.                 player1.dan.ban=0;
    96.                 return;
    97.             }
    98.  
    99.             player1.dan.del();
    100.             player1.dan.draw();
    101.             player1.dan.ox=player1.dan.x;
    102.             player1.dan.oy=player1.dan.y;
    103.             start=clock();
    104.         }
    105.     }
    106. }
    107. //////////////////////////////////////////////////////////////
    108. #endif
    109. //////////////////////////////////////////////////////////////

    Cuối cùng là file Main.cpp
    C++ Code:
    1. /********************************************************************
    2. * Demo Tank                                                         *
    3. * Written by Nguyễn Vũ Cương                                       *
    4. * Credits to bvKim @ forum.congdongcviet.com for Const_Enum.h header    *
    5. *********************************************************************/
    6. #include"Game.h"
    7. //////////////////////////////////////////////////////////////
    8. int main()
    9. {
    10.     Game Demo;
    11.     Demo.Run();
    12.     return 0;
    13. }
    14. //////////////////////////////////////////////////////////////


    code ra gió bão

  2. #2
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    - Code viết tốt quá ! Thêm vài cái simulation nữa thì tuyệt vời em nhỉ !
    - Anh mới đọc sơ qua thấy có chỗ này hơi thừa, ở nhà không có VC++, phải lên trường mới test được, có gì anh sẽ coi lại sau, chắc thêm vài chức năng nữa cho nó sống động thì thật tuyệt vời.
    - Trong class Tank :
    C++ Code:
    1. void Tank::drawHelper( int dx, int dy, int direction, char _char ) const
    2. {
    3.     switch( direction )
    4.     {
    5.     case UP :
    6.         ConsoleFunction::gotoxy( dx    , dy - 1 ), ConsoleFunction::put_char( _char );
    7.         ConsoleFunction::gotoxy( dx - 1, dy     ), ConsoleFunction::put_char( _char );
    8.         ConsoleFunction::gotoxy( dx    , dy     ), ConsoleFunction::put_char( _char );
    9.         ConsoleFunction::gotoxy( dx + 1, dy     ), ConsoleFunction::put_char( _char );
    10.         ConsoleFunction::gotoxy( dx - 1, dy + 1 ), ConsoleFunction::put_char( _char );
    11.         ConsoleFunction::gotoxy( dx + 1, dy + 1 ), ConsoleFunction::put_char( _char );
    12.         break;
    13.        
    14.     case LEFT :
    15.         ConsoleFunction::gotoxy( dx - 1, dy     ), ConsoleFunction::put_char( _char );
    16.         ConsoleFunction::gotoxy( dx    , dy     ), ConsoleFunction::put_char( _char );
    17.         ConsoleFunction::gotoxy( dx    , dy - 1 ), ConsoleFunction::put_char( _char );
    18.         ConsoleFunction::gotoxy( dx    , dy + 1 ), ConsoleFunction::put_char( _char );
    19.         ConsoleFunction::gotoxy( dx + 1, dy - 1 ), ConsoleFunction::put_char( _char );
    20.         ConsoleFunction::gotoxy( dx + 1, dy + 1 ), ConsoleFunction::put_char( _char );
    21.         break;
    22.  
    23.     case RIGHT:
    24.         ConsoleFunction::gotoxy( dx + 1, dy     ), ConsoleFunction::put_char( _char );
    25.         ConsoleFunction::gotoxy( dx    , dy     ), ConsoleFunction::put_char( _char );
    26.         ConsoleFunction::gotoxy( dx    , dy - 1 ), ConsoleFunction::put_char( _char );
    27.         ConsoleFunction::gotoxy( dx    , dy + 1 ), ConsoleFunction::put_char( _char );
    28.         ConsoleFunction::gotoxy( dx - 1, dy - 1 ), ConsoleFunction::put_char( _char );
    29.         ConsoleFunction::gotoxy( dx - 1, dy + 1 ), ConsoleFunction::put_char( _char );
    30.         break;
    31.        
    32.     case DOWN:
    33.         ConsoleFunction::gotoxy( dx    , dy + 1 ), ConsoleFunction::put_char( _char );
    34.         ConsoleFunction::gotoxy( dx    , dy     ), ConsoleFunction::put_char( _char );
    35.         ConsoleFunction::gotoxy( dx - 1, dy     ), ConsoleFunction::put_char( _char );
    36.         ConsoleFunction::gotoxy( dx + 1, dy     ), ConsoleFunction::put_char( _char );
    37.         ConsoleFunction::gotoxy( dx - 1, dy - 1 ), ConsoleFunction::put_char( _char );
    38.         ConsoleFunction::gotoxy( dx + 1, dy - 1 ), ConsoleFunction::put_char( _char );
    39.         break;
    40.     }
    41. }
    42.  
    43. void Tank::del() const
    44. {
    45.     drawHelper( ox, oy, odir, ' ' );
    46. }
    47.  
    48. void Tank::draw() const
    49. {
    50.     ConsoleFunction::textcolor( color );
    51.     drawHelper( x, y, dir, pat );
    52. }
    Hàm draw() và del() là giống nhau y chang, thay vì viết lại 2 hàm, gôm lại thành 1 hàm sẽ tiện hơn !

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

    hihihi game hay quá
    Kim có tên trong credit vui thiệt ^^!
    Ước mơ vươn tới Linux Developer.
    Đang trong quá trình tập luyện:
    1. C system programming
    2. GNU distribution
    3. Gtk+/Gnome Application Programming.

    Bác nào giỏi lĩnh vực này giúp Kim với nha. Kim cám ơn nhiều !!!

  4. #4
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    - Kim và 622 cùng thiết kế cho nó hoành tráng thêm đi. Làm 1 project cho ra hồn còn hơn làm 10 ! Nó rất lợi đó, thử xem sao !
    - Thiết kế UML trước, rồi hãy viết, code đó có 1 chỗ chưa hay là dùng friend class quá nhiều, điều này break encapsulation. Cho nó giữ 1 pointer đến class sẽ flexible hơn( hide implementation ).
    - moveBulltet tại sao lại để Game class handle nhỉ ? Cho viên đạn nó tự move luôn có lẽ hay hơn !
    - processInput tại sao nhận vào 1 tham chiếu trong khi nó không chỉnh sữa dữ liệu ?
    - const Enum& vẫn ok, em thiếu vài chỗ thì phải !

  5. #5
    Ngày gia nhập
    04 2008
    Bài viết
    336

    hi hi cám ơn anh r2 đã test
    em cũng biết là friend nhiều quá ko tốt ..., chỗ processInput giờ em mới thấy -.-' ... còn đoạn moveBullet vì trước đây viết theo C nên giờ làm như vậy .... cho nhanh.
    Em sắp phải thi cuối kỳ rồi nên giờ bận quá ... khi nào rảnh em lại viết tiếp :P
    code ra gió bão

  6. #6
    Ngày gia nhập
    08 2009
    Bài viết
    1

    Mặc định Mã nguồn C | Thiết kế trò chơi xe tăng theo OOP

    Cho mình hỏi chút. Khi mình dùng BorlandC3.1 để dịch thử thì thấy báo lỗi:
    "Can't not open include file "Const_Enum.h"". Mọi người giải thích giúp mình tại sao thế và có cách xử lý không vậy?

Các đề tài tương tự

  1. Trò chơi caro viết bằng VC++ (Đầy đủ mã nguồn)
    Gửi bởi anhhat trong diễn đàn Dự án & Source code VC++
    Trả lời: 13
    Bài viết cuối: 23-02-2014, 06:26 AM
  2. Phần mềm trò chơi Tâng Bóng công khai mã nguồn
    Gửi bởi thuthuatit88 trong diễn đàn Software (Phần mềm) | Ebooks
    Trả lời: 0
    Bài viết cuối: 02-08-2012, 06:52 AM
  3. ADO.NET Sử dụng thư viện mã nguồn mở FreeImage để load hình ảnh, làm sao để tăng tốc độ?
    Gửi bởi xilanhthanki trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 0
    Bài viết cuối: 21-09-2011, 02:06 PM
  4. Làm trò chơi Dodgem theo thuật toán cắt tỉa alpha-beta?
    Gửi bởi thanh_rio trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 26-10-2010, 11:16 AM
  5. Mã nguồn C | Trò chơi đi tìm kho báu viết bằng C
    Gửi bởi NVL trong diễn đàn Thủ thuật, Tutorials và Mã nguồn C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 28-09-2007, 07:13 PM

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