Bonjour !
Je me suis amusé à adapter pour Linux le jeu écrit par par M.Dlb à l'occasion du défi Pascal 2011. (Le lien de téléchargement du programme original se trouve ici.)
Il reste apparemment quelques petites choses à corriger mais le jeu se compile et fonctionne. Je ne l'ai testé que sous Linux mais en principe il devrait toujours fonctionner aussi sous Windows.
Il y a un problème que je n'ai pas réussi à résoudre dans la procédure DrawPixel de l'unité sdl_utils. Je ne sais pas si c'est une erreur dans le code ou si c'est lié au fait que je compile en 64 bits. Chaque appel de la procédure déclenche une exception de type Range check error.
Du coup j'ai mis un Exit; au début de la procédure, en attendant mieux. Ça n'empêche pas l'affichage d'être correct : apparemment la procédure n'est pas vraiment indispensable, ou alors je n'ai pas compris à quoi elle sert.
Je réalise que ça n'a pas beaucoup de sens de vérifier Length(InitialPixelLocation^).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 procedure DrawPixel(Surface: PSDL_Surface; X, Y: Integer; Color: PSDL_Color); var BytesPerPixel, PixelColor, ScreenPitch: LongWord; InitialPixelLocation: PLongBuffer; begin Exit; // <--- BytesPerPixel := Surface^.Format^.BytesPerPixel; ScreenPitch := Surface^.Pitch; InitialPixelLocation := Surface^.Pixels; WriteLn('X=', X, ' Y=', Y, ' BytesPerPixel=', BytesPerPixel, ' ScreenPitch=', ScreenPitch, ' Length(InitialPixelLocation^)=', Length(InitialPixelLocation^)); PixelColor := SDL_MapRGB(Surface^.Format, Color^.R, Color^.G, Color^.B); try InitialPixelLocation^[Y * (ScreenPitch div BytesPerPixel) + X] := PixelColor; except on E: Exception do begin WriteLn({$I %FILE%} + ' ' + {$I %LINE%} + ' ' + E.Message); Halt; end; end; end;
Il y a aussi une violation d'accès quand on quitte le programme.
Voilà, si quelqu'un veut m'aider à corriger les dernières erreurs, il sera bienvenu.
Partager