Advertisement
Guest User

bomberman-game.bas

a guest
Feb 22nd, 2017
85
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 = FREEFILE
  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.  
  26. ' Funktionen und SUBs
  27. declare sub zeigeWelt(welt() as string, zeilen as integer, spalten as integer)
  28. declare sub bewegeSpieler(welt() as string, x as integer, y as integer, figur as string, wand as string, zeilen as integer, spalten as integer)
  29.  
  30. ' Karte die geladen werden soll eingeben
  31. Dateiname = "karte01.txt"
  32.  
  33. ' Weltgröße ermitteln...
  34. if open(Dateiname for binary as #DateiNr) = 0 then
  35.  
  36.         do
  37.                 zeilen = zeilen + 1
  38.                 input #DateiNr, zeichen
  39.         loop until eof(DateiNr)
  40.  
  41.         spalten = len(zeichen)
  42.     close #DateiNr
  43. else
  44.     print !"\34!!!FEHLER!!! beim laden der Datei\34"
  45. end if
  46.  
  47. ' Karte laden und in Array speichern...
  48. dim welt(0 TO zeilen, 0 TO spalten) as string
  49.  
  50. ' Die komplette Textdatei in einen String speichern
  51. open Dateiname for binary as #DateiNr
  52.     dim daten as string
  53.     daten = space(lof(DateiNr)) ' Dateigröße ermitteln
  54.                     ' und mit Leerzeichen füllen
  55.  
  56.     get #DateiNr, , daten ' aktuelles Zeichen in daten speichern
  57. close #DateiNr
  58.  
  59. for i = 0 to (len(daten) - 1)
  60.     ' print chr(daten[i]);
  61.  
  62.     ' Daten in ein 2-Dimensionales Array speichern
  63.     for a = 0 to (zeilen - 1)
  64.         for b = 0 to (spalten)
  65.             welt(a, b) = chr(daten[i]) ' Daten in Array speichern
  66.  
  67.             ' Aktuelle Spieler Position feststellen
  68.             if welt(a, b) = figur then
  69.                 start_x = b
  70.                 start_y = a
  71.             end if
  72.  
  73.             i = i + 1 ' ein Zeichen weiter gehen
  74.         next
  75.     next
  76. next
  77.  
  78. color 3, 0 ' Spiel in einen schönen blau darstellen :-)
  79. zeigeWelt(welt(), zeilen, spalten)
  80.  
  81. ' Spieler auf aktuelle Position in der Welt setzen
  82. y = start_y
  83. x = start_x
  84.  
  85. ' Hauptschleife
  86. do
  87.     taste = INKEY
  88.  
  89.     locate 1, 20: print "y: "; y
  90.     locate 2, 20: print "x: "; x
  91.  
  92.     ' Tastatur abfragen und Spieler bewegen
  93.     select case taste
  94.         case "w"
  95.             y = y - 1
  96.             bewegeSpieler(welt(), x, y, figur, wand, zeilen, spalten)
  97.             zeigeWelt(welt(), zeilen, spalten)
  98.  
  99.         case "s"
  100.             y = y + 1
  101.             bewegeSpieler(welt(), x, y, figur, wand, zeilen, spalten)
  102.             zeigeWelt(welt(), zeilen, spalten)
  103.  
  104.         case "a"
  105.             x = x - 1
  106.             bewegeSpieler(welt(), x, y, figur, wand, zeilen, spalten)
  107.             zeigeWelt(welt(), zeilen, spalten)
  108.  
  109.         case "d"
  110.             x = x + 1
  111.             bewegeSpieler(welt(), x, y, figur, wand, zeilen, spalten)
  112.             zeigeWelt(welt(), zeilen, spalten)
  113.     end select
  114.  
  115.     sleep 1
  116. loop until taste = chr(27) ' Spiel beenden mit ESC
  117.  
  118. ' Spielende
  119. end
  120.  
  121. ' Soll einfach nur die Welt auf dem Bildschirm ausgeben
  122. '
  123. sub zeigeWelt(welt() as string, zeilen as integer, spalten as integer)
  124.     dim as integer j, k
  125.  
  126.     cls ' Bildschirm löschen
  127.         for j = 0 to (zeilen - 1)
  128.                 for k = 0 to (spalten)
  129.                         print welt(j, k);
  130.                 next
  131.         next
  132. end sub
  133.  
  134. ' Soll den Spieler bewegen und Eingaben überprüfen ob Sie gültig sind
  135. ' und abfragen ob man gegen ein Objekt läuft usw
  136. '
  137. sub bewegeSpieler(welt() as string, x as integer, y as integer, figur as string, wand as string, zeilen as integer, spalten as integer)
  138.     dim as integer alt_x = 0
  139.     dim as integer alt_y = 0
  140.  
  141.     dim as integer j
  142.     dim as integer k
  143.  
  144.     ' Alte Spielerpostion speichern
  145.     alt_x = (x - 1)
  146.     alt_y = (y - 1)
  147.  
  148.         if welt(y, x) = wand then ' Position zurücksetzen
  149.                 'Aktuelle Spieler Position ermitteln
  150.                 '
  151.                 for j = 0 to (zeilen - 1)
  152.                         for k = 0 to (spalten)
  153.                                 if welt(j, k) = figur then
  154.                                         x = k
  155.                                         y = j
  156.                                 end if
  157.                         next
  158.                 next
  159.         end if
  160.  
  161.     ' Wenn Spieler auf kein Objekt trifft weiter gehen
  162.     '
  163.     if welt(y, x) = " " then
  164.         welt(y, x) = figur ' Spieler platzieren
  165.         welt(alt_y, alt_x) = " " ' alte Spieler Position löschen
  166.     end if
  167. end sub
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement