Advertisement
Guest User

Untitled

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