ASCII-Shooter

Übersicht Sonstiges Projekte

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

 

feider

ehemals "Decelion"

Betreff: ASCII-Shooter

BeitragFr, Jan 07, 2005 23:04
Antworten mit Zitat
Benutzer-Profile anzeigen
So, nachdem es ja jetzt den neuen ASCII-Thread gibt, dachte ich, wir könnten zusammen einen Shooter machen, der als Graphik nur Schrifteichen enthält.
In dem Shooter soll es um E, ein armes ASCII-Zeichen, gehen, der die Schrift vor den gemeinen undefinierbaren Zeichen schützen muss.
Nun, hier der Anfang:

Code: [AUSKLAPPEN]
Graphics 400, 300, 16, 1
font = LoadFont("Courier New", 15)
SetFont(font)
Text 130, 95, "Willkommen zu ASCII-Shooter!"
WaitKey
Cls
Print "Vor vielen Jahren gab es kluge Manschen,"
Delay 50
Print "die die Computer erfanden."
Delay 50
Print "Sie entwickelten einen Zeichensatz,"
Delay 50
Print "der sich ASCII nannte."
Delay 50
Print "Nun, viele Jahre später, "
Delay 50
Print "soll dieser ASCII-Zeichensatz"
Delay 50
Print "durch undefinierbare Zeichen"
Delay 50
Print "vernichtet werden."
Delay 50
Print "Nur SIE, ein unschuldiges Zeichen,"
Delay 50
Print "können die Vernichtung noch aufhalten."
Delay 50
Print
Print "Retten sie die Schönheit der ASCII-Codes."
FlushKeys
WaitKey
Type Sch
   Field x
   Field typ
   Field time
End Type

Type gegn
   Field x
   Field typ
End Type

timer=MilliSecs
schusse=20
typ=1
For i = 1 To 5
   gegner.gegn=New gegn
   gegner\x=Rand(400, 1000)
Next
Repeat
   ;Bewegen
   If KeyDown(205) Then
      For gegner=Each gegn
         gegner\x=gegner\x-1
      Next
      typ=1
      x=x+1
   EndIf   
   If KeyDown(203) Then
      For gegner=Each gegn
         gegner\x=gegner\x+1
      Next
      typ=-01
      x=x-1
   EndIf
   
   
   ;Schüsse
   If KeyHit(57) And MilliSecs()-timer>500 And schusse>0 Then
      schusse=schusse-1
      schuss.sch=New sch
      schuss\typ = typ
      schuss\x=192
      timer=MilliSecs()
      schuss\time=MilliSecs()
   EndIf
   For schuss=Each sch
      schuss\x=schuss\x+(2*schuss\typ)
      If MilliSecs()-schuss\time>3000 Then Delete schuss
   Next

   
   ;KI :)
   .schussel
   For gegner=Each gegn
      If gegner\x<192 Then
         Cls
         Text 120, 140, "Sie haben ASCII lange verteidigt!"
         FlushKeys
         WaitKey
         End
      EndIf
      If gegner\typ=0
         gegner\x=gegner\x-1
      EndIf
      gegner\typ=1
      For schuss = Each sch
         If Abs(gegner\x-schuss\x)<3 Then
            schusse=schusse+1
            Delete gegner
            Delete schuss
            gegner.gegn=New gegn
            
            gegner\x=Rand(400, 1000)
            Goto schussel
         EndIf

      Next
   Next
   
   ;Zeichnen
   Text 150, 100, "Zurückgelegter Weg: "+ x
   Text 170, 118, "Schüsse: " +schusse
   If typ=1 Then Text 192, 140, "E"
   If typ=-1 Then Text 192, 140, "3"
   For gegner=Each gegn
      Text gegner\x, 140, Chr(127)
   Next
   For schuss=Each sch
      Text schuss\x, 140, "*"
   Next
   For gegner=Each gegn
      gegner\typ=0
   Next
   Delay 50
   Cls
Until KeyHit(1)

End



Achja; Wer mitcodet, sollte versuchen den Code nicht unübersichtlicher zu machen als er schon ist und ihn möglichst gut kommentieren! (Ich weiss, das muss ich grad sagen... Wo ich den Anfang schon so gut kommentiert hab...)


cu
wammerl

EDIT: mittlerweile Decelion Wink

So, falls wirklich noch Interesse an der Fortführung dieses Projektes bestehen sollte schlage ich folgendes vor:
Wer vor hat, größere Änderungen am Code durchzuführen, der meldet dies vorher an. Bei kleinen Änderungen ist es nicht so wichtig, Wenn sich da 2 verschiedene Codeabschnitte parallel entwickeln, kann man das immer noch zusammenfügen. Bei größeren Änderungen ist es aber auf jeden Fall wichtig, dies zu verhindern. Wenn eine Person z.B. einen zufälligen Levelgenerator implementert, eine andere allerdings währenddessen 200 Level von Hand bastelt, wäre das etwas kontraproduktiv.
  • Zuletzt bearbeitet von feider am Mi, Okt 19, 2011 9:11, insgesamt einmal bearbeitet

Vincent

BeitragSa, Jan 08, 2005 6:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo !

mir war langweilig diese nacht ;/

hab mal noch ne 2. dimension eingebaut und wände und ne "fps - begrenzung"

noch zu verbessern ist die KI (gegner können aufeinander laufen usw)
und das lvl system ...


Code: [AUSKLAPPEN]

