Advertisement
Guest User

test

a guest
Feb 23rd, 2017
189
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ' bomberman.bas - textbasierter Bomberman Klon in FreeBasic
  2. #LANG "fb"
  3.  
  4. ' Variablen und co.
  5. dim Dateiname as string
  6. dim taste as string = ""
  7.  
  8. dim as integer x = 0
  9. dim as integer y = 0
  10.  
  11. const as string FREI = " "
  12. const as string FIGUR = "o"
  13. const as string WAND = "#"
  14. const as string BOMBE = "*"
  15.  
  16. dim as integer start_x = 0
  17. dim as integer start_y = 0
  18.  
  19. dim as integer max_bomben = 3
  20. dim as integer bomben = 0
  21.  
  22. type Explosion
  23.     as integer pos_x
  24.     as integer pos_y
  25.     as double start_zeit
  26.     as double abwarte_zeit
  27. end type
  28.  
  29. dim start_bombe(0 to 2) as Explosion
  30.  
  31. ' Funktionen und SUBs
  32. declare sub zeigeWelt(welt() as string)
  33. declare function canMove(welt() as String, x as integer, y as integer) as boolean
  34. declare function bewegeSpieler(welt() as string, x as integer, y as integer, alt_x as integer, alt_y as integer) as boolean
  35. declare sub spielende()
  36. declare sub abwarten(wartezeit as double)
  37. declare function ladeKarte(datei as string, welt() as string, byref start_x as integer, byref start_y as integer) as boolean
  38.  
  39. ' Karte die geladen werden soll eingeben
  40. Dateiname = "karte01.txt"
  41.  
  42. dim welt(any, any) as string
  43.  
  44. if not ladeKarte(Dateiname, welt(), start_x, start_y) then
  45.     print !"\34!!!FEHLER!!! beim laden der Datei\34"
  46.     end
  47. endif
  48.  
  49.  
  50. color 3, 0 ' Spiel in einen schönen blau darstellen :-)
  51. cls
  52. zeigeWelt(welt())
  53.  
  54. ' Spieler auf aktuelle Position in der Welt setzen
  55. y = start_y
  56. x = start_x
  57.  
  58. ' Cursor unsichtbar machen
  59. locate , , 0
  60.  
  61. ' Hauptschleife
  62. do
  63.     taste = INKEY
  64.  
  65.     ' Tastatur abfragen und Spieler bewegen
  66.     select case taste
  67.         case "w"
  68.             if bewegeSpieler(welt(), x, y-1, x, y) then
  69.                 y = y - 1
  70.             end if
  71.             zeigeWelt(welt())
  72.  
  73.         case "s"
  74.             if bewegeSpieler(welt(), x, y+1, x, y) then
  75.                 y = y + 1
  76.             end if
  77.             zeigeWelt(welt())
  78.  
  79.         case "a"
  80.             if bewegeSpieler(welt(), x-1, y, x, y) then
  81.                 x = x - 1
  82.             end if
  83.             zeigeWelt(welt())
  84.  
  85.         case "d"
  86.             if bewegeSpieler(welt(), x+1, y, x, y) then
  87.                 x = x + 1
  88.             end if
  89.             zeigeWelt(welt())
  90.  
  91.         case chr(32)
  92.             ' Bombe legen mit der Leertaste
  93.             '
  94.             if (max_bomben > bomben) and (welt(y, x) <> BOMBE) then
  95.                 welt(y, x) = "O" ' Spieler legt die Bombe
  96.                 zeigeWelt(welt())
  97.  
  98.                 welt(y, x) = BOMBE ' Bombe legen
  99.  
  100.                 ' aktuelle Informationen über Bombe zwischen speichern
  101.                 '
  102.                 start_bombe(bomben).pos_x = x
  103.                 start_bombe(bomben).pos_y = y
  104.                 start_bombe(bomben).start_zeit = timer
  105.                 start_bombe(bomben).abwarte_zeit = 3.0
  106.                 bomben = bomben + 1
  107.             end if
  108.     end select
  109.  
  110.     ' Aktionen steuern
  111.     if (bomben > 0) and (timer > start_bombe(bomben).start_zeit + start_bombe(bomben).abwarte_zeit) then
  112.        
  113.     end if
  114.  
  115.     sleep 1
  116. loop until taste = chr(27) ' Spiel beenden mit ESC
  117.  
  118. ' Spielende
  119. spielende()
  120. end
  121.  
  122. ' Soll einfach nur die Welt auf dem Bildschirm ausgeben
  123. '
  124. sub zeigeWelt(welt() as string)
  125.     dim as integer j, k
  126.  
  127.     ' Bildschirm Position zurücksetzen
  128.     locate 1, 1
  129.  
  130.     for j = lbound(welt,1) to ubound(welt,1)
  131.         for k = lbound(welt,2) to ubound(welt,2)
  132.             print welt(j, k);
  133.         next
  134.         print
  135.     next
  136. end sub
  137.  
  138.  
  139. function canMove(welt() as String, x as integer, y as integer) as boolean
  140.     if y < lbound(welt,1) or y > ubound(welt, 1) then return false
  141.     if x < lbound(welt,2) or x > ubound(welt, 2) then return false
  142.  
  143.     if welt(y, x) = WAND then return false
  144.     if welt(y, y) = BOMBE then return false
  145.  
  146.     return true
  147. end function
  148.  
  149.  
  150.  
  151. ' Soll den Spieler bewegen und Eingaben überprüfen ob Sie gültig sind
  152. ' und abfragen ob man gegen ein Objekt läuft usw
  153. '
  154. function bewegeSpieler(welt() as string, x as integer, y as integer, alt_x as integer, alt_y as integer) as boolean
  155.  
  156.     if not canMove(welt(), x, y) then return false
  157.  
  158.     if (welt(y, x) = FREI) or (welt(y, x) = FIGUR) then
  159.         welt(y, x) = figur ' Spieler platzieren
  160.  
  161.         ' alte Spieler Position löschen, wenn keine Bombe gelegt wurde
  162.         if welt(alt_y, alt_x) <> BOMBE then welt(alt_y, alt_x) = FREI
  163.  
  164.         return true
  165.     end if
  166.    
  167.     return false
  168. end function
  169.  
  170. ' Soll einfach einige Dinge erledigen nach dem das Spiel vorbei ist
  171. '
  172. sub spielende()
  173.     cls
  174.     print "Danke fürs spielen :-)"
  175. end sub
  176.  
  177. ' wartet eine übergebene Wartezeit in Sekunden ab...
  178. '
  179. sub abwarten(wartezeit as double)
  180.     dim as double zeit = 0.0
  181.  
  182.     zeit = timer
  183.  
  184.     do
  185.     loop until timer > zeit + wartezeit
  186. end sub
  187.  
  188.  
  189.  
  190. function ladeKarte(Dateiname as string, welt() as string, byref start_x as integer, byref start_y as integer) as boolean
  191.     dim daten as string
  192.     dim as integer zeilen, spalten
  193.    
  194.     ' Welt laden
  195.     dim DateiNr as integer = FreeFile
  196.     if open(Dateiname for binary as #DateiNr) = 0 then
  197.    
  198.         daten = space(lof(DateiNr)) ' Dateigröße ermitteln
  199.                         ' und mit Leerzeichen füllen
  200.    
  201.         get #DateiNr, , daten ' aktuelles Zeichen in daten speichern
  202.    
  203.         close #DateiNr
  204.     else
  205.         return false
  206.     end if
  207.    
  208.     ' Weltgröße ermitteln
  209.     spalten = instr(daten, any !"\r\n")-1
  210.     zeilen = len(daten) \ (spalten + iif(daten[spalten] = asc("\r"), 2, 1))
  211.    
  212.     ' Karte laden und in Array speichern...
  213.     redim welt(0 TO zeilen-1, 0 TO spalten-1) as string
  214.    
  215.     dim as integer x, y
  216.     for i as integer = 0 to len(daten)-1
  217.         if daten[i] = 10 then
  218.             y += 1
  219.             x = 0
  220.             continue for
  221.         end if
  222.         if daten[i] = 13 then continue for
  223.        
  224.         welt(y, x) = chr(daten[i])
  225.        
  226.         ' Aktuelle Spieler Position feststellen
  227.         if welt(y, x) = figur then
  228.             start_x = x
  229.             start_y = y
  230.         end if
  231.        
  232.         x += 1
  233.     next
  234.    
  235.     return true
  236. end function
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement