4k - proXus (Shoot 'em up)

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Unsere Datenschutzerklärung wurde aktualisiert. Mit der Nutzung unseres Forums akzeptierst Du unsere Datenschutzerklärung. Du bestätigst zudem, dass Du mindestens 16 Jahre alt bist.

    • 4k - proXus (Shoot 'em up)

      So, hab' nun auch noch etwas in 4096 (genauer bisher: 4037) Bytes stopfen können: Ein Shoot 'em up mit "Arial-Grafik", ein paar Gegnerformationen, halbwegs algorithmischem Sound und keinerlei Netzwerkzugriff. Am ehesten angelehnt wohl an die Arcade- und C64-Spiele Anfang bis Mitte der 80er.

      Ziel des Spiels:
      • Highscore überbieten und gut is'.

      Steuerung:
      • Pfeiltasten: Raumschiff bewegen
      • STRG: schießen (Leertaste ging nicht, weil meine Tastatur bestimmte 3-Tasten-Kombinationen überhaupt nicht annimmt)
      • F10: Pause (solange das Fenster den Fokus hat)
      • Alt+F4: aufgeben (sowie den einzigen Highscore aktualisieren)

      Getestet hab ich's unter Vista Home Premium 32 und Windows 7 64, wo es sogar interpretiert (auch mit der WProfan.exe) gut läuft. Kompiliert läuft es aber auf jeden Fall besser, sogar auf meinem alten 1,8-Ghz-Windows-Me-Rechner (der sich immer noch nicht entschieden hat, ob und wann er explodieren will)...

      [Blockierte Grafik: http://s24.postimg.org/v0qyoeb4h/Screen_28_03_2013_08_Uhr_51_44_Sek.jpg]

      Und hier der wunderschöne Quellcode (lesbar werde ich ihn wohl am 31. März posten):

      Quellcode

      1. declare a%,b%,c%[5],d%[13],e%,f%,g%,h%,i%,j%,k%,l%,m%,n%,o%,p%,q%,r%,s%,t%,u%,v%,w%,x%,y&,z%
      2. def t(0)&gettickcount
      3. def i$(0)$appdatadir+"\CHAOS.INI"
      4. def x(0)%umessage<>16
      5. def k(1)iskey(&(1))
      6. proc t
      7. usefont "Arial",99,0,0,0,0:textcolor &(1),-1:drawtext &(2),&(3),$(4)
      8. endproc
      9. proc b
      10. b%=d%[&(1)]:a%=rnd(2) & (b%<47) | (b%<9):copybmp 1,&(2)-639,48>0,&(2);0:setpixel 639,&(3)+&(4)*b%,a%*b%*if(e%<1536,($505-(-256 & e%)),0):b%=b%+a%*2-1:setpixel 639,&(3)+&(4)*b%,$CCFF-$3355*a%:d%[&(1)]=b%
      11. endproc
      12. proc e
      13. play 0;0;0;39,0,0:k%=a%+20:l%=b%+50:m%=50:t%=t%-(1 << z%)
      14. endproc
      15. windowtitle "proXus":windowstyle 26:cls 0:window 1280-width(%hwnd),(960-height(%hwnd)):x%=val(readini$(i$(),"proXus","h"))
      16. case readini$(i$(),"proXus","p")<>oct$(xor(x%,29^6)):x%=500
      17. mcls 640,480:randomize:o%=5:q%=190:h%=-12:usermessages 16:set("ERRORLEVEL",0):play 45;38;63;16,-1,0
      18. while x() and (o%+r%)
      19. windowtitle "proXus - Highscore: "+str$(x%)+" - Score: "+str$(n%)+" - Lives: "+str$(o%)+" - Steuerung mit STRG und Pfeiltasten"
      20. whileloop 2
      21. whileloop 5
      22. case t()-y&>500:y&=t()
      23. y&=y&+12
      24. while t()<y&
      25. sleep 9
      26. wend
      27. m%=m%-(m%>0)*2:s%=(s%+(s%>0)*21)*((s%<640) | k(17))
      28. if o%
      29. p%=p%+(k(39) & (p%<541)-k(37) and p%)*2:q%=q%+(k(40) & (q%<317)-k(38) & (q%>64))*2
      30. if (s%=0) & k(17)
      31. play 0;0;0;28,0,0:s%=p%+61
      32. endif
      33. endif
      34. whileloop 6
      35. z%=&loop
      36. if t% & (1 << z%)
      37. a%=d%[z%]:b%=d%[z%+7]
      38. select u%
      39. caseof 0
      40. if v%
      41. a%=-98:b%=9+z%*54
      42. endif
      43. if (a%\9<>41) | (b%<64) | (b%>332)
      44. a%=a%+1+e%\1792
      45. case a%>640:a%=-99
      46. elseif b%>198
      47. inc b%
      48. else
      49. dec b%
      50. endif
      51. caseof 1
      52. if v%
      53. a%=640+abs(z%-3.5)*68:b%=9+z%*54
      54. endif
      55. a%=a%-3
      56. caseof 2
      57. if v%
      58. a%=640+rnd(99):b%=63+rnd(270)
      59. endif
      60. a%=a%-z%
      61. caseof 3
      62. if v%
      63. a%=640+((z%-1) mod 3)*68:b%=63+z%\4*269
      64. endif
      65. a%=a%-3
      66. caseof 4
      67. if v%
      68. a%=640*z%:b%=63+rnd(270)
      69. endif
      70. a%=a%-7
      71. caseof 5
      72. case v%:a%=640
      73. a%=a%-3:b%=sin((y&/999+z%/9)*pi()*2)*135+198
      74. caseof 6
      75. case v%:a%=572+z%*68
      76. a%=a%-4:b%=sin((y&/2048+z%/9)*pi()*2)*135+198
      77. caseof 7
      78. case v%:a%=572+z%*68
      79. a%=a%-5:b%=sin((y&/2048)*pi()*2)*135+198
      80. caseof 8
      81. case v%:a%=572+z%*68
      82. a%=a%-7:b%=q%
      83. endselect
      84. case u%:a%=a%-e%\1792
      85. if abs(b%-q%)<59
      86. if (abs(a%-p%)<40) & (r%=0)
      87. e:dec o%:p%=0:q%=190:r%=320
      88. elseif s% and (abs(a%-s%)<49)
      89. e:s%=9999:w%=w%-(1 << z%):n%=n%+if(w%,5,50)*(e%\1792+1)
      90. case w%=0:j%=42
      91. endif
      92. endif
      93. case a%<-98:t%=t%-(1 << z%)
      94. d%[z%]=a%:d%[z%+7]=b%
      95. endif
      96. wend
      97. v%=0:dec r%,r%>0
      98. startpaint -1
      99. case d%[0]=0:cls 0
      100. rectangle 0,64-640,432
      101. if e%<1792
      102. b 0,0,0,1:b 7,432,479,-1
      103. endif
      104. usebrush 1,m%*2047:ellipse k%-m%,(l%-m%)-k%+m%,l%+m%:usebrush 1,0
      105. if o% and ((r%=0)+(&loop>3))
      106. t $DDCCAA,p%,q%,"l=":t $99AACC,p%+2,q%,">"
      107. endif
      108. case s%:t $77FFFF,s%,q%,"="
      109. whileloop 6
      110. z%=&loop
      111. if t% & (1 << z%)
      112. b%=d%[z%+7]
      113. t rnd(9999),d%[z%]+35-(u%=0)*22,b%-8,":"
      114. t $FFFF-99*z%,d%[z%],b%,chr$(17)
      115. endif
      116. wend
      117. case (o%=0) and r%:t 2^24-1,51,190,"GAME OVER"
      118. endpaint
      119. mcopybmp 0,0-640,480>0,0;0
      120. wend
      121. if j%
      122. play 125-j%,0,0:j%=j%-7
      123. endif
      124. wend
      125. play i%;0;0;45,0,0:i%=g%-ord(mid$(")35)8)35'35'8'57)78):)78'7:'85'7",e% & 7+f%+1,1))
      126. case e% & 1=0:play 0;h%;h%+12;43,0,0
      127. case e% & 7=0:h%=i%
      128. case e% & 3=0:play 0;-h%;-h%-12;37+e% & 4,0,0
      129. play -i%,0,0:e%=e%+if(e%<1792,1,8)
      130. if e% & 31=0
      131. f%=rnd(4)*8:g%=rnd(9)-5
      132. endif
      133. if e% & 15+t%=0
      134. u%=rnd(9):t%=126:w%=t%:v%=1
      135. endif
      136. wend
      137. play i%,h%;h%+12;43,0,0
      138. case n%<x%:end
      139. writeini i$(),"proXus","h"=str$(n%):writeini i$(),"proXus","p"=oct$(xor(n%,29^6)):e%=0:play 80,81,82;16;87,-1,0:t 2^24-1,225,240,str$(n%)
      140. while x() & (e%<62)
      141. clear d%[]:d%[9]=43
      142. whileloop 5
      143. z%=&loop
      144. a%=ord(mid$(substr$("I P P U O R R W W|D M M P K O O R T|A I I M F K K O P|1 ; 3 ; 1 1 3 ;31 ; 3 ; 1 313 ; 1 ; 3 ;3143114333>|% 1 % 1 % 1 % 1 ' 3 ' 3 ' 3 ' 3 , 8 , 8 , 8 , 8 8",z%,"|"),e%+1,1))-12
      145. if a%>20
      146. d%[z%]=c%[z%]:d%[5+z%]=a%:c%[z%]=-a%:t 2^if(e% & 2,8,24)-1,52,140,"HIGHSCORE"
      147. endif
      148. wend
      149. sleep 88:play d%[1];d%[2];d%[3];43;d%[5],0,0:play d%[6];d%[7];d%[8];d%[9];d%[10],0,0:inc e%
      150. wend
      151. play c%[1];c%[2];c%[3];43;c%[5],0,0
      Alles anzeigen
    • Danke an alle! :-)

      Bugfixes:
      • Nach dem Game Over durfte man in einem seltenen Fall ewig weiterspielen.
      • Die Explosion eines Gegners kam manchmal nicht. Der darauffolgende Gegner auch nicht.
      • Das Punktesystem wurde erweitert. Für jedes einzelne Raumschiff gibt es 5 Punkte (nach wie vor). Schießt man alle 6 Gegner in einer Formation ab (nicht einfach nur den letzten sichtbaren, wie bisher...), gibt es statt 5 gleich 50 Punkte. Und in der letzten Phase, wo die Felswände aufhören zu scrollen und die Gegner schneller werden, gibt's sogar doppelt/dreifach/... soviel.
      • Die Raumschiffe, die rückwärts fliegen, haben jetzt auch Düsen. ;-)

      Ist sogar kürzer geworden. :-D 4020 Bytes...

      Quellcode

      1. declare a%,b%,c%[5],d%[13],e%,f%,g%,h%,i%,j%,k%,l%,m%,n%,o%,p%,q%,r%,s%,t%,u%,v%,w%,x%,y&,z%
      2. def t(0)&gettickcount
      3. def i$(0)$appdatadir+"\CHAOS.INI"
      4. def x(0)%umessage<>16
      5. def k(1)iskey(&(1))
      6. proc t
      7. usefont "Arial",99,0,0,0,0:textcolor &(1),-1:drawtext &(2),&(3),$(4)
      8. endproc
      9. proc b
      10. b%=d%[&(1)]:a%=rnd(2) & (b%<47) | (b%<9):copybmp 1,&(2)-639,48>0,&(2);0:setpixel 639,&(3)+&(4)*b%,a%*b%*if(e%<1536,($505-(-256 & e%)),0):b%=b%+a%*2-1:setpixel 639,&(3)+&(4)*b%,$CCFF-$3355*a%:d%[&(1)]=b%
      11. endproc
      12. proc e
      13. play 0;0;0;39,0,0:k%=a%+20:l%=b%+50:m%=50:t%=t%-(1 << z%)
      14. endproc
      15. windowtitle "proXus":windowstyle 26:cls 0:window 1280-width(%hwnd),(960-height(%hwnd)):x%=val(readini$(i$(),"proXus","h"))
      16. case readini$(i$(),"proXus","p")<>oct$(xor(x%,29^6)):x%=500
      17. mcls 640,480:randomize:o%=5:q%=190:h%=-12:usermessages 16:set("ERRORLEVEL",0):play 45;38;63;16,-1,0
      18. while x() and (o%+r%)
      19. windowtitle "proXus - Highscore: "+str$(x%)+" - Score: "+str$(n%)+" - Lives: "+str$(o%)+" - Steuerung mit STRG und Pfeiltasten"
      20. whileloop 2
      21. whileloop 5
      22. case t()-y&>500:y&=t()
      23. y&=y&+12
      24. while t()<y&
      25. sleep 9
      26. wend
      27. m%=m%-(m%>0)*2:s%=(s%+(s%>0)*21)*((s%<640) | k(17))
      28. if o%
      29. p%=p%+(k(39) & (p%<541)-k(37) and p%)*2:q%=q%+(k(40) & (q%<317)-k(38) & (q%>64))*2
      30. if (s%=0) & k(17)
      31. play 0;0;0;28,0,0:s%=p%+61
      32. endif
      33. endif
      34. whileloop 6
      35. z%=&loop
      36. if t% & (1 << z%)
      37. a%=d%[z%]:b%=d%[z%+7]
      38. select u%
      39. caseof 0
      40. if v%
      41. a%=-98:b%=9+z%*54
      42. endif
      43. if (a%\9<>41) | (b%<64) | (b%>332)
      44. a%=a%+1+e%\1792
      45. case a%>640:a%=-99
      46. elseif b%>198
      47. inc b%
      48. else
      49. dec b%
      50. endif
      51. caseof 1
      52. if v%
      53. a%=640+abs(z%-3.5)*68:b%=9+z%*54
      54. endif
      55. a%=a%-3
      56. caseof 2
      57. if v%
      58. a%=640+rnd(99):b%=63+rnd(270)
      59. endif
      60. a%=a%-z%
      61. caseof 3
      62. if v%
      63. a%=640+((z%-1) mod 3)*68:b%=63+z%\4*269
      64. endif
      65. a%=a%-3
      66. caseof 4
      67. if v%
      68. a%=640*z%:b%=63+rnd(270)
      69. endif
      70. a%=a%-7
      71. caseof 5
      72. case v%:a%=640
      73. a%=a%-3:b%=sin((y&/999+z%/9)*pi()*2)*135+198
      74. caseof 6
      75. case v%:a%=572+z%*68
      76. a%=a%-4:b%=sin((y&/2048+z%/9)*pi()*2)*135+198
      77. caseof 7
      78. case v%:a%=572+z%*68
      79. a%=a%-5:b%=sin((y&/2048)*pi()*2)*135+198
      80. caseof 8
      81. case v%:a%=572+z%*68
      82. a%=a%-7:b%=q%
      83. endselect
      84. case u%:a%=a%-e%\1792
      85. if abs(b%-q%)<59
      86. if (abs(a%-p%)<40) & (r%=0)
      87. e:dec o%:p%=0:q%=190:r%=320
      88. elseif s% and (abs(a%-s%)<49)
      89. e:s%=9999:w%=w%-(1 << z%):n%=n%+if(w%,5,50)*(e%\1792+1)
      90. case w%=0:j%=42
      91. endif
      92. endif
      93. case a%<-98:t%=t%-(1 << z%)
      94. d%[z%]=a%:d%[z%+7]=b%
      95. endif
      96. wend
      97. v%=0:dec r%,r%>0
      98. startpaint -1
      99. case d%[0]=0:cls 0
      100. rectangle 0,64-640,432
      101. if e%<1792
      102. b 0,0,0,1:b 7,432,479,-1
      103. endif
      104. usebrush 1,m%*2047:ellipse k%-m%,(l%-m%)-k%+m%,l%+m%:usebrush 1,0
      105. if o% and ((r%=0)+(&loop>3))
      106. t $DDCCAA,p%,q%,"l=":t $99AACC,p%+2,q%,">"
      107. endif
      108. case s%:t $77FFFF,s%,q%,"="
      109. whileloop 6
      110. z%=&loop
      111. if t% & (1 << z%)
      112. b%=d%[z%+7]
      113. t rnd(9999),d%[z%]+35-(u%=0)*22,b%-8,":"
      114. t $FFFF-99*z%,d%[z%],b%,chr$(17)
      115. endif
      116. wend
      117. case (o%=0) and r%:t 2^24-1,51,190,"GAME OVER"
      118. endpaint
      119. mcopybmp 0,0-640,480>0,0;0
      120. wend
      121. if j%
      122. play 125-j%,0,0:j%=j%-7
      123. endif
      124. wend
      125. play i%;0;0;45,0,0:i%=g%-ord(mid$(")35)8)35'35'8'57)78):)78'7:'85'7",e% & 7+f%+1,1))
      126. case e% & 1=0:play 0;h%;h%+12;43,0,0
      127. case e% & 7=0:h%=i%
      128. case e% & 3=0:play 0;-h%;-h%-12;37+e% & 4,0,0
      129. play -i%,0,0:e%=e%+if(e%<1792,1,8)
      130. if e% & 31=0
      131. f%=rnd(4)*8:g%=rnd(9)-5
      132. endif
      133. if e% & 15+t%=0
      134. u%=rnd(9):t%=126:w%=t%:v%=1
      135. endif
      136. wend
      137. play i%,h%;h%+12;43,0,0
      138. case n%<x%:end
      139. writeini i$(),"proXus","h"=str$(n%):writeini i$(),"proXus","p"=oct$(xor(n%,29^6)):e%=0:play 80,81,82;16;87,-1,0:t 2^24-1,225,240,str$(n%)
      140. while x() & (e%<62)
      141. clear d%[]:d%[9]=43
      142. whileloop 5
      143. z%=&loop
      144. a%=ord(mid$(substr$("I P P U O R R W W|D M M P K O O R T|A I I M F K K O P|1 ; 3 ; 1 1 3 ;31 ; 3 ; 1 313 ; 1 ; 3 ;3143114333>|% 1 % 1 % 1 % 1 ' 3 ' 3 ' 3 ' 3 , 8 , 8 , 8 , 8 8",z%,"|"),e%+1,1))-12
      145. if a%>20
      146. d%[z%]=c%[z%]:d%[5+z%]=a%:c%[z%]=-a%:t 2^if(e% & 2,8,24)-1,52,140,"HIGHSCORE"
      147. endif
      148. wend
      149. sleep 88:play d%[1];d%[2];d%[3];43;d%[5],0,0:play d%[6];d%[7];d%[8];d%[9];d%[10],0,0:inc e%
      150. wend
      151. play c%[1];c%[2];c%[3];43;c%[5],0,0
      Alles anzeigen