;initialisierungen
Global Xres = 400 , Yres = 300
Global Zeichengroesse = 15
Global Xsize = Int( Xres / Zeichengroesse ) , Ysize = Int( Yres / Zeichengroesse ) - 1
Dim feld$( Xsize , Ysize ) ;spielfeld für kollisionsprüfung erstellen

SeedRnd MilliSecs()
;lvlrand erstellen
For b = 0 To Ysize
   For a = 0 To Xsize
      Select b
      Case 1 :   feld$( a , b ) = Mid$("##########################",a+1,1)
      Case 2 :   feld$( a , b ) = Mid$("#  # #                   #",a+1,1)   
      Case 3 :   feld$( a , b ) = Mid$("#  # #    #####    #######",a+1,1)
      Case 4 :   feld$( a , b ) = Mid$("#    #    #              #",a+1,1)
      Case 5 :   feld$( a , b ) = Mid$("#### #    #              #",a+1,1)
      Case 6 :   feld$( a , b ) = Mid$("#    #    ################",a+1,1)
      Case 7 :   feld$( a , b ) = Mid$("#    #                   #",a+1,1)
      Case 8 :   feld$( a , b ) = Mid$("#    ##########          #",a+1,1)
      Case 9 :   feld$( a , b ) = Mid$("#             #          #",a+1,1)
      Case 10 :feld$( a , b ) = Mid$("###  ####     #    #     #",a+1,1)
      Case 11 :feld$( a , b ) = Mid$("#       #     #    #     #",a+1,1)
      Case 12 :feld$( a , b ) = Mid$("#       #     #          #",a+1,1)
      Case 13 :feld$( a , b ) = Mid$("#       #     #          #",a+1,1)
      Case 14 :feld$( a , b ) = Mid$("#       #     #    #######",a+1,1)
      Case 15 :feld$( a , b ) = Mid$("#########     #          #",a+1,1)
      Case 16 :feld$( a , b ) = Mid$("#             #          #",a+1,1)
      Case 17 :feld$( a , b ) = Mid$("#  ################      #",a+1,1)
      Case 18 :feld$( a , b ) = Mid$("#                        #",a+1,1)
      Case 19 :feld$( a , b ) = Mid$("##########################",a+1,1)
      End Select
   Next
Next

game_timer = CreateTimer( 10 )

;grafikinitialisierung
Graphics Xres , Yres , 16 , 2
SetBuffer BackBuffer ()
SetFont LoadFont( "Courier new" , Zeichengroesse + 0)
ClsColor 0,40,0

;sinnfreier startbildschirm
startbild()

;types
Type Sch  ;schusstype
   Field x
   Field y
   Field dir
   Field typ
End Type
Global schuss.sch

Type gegn ;gegnertype
   Field x
   Field y
   Field lp ; lebenspunkte
   Field typ$ ;zeichen
   Field sichtweite ; in zeichenfeldern
   Field geschwindigkeit ;zeit von einem schritt zum nächsten in ms
   Field bewegt ; nur vom programm genutzt
End Type
Global gegner.gegn

;spielstarteinstellungen
Global timer
Global PLAYER_dir = 2  ;spielerblickrichtung 0=oben 1=rechts 2=unten 3=links
Global PLAYER_img$ = "M"
Global PLAYER_x = 2
Global PLAYER_y = 2
Global PLAYER_munition = 200

;gegnererstellung
gegnererstellung(30)

;main
Repeat
   ;Bewegen
   bewegen()
   
   ;Schüsse
   If KeyHit( 57 ) And timer < MilliSecs() And PLAYER_munition > 0 Then
   schiessen()
   EndIf

   ;Zeichnen + KI
   zeichnen()
   Flip
   WaitTimer (game_timer) ; auf timer warten ... sinnvollste lösung meiner meinung nach ... wegen der blockbewegung
   Cls
Until KeyHit(1)

End






; funktionen %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Function startbild()
Cls
Text Xres / 2 , Yres / 2 , "Willkommen zu ASCII-Shooter!" , 1 , 1
Flip : WaitKey : Cls
Text 9 , 1 * (Zeichengroesse + 2 ) , "Vor vielen Jahren gab es kluge Manschen,"
Text 9 , 2 * (Zeichengroesse + 2 ) , "die die Computer erfanden."
Text 9 , 3 * (Zeichengroesse + 2 ) , "Sie entwickelten einen Zeichensatz," 
Text 9 , 4 * (Zeichengroesse + 2 ) , "der sich ASCII nannte."
Text 9 , 5 * (Zeichengroesse + 2 ) , "Nun, viele Jahre später, " 
Text 9 , 6 * (Zeichengroesse + 2 ) , "soll dieser ASCII-Zeichensatz"
Text 9 , 7 * (Zeichengroesse + 2 ) , "durch undefinierbare Zeichen"
Text 9 , 8 * (Zeichengroesse + 2 ) , "vernichtet werden."
Text 9 , 9 * (Zeichengroesse + 2 ) , "Nur SIE, ein unschuldiges Zeichen," 
Text 9 , 10 * (Zeichengroesse + 2 ) , "können die Vernichtung noch aufhalten." 
Text 9 , 12 * (Zeichengroesse + 2 ) , "Retten sie die Schönheit der ASCII-Codes."
Flip : FlushKeys : WaitKey
End Function

Function gegnererstellung( a ) ;anzahl
For i = 1 To a
   gegner.gegn = New gegn

   Repeat
      gegner\x = Rand( 1 , Xsize - 1 )
      gegner\y = Rand( 1 , Ysize - 1 )
   Until feld$( gegner\x , gegner\y ) = " "

   gegner\sichtweite = 8
   gegner\geschwindigkeit = 700
   gegner\lp = 1
   gegner\typ$ = Chr(164)
