ASCII-Shooter
Übersicht

feiderehemals "Decelion"Betreff: ASCII-Shooter |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 "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 ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ! |
feiderehemals "Decelion" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ok, hier ist meine neue Version:
Neuerungen: ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Rofl, obwohl die Graphik zum lolen ist, mag ich das spiel irgendwie... weiter so! ^^ ![]() |
||
Mfg
F.F.F. "Try and ERROR!" |
![]() |
IronstormErstklassiger Contest-Veranstalter |
![]() Antworten mit Zitat ![]() |
---|---|---|
Genial! ![]() |
||
..:: 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_ |
![]() Antworten mit Zitat ![]() |
---|---|---|
Netter Anfang
Aber es ist viel mehr möglich^^ Schaut euch das mal an, vielleicht habt ihr dann bessere Ideen ![]() ROFLcopter |
||
![]() |
Chester |
![]() Antworten mit Zitat ![]() |
---|---|---|
EYY dein RoflCopter is auch geil | ||
![]() |
Digi_ |
![]() Antworten mit Zitat ![]() |
---|---|---|
habe ich nicht gemacht
wäre aber nicht sehr schwer zu machen ![]() |
||
![]() |
Waveblue |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das ist wirklich nicht so schwer zu machen. Nimm einen Shooter und ändere die Bilder so, dass sie nur Buchstaben enthalten - Fertig. | ||
ke^kx |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
du musst in das Ausrufezeichen laufen | ||
ke^kx |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
feiderehemals "Decelion" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
??? | ||
ke^kx |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
feiderehemals "Decelion" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() @Jirikiridstdu en Coe verändert! Nimm den neuen, mit dem gehts suf jeden Fall... |
||
xperience2003Betreff: ... |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
..das macht ja richtig spass ![]() bräuchte man nur noch nen random-map generator^^ |
||
![]() |
soli |
![]() Antworten mit Zitat ![]() |
---|---|---|
am C64 sahen viele Spiele so aus.
![]() |
||
solitaire |
![]() |
Firstdeathmaker |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group