demo.mod 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. MODULE demo;
  2. FROM tigr IMPORT TigrPtr,tigrWindow,tigrFree,tigrClosed, tigrClear, tigrUpdate, TPixelType,
  3. tigrLine, TK_ESCAPE, tigrKeyDown, tigrReadChar, tfont, tigrPrint,tigrFill,
  4. tigrCircle, tigrRect, tigrFillCircle, tigrTime, tigrError, tigrClip,
  5. tigrFillRect, tigrTextWidth, tigrTextHeight, tigrLoadImage, tigrReadFile,
  6. tigrBitmap, TIGR_2X, tigrSetPostFX, tigrMouse,tigrBlit, tigrBlitAlpha,
  7. tigrEncodeUTF8, TK_RIGHT,tigrKeyHeld, TK_SPACE, TK_LEFT;
  8. FROM helper IMPORT tigrRGB, tigrRGBA;
  9. FROM DynamicStrings IMPORT String, InitStringCharStar, CopyOut;
  10. FROM InOut IMPORT Write, WriteLn, WriteCard,WriteString;
  11. FROM Delay IMPORT Delay;
  12. FROM SYSTEM IMPORT ADDRESS;
  13. FROM SMathLib0 IMPORT exp;
  14. VAR
  15. standing : BOOLEAN;
  16. remaining : SHORTREAL;
  17. backdrop, screen : TigrPtr;
  18. squinkle : TigrPtr;
  19. greeting : ARRAY[0..1023] OF CHAR;
  20. greetingRaw : ADDRESS;
  21. greetingStr : String;
  22. prevx, prevy, prev : CARDINAL;
  23. chars : ARRAY[0..16] OF CHAR;
  24. n : CARDINAL;
  25. dt : SHORTREAL;
  26. x, y ,b : CARDINAL;
  27. c : CARDINAL;
  28. playerx, playery,
  29. playerxs, playerys : CARDINAL;
  30. PROCEDURE update (dt : SHORTREAL);
  31. (* in Modula2, we cannot mix integer and real *)
  32. VAR
  33. oldx, oldy : INTEGER;
  34. fplayerx, fplayery,
  35. fplayerxs, fplayerys : SHORTREAL;
  36. fdx, fdy : SHORTREAL;
  37. foldx, foldy : SHORTREAL;
  38. BEGIN
  39. IF (remaining > 0.0) THEN
  40. remaining := remaining - dt;
  41. END;
  42. (* Read the keyboard and move the player. *)
  43. IF (standing OR (tigrKeyDown(screen, TK_SPACE) >0)) THEN
  44. IF (playerys - 200) >= 0 THEN
  45. playerys := playerys - 200;
  46. ELSE
  47. playerys := 0;
  48. END;
  49. END;
  50. IF ((tigrKeyHeld(screen, TK_LEFT) > 0) OR (tigrKeyHeld(screen, ORD('a')) > 0)) THEN
  51. IF (playerxs - 10) >= 0 THEN
  52. playerxs := playerxs - 10
  53. ELSE
  54. playerxs := 0
  55. END;
  56. END;
  57. IF ((tigrKeyHeld(screen, TK_RIGHT) > 0) OR (tigrKeyHeld(screen, ORD('d')) > 0)) THEN
  58. IF (playerxs + 10) <= 320 THEN
  59. playerxs := playerxs + 10
  60. ELSE
  61. playerxs := 320
  62. END;
  63. END;
  64. (* conversion part betwwen CARDINAL and REAL*)
  65. fplayerxs := FLOAT(playerxs);
  66. fplayerys := FLOAT(playerys);
  67. (* end conversion *)
  68. foldx := fplayerx;
  69. foldy := fplayery;
  70. (* Apply simply physics. *)
  71. fplayerxs := fplayerxs * exp(-10.0 * dt);
  72. fplayerys := fplayery * exp(-2.0 * dt);
  73. fplayerys := fplayerys + (dt * 200.0);
  74. fplayerx := fplayerx + (dt * fplayerxs);
  75. fplayery := fplayery + (dt * fplayerys);
  76. (* Apply collision. *)
  77. playerx := TRUNC(fplayerx);
  78. IF playerx < 8 THEN
  79. playerx := 8;
  80. playerxs := 0;
  81. END;
  82. IF (playerx > screen^.w - 8) THEN
  83. playerx := screen^.w - 8;
  84. playerxs := 0;
  85. END;
  86. END update;
  87. BEGIN
  88. standing := TRUE;
  89. remaining := 0.0;
  90. playerx := 160;
  91. playery := 200;
  92. playerxs := 0;
  93. playerys := 0;
  94. squinkle := tigrLoadImage("squinkle.png");
  95. IF ( squinkle = NIL) THEN
  96. tigrError(0, "Cannot load squinkle.png");
  97. END;
  98. (* Load some UTF-8 text. *)
  99. greetingRaw := tigrReadFile("greeting.txt", 0);
  100. IF (greetingRaw = NIL) THEN
  101. tigrError(0, "Cannot load greeting.txt");
  102. END;
  103. greetingStr := InitStringCharStar(greetingRaw);
  104. CopyOut(greeting, greetingStr);
  105. (* Make a window and an off-screen backdrop. *)
  106. screen := tigrWindow(320, 240, greeting, TIGR_2X);
  107. backdrop := tigrBitmap(screen^.w, screen^.h);
  108. (* Fill in the background. *)
  109. tigrClear(backdrop, tigrRGB(80, 180, 255));
  110. tigrFill(backdrop, 0, 200, 320, 40, tigrRGB(60, 120, 60));
  111. tigrFill(backdrop, 0, 200, 320, 3, tigrRGB(0, 0, 0));
  112. tigrLine(backdrop, 0, 201, 320, 201, tigrRGB(255, 255, 255));
  113. (* Enable post fx *)
  114. tigrSetPostFX(screen, 1.0, 1.0, 1.0, 2.0);
  115. prevx := 0;
  116. prevy := 0;
  117. prev := 0;
  118. (* Maintain a list of characters entered. *)
  119. FOR n := 0 TO 16 BY 1 DO
  120. chars[n] := "_";
  121. END;
  122. WHILE (NOT (tigrClosed(screen) > 0)) OR (tigrKeyDown(screen, TK_ESCAPE) > 0) DO
  123. (* Update the game. *)
  124. dt := tigrTime();
  125. update(dt);
  126. (* Read the mouse and draw lines when pressed. *)
  127. tigrMouse(screen, x, y, b );
  128. IF (b = 1) THEN
  129. IF (prev > 0) THEN
  130. tigrLine(backdrop, prevx, prevy, x, y, tigrRGB(0, 0, 0));
  131. END;
  132. prevx := x;
  133. prevy := y;
  134. prev := 1;
  135. ELSE
  136. prev := 0;
  137. END;
  138. (* Composite the backdrop and sprite onto the screen. *)
  139. tigrBlit(screen, backdrop, 0, 0, 0, 0, backdrop^.w, backdrop^.h);
  140. tigrBlitAlpha(screen, squinkle, playerx - CARDINAL(squinkle^.w / 2), playery - CARDINAL(squinkle^.h), 0, 0,
  141. squinkle^.w, squinkle^.h, 1.0);
  142. tigrPrint(screen, tfont, 10, 10, tigrRGBA(0C0H, 0D0H, 0FFH, 0C0H), greeting);
  143. tigrPrint(screen, tfont, 10, 222, tigrRGBA(0FFH, 0FFH, 0FFH, 0FFH), "A D + SPACE");
  144. (* Grab any chars and add them to our buffer. *)
  145. LOOP
  146. c := tigrReadChar(screen);
  147. IF (c = 0) THEN
  148. EXIT;
  149. END;
  150. FOR n := 1 TO 16 DO
  151. chars[n - 1] := chars[n];
  152. END;
  153. chars[15] := CHR(c);
  154. END;
  155. Write(CHR(c));
  156. tigrUpdate(screen);
  157. END;
  158. (* (* Print out the character buffer too. *)
  159. FOR n := 0 TO 15 DO
  160. tempString := tigrEncodeUTF8(p, chars[n]);
  161. END;
  162. *p = 0;
  163. tigrPrint(screen, tfont, 160, 222, tigrRGB(255, 255, 255), "Chars: %s", tmp); *)
  164. tigrFree(squinkle);
  165. tigrFree(backdrop);
  166. tigrFree(screen);
  167. END demo.