Advertisement
Guest User

Untitled

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