Next
End Function

Function bewegen()
   If KeyDown( 200 ) And feld$( PLAYER_x , PLAYER_y - 1 ) = " " Then PLAYER_y = Player_y - 1 : PLAYER_dir = 0 : PLAYER_img$ = "W"
   If KeyDown( 205 ) And feld$( PLAYER_x + 1 , PLAYER_y ) = " " Then PLAYER_x = Player_x + 1 : PLAYER_dir = 1 : PLAYER_img$ = "E"
   If KeyDown( 208 ) And feld$( PLAYER_x , PLAYER_y + 1 ) = " " Then PLAYER_y = Player_y + 1 : PLAYER_dir = 2 : PLAYER_img$ = "M"   
   If KeyDown( 203 ) And feld$( PLAYER_x - 1 , PLAYER_y ) = " " Then PLAYER_x = Player_x - 1 : PLAYER_dir = 3 : PLAYER_img$ = "3"
End Function

Function zeichnen()
   ;lvl malen
   For a = 0 To Xsize
   For b = 0 To Ysize
      Color 200,200,200
      Text a * Zeichengroesse , b * zeichengroesse , feld$( a , b )
   Next
   Next

   ;spieler malen
   Color 255,255,0
   Text PLAYER_x * Zeichengroesse , PLAYER_y * Zeichengroesse , PLAYER_img$

   ;schüsse auf kollision überprüfen
   For schuss=Each sch
   If feld$( schuss\x , schuss\y ) = " "
      Color 0,255,255 
            Text schuss\x * zeichengroesse , schuss\y * zeichengroesse , "*"
      schuss\x = schuss\x - ( schuss\dir = 3 ) + ( schuss\dir = 1 )
      schuss\Y = schuss\y - ( schuss\dir = 0 ) + ( schuss\dir = 2 )
   Else
      Delete schuss
   EndIf
   Next

   ;gegner zeichnen + auf schusstreffer überprüfen
    For gegner=Each gegn
   Color 255,0,0
   
   For schuss=Each sch
      If gegner\x = schuss\x And gegner\y = schuss\y Then gegner\lp = gegner\lp - 1 : Delete schuss : Exit
   Next
   
   Text gegner\x * Zeichengroesse , gegner\y * Zeichengroesse , gegner\typ      
   
   If gegner\lp > 0
      If Sqr( (gegner\x-PLAYER_x) * (gegner\x-PLAYER_x) + (gegner\y-PLAYER_y) * (gegner\y-PLAYER_y) ) < gegner\sichtweite And gegner\bewegt < MilliSecs()
         gegner\x = gegner\x - (PLAYER_x + 0 < gegner\x And feld$(gegner\x -1 , gegner\y) = " ") + (PLAYER_x - 0 > gegner\x And feld$(gegner\x +1 , gegner\y) = " ")
         gegner\y = gegner\y - (PLAYER_y + 0 < gegner\y And feld$(gegner\x , gegner\y - 1) = " ") + (PLAYER_y - 0 > gegner\y And feld$(gegner\x , gegner\y + 1) = " ")
         gegner\bewegt = MilliSecs() + gegner\geschwindigkeit
      EndIf
   Else
      Delete gegner
   EndIf
   Next

End Function

Function schiessen()
   ;munition abziehen
     PLAYER_munition = PLAYER_munition - 1

    ;neuen schuss erstellen
   schuss.sch = New sch
   schuss\typ = typ ; das hat noch keinen sinn ... also typ = 0

         ;positionieren des schusses neben/über/unter dem spieler je nach blickrichtung
   schuss\x = PLAYER_x - ( PLAYER_dir = 3 ) + ( PLAYER_dir = 1 )
   schuss\Y = PLAYER_y - ( PLAYER_dir = 0 ) + ( PLAYER_dir = 2 )
   schuss\dir = PLAYER_dir
   
   ;zeitspanne bis der nächste schuss erlaubt ist in ms
   timer = MilliSecs() + 300 
End Function
Gott ist nicht mit uns ... weil er mit Idioten keine Gnade kennt !
 

feider

ehemals "Decelion"

BeitragSa, Jan 08, 2005 11:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok, hier ist meine neue Version:

Neuerungen:
Arrow Es gibt ein Ziel, das man erreichen muss

Der Code:
Code: [AUSKLAPPEN]

;initialisierungen
Global Xres = 400 , Yres = 300
Global Zeichengroesse = 15
Global Xsize = Int( Xres / Zeichengroesse ) , Ysize = Int( Yres / Zeichengroesse ) - 1
Dim feld$( Xsize , Ysize ) ;spielfeld für kollisionsprüfung erstellen

