Cross-Platform Game Development for C++ Developers, Part IV: ClanLib SDK | CodeGuru

Cross-Platform Game Development for C++ Developers, Part IV: ClanLib SDK

Inside the ClanLib Feature Set Before digging into the API, take a quick glance at its major features: Basic cross-platform runtime (GUI, threading, file I/O, and so forth) Template-based C++ signal/slots library (type-safe callbacks/delegates) Integrated resource management Sound mixer supporting .WAV files, Ogg Vorbis, and anything supported by the MikMod library (MOD, S3M, XM, and […]

Written By
CodeGuru Staff
CodeGuru Staff
Sep 7, 2005
1 minute read
CodeGuru content and product recommendations are editorially independent. We may make money when you click on links to our partners. Learn More

Inside the ClanLib Feature Set

Before digging into the API, take a quick glance at its major features:

  • Basic cross-platform runtime (GUI, threading, file I/O, and so forth)
  • Template-based C++ signal/slots library (type-safe callbacks/delegates)
  • Integrated resource management
  • Sound mixer supporting .WAV files, Ogg Vorbis, and anything supported by the MikMod library (MOD, S3M, XM, and so on)
  • Document Object Model (DOM) XML parser support
  • High-level 2D graphics API supporting OpenGL, DirectX, and SDL as render targets
  • Batch rendering engine for best performance when rendering 2D with OpenGL
  • 2D collision detection
  • 2D sprite animation support
  • Highly customizable GUI framework
  • Network library with low- to high-level interfaces

The Basic Gaming Model of ClanLib

Now, examine the ClanLib API model from the inside out. I’ve always found that the best tutorial is a fully explained example program. Specifically, you’ll look inside Luke Worth’s boxes, an electronic version of the two-player, paper-and-pencil game (see Figure 2). The boxes game consists of a grid of points between which players alternately draw lines. Whoever encloses a square with the final line, scores one point and gets to play another turn. (If you’re eager to see the API reference first, by all means do so.)

Figure 2. A Boxes Game in Progress with a Score of Blue 8 and Red 3

I purposely kept the main program as short as possible to better highlight the “game loop:”

 1 #include <iostream>
 2 #include <ClanLib/application.h>
 3 #include <ClanLib/core.h>
 4 #include <ClanLib/display.h>
 5 #include <ClanLib/gl.h>
 6 #include <ClanLib/sound.h>
 7 #include <ClanLib/vorbis.h>
 8
 9 const int boardsize = 6, spacing = 50, border = 20;
10 const int numsquares = int(pow(float(boardsize - 1), 2));
11
12 enum coloursquare { off, blue, red };
13 struct cursor {
14    int x, y;
15    bool vert;
16 };
17
18 class Boxes: public CL_ClanApplication {
19    bool ver[boardsize][boardsize - 1];
20    bool hor[boardsize - 1][boardsize];
21    coloursquare squares[boardsize - 1][boardsize - 1];
22    bool redturn;
23    bool fullup;
24    cursor curs;
25
26    void inputHandler(const CL_InputEvent &i);
27    bool findsquares(void);
28    inline int numaroundsquare(int x, int y);
29    void init();
30    void drawBoard();
31    void endOfGame();
32
33 public:
34    virtual int Boxes::main(int, char **);
35 } app;
36
37 using namespace std;

40
41 int Boxes::main(int, char **)
42 {
43    int winsize = spacing * (boardsize - 1) + border * 2;
44    try {
45       Boxes::init();
46       while (!CL_Keyboard::get_keycode(CL_KEY_ESCAPE)) {
47          Boxes::drawBoard();
48          if (fullup) break;
49          CL_System::keep_alive(20);
50    }
51    Boxes::endOfGame();
52
53    CL_SetupVorbis::deinit();
54    CL_SetupSound::deinit();
55    CL_SetupGL::deinit();
56    CL_SetupDisplay::deinit();
57    CL_SetupCore::deinit();
58    }
59    catch (CL_Error err) {
60       std::cout << "Exception caught: "
                   << err.message.c_str()
                   << std::endl;
61    }
62
63 return 0;
64 }
CodeGuru Logo

CodeGuru covers topics related to Microsoft-related software development, mobile development, database management, and web application programming. In addition to tutorials and how-tos that teach programmers how to code in Microsoft-related languages and frameworks like C# and .Net, we also publish articles on software development tools, the latest in developer news, and advice for project managers. Cloud services such as Microsoft Azure and database options including SQL Server and MSSQL are also frequently covered.

Property of TechnologyAdvice. © 2026 TechnologyAdvice. All Rights Reserved

Advertiser Disclosure: Some of the products that appear on this site are from companies from which TechnologyAdvice receives compensation. This compensation may impact how and where products appear on this site including, for example, the order in which they appear. TechnologyAdvice does not include all companies or all types of products available in the marketplace.