Variablen auslesen und deuten, 2, 4, 8, 16...etc?!

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Fafnir

Betreff: Variablen auslesen und deuten, 2, 4, 8, 16...etc?!

BeitragDo, März 10, 2005 12:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe ein Verständnisproblem... Es gibt doch die Möglichkeit, in einer Zahl viele Informationen zu speichern, so nach dem Schema (Beispiel: Wände und Türen auf einer Einheit):

0 = nichts
1 = wand nord
2 = wand ost
4 = wand süd
8 = wand west
16 = tür nord
32 = tür ost
64 = tür süd
132 = tür west

Ihr versteht sicher was ich meine. Jetzt bin ich glaube ich wirklich zu blöd draufzukommen, wie man diese Zahlen wieder in für das Programm verwertbare Informationen zurücktransferieren kann. Also in der Art "aha, das ist eine 136, also muß ich da im Westen eine Tür zeichnen und im Süden eine Wand". Klar könnte ich alle Möglichkeiten einbauen, aber das wär ja witzlos und kann ja nicht Sinn der Sache sein. Ich glaube, es hat hier auch mal ein Thema dazu gegeben, nur leider kann ich es nicht finden... Ein Link oder Denkanstoß reicht sicher auch schon Embarassed

Das wäre nämlich sehr viel eleganter als meine derzeitige Lösung, jeder Zelle einfach nur eine 1 zu geben und einen kompletten Block aus Wänden drauf zu zeichnen.
Werbung:
User posted image
Es sind User posted image Benutzer im Chat

BladeRunner

Moderator

BeitragDo, März 10, 2005 12:23
Antworten mit Zitat
Benutzer-Profile anzeigen
128, zum einen Wink

Zum Andern: Beschäftige Dich mal mit AND und OR.

Ich hätte aber auch hier: https://www.blitzforum.de/viewtopic.php?t=5689

einige fertige Funktionen.

Wäre trotzdem sehr sinnvoll wenn Du dich genauer mit diesen Operanden auseinandersetzt- sie sind sehr mächtig.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Spikespine

BeitragDo, März 10, 2005 12:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
in einer Zahl viele Informationen zu speichern

Ach ja, geht das?

Ich glaube, dein Problem ist, eine Tile-Map zu machen. Da würd ich ein zweidimensionales Array nehmen und aus einer Datei (oder Data) die Werte reinlesen. Beispiel:

BlitzBasic: [AUSKLAPPEN]

Data 1,1,1,1,1,1,1
Data 1,0,0,0,2,0,1
Data 1,0,1,3,0,0,1
Data 1,0,1,0,0,0,1
Data 1,1,1,1,1,1,1
;Das war die Map. 0 steht für nichts (bzw. gras oder ähnliches)
; 1 für Mauer
; 2 für Schlüssel
; usw

;Nun wird eine Map erstellt, die die gleichen Maße hat, wie das Datafeld (7x5 Tiles):
Dim Map(6,4)
For y=0 To 6
For x=0 To 4
Read Map(x,y) ;hier werden die Werte eingelesen
Next
Next

;jetzt kannst du es auch aufrufen:
Print Map(0,0) ;gibt 1
Print Map(3,2) ;gibt 3


Ich hoffe, es war das, was du meintest^^
Athlon 64 3700+ | 1024 MB RAM | GeForce 7900 GT | Blitz2D, Blitz3D, BlitzPlus, BlitzMax

Fafnir

BeitragDo, März 10, 2005 12:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Spikespine: Ja, GENAU SO hab ich das ja auch in meinem Programm, aber das will ich nicht, da sonst Wände immer auch gleich 1 Feld dick sind (geht um ein rundenbasierts first-person-dungeon-spiel). Das ist unflexibel, unprofessionell und unnochirgendwas Wink

Danke Bladerunner, ich hoff das hilft mir weiter!!!
Werbung:
User posted image
Es sind User posted image Benutzer im Chat
 

David

BeitragDo, März 10, 2005 12:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Du nimmst einen Integer und für jedes gesetzte Bit definierst du, in deinem Programm, eine entsprechende Ausgabe.

1 = 1 = Wand im Süden
2 = 10 = Tür im Süden
4 = 100 = Wand im Osten
8 = 1000 = Tür im Osten

usw...

Wenn du nun eine 12 (binär: 1100) hast, sind die Bit 3 und 4 (von hinten) gesetzt und du siehst: "aha 1000 und 100 passen", also wird eine Wand im Osten und eine Tür im Osten erstellt.
Das ganze kannst du mit logischen Operatoren rausfinden.

Hoffe, das ich dein Problem nicht missverstandenhabe! Wink

grüße

Fafnir

BeitragDo, März 10, 2005 16:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke alle!!

Also, mal schauen ob ich das richtig verstanden habe (bin noch bei der Arbeit und kanns erst heut Abend probieren):

ich könnte zuerst die "Wandbits" in der Art setzen:

const wandnord=%0000001
const wandost=%00000010
..etc..


Ich kann einer Zelle dann so die Beschreibung verpassen:

Zelle = 3 ;wenn man das dezimale und das binäre system nicht in der art vermischen kann, schlagt mich Wink


Auslesen und verwerten könnte ich das so:

If zelle and wandnord then mal_da_eine_wand_hin


Zwei Fragen habe ich noch:

- kann man den Wert einer variable auch mit einer Komplettabfrage ändern? Also so:
zelle = wandnord or wandost or wandsued or wandwest ;na gut das kann ich auch daheim probieren...

- In der anderen Diskussion sagt jemand (ich glaube Bladerunner war's), eine Variable könne 32 Werte speichern. Das heißt, daß sie also auch binär aus 32 Stellen besteht.. Oder?! Also in der Art schluesselfuergoldenetuermitderschrammedranlinksunten=%00000000000000 (...) 001???


Wenn ich folgenden Code richtig verstehe:


Lesen = %00000001
Schreiben = %00000010
Wert = lesen or schreiben

Dann nimmt Wert hier den Schalter für schreiben & lesen an, weil in der Gleichung nicht der Wert der Variable so wie ich mir das vorstelle, sondern jedes einzelne Bit miteinander vergleichen wird. Wert wird also zu 00000011 bzw. zu 3. Man könnte aber genauso gut das alles in dezimalen Zahlen schreiben, da der Computer sowieso binär rechnet und alles umwandelt...

Danke!! Wink
Werbung:
User posted image
Es sind User posted image Benutzer im Chat

Artemis

BeitragDo, März 10, 2005 16:40
Antworten mit Zitat
Benutzer-Profile anzeigen
nein ein "paar fehler"
ungefähr so sollte es aussehen:BlitzBasic: [AUSKLAPPEN]
Const wand0 = 1
Const wand1 = 2
printwand(3)
WaitKey
End
Function printwand(x)
If (x And wand0) Then Print \"WAND0\"
If (x And wand1) Then Print \"WAND1\"
End Function

Fafnir

BeitragDo, März 10, 2005 17:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Prima, danke. Das heißt aber scheinbar, daß ich es immerhin grundsätzlich verstanden habe Very Happy
Werbung:
User posted image
Es sind User posted image Benutzer im Chat

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group