SeedRnd MilliSecs()
;lvlrand erstellen
For b = 0 To Ysize
   For a = 0 To Xsize
      Select b
      Case 1 :   feld$( a , b ) = Mid$("##########################",a+1,1)
      Case 2 :   feld$( a , b ) = Mid$("#  # #                   #",a+1,1)   
      Case 3 :   feld$( a , b ) = Mid$("#  # #    #####    #######",a+1,1)
      Case 4 :   feld$( a , b ) = Mid$("#    #    #              #",a+1,1)
      Case 5 :   feld$( a , b ) = Mid$("#### #    #              #",a+1,1)
      Case 6 :   feld$( a , b ) = Mid$("#    #    ################",a+1,1)
      Case 7 :   feld$( a , b ) = Mid$("#    #                   #",a+1,1)
      Case 8 :   feld$( a , b ) = Mid$("#    ##########          #",a+1,1)
      Case 9 :   feld$( a , b ) = Mid$("#             #          #",a+1,1)
      Case 10 :feld$( a , b ) = Mid$("###  ####     #    #     #",a+1,1)
      Case 11 :feld$( a , b ) = Mid$("#       #     #    #     #",a+1,1)
      Case 12 :feld$( a , b ) = Mid$("#       #     #          #",a+1,1)
      Case 13 :feld$( a , b ) = Mid$("#       #     #          #",a+1,1)
      Case 14 :feld$( a , b ) = Mid$("#       #     #    #######",a+1,1)
      Case 15 :feld$( a , b ) = Mid$("#########     #          #",a+1,1)
      Case 16 :feld$( a , b ) = Mid$("#             #          #",a+1,1)
      Case 17 :feld$( a , b ) = Mid$("#  ################      #",a+1,1)
      Case 18 :feld$( a , b ) = Mid$("#                        #",a+1,1)
      Case 19 :feld$( a , b ) = Mid$("##########################",a+1,1)
      End Select
   Next
Next

game_timer = CreateTimer( 10 )

;grafikinitialisierung
Graphics Xres , Yres , 16 , 2
SetBuffer BackBuffer ()
SetFont LoadFont( "Courier new" , Zeichengroesse + 0)
ClsColor 0,40,0

;sinnfreier startbildschirm
startbild()

;types
Type Sch  ;schusstype
   Field x
   Field y
   Field dir
   Field typ
End Type
Global schuss.sch

;ZielPosition erstellen:
Global Ziel_X=23
Global Ziel_Y=4

Type gegn ;gegnertype
   Field x
   Field y
   Field lp ; lebenspunkte
   Field typ$ ;zeichen
   Field sichtweite ; in zeichenfeldern
   Field geschwindigkeit ;zeit von einem schritt zum nächsten in ms
   Field bewegt ; nur vom programm genutzt
End Type
Global gegner.gegn

;spielstarteinstellungen
Global timer
Global PLAYER_dir = 2  ;spielerblickrichtung 0=oben 1=rechts 2=unten 3=links
Global PLAYER_img$ = "M"
Global PLAYER_x = 2
Global PLAYER_y = 2
Global PLAYER_munition = 200

;gegnererstellung
gegnererstellung(30)

;main
Repeat
   ;Bewegen
   bewegen()
   
   ;Schüsse
   If KeyHit( 57 ) And timer < MilliSecs() And PLAYER_munition > 0 Then
   schiessen()
   EndIf
   ;Gewinnfunktion
   gewinnen()
   ;Zeichnen + KI
   zeichnen()
   Flip
   WaitTimer (game_timer) ; auf timer warten ... sinnvollste lösung meiner meinung nach ... wegen der blockbewegung
   Cls
Until KeyHit(1)

End






; funktionen %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Function startbild()
Cls
Text Xres / 2 , Yres / 2 , "Willkommen zu ASCII-Shooter!" , 1 , 1
Flip : WaitKey : Cls
Text 9 , 1 * (Zeichengroesse + 2 ) , "Vor vielen Jahren gab es kluge Manschen,"
Text 9 , 2 * (Zeichengroesse + 2 ) , "die die Computer erfanden."
Text 9 , 3 * (Zeichengroesse + 2 ) , "Sie entwickelten einen Zeichensatz,"
Text 9 , 4 * (Zeichengroesse + 2 ) , "der sich ASCII nannte."
Text 9 , 5 * (Zeichengroesse + 2 ) , "Nun, viele Jahre später, "
Text 9 , 6 * (Zeichengroesse + 2 ) , "soll dieser ASCII-Zeichensatz"
Text 9 , 7 * (Zeichengroesse + 2 ) , "durch undefinierbare Zeichen"
Text 9 , 8 * (Zeichengroesse + 2 ) , "vernichtet werden."
Text 9 , 9 * (Zeichengroesse + 2 ) , "Nur SIE, ein unschuldiges Zeichen,"
Text 9 , 10 * (Zeichengroesse + 2 ) , "können die Vernichtung noch aufhalten."
Text 9 , 12 * (Zeichengroesse + 2 ) , "Retten sie die Schönheit der ASCII-Codes."
Flip : FlushKeys : WaitKey
End Function

Function gegnererstellung( a ) ;anzahl
For i = 1 To a
   gegner.gegn = New gegn

   Repeat
      gegner\x = Rand( 1 , Xsize - 1 )
      gegner\y = Rand( 1 , Ysize - 1 )
   Until feld$( gegner\x , gegner\y ) = " "

   gegner\sichtweite = 8
   gegner\geschwindigkeit = 700
   gegner\lp = 1
   gegner\typ$ = Chr(164)
Next
End Function

Function bewegen()
   If KeyDown( 200 ) And feld$( PLAYER_x , PLAYER_y - 1 ) = " " Then PLAYER_y = Player_y - 1 : PLAYER_dir = 0 : PLAYER_img$ = "W"
   If KeyDown( 205 ) And feld$( PLAYER_x + 1 , PLAYER_y ) = " " Then PLAYER_x = Player_x + 1 : PLAYER_dir = 1 : PLAYER_img$ = "E"
   If KeyDown( 208 ) And feld$( PLAYER_x , PLAYER_y + 1 ) = " " Then PLAYER_y = Player_y + 1 : PLAYER_dir = 2 : PLAYER_img$ = "M"   
   If KeyDown( 203 ) And feld$( PLAYER_x - 1 , PLAYER_y ) = " " Then PLAYER_x = Player_x - 1 : PLAYER_dir = 3 : PLAYER_img$ = "3"
