Advertisement
Guest User

bomberman-game.bas

a guest
Feb 23rd, 2017
81
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.  
  107.                 bomben = bomben + 1
  108.             end if
  109.     end select
  110.  
  111.     ' Aktionen steuern
  112.     if (bomben > 0) and (timer > start_bombe(bomben).start_zeit + start_bombe(bomben).abwarte_zeit) then
  113.         locate 12, 35
  114.         print "BUUUUUUMMMMM!!!!!"
  115.         sleep
  116.         sleep
  117.         bomben = bomben - 1    
  118.     end if
  119.  
  120.     sleep 1
  121. loop until taste = chr(27) ' Spiel beenden mit ESC
  122.  
  123. ' Spielende
  124. spielende()
  125. end
  126.  
  127. ' Soll einfach nur die Welt auf dem Bildschirm ausgeben
  128. '
  129. sub zeigeWelt(welt() as string)
  130.     dim as integer j, k
  131.  
  132.     ' Bildschirm Position zurücksetzen
  133.     locate 1, 1
  134.  
  135.     for j = lbound(welt,1) to ubound(welt,1)
  136.         for k = lbound(welt,2) to ubound(welt,2)
  137.             print welt(j, k);
  138.         next
  139.         print
  140.     next
  141. end sub
  142.  
  143.  
  144. function canMove(welt() as String, x as integer, y as integer) as boolean
  145.     if y < lbound(welt,1) or y > ubound(welt, 1) then return false
  146.     if x < lbound(welt,2) or x > ubound(welt, 2) then return false
  147.  
  148.     if welt(y, x) = WAND then return false
  149.     if welt(y, y) = BOMBE then return false
  150.  
  151.     return true
  152. end function
  153.  
  154.  
  155.  
  156. ' Soll den Spieler bewegen und Eingaben überprüfen ob Sie gültig sind
  157. ' und abfragen ob man gegen ein Objekt läuft usw
  158. '
  159. function bewegeSpieler(welt() as string, x as integer, y as integer, alt_x as integer, alt_y as integer) as boolean
  160.  
  161.     if not canMove(welt(), x, y) then return false
  162.  
  163.     if (welt(y, x) = FREI) or (welt(y, x) = FIGUR) then
  164.         welt(y, x) = figur ' Spieler platzieren
  165.  
  166.         ' alte Spieler Position löschen, wenn keine Bombe gelegt wurde
  167.         if welt(alt_y, alt_x) <> BOMBE then welt(alt_y, alt_x) = FREI
  168.  
  169.         return true
  170.     end if
  171.    
  172.     return false
  173. end function
  174.  
  175. ' Soll einfach einige Dinge erledigen nach dem das Spiel vorbei ist
  176. '
  177. sub spielende()
  178.     cls
  179.     print "Danke fürs spielen :-)"
  180. end sub
  181.  
  182. ' wartet eine übergebene Wartezeit in Sekunden ab...
  183. '
  184. sub abwarten(wartezeit as double)
  185.     dim as double zeit = 0.0
  186.  
  187.     zeit = timer
  188.  
  189.     do
  190.     loop until timer > zeit + wartezeit
  191. end sub
  192.  
  193.  
  194.  
  195. function ladeKarte(Dateiname as string, welt() as string, byref start_x as integer, byref start_y as integer) as boolean
  196.     dim daten as string
  197.     dim as integer zeilen, spalten
  198.    
  199.     ' Welt laden
  200.     dim DateiNr as integer = FreeFile
  201.     if open(Dateiname for binary as #DateiNr) = 0 then
  202.    
  203.         daten = space(lof(DateiNr)) ' Dateigröße ermitteln
  204.                         ' und mit Leerzeichen füllen
  205.    
  206.         get #DateiNr, , daten ' aktuelles Zeichen in daten speichern
  207.    
  208.         close #DateiNr
  209.     else
  210.         return false
  211.     end if
  212.    
  213.     ' Weltgröße ermitteln
  214.     spalten = instr(daten, any !"\r\n")-1
  215.     zeilen = len(daten) \ (spalten + iif(daten[spalten] = asc("\r"), 2, 1))
  216.    
  217.     ' Karte laden und in Array speichern...
  218.     redim welt(0 TO zeilen-1, 0 TO spalten-1) as string
  219.    
  220.     dim as integer x, y
  221.     for i as integer = 0 to len(daten)-1
  222.         if daten[i] = 10 then
  223.             y += 1
  224.             x = 0
  225.             continue for
  226.         end if
  227.         if daten[i] = 13 then continue for
  228.        
  229.         welt(y, x) = chr(daten[i])
  230.        
  231.         ' Aktuelle Spieler Position feststellen
  232.         if welt(y, x) = figur then
  233.             start_x = x
  234.             start_y = y
  235.         end if
  236.        
  237.         x += 1
  238.     next
  239.    
  240.     return true
  241. end function
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement