C: Hur man installerar och använder Allegro på sin Windows-dator

De här instruktionerna gäller för Visual Studio 2010, och jag har provkört dem på en 64-bitars Windows 7.

(Det fungerade inte med en Windows som kör inuti VirtualBox.)

1. Ladda hem

Man kan ladda ner källkoden till biblioteket och kompilera den, men det är lite krångligt, så vi väljer att ladda hem en färdigkompilerad, eller "binär", version av biblioteket.

Leta fram den senaste versionen. Man kan hitta den via länken Files på Allegro-webbplatsen allegro.cc. När jag skriver detta (9 juni 2011) heter filen allegro-5.0.3-msvc-10.0.zip. Alternativt finns det en lokal kopia här: allegro-5.0.3-msvc-10.0.zip (från 2011-06-09).

"msvc-10.0" betyder Microsoft Visual C++ 10.0, vilket är den C- och C++-kompilator som ingår i Visual Studio 2010.

2. Packa upp och installera

Bestäm var du vill placera Allegro-bibliotekets filer, och packa upp Zip-filen. Själv valde jag att lägga det hela i mappen C:\Allegro:

Den uppackade zip-filen allegro-5.0.3-msvc-10.0.zip

(Beroende på hur man gör när man packar upp Zip-filen kan det bli en extra mappnivå, så filerna hamnar exempelvis i C:\Allegro\allegro-5.0.3-msvc-10.0, men det går bra att flytta dem.)

Nu är Allegro installerat! Det var inte svårare än så. Men för att det ska fungera sen när man programmerar i Visual Studio, måste man tala om för Visual Studio var Allegro-filerna finns, så glöm inte bort var du lagt dem.

I den här mappen finns tre undermappar, bin, include och lib.

Om vi börjar med mappen include så finns där de header-filer som vi ska inkludera i våra Allegro-program.

include-mappen

Som synes ligger de flesta av dem i en undermapp, allegro5, och därför kommer vi att skriva till exempel #include <allegro5/allegro.h> och inte bara #include <allegro.h>.

I mappen lib finns de biblioteksfiler som Allegro-programmen behöver. Filändelsen "lib" betyder "library", alltså "bibliotek". Det är här är så att säga själva biblioteket med Allegro-funktioner som vi kan anropa från våra Allegro-program, uppdelat på flera olika filer och i olika versioner. Till exempel finns det särskilda versioner för debugging.

lib-mappen

I mappen bin finns DLL-filer. "DLL" betyder "dynamic-link library", och är en annan variant av biblioteksfiler.

bin--mappen

3. Gör ett program

Starta Visual Studio 2010, och skapa ett nytt projekt. (Klicka på File, välj sen New, och Project.) Vi ska skapa ett tomt projekt, utan någon för-genererad kod, så vi väljer Visual C++ som språk, och Empty Project:

Ett tomt projekt i Visual C++

Här kan man läsa mer om hur man skapar ett enkelt C-program i Visual Studio 2010.

Skapa en källkodsfil, till exempel med namnet Allegrospel.c, och skriv in eller kopiera följande programkod:

// A very simple Allegro program

#include <stdlib.h>
#include <stdio.h>
#define USE_CONSOLE
#include <allegro5/allegro.h>
#include <allegro5/allegro_primitives.h>

int main(int argc, char *argv[]) {
    ALLEGRO_DISPLAY *display = NULL;

    // Initializing allegro
    if (!al_init()) {
        fprintf(stderr, "Couldn't initialize allegro. Sorry.\n");
        return EXIT_FAILURE;
    }

    if (!al_init_primitives_addon()) {
        fprintf(stderr, "Couldn't initialize allegro addons. Sorry.\n");
        return EXIT_FAILURE;
    }

    // Creating a window
    display = al_create_display(400, 300);
    if (display == NULL) {
        fprintf(stderr, "Couldn't create the window.\n");
        return EXIT_FAILURE;
    }

    // Painting it green
    al_clear_to_color(al_map_rgb(0, 255, 0)); 
    al_draw_filled_rectangle(200, 100, 250, 150, al_map_rgb(255, 0, 0));
    al_flip_display();

    printf("Now you should see a green window with a red square.\n");
    printf("Press ENTER to exit.\n");
    getchar();

    // Exiting the program
    al_destroy_display(display);

    return EXIT_SUCCESS;
}

Ögna igenom programkoden och gissa vad den gör!

4. Tala om för Visual Studio var Allegro-filerna finns

Om vi nu försöker kompilera och provköra programmet, kommer vi att få en massa felmeddelanden. Det första problemet är att include-filen allegro5/allegro.h inte hittas. Och det är ju egentligen inte så konstigt, för vi har inte talat om för Visual Studio var Allegros include-filer finns.

Kom ihåg var vi packade upp Allegro-paketet:

Den uppackade zip-filen allegro-5.0.3-msvc-10.0.zip

