paul_nicholls

Untitled

Feb 10th, 2026
268
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 1.88 KB | None | 0 0
  1. program spectrumJoystick;
  2.  
  3. target = spectrum;
  4.  
  5. *      = $8000;
  6.  
  7. uses
  8.   zxspectrum_graphics,spectrum_joy,spectrum_irq;
  9.  
  10. type
  11.   TPlayer = record
  12.     x       : Byte;
  13.     y       : Byte;
  14.     nx      : Byte;
  15.     ny      : Byte;
  16.   end;
  17.  
  18. var
  19.   player : TPlayer;
  20.  
  21. procedure vbInterrupt;
  22. begin
  23. end;
  24.  
  25. procedure player_draw;
  26. begin
  27.   charAt_bmpfont(player.y,player.x,ord('@'),white,black,ROM_CHARSET);
  28. end;
  29.  
  30. procedure erase;
  31. begin
  32.   charAt_bmpfont(player.y,player.x,ord(' '),white,black,ROM_CHARSET);
  33. end;
  34.  
  35. procedure player_drawTail;
  36. begin
  37.   charAt_bmpfont(player.y,player.x,ord('.'),yellow,black,ROM_CHARSET);
  38. end;
  39.  
  40. const
  41.   FRAME_COUNT = 6;
  42.  
  43. var
  44.   frame : Byte;
  45.  
  46. begin
  47.   ROM_CLS();
  48.   BORDER(cyan);
  49.  
  50.   setupInterrupt(@vbInterrupt);
  51.  
  52.   player.x  := SCREEN_WIDTH  / 2;
  53.   player.y  := SCREEN_HEIGHT / 2;
  54.   player.nx := player.x;
  55.   player.ny := player.y;
  56.  
  57.   while true do begin
  58.     waitFor_vblank();
  59.    
  60.     read_Kempston();
  61.      
  62.     Inc(frame);
  63.  
  64.     // slowdown movement
  65.     if frame >= FRAME_COUNT then begin
  66.       frame := 0;
  67.       player_drawTail();
  68.      
  69.       if (joystick.dx = JOY_LEFT) then begin
  70.         player.nx      := player.x - 1;
  71.         if (player.nx and 128) then player.nx := 0;
  72.       end
  73.       else
  74.       if (joystick.dx = JOY_RIGHT)  then begin
  75.         player.nx      := player.x + 1;
  76.         if player.nx >= SCREEN_WIDTH then player.nx := SCREEN_WIDTH - 1;
  77.       end;
  78.      
  79.       if (joystick.dy = JOY_UP) then begin
  80.         player.ny      := player.y - 1;
  81.         if (player.ny and 128) then player.ny := 0;
  82.       end
  83.       else
  84.       if (joystick.dy = JOY_DOWN)  then begin
  85.         player.ny      := player.y + 1;
  86.         if player.ny >= SCREEN_HEIGHT then player.ny := SCREEN_HEIGHT - 1;
  87.       end;
  88.      
  89.       player.x := player.nx;
  90.       player.y := player.ny;
  91.       player_draw();
  92.     end;
  93.   end;
  94. end.
  95.  
  96.  
Advertisement
Add Comment
Please, Sign In to add comment