End Function

Function zeichnen()
   ;lvl malen
   For a = 0 To Xsize
   For b = 0 To Ysize
      Color 200,200,200
      Text a * Zeichengroesse , b * zeichengroesse , feld$( a , b )
   Next
   Next

   ;spieler malen
   Color 255,255,0
   Text PLAYER_x * Zeichengroesse , PLAYER_y * Zeichengroesse , PLAYER_img$

   ;schüsse auf kollision überprüfen
   For schuss=Each sch
   If feld$( schuss\x , schuss\y ) = " "
      Color 0,255,255
            Text schuss\x * zeichengroesse , schuss\y * zeichengroesse , "*"
      schuss\x = schuss\x - ( schuss\dir = 3 ) + ( schuss\dir = 1 )
      schuss\Y = schuss\y - ( schuss\dir = 0 ) + ( schuss\dir = 2 )
   Else
      Delete schuss
   EndIf
   Next

   ;gegner zeichnen + auf schusstreffer überprüfen
    For gegner=Each gegn
   Color 255,0,0
   
   For schuss=Each sch
      If gegner\x = schuss\x And gegner\y = schuss\y Then gegner\lp = gegner\lp - 1 : Delete schuss : Exit
   Next
   
   Text gegner\x * Zeichengroesse , gegner\y * Zeichengroesse , gegner\typ     
   
   If gegner\lp > 0
      If Sqr( (gegner\x-PLAYER_x) * (gegner\x-PLAYER_x) + (gegner\y-PLAYER_y) * (gegner\y-PLAYER_y) ) < gegner\sichtweite And gegner\bewegt < MilliSecs()
         gegner\x = gegner\x - (PLAYER_x + 0 < gegner\x And feld$(gegner\x -1 , gegner\y) = " ") + (PLAYER_x - 0 > gegner\x And feld$(gegner\x +1 , gegner\y) = " ")
         gegner\y = gegner\y - (PLAYER_y + 0 < gegner\y And feld$(gegner\x , gegner\y - 1) = " ") + (PLAYER_y - 0 > gegner\y And feld$(gegner\x , gegner\y + 1) = " ")
         gegner\bewegt = MilliSecs() + gegner\geschwindigkeit
      EndIf
   Else
      Delete gegner
   EndIf
   Next

   ; Ziel Zeichnen:
   Text Ziel_X*Zeichengroesse, Ziel_Y*Zeichengroesse, "!"

End Function

Function schiessen()
   ;munition abziehen
     PLAYER_munition = PLAYER_munition - 1

    ;neuen schuss erstellen
   schuss.sch = New sch
   schuss\typ = typ ; das hat noch keinen sinn ... also typ = 0

         ;positionieren des schusses neben/über/unter dem spieler je nach blickrichtung
   schuss\x = PLAYER_x - ( PLAYER_dir = 3 ) + ( PLAYER_dir = 1 )
   schuss\Y = PLAYER_y - ( PLAYER_dir = 0 ) + ( PLAYER_dir = 2 )
   schuss\dir = PLAYER_dir
   
   ;zeitspanne bis der nächste schuss erlaubt ist in ms
   timer = MilliSecs() + 300
End Function


Function Gewinnen()
   ;Abfrage der Spieler-Koordinaten
   If Player_X=Ziel_X And Player_Y=Ziel_Y Then
      ;gewinnbildschirm einblenden
      ClsColor 0, 200, 0
      Cls
      Text 100, 200-(Zeichengroesse/2), "Sie haben gewonnen!"
      flip
      FlushKeys
      WaitKey
      End
   EndIf
End Function

FreakForFreedom

BeitragSa, Jan 08, 2005 18:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Rofl, obwohl die Graphik zum lolen ist, mag ich das spiel irgendwie... weiter so! ^^ Wink
Mfg
F.F.F.
"Try and ERROR!"

Ironstorm

Erstklassiger Contest-Veranstalter

BeitragSa, Jan 08, 2005 18:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Genial! Shocked Des spiel ist voll witzig. Auf so ne Idee zu kommen. Macht weiter so.
..:: blackbird design : blackbird photography : Futuro Verde : X-Commander ::..
MacBook | Intel Core 2 Duo 2,1 GHz | 2048 MB RAM | 80 GB HDD | Mac OS X 10.6.2 (Snow Leopard) | Adobe CS4 Design Premium

Digi_

BeitragSa, Jan 08, 2005 19:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Netter Anfang

Aber es ist viel mehr möglich^^
Schaut euch das mal an, vielleicht habt ihr dann bessere Ideen Wink
ROFLcopter

Chester

BeitragSa, Jan 08, 2005 19:57
Antworten mit Zitat
Benutzer-Profile anzeigen
EYY dein RoflCopter is auch geil

Digi_

BeitragSa, Jan 08, 2005 19:59
Antworten mit Zitat
Benutzer-Profile anzeigen
habe ich nicht gemacht

wäre aber nicht sehr schwer zu machen Wink

Waveblue

BeitragSa, Jan 08, 2005 20:00
Antworten mit Zitat
Benutzer-Profile anzeigen
LOL!^^

wie soll man das spieln wenn man beim bloßen Anblick schon vor Lachen unterm Tisch liegt^^
This is 10% luck
20% skill
15% concentrated power of will
5% pleasure, 50% pain
and 100% reason to remember the name

Spikespine