Include-filerna finns förstås i mappen include. Det är alltså filer som ska inkluderas i Allegro-programmen med #include, på samma sätt som till exempel stdio.h. De innehåller deklarationer av de programrutiner som Allegro-programmen kommer att anropa. (En deklaration i C talar om att en funktion finns, vad den heter och vilka parametrar man kan skicka till den, men funktionskroppen, med vad funktionen faktiskt gör, finns inte med.)

Vi skulle kunna kopiera Allegros include-filer till Visual C++:s mapp med system-include-filer, men ett bättre sätt är att låta Allegros include-filer ligga kvar där de är, och tala om för Visual Studio var de finns. Därför klickar vi på Project i menylisten, och väljer projektnamn Properties..., så får vi fram projektets egenskapsfönster (eller "property-fönster", om man vill prata svengelska). Använd menyträdet till vänster för att komma fram till allmänna inställningar för C/C++, och markera Additional Include Directories ("ytterligare include-kataloger"):

Egenskaper för projektet

Lägg till namnet på Allegros include-katalog, C:\Allegro\include om det var där du placerade den:

Vi lägger till include-katalogen

Klicka på OK för att lägga in ändringen och komma tillbaka till egenskapsfönstret.

Vi måste också tala om för Visual Studio vilka biblioteksfiler vårt Allegro-program ska använda sig av. Därför fortsätter vi i egenskapsfönstret, och använder menyträdet till vänster för att komma fram till indata till länkaren. Markera Additional Dependencies ("ytterligare beroenden"):

Egenskaper för projektet

Lägg till ett ytterligare beroende, allegro-5.0.3-monolith-mt-debug.lib. Det är nämligen den bibliotekesfilen vi ska länka med. Så här:

Vi lägger till biblioteksfilen

Klicka på OK för att lägga in ändringen och komma tillbaka till egenskapsfönstret.

Dessutom måste vi tala om var den och de andra biblioteksfilerna finns. Därför fortsätter vi i egenskapsfönstret, och använder menyträdet till vänster för att komma fram till de allmänna inställningarna för länkaren. Markera Additional Library Directories ("ytterligare bibliotekskataloger"):

Egenskaper för projektet

Lägg till namnet på Allegros bibliotekskatalog, i det här fallet C:\Allegro\lib:

Vi lägger till bibliotekskatalogen

Klicka på OK för att lägga in ändringen och komma tillbaka till egenskapsfönstret.

En sista inställning som vi måste göra är att tala om var DLL-filerna finns. Välj Debugging i menyn till vänster, och Environment:

Egenskaper för projektet

Katalogen med DLL-filerna, C:\Allegro\bin, ska finnas med i sökvägen till körbara program, som finns i omgivningsvariabeln PATH Det här är texten vi ska skriva in: PATH=C:\Allegro\bin;%PATH%

Vi lägger till bin-katalogen i sökvägen

Klicka på OK för att lägga in ändringen och komma tillbaka till egenskapsfönstret.

Klicka till slut på OK i egenskapsfönstret.

5. Provkör programmet

Kompilera ("bygg") och provkör programmet.

Ett tillägg: Om man använder Visual Studio 2013 kan man få ett felmeddelande om att 'char' followed by 'bool' is illegal. Man kan behöva lägga till #define ALLEGRO_HAVE_STDBOOL_H i sitt program, ovanför #include av Allegro-filer.

Om allt är rätt ska det dyka upp ett grönt fönster med en röd ruta:

Gröna rutan

Detta är det 400 gånger 300 bildpunkter stora fönster som vi skapade med anropet al_create_display(400, 300) i vårt program. Den gröna färgen skapade vi med al_map_rgb(0, 255, 0), för G:et i RGB står ju just för "grönt".

Dessutom dyker det upp ett konsolfönster, eftersom programmet skriver och läser med hjälp av printf och getchar:

Konsolfönstret

En lite lustig effekt är vad som händer om man minimerar det gröna spelfönstret, och sen öppnar det igen. Då blir det svart:

Svarta rutan

I grafiska fönstersystem, som Microsoft Windows eller Unix-världens X, brukar själva systemet inte lagra och komma ihåg innehållet i de fönster som visas på skärmen. I stället måste programmet som kör i fönstret rita upp innehållet på nytt varje gång fönstret visas, till exempel om det varit minimerat eller dolt av ett annat fönster. Men det här testprogrammet är upptaget med att stå och vänta på inmatning (med getchar), så det kan inte rita något!

Vi har konfigurerat projektet för att använda debug-versionen av Allegro-biblioteket. Det passar bra när vi utvecklar och provkör våra egna Allegro-program, men om vi ska skriva spel och distribuera dem till andra, bör vi använda en annan konfiguration. Den som vill lära sig mer om detta kan läsa mer i Allegro-dokumentationen (www.allegro.cc/manual) och i Allegro-wikin (wiki.allegro.cc).


Thomas Padron-McCarthy (thomas.padron-mccarthy@oru.se), 9 maj 2016