Công cụ bảo vệ mã nguồn .NET mạnh nhất, không thể unpack, miễn phí cho các khách hàng đầu tiên đăng ký.

Xem kết quả thăm dò: Cảm nhận về GF(Bỏ phiếu công khai)

  • Lắm comment quá :(

    1 50.00%
  • Có vẻ OOP

    1 50.00%
  • Sao không tạo abstract class manager

    0 0%
  • Vừa dài vừa cồng kềnh, cứ cho hết vào main.cpp có hơn không

    0 0%
Thăm dò cho phép bỏ nhiều lựa chọn - Bạn không thể bỏ phiếu ở thăm dò này
Số người bỏ phiếu 2.
Từ 1 tới 2 trên tổng số 2 kết quả

Đề tài: GF GameFrameWork đơn giản cho dân gà.

  1. #1
    Ngày gia nhập
    09 2008
    Nơi ở
    Kĩ viện
    Bài viết
    169

    Mặc định GF GameFrameWork đơn giản cho dân gà.

    Chào!.

    Một chủ nhật mát mẻ, không trăng không sao(đang là buổi sáng).

    Mình định viết tiếp cái bài hướng dẫn cơ bản về Ogre. Nhưng chợt nhận ra rằng cái bài đó đã quá dài và lằng nhằng, bây giờ lại code tiếp vào đấy nữa thì...

    Đã làm thì làm cho chót, chơi hẳn cái FrameWork cho gọn.

    Tạo một foder mới ở đâu đó, với tên gì đó. Trong foder đó tạo 2 foder con là Inc và Src(include và source).

    Mở VC++2005 or 2008. 2003 trở xuống lởm không chơi. Chọn File->New->Project From Existing Code..., Next -> Ra một cái bảng như sau.



    Tên project thích đặt là gì thì tùy, Next, Next -> Ra một cái bảng như sau.



    Rồi finish. Được một project mới . Thêm các file như sau.



    GF.h
    Visual C++ Code:
    1. /*-------------------------------------------------------
    2.         -Public Header
    3.         -GF.h
    4.         -Create by NamVoDang
    5. -------------------------------------------------------*/
    6.  
    7. #pragma once
    8. /*-------------------------------------------------------
    9.         -Public Header include
    10. -------------------------------------------------------*/
    11. #include "gfCore.h"
    12. #include "gfRenderManager.h"
    13. #include "gfPhysicManager.h"
    14. #include "gfInputManager.h"
    15. #include "gfGUIManager.h"
    16. /*-------------------------------------------------------
    17.         -Library include
    18. -------------------------------------------------------*/
    19. #include <Ogre.h>
    20. #include <ODE/ODE.h>
    21. #include <OIS/OIS.h>
    22. #include <CEGUI/CEGUI.h>
    23.  
    24. /*-------------------------------------------------------
    25.         -End
    26. -------------------------------------------------------*/
    Tác dụng include tất cả các header của FrameWork.


    gfCore.h
    Visual C++ Code:
    1. /*-------------------------------------------------------
    2.         -Public Header
    3.         -GF.h
    4.         -Create by NamVoDang
    5. -------------------------------------------------------*/
    6.  
    7. #pragma once
    8. /*-------------------------------------------------------
    9.         -Public Header include
    10. -------------------------------------------------------*/
    11. #include "gfCore.h"
    12. #include "gfRenderManager.h"
    13. #include "gfPhysicManager.h"
    14. #include "gfInputManager.h"
    15. #include "gfGUIManager.h"
    16.  
    17. namespace GF
    18. {
    19.     class Core
    20.     {
    21.     private:
    22.         static Core Singleton;
    23.     public:
    24.         static Core& GetInstance();
    25.         static Core* GetInstancePtr();
    26.     private:
    27.         /// Private constuctor
    28.         Core();
    29.     public:
    30.         ~Core();
    31.     private:
    32.         RenderManager * Render_Manager;
    33.         InputManager  * Input_Manager;
    34.         PhysicManager * Physic_Manager;
    35.         GUIManager    * GUI_Manager;
    36.     public:
    37.         RenderManager * GetRenderManager() const ;
    38.         InputManager  * GetInputManager()  const ;
    39.         GUIManager    * GetGUIManager()    const ;
    40.         PhysicManager * GetPhysicManager() const ;
    41.     public:
    42.         /// Startup framework
    43.         void Init();
    44.     };
    45. }
    46.  
    47. /*-------------------------------------------------------
    48.         -End
    49. -------------------------------------------------------*/
    Không có gì đặc biệt, nó là một lớp được tạo duy nhất một thể hiện Singleton. Phụ trách việc tạo và cung cấp các manager.

    gfCore.cpp
    Visual C++ Code:
    1. /*-------------------------------------------------------
    2.         -Header include
    3. -------------------------------------------------------*/
    4. #include "gfCore.h"
    5.  
    6. namespace GF
    7. {
    8.     /// Static init
    9.     Core Core::Singleton = Core();
    10.     //---------------------------------------------------
    11.     Core& Core::GetInstance()
    12.     {
    13.         return Singleton;
    14.     }
    15.     //---------------------------------------------------
    16.     Core* Core::GetInstancePtr()
    17.     {
    18.         return &Singleton;
    19.     }
    20.     //---------------------------------------------------
    21.     Core::Core()
    22.     {
    23.         /// Set null for all pointer
    24.         Render_Manager  = 0;
    25.         Input_Manager   = 0;
    26.         GUI_Manager     = 0;
    27.         Physic_Manager  = 0;
    28.     }
    29.     //---------------------------------------------------
    30.     Core::~Core()
    31.     {
    32.         /// Safe delete all manager
    33.         if(Physic_Manager)
    34.             delete Physic_Manager;
    35.         if(GUI_Manager)
    36.             delete GUI_Manager;
    37.         if(Input_Manager)
    38.             delete Input_Manager;
    39.         if(Render_Manager)
    40.             delete Render_Manager;
    41.     }
    42.     //---------------------------------------------------
    43.     void Core::Init()
    44.     {
    45.         /// Create all manager, exit if one component fail
    46.         Render_Manager = new RenderManager();
    47.         if(!Render_Manager->Init())
    48.             return;
    49.  
    50.         Input_Manager  = new InputManager();
    51.         if(!Input_Manager->Init())
    52.             return;
    53.  
    54.         GUI_Manager    = new GUIManager();
    55.         if(!GUI_Manager->Init())
    56.             return;
    57.  
    58.         Physic_Manager = new PhysicManager();
    59.         if(!Physic_Manager->Init())
    60.             return;
    61.  
    62.         /// Begin game loop
    63.         Render_Manager->Loop();
    64.     }
    65.     //---------------------------------------------------
    66.     RenderManager * Core::GetRenderManager() const
    67.     {
    68.         return Render_Manager;
    69.     }
    70.     //---------------------------------------------------
    71.     InputManager  * Core::GetInputManager()  const
    72.     {
    73.         return Input_Manager;
    74.     }
    75.     //---------------------------------------------------
    76.     GUIManager    * Core::GetGUIManager()    const
    77.     {
    78.         return GUI_Manager;
    79.     }
    80.     //---------------------------------------------------
    81.     PhysicManager * Core::GetPhysicManager() const
    82.     {
    83.         return Physic_Manager;
    84.     }
    85. }
    86.  
    87. /*-------------------------------------------------------
    88.         -End
    89. -------------------------------------------------------*/
    Chỗ method Init() chưa hợp lý lắm nhỉ , game loop nhẽ ra phải ở Core chứ không phải ở Render_Manager . Nhưng tại ku Ogre do thằng Render_Manager nó giữ nên đành thế. Tại không có time, có time viết lại phần loop của nó thì hợp lý hơn .

    Main.cpp
    Visual C++ Code:
    1. /*-------------------------------------------------------
    2.         -Entry point
    3.         -Main.cpp
    4.         -Create by NamVoDang
    5. -------------------------------------------------------*/
    6.  
    7. /*-------------------------------------------------------
    8.         -Windows SDK include
    9. -------------------------------------------------------*/
    10. #include <windows.h>
    11. /*-------------------------------------------------------
    12.         -GF include
    13. -------------------------------------------------------*/
    14. #include <GF.h>
    15.  
    16. INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR strCmdLine, INT )
    17. {
    18.     try
    19.     {
    20.         /// Init frame work
    21.         GF::Core::GetInstance().Init();
    22.         return 0;
    23.     }
    24.     catch(Ogre::Exception& e)
    25.     {
    26.         MessageBox(NULL, e.getFullDescription().c_str(), "An exception has occured!", MB_OK | MB_ICONERROR | MB_TASKMODAL);
    27.     }
    28.     catch(CEGUI::Exception& e)
    29.     {
    30.         MessageBox(NULL, e.getMessage().c_str(), "An exception has occured!", MB_OK | MB_ICONERROR | MB_TASKMODAL);
    31.         }
    32.     catch (std::exception& e)
    33.     {
    34.         MessageBox(NULL, e.what(), "An exception has occured!", MB_OK | MB_ICONERROR | MB_TASKMODAL);
    35.         }
    36.     return 1;/// Fail
    37. }
    38.  
    39. /*-------------------------------------------------------
    40.         -End
    41. -------------------------------------------------------*/

    Ok, tạm thời thế đã, implement chi tiết của các manager post sau.

    Mà lúc đầu định làm một cái abstract class Manager để cho mấy cái manager nó kế thừa nhưng sau lại thôi, vì chả có ích lợi gì cả. Chỉ tổ dài code . OOP là tốt nhưng không nên mù quáng, chỗ nào cũng OOP .

    Đính kèm project bên dưới, constructor của các manager mình đều để private vì nó chỉ nên được tạo bởi Core(Core là friend class ). Còn Core cũng để private nốt vì nó chỉ có mỗi một thể hiện Singleton;

    http://www.mediafire.com/?ghk2m0jdxh2

    P/S: Tự ngĩ, tự viết, không phải dịch, không phải chép, lần đầu tiên post .
    Công cụ bảo vệ mã nguồn .NET mạnh nhất hiện tại, miễn phí cho các khách hàng đầu tiên đăng ký.
    Đã được chỉnh sửa lần cuối bởi NamVoDang : 19-10-2008 lúc 09:02 AM.
    Phá toái hư không - Bạch nhật thăng thiên.

  2. #2
    Ngày gia nhập
    09 2008
    Nơi ở
    Kĩ viện
    Bài viết
    169

    Ok, như người ta thường nói, cái gì mà "một khi đã máu lên" ấy nhỉ?. Thôi không nhớ.

    Quyết định không viết game framework nữa, mà nâng cấp nó thành game engine .
    Từ đó tên cũng phải đổi từ GF(Game FrameWork) sang GF Engine(Guardian Force Game Engine) .

    Ok biết là hâm, nhưng đã hâm thì hâm cho trót. GameEngine này dự định là tập hợp của mấy cái FreeOpenSource dưới một API chung duy nhất, có ngĩa là từ physic, render, GUI,.... đều chung API tất . Người dùng có thể tùy chọn xem dùng cái gì khi chạy game. Ogre hoặc Irrlicht. ODE hoặc Newton(con này không open). CEGUI hay V.v... OIS hay V.v...

    Project đã bắt đầu từ chiều nay. Với Leader NamVoDang(cũng là thành viên duy nhất ).
    http://code.google.com/p/gfengine/

    Hy vọng nó sống được vài tháng , đừng die xớm quá .
    Công cụ bảo vệ mã nguồn .NET mạnh nhất hiện tại, miễn phí cho các khách hàng đầu tiên đăng ký.
    Phá toái hư không - Bạch nhật thăng thiên.

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

  1. Cung cấp giấy ik plus, Paper One, Plus A+, Double A, Giấy Thái Lan, Giấy Bãi Bằng, bìa màu, băng dính, mica các loại
    Gửi bởi dungptvietthanh trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 07-06-2013, 04:05 PM
  2. Chung cư Đại Thanh giảm sốc 10tr/vnđ cho các căn hộ. giảm và liên tục giảm…!!
    Gửi bởi lanthanh91 trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 09-10-2012, 10:27 AM
  3. Trả lời: 0
    Bài viết cuối: 04-08-2012, 03:08 PM
  4. Trả lời: 0
    Bài viết cuối: 24-05-2012, 04:04 PM
  5. Trả lời: 0
    Bài viết cuối: 12-08-2011, 09:20 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