demo10.pas 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. program demo10;
  2. {$I zglCustomConfig.cfg}
  3. uses
  4. zgl_main,
  5. zgl_screen,
  6. zgl_window,
  7. zgl_timers,
  8. zgl_keyboard,
  9. zgl_fx,
  10. zgl_file,
  11. zgl_textures,
  12. zgl_textures_png,
  13. zgl_textures_jpg,
  14. zgl_tiles_2d,
  15. zgl_font,
  16. zgl_text,
  17. zgl_math_2d,
  18. zgl_utils
  19. ;
  20. var
  21. dirRes : UTF8String = 'data/';
  22. fntMain : zglPFont;
  23. map : zglTTiles2D;
  24. texTiles : zglPTexture;
  25. procedure Init;
  26. var
  27. i, j : Integer;
  28. f : zglTFile;
  29. begin
  30. zgl_Enable( CORRECT_RESOLUTION );
  31. scr_CorrectResolution( 800, 600 );
  32. fntMain := font_LoadFromFile( dirRes + 'font.zfi' );
  33. texTiles := tex_LoadFromFile( dirRes + 'tiles.png' );
  34. tex_SetFrameSize( texTiles, 32, 32 );
  35. // RU: Инициализация тайлов размером 32x32. Параметр Count указывает на количество тайлов по X и Y. Массив Tiles содержит кадры для каждого тайла.
  36. // EN: Initialization of tiles with size 32x32. Parameter Count set amount of tiles on X and Y. Array Tiles contains frames for every tile.
  37. map.Size.W := 32;
  38. map.Size.H := 32;
  39. map.Count.X := 25;
  40. map.Count.Y := 19;
  41. SetLength( map.Tiles, map.Count.X, map.Count.Y );
  42. // RU: Заполняем карту "травой", 19 кадр.
  43. // EN: Fill the map by "grass", 19 frame.
  44. for i := 0 to map.Count.X - 1 do
  45. for j := 0 to map.Count.Y - 1 do
  46. map.Tiles[ i, j ] := 19;
  47. // RU: Загружаем карту из бинарного файла.
  48. // EN: Load map from binary file.
  49. file_Open( f, dirRes + 'ground.map', FOM_OPENR );
  50. for i := 0 to map.Count.X - 1 do
  51. file_Read( f, map.Tiles[ i, 0 ], map.Count.Y * SizeOf( Integer ) );
  52. file_Close( f );
  53. end;
  54. procedure Draw;
  55. begin
  56. // RU: Рендерим тайлы в координатах 0,0.
  57. // EN: Render tiles in coordinates 0,0.
  58. tiles2d_Draw( texTiles, 0, 0, @map );
  59. text_Draw( fntMain, 0, 0, 'FPS: ' + u_IntToStr( zgl_Get( RENDER_FPS ) ) );
  60. text_Draw( fntMain, 180, 30, 'This is a tarrible example of tile map, but main idea should be clear :)' );
  61. end;
  62. Begin
  63. randomize();
  64. zgl_Reg( SYS_LOAD, @Init );
  65. zgl_Reg( SYS_DRAW, @Draw );
  66. scr_SetOptions( 800, 600, REFRESH_MAXIMUM, FALSE, FALSE );
  67. zgl_Init();
  68. End.