From ca8a8fb9a1718ba90033ac5c78ea14a44a431009 Mon Sep 17 00:00:00 2001 From: JailDoctor Date: Sun, 14 Aug 2022 16:55:10 +0200 Subject: [PATCH] Joc funcional, rebot dels ORNIs no original --- .gitignore | 2 + asteroids.cpp | 56 ++++++---- crt.h | 43 ++++---- keyboard.h | 296 +++++++++++++++++++++----------------------------- 4 files changed, 179 insertions(+), 218 deletions(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d002ffd --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +*.exe +.vscode/* diff --git a/asteroids.cpp b/asteroids.cpp index 8f6eb5c..9cd5b26 100644 --- a/asteroids.cpp +++ b/asteroids.cpp @@ -183,6 +183,7 @@ byte llig(word x, word y) { case 6: return (virt[y*80+(x>>3)] & 0x02) >> 1; break; case 7: return virt[y*80+(x>>3)] & 0x01; break; } + return 0; } void posavga(word x, word y, byte color) { @@ -256,7 +257,7 @@ boolean linea(word x1, word y1, word x2, word y2, word color) { integer xs = x2-x1, ys = y2-y1; integer xm = sign(xs), ym = sign(ys); - integer xs = fabs(xs), ys = fabs(ys); + xs = fabs(xs); ys = fabs(ys); if (llig(x,y)==1) col++; posa(x,y,color); @@ -317,18 +318,23 @@ void rota_pol(poligon pol, real angul, byte color) { void mou_orni(poligon &orni) { orni.angle = orni.angle/*+(random(256)/512)*(random(3)-1)*/; - real dy = round(orni.velocitat*sin(orni.angle-pi/2))+orni.centre.y; - real dx = round(orni.velocitat*cos(orni.angle-pi/2))+orni.centre.x; + real dy = round(orni.velocitat*sin(orni.angle-pi/2.0))+orni.centre.y; + real dx = round(orni.velocitat*cos(orni.angle-pi/2.0))+orni.centre.x; if ((dy>marge_dalt) && (dymarge_esq) && (dx250) itocado=0; } -int main(int argc, char argv[]) { +int main(int argc, char *argv[]) { randomize(); //getmem(virt,38400); virt es un array estatic, no fa falta reservar memòria itocado = 0; @@ -413,22 +419,22 @@ int main(int argc, char argv[]) { do { clsvirt(); - if (teclapuls(KEYarrowright)) nau.angle += 0.157079632; - if (teclapuls(KEYarrowleft)) nau.angle -= 0.157079632; - if (teclapuls(KEYarrowup)) { + if (teclapuls(keyArrowRight)) nau.angle += 0.157079632; + if (teclapuls(keyArrowLeft)) nau.angle -= 0.157079632; + if (teclapuls(keyArrowUp)) { if (nau.velocitat>7)&1)?0xffffffff:0x000000ff; - pixels[pos++] = ((video[y*480+x]>>6)&1)?0xffffffff:0x000000ff; - pixels[pos++] = ((video[y*480+x]>>5)&1)?0xffffffff:0x000000ff; - pixels[pos++] = ((video[y*480+x]>>4)&1)?0xffffffff:0x000000ff; - pixels[pos++] = ((video[y*480+x]>>3)&1)?0xffffffff:0x000000ff; - pixels[pos++] = ((video[y*480+x]>>2)&1)?0xffffffff:0x000000ff; - pixels[pos++] = ((video[y*480+x]>>1)&1)?0xffffffff:0x000000ff; - pixels[pos++] = ((video[y*480+x] )&1)?0xffffffff:0x000000ff; + pixels[pos++] = ((video[y*80+x]>>7)&1)?0xffffffff:0x000000ff; + pixels[pos++] = ((video[y*80+x]>>6)&1)?0xffffffff:0x000000ff; + pixels[pos++] = ((video[y*80+x]>>5)&1)?0xffffffff:0x000000ff; + pixels[pos++] = ((video[y*80+x]>>4)&1)?0xffffffff:0x000000ff; + pixels[pos++] = ((video[y*80+x]>>3)&1)?0xffffffff:0x000000ff; + pixels[pos++] = ((video[y*80+x]>>2)&1)?0xffffffff:0x000000ff; + pixels[pos++] = ((video[y*80+x]>>1)&1)?0xffffffff:0x000000ff; + pixels[pos++] = ((video[y*80+x] )&1)?0xffffffff:0x000000ff; } } SDL_UnlockTexture(sdlTexture); diff --git a/keyboard.h b/keyboard.h index 5aae36b..15127f5 100755 --- a/keyboard.h +++ b/keyboard.h @@ -24,105 +24,105 @@ interface #define keySysReq SDL_SCANCODE_SYSREQ #define keyCapsLock SDL_SCANCODE_CAPSLOCK -#define keyNumLock 0x45 -#define keyScrollLock 0x46 -#define keyLeftCtrl 0x1D -#define keyLeftAlt 0x38 -#define keyLeftShift 0x2A -#define keyRightCtrl 0x9D -#define keyAltGr 0xB8 -#define keyRightShift 0x36 -#define keyEsc 0x01 -#define keyBackspace 0x0E -#define keyEnter 0x1C -#define keySpace 0x39 -#define keyTab 0x0F -#define keyF1 0x3B -#define keyF2 0x3C -#define keyF3 0x3D -#define keyF4 0x3E -#define keyF5 0x3F -#define keyF6 0x40 -#define keyF7 0x41 -#define keyF8 0x42 -#define keyF9 0x43 -#define keyF10 0x44 -#define keyF11 0x57 -#define keyF12 0x58 -#define keyA 0x1E -#define keyB 0x30 -#define keyC 0x2E -#define keyD 0x20 -#define keyE 0x12 -#define keyF 0x21 -#define keyG 0x22 -#define keyH 0x23 -#define keyI 0x17 -#define keyJ 0x24 -#define keyK 0x25 -#define keyL 0x26 -#define keyM 0x32 -#define keyN 0x31 -#define keyO 0x18 -#define keyP 0x19 -#define keyQ 0x10 -#define keyR 0x13 -#define keyS 0x1F -#define keyT 0x14 -#define keyU 0x16 -#define keyV 0x2F -#define keyW 0x11 -#define keyX 0x2D -#define keyY 0x15 -#define keyZ 0x2C -#define key1 0x02 -#define key2 0x03 -#define key3 0x04 -#define key4 0x05 -#define key5 0x06 -#define key6 0x07 -#define key7 0x08 -#define key8 0x09 -#define key9 0x0A -#define key0 0x0B -#define keyMinus 0x0C -#define keyEqual 0x0D -#define keyLBracket 0x1A -#define keyRBracket 0x1B -#define keySemicolon 0x27 -#define keyTick 0x28 -#define keyApostrophe 0x29 -#define keyBackslash 0x2B -#define keyComma 0x33 -#define keyPeriod 0x34 -#define keySlash 0x35 -#define keyInsert 0xD2 -#define keyDelete 0xD3 -#define keyHome 0xC7 -#define keyEnd 0xCF -#define keyPageUp 0xC9 -#define keyArrowLeft 0xCB -#define keyArrowRight 0xCD -#define keyArrowUp 0xC8 -#define keyArrowDown 0xD0 -#define keyKeypad0 0x52 -#define keyKeypad1 0x4F -#define keyKeypad2 0x50 -#define keyKeypad3 0x51 -#define keyKeypad4 0x4B -#define keyKeypad5 0x4C -#define keyKeypad6 0x4D -#define keyKeypad7 0x47 -#define keyKeypad8 0x48 -#define keyKeypad9 0x49 -#define keyKeypadComma 0x53 -#define keyKeypadStar 0x37 -#define keyKeypadMinus 0x4A -#define keyKeypadPlus 0x4E -#define keyKeypadEnter 0x9C -#define keyCtrlPrtScr 0xB7 -#define keyShiftPrtScr 0xB7 -#define keyKeypadSlash 0xB5 +#define keyNumLock SDL_SCANCODE_NUMLOCKCLEAR +#define keyScrollLock SDL_SCANCODE_SCROLLLOCK +#define keyLeftCtrl SDL_SCANCODE_LCTRL +#define keyLeftAlt SDL_SCANCODE_LALT +#define keyLeftShift SDL_SCANCODE_LSHIFT +#define keyRightCtrl SDL_SCANCODE_RCTRL +#define keyAltGr SDL_SCANCODE_RALT +#define keyRightShift SDL_SCANCODE_RSHIFT +#define keyEsc SDL_SCANCODE_ESCAPE +#define keyBackspace SDL_SCANCODE_BACKSPACE +#define keyEnter SDL_SCANCODE_RETURN +#define keySpace SDL_SCANCODE_SPACE +#define keyTab SDL_SCANCODE_TAB +#define keyF1 SDL_SCANCODE_F1 +#define keyF2 SDL_SCANCODE_F2 +#define keyF3 SDL_SCANCODE_F3 +#define keyF4 SDL_SCANCODE_F4 +#define keyF5 SDL_SCANCODE_F5 +#define keyF6 SDL_SCANCODE_F6 +#define keyF7 SDL_SCANCODE_F7 +#define keyF8 SDL_SCANCODE_F8 +#define keyF9 SDL_SCANCODE_F9 +#define keyF10 SDL_SCANCODE_F10 +#define keyF11 SDL_SCANCODE_F11 +#define keyF12 SDL_SCANCODE_F12 +#define keyA SDL_SCANCODE_A +#define keyB SDL_SCANCODE_B +#define keyC SDL_SCANCODE_C +#define keyD SDL_SCANCODE_D +#define keyE SDL_SCANCODE_E +#define keyF SDL_SCANCODE_F +#define keyG SDL_SCANCODE_G +#define keyH SDL_SCANCODE_H +#define keyI SDL_SCANCODE_I +#define keyJ SDL_SCANCODE_J +#define keyK SDL_SCANCODE_K +#define keyL SDL_SCANCODE_L +#define keyM SDL_SCANCODE_M +#define keyN SDL_SCANCODE_N +#define keyO SDL_SCANCODE_O +#define keyP SDL_SCANCODE_P +#define keyQ SDL_SCANCODE_Q +#define keyR SDL_SCANCODE_R +#define keyS SDL_SCANCODE_S +#define keyT SDL_SCANCODE_T +#define keyU SDL_SCANCODE_U +#define keyV SDL_SCANCODE_V +#define keyW SDL_SCANCODE_W +#define keyX SDL_SCANCODE_X +#define keyY SDL_SCANCODE_Y +#define keyZ SDL_SCANCODE_Z +#define key1 SDL_SCANCODE_1 +#define key2 SDL_SCANCODE_2 +#define key3 SDL_SCANCODE_3 +#define key4 SDL_SCANCODE_4 +#define key5 SDL_SCANCODE_5 +#define key6 SDL_SCANCODE_6 +#define key7 SDL_SCANCODE_7 +#define key8 SDL_SCANCODE_8 +#define key9 SDL_SCANCODE_9 +#define key0 SDL_SCANCODE_0 +#define keyMinus SDL_SCANCODE_MINUS +#define keyEqual SDL_SCANCODE_EQUALS +#define keyLBracket SDL_SCANCODE_LEFTBRACKET +#define keyRBracket SDL_SCANCODE_RIGHTBRACKET +#define keySemicolon SDL_SCANCODE_SEMICOLON +#define keyTick SDL_SCANCODE_GRAVE +#define keyApostrophe SDL_SCANCODE_APOSTROPHE +#define keyBackslash SDL_SCANCODE_BACKSLASH +#define keyComma SDL_SCANCODE_COMMA +#define keyPeriod SDL_SCANCODE_PERIOD +#define keySlash SDL_SCANCODE_SLASH +#define keyInsert SDL_SCANCODE_INSERT +#define keyDelete SDL_SCANCODE_DELETE +#define keyHome SDL_SCANCODE_HOME +#define keyEnd SDL_SCANCODE_END +#define keyPageUp SDL_SCANCODE_PAGEUP +#define keyArrowLeft SDL_SCANCODE_LEFT +#define keyArrowRight SDL_SCANCODE_RIGHT +#define keyArrowUp SDL_SCANCODE_UP +#define keyArrowDown SDL_SCANCODE_DOWN +#define keyKeypad0 SDL_SCANCODE_KP_0 +#define keyKeypad1 SDL_SCANCODE_KP_1 +#define keyKeypad2 SDL_SCANCODE_KP_2 +#define keyKeypad3 SDL_SCANCODE_KP_3 +#define keyKeypad4 SDL_SCANCODE_KP_4 +#define keyKeypad5 SDL_SCANCODE_KP_5 +#define keyKeypad6 SDL_SCANCODE_KP_6 +#define keyKeypad7 SDL_SCANCODE_KP_7 +#define keyKeypad8 SDL_SCANCODE_KP_8 +#define keyKeypad9 SDL_SCANCODE_KP_9 +#define keyKeypadComma SDL_SCANCODE_KP_COMMA +#define keyKeypadStar SDL_SCANCODE_KP_MULTIPLY +#define keyKeypadMinus SDL_SCANCODE_KP_MINUS +#define keyKeypadPlus SDL_SCANCODE_KP_PLUS +#define keyKeypadEnter SDL_SCANCODE_KP_ENTER +#define keyCtrlPrtScr SDL_SCANCODE_PRINTSCREEN +#define keyShiftPrtScr SDL_SCANCODE_PAUSE +#define keyKeypadSlash SDL_SCANCODE_KP_DIVIDE const char *keyNames[256] { /* $00 */ NULL, "Esc", "1", "2", "3", "4", "5", "6", @@ -150,7 +150,7 @@ const char *keyNames[256] { /* $F0 */ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL }; - +/* procedure InstalarKb; procedure DesinstalarKb; function TeclaPuls( b : byte ) : Boolean; @@ -198,81 +198,29 @@ asm sti end; {$F-} +*/ + +const Uint8 *uKeys; + +void instalarkb() { + uKeys = SDL_GetKeyboardState(NULL); +} + +void desinstalarkb() { + // Res que vore ací, dispersensé... +} -procedure InstalarKb; -begin - GetIntVec( $09, uOldInt9); { save old location of INT 09 handler } - SetIntVec( $09, Addr( NewInt9)); { point to new routine } - FillChar( uKeys, SizeOf( uKeys), 0); { clear the keys array } -end; +bool teclapuls( unsigned char b ) { + return uKeys[b] == 1; +} +bool keypressed() { + for (int i=0;i<256;++i) if (uKeys[i]==1) return true; + return false; +} -procedure DesinstalarKb; -begin - SetIntVec( $09, uOldInt9); { point back to original routine } - uOldInt9 := nil; -end; - - -function TeclaPuls( b : byte ) : Boolean; -begin - TeclaPuls := uKeys[b]; -end; - - -function QTeclaPuls : Boolean; -var b : Integer; -begin - QTeclaPuls := True; - for b := 0 to 255 do - if uKeys[b] and (keyNames[b] <> nil) then - Exit; - QTeclaPuls := False; -end; - - -function AgarrarTecla : Byte; -var b : Integer; -begin - AgarrarTecla := 0; - for b := 1 to 255 do - if uKeys[b] and (keyNames[b] <> nil) then - begin - AgarrarTecla := b; - Exit; - end; -end; - - -procedure BorrarKb; -begin - FillChar( uKeys, SizeOf( uKeys), 0); { clear the keys array } -end; - - -{$F+} -procedure CleanUp; -begin - ExitProc := uExitProc; - if uOldInt9 <> nil then - DesinstalarKb; -end; - -procedure EscriuKb; -var b:byte; -begin - for b := 0 to 255 do - if uKeys[b] and (keyNames[b] <> nil) then - write(keyNames[b],' | '); - writeln; -end; - -{$F-} - - -begin - uExitProc := ExitProc; - ExitProc := @CleanUp; - uOldInt9 := nil; -end. +unsigned char agarrartecla() { + for (int i=0;i<256;++i) if (uKeys[i]==1) return i; + return 0; +}