BeitragSa, Jan 08, 2005 20:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ist wirklich nicht so schwer zu machen. Nimm einen Shooter und ändere die Bilder so, dass sie nur Buchstaben enthalten - Fertig.
 

ke^kx

BeitragSa, Jan 08, 2005 20:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Also entweder ich bin zu blöd (was ich vermute) oder ich komme da tatsächlich schon aus dem ersten Level nicht raus.

Jiriki
http://i3u8.blogspot.com
Asus Striker II
Intel Core2Quad Q9300 @ 2,5 GHz (aber nur zwei Kerne aktiv aufgrund der Instabilität -.-)
Geforce 9800 GTX
2GB RAM

Chester

BeitragSa, Jan 08, 2005 20:39
Antworten mit Zitat
Benutzer-Profile anzeigen
du musst in das Ausrufezeichen laufen
 

ke^kx

BeitragSa, Jan 08, 2005 22:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich kann immer nur 3 Schritte nach unten gehen, dann treffe ich auf Begrenzungen. Und nach rechts oder links kann ich erstrecht nicht gehen (eingebaut).

Jiriki
http://i3u8.blogspot.com
Asus Striker II
Intel Core2Quad Q9300 @ 2,5 GHz (aber nur zwei Kerne aktiv aufgrund der Instabilität -.-)
Geforce 9800 GTX
2GB RAM
 

feider

ehemals "Decelion"

BeitragSa, Jan 08, 2005 22:29
Antworten mit Zitat
Benutzer-Profile anzeigen
???
 

ke^kx

BeitragSa, Jan 08, 2005 22:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Das Spielfeld sieht so aus:

Code: [AUSKLAPPEN]

#####...
#  #  #...
#  #M#...
#  #  #...
#####...
.
.
.


Das M ist gelb und lässt sich bewegen.

Jiriki
http://i3u8.blogspot.com
Asus Striker II
Intel Core2Quad Q9300 @ 2,5 GHz (aber nur zwei Kerne aktiv aufgrund der Instabilität -.-)
Geforce 9800 GTX
2GB RAM
 

feider

ehemals "Decelion"

BeitragSa, Jan 08, 2005 22:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Der Neue Code:
Code: [AUSKLAPPEN]

;initialisierungen
Global Xres = 400 , Yres = 300
Global Zeichengroesse = 15
Global Xsize = Int( Xres / Zeichengroesse ) , Ysize = Int( Yres / Zeichengroesse ) - 1
Dim feld$( Xsize , Ysize ) ;spielfeld für kollisionsprüfung erstellen

SeedRnd MilliSecs()
;lvlrand erstellen
For b = 0 To Ysize
   For a = 0 To Xsize
      Select b
      Case 1 :   feld$( a , b ) = Mid$("##########################",a+1,1)
      Case 2 :   feld$( a , b ) = Mid$("#  # #                   #",a+1,1)   
      Case 3 :   feld$( a , b ) = Mid$("#  # #    #####    #######",a+1,1)
      Case 4 :   feld$( a , b ) = Mid$("#    #    #              #",a+1,1)
      Case 5 :   feld$( a , b ) = Mid$("#### #    #              #",a+1,1)
      Case 6 :   feld$( a , b ) = Mid$("#    #    ################",a+1,1)
      Case 7 :   feld$( a , b ) = Mid$("#    #                   #",a+1,1)
      Case 8 :   feld$( a , b ) = Mid$("#    ##########          #",a+1,1)
      Case 9 :   feld$( a , b ) = Mid$("#             #          #",a+1,1)
      Case 10 :  feld$( a , b ) = Mid$("###  ####     #    #     #",a+1,1)
      Case 11 :  feld$( a , b ) = Mid$("#       #     #    #     #",a+1,1)
      Case 12 :  feld$( a , b ) = Mid$("#       #     #          #",a+1,1)
      Case 13 :  feld$( a , b ) = Mid$("#       #     #          #",a+1,1)
      Case 14 :  feld$( a , b ) = Mid$("#       #     #    #######",a+1,1)
      Case 15 :  feld$( a , b ) = Mid$("#########     #          #",a+1,1)
      Case 16 :  feld$( a , b ) = Mid$("#             #          #",a+1,1)
      Case 17 :  feld$( a , b ) = Mid$("#  ################      #",a+1,1)
      Case 18 :  feld$( a , b ) = Mid$("#                        #",a+1,1)
      Case 19 :  feld$( a , b ) = Mid$("##########################",a+1,1)
      End Select
   Next
Next

game_timer = CreateTimer( 10 )

;grafikinitialisierung
Graphics Xres , Yres , 16 , 2
SetBuffer BackBuffer ()
SetFont LoadFont( "Courier new" , Zeichengroesse + 0)
ClsColor 0,40,0

;sinnfreier startbildschirm
startbild()

;types
Type Sch  ;schusstype
   Field x
   Field y
   Field dir
   Field typ
End Type
Global schuss.sch

Type effe ; Effekttype
   Field x
   Field y
   Field status
End Type
Global effekt.effe

;ZielPosition erstellen:
Global Ziel_X=23
Global Ziel_Y=4

Type gegn ;gegnertype
   Field x
   Field y
   Field lp ; lebenspunkte
   Field typ$ ;zeichen
   Field sichtweite ; in zeichenfeldern
   Field geschwindigkeit ;zeit von einem schritt zum nächsten in ms
   Field bewegt ; nur vom programm genutzt
End Type
Global gegner.gegn

;spielstarteinstellungen
Global timer
Global PLAYER_dir = 2  ;spielerblickrichtung 0=oben 1=rechts 2=unten 3=links
Global PLAYER_img$ = "M"
Global PLAYER_x = 2
Global PLAYER_y = 2
Global PLAYER_munition = 200

