Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program spectrumJoystick;
- target = spectrum;
- * = $8000;
- uses
- zxspectrum_graphics,spectrum_joy,spectrum_irq;
- type
- TPlayer = record
- x : Byte;
- y : Byte;
- nx : Byte;
- ny : Byte;
- end;
- var
- player : TPlayer;
- procedure vbInterrupt;
- begin
- end;
- procedure player_draw;
- begin
- charAt_bmpfont(player.y,player.x,ord('@'),white,black,ROM_CHARSET);
- end;
- procedure erase;
- begin
- charAt_bmpfont(player.y,player.x,ord(' '),white,black,ROM_CHARSET);
- end;
- procedure player_drawTail;
- begin
- charAt_bmpfont(player.y,player.x,ord('.'),yellow,black,ROM_CHARSET);
- end;
- const
- FRAME_COUNT = 6;
- var
- frame : Byte;
- begin
- ROM_CLS();
- BORDER(cyan);
- setupInterrupt(@vbInterrupt);
- player.x := SCREEN_WIDTH / 2;
- player.y := SCREEN_HEIGHT / 2;
- player.nx := player.x;
- player.ny := player.y;
- while true do begin
- waitFor_vblank();
- read_Kempston();
- Inc(frame);
- // slowdown movement
- if frame >= FRAME_COUNT then begin
- frame := 0;
- player_drawTail();
- if (joystick.dx = JOY_LEFT) then begin
- player.nx := player.x - 1;
- if (player.nx and 128) then player.nx := 0;
- end
- else
- if (joystick.dx = JOY_RIGHT) then begin
- player.nx := player.x + 1;
- if player.nx >= SCREEN_WIDTH then player.nx := SCREEN_WIDTH - 1;
- end;
- if (joystick.dy = JOY_UP) then begin
- player.ny := player.y - 1;
- if (player.ny and 128) then player.ny := 0;
- end
- else
- if (joystick.dy = JOY_DOWN) then begin
- player.ny := player.y + 1;
- if player.ny >= SCREEN_HEIGHT then player.ny := SCREEN_HEIGHT - 1;
- end;
- player.x := player.nx;
- player.y := player.ny;
- player_draw();
- end;
- end;
- end.
Advertisement
Add Comment
Please, Sign In to add comment