;gegnererstellung
gegnererstellung(30)

;main
Repeat
   ;Bewegen
   bewegen()
   
   ;Schüsse
   If KeyHit( 57 ) And timer < MilliSecs() And PLAYER_munition > 0 Then
   schiessen()
   EndIf
   ;Gewinnfunktion
   gewinnen()
   ;Zeichnen + KI
   zeichnen()
   Flip
   WaitTimer (game_timer) ; auf timer warten ... sinnvollste lösung meiner meinung nach ... wegen der blockbewegung
   Cls
Until KeyHit(1)

End






; funktionen %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Function startbild()
Cls
Text Xres / 2 , Yres / 2 , "Willkommen zu ASCII-Shooter!" , 1 , 1
Flip : WaitKey : Cls
Text 9 , 1 * (Zeichengroesse + 2 ) , "Vor vielen Jahren gab es kluge Manschen,"
Text 9 , 2 * (Zeichengroesse + 2 ) , "die die Computer erfanden."
Text 9 , 3 * (Zeichengroesse + 2 ) , "Sie entwickelten einen Zeichensatz,"
Text 9 , 4 * (Zeichengroesse + 2 ) , "der sich ASCII nannte."
Text 9 , 5 * (Zeichengroesse + 2 ) , "Nun, viele Jahre später, "
Text 9 , 6 * (Zeichengroesse + 2 ) , "soll dieser ASCII-Zeichensatz"
Text 9 , 7 * (Zeichengroesse + 2 ) , "durch undefinierbare Zeichen"
Text 9 , 8 * (Zeichengroesse + 2 ) , "vernichtet werden."
Text 9 , 9 * (Zeichengroesse + 2 ) , "Nur SIE, ein unschuldiges Zeichen,"
Text 9 , 10 * (Zeichengroesse + 2 ) , "können die Vernichtung noch aufhalten."
Text 9 , 12 * (Zeichengroesse + 2 ) , "Retten sie die Schönheit der ASCII-Codes."
Flip : FlushKeys : WaitKey
End Function

Function gegnererstellung( a ) ;anzahl
For i = 1 To a
   gegner.gegn = New gegn

   Repeat
      gegner\x = Rand( 1 , Xsize - 1 )
      gegner\y = Rand( 1 , Ysize - 1 )
   Until feld$( gegner\x , gegner\y ) = " "

   gegner\sichtweite = 8
   gegner\geschwindigkeit = 700
   gegner\lp = 1
   gegner\typ$ = Chr(164)
Next
End Function

Function bewegen()
   If KeyDown( 200 ) And feld$( PLAYER_x , PLAYER_y - 1 ) = " " Then PLAYER_y = Player_y - 1 : PLAYER_dir = 0 : PLAYER_img$ = "W"
   If KeyDown( 205 ) And feld$( PLAYER_x + 1 , PLAYER_y ) = " " Then PLAYER_x = Player_x + 1 : PLAYER_dir = 1 : PLAYER_img$ = "E"
   If KeyDown( 208 ) And feld$( PLAYER_x , PLAYER_y + 1 ) = " " Then PLAYER_y = Player_y + 1 : PLAYER_dir = 2 : PLAYER_img$ = "M"   
   If KeyDown( 203 ) And feld$( PLAYER_x - 1 , PLAYER_y ) = " " Then PLAYER_x = Player_x - 1 : PLAYER_dir = 3 : PLAYER_img$ = "3"
End Function



Function zeichnen()
   ;lvl malen
   For a = 0 To Xsize
   For b = 0 To Ysize
      Color 200,200,200
      Text a * Zeichengroesse , b * zeichengroesse , feld$( a , b )
   Next
   Next

   ;spieler malen
   Color 255,255,0
   Text PLAYER_x * Zeichengroesse , PLAYER_y * Zeichengroesse , PLAYER_img$

   ;schüsse auf kollision überprüfen
   For schuss=Each sch
   If feld$( schuss\x , schuss\y ) = " "
      Color 0,255,255
            Text schuss\x * zeichengroesse , schuss\y * zeichengroesse , "*"
      schuss\x = schuss\x - ( schuss\dir = 3 ) + ( schuss\dir = 1 )
      schuss\Y = schuss\y - ( schuss\dir = 0 ) + ( schuss\dir = 2 )
   Else
      Delete schuss
   EndIf
   Next

   ;gegner zeichnen + auf schusstreffer überprüfen
    For gegner=Each gegn
   Color 255,0,0
   
   For schuss=Each sch
      If gegner\x = schuss\x And gegner\y = schuss\y Then gegner\lp = gegner\lp - 1 : Delete schuss : Exit
   Next
   
   Text gegner\x * Zeichengroesse , gegner\y * Zeichengroesse , gegner\typ     
   
   If gegner\lp > 0
      If Sqr( (gegner\x-PLAYER_x) * (gegner\x-PLAYER_x) + (gegner\y-PLAYER_y) * (gegner\y-PLAYER_y) ) < gegner\sichtweite And gegner\bewegt < MilliSecs()
         gegner\x = gegner\x - (PLAYER_x + 0 < gegner\x And feld$(gegner\x -1 , gegner\y) = " ") + (PLAYER_x - 0 > gegner\x And feld$(gegner\x +1 , gegner\y) = " ")
         gegner\y = gegner\y - (PLAYER_y + 0 < gegner\y And feld$(gegner\x , gegner\y - 1) = " ") + (PLAYER_y - 0 > gegner\y And feld$(gegner\x , gegner\y + 1) = " ")
         gegner\bewegt = MilliSecs() + gegner\geschwindigkeit
      EndIf
   Else
      neueffekt(gegner\x, gegner\y)
      Delete gegner
   EndIf
   Next

   ; Ziel Zeichnen:
   Text Ziel_X*Zeichengroesse, Ziel_Y*Zeichengroesse, "!"

   ;Effekte Zeichnen:
   draweffekt
End Function

Function schiessen()
   ;munition abziehen
     PLAYER_munition = PLAYER_munition - 1

    ;neuen schuss erstellen
   schuss.sch = New sch
   schuss\typ = typ ; das hat noch keinen sinn ... also typ = 0

         ;positionieren des schusses neben/über/unter dem spieler je nach blickrichtung
   schuss\x = PLAYER_x - ( PLAYER_dir = 3 ) + ( PLAYER_dir = 1 )
   schuss\Y = PLAYER_y - ( PLAYER_dir = 0 ) + ( PLAYER_dir = 2 )
   schuss\dir = PLAYER_dir
   
   ;zeitspanne bis der nächste schuss erlaubt ist in ms
   timer = MilliSecs() + 300
End Function


Function Gewinnen()
   ;Abfrage der Spieler-Koordinaten
   If Player_X=Ziel_X And Player_Y=Ziel_Y Then
      ;gewinnbildschirm einblenden
      ClsColor 0, 200, 0
      Cls
      Text 100, 200-(Zeichengroesse/2), "Sie haben gewonnen!"
      Flip
      FlushKeys
      WaitKey
      End
   EndIf
End Function

Function neueffekt(x, y)
   effekt.effe=New effe
   effekt\x=x
   effekt\y=y
   effekt\status=1
End Function

Function initeffekt()
   For effekt=Each effe
      effekt\status=effekt\status+1
      If effekt\status=5 Then Delete effekt
   Next
End Function

Function draweffekt()
   initeffekt()
   For effekt=Each effe
      Select effekt\status
         Case 1
            Text effekt\x*zeichengroesse, effekt\y*zeichengroesse, "#"
         Case 2
            Text effekt\x*zeichengroesse, effekt\y*zeichengroesse, "*"
         Case 3
            Text effekt\x*zeichengroesse, effekt\y*zeichengroesse, "+"
         Case 4
            Text effekt\x*zeichengroesse, effekt\y*zeichengroesse, "."
      End Select
   Next
End Function


Neuerungen
Arrow "Sterbeanimation" der Gegner


@Jirikiridstdu en Coe verändert!
Nimm den neuen, mit dem gehts suf jeden Fall...
 

xperience2003

Betreff: ...

BeitragSo, Jan 09, 2005 3:44
Antworten mit Zitat
Benutzer-Profile anzeigen
..das macht ja richtig spass Smile

bräuchte man nur noch nen random-map generator^^

soli

BeitragSo, Jan 09, 2005 4:34
Antworten mit Zitat
Benutzer-Profile anzeigen
am C64 sahen viele Spiele so aus.
Laughing
solitaire

Firstdeathmaker

BeitragSo, Jan 09, 2005 4:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Also, warscheinlich liegt´s gerade daran dass ich besoffen bin, dass ich das Spielprinzip und die Steuerung nicht kapiere (war aber ne nette Party), aber kann mir das mal jmd kleinkinderfreundlich erklären?
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon
Gewinner des BCC #57 User posted image
 

Michi

BeitragSo, Jan 09, 2005 13:23
Antworten mit Zitat
Benutzer-Profile anzeigen
jiriki, ich weiß, warum es bei uns nicht funzt:
irgendeine Windoof-funktion streicht die ganzen Leerzeichen raus, bei unssieht es dann so aus:
Zitat:
Case 1 : feld$( a , b ) = Mid$("##########################",a+1,1)
Case 2 : feld$( a , b ) = Mid$("# # # #",a+1,1)
Case 3 : feld$( a , b ) = Mid$("# # # ##### #######",a+1,1)
Case 4 : feld$( a , b ) = Mid$("# # # #",a+1,1)
Case 5 : feld$( a , b ) = Mid$("#### # # #",a+1,1)
Case 6 : feld$( a , b ) = Mid$("# # ################",a+1,1)
Case 7 : feld$( a , b ) = Mid$("# # #",a+1,1)
Case 8 : feld$( a , b ) = Mid$("# ########## #",a+1,1)
Case 9 : feld$( a , b ) = Mid$("# # #",a+1,1)
Case 10 : feld$( a , b ) = Mid$("### #### # # #",a+1,1)
Case 11 : feld$( a , b ) = Mid$("# # # # #",a+1,1)
Case 12 : feld$( a , b ) = Mid$("# # # #",a+1,1)
Case 13 : feld$( a , b ) = Mid$("# # # #",a+1,1)
Case 14 : feld$( a , b ) = Mid$("# # # #######",a+1,1)
Case 15 : feld$( a , b ) = Mid$("######### # #",a+1,1)
Case 16 : feld$( a , b ) = Mid$("# # #",a+1,1)
Case 17 : feld$( a , b ) = Mid$("# ################ #",a+1,1)
Case 18 : feld$( a , b ) = Mid$("# #",a+1,1)
Aber..Wozu soll er gut sein???
IBM-Ingeneur über die Idee des Mikroprozessors, 1968
Code: [AUSKLAPPEN]

   __
<_/__\_> <--- die Wayne-Zeichnung

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht Sonstiges Projekte

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group