Autor Beitrag
Ebil
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 131



BeitragVerfasst: Fr 27.06.08 01:21 
Hi leute,
Sorry für den doofen thread titel, ich hab aber echt keine ahnung wie ich soetwas nennen könnte...

Es geht um ein Spiel bei dem einem monster verschiedene modi zugeteilt werden, ich versuche das ganze hier vereinfacht anders darzustellen, und hoffe ihr versteht mein problem!

wert 1: Peter hat Blaue Haare.
wert 2: Peter hat Grüne Augen.
wert 4: Peter hat Gelbe Haut.
wert 8: Peter hat ein Schwarzes Hemd an.
wert 16: Peter ist 18.

So, nehmen wir das als ausgangswerte, die liste kann man beliebig weiterführen wobei sich der wert immer verdoppelt.
Nun bekomme ich einen wert wie zb: 12.
Somit hat peter Gelbe Haut und ein Schwarzes Hemd an.
Bei dem wert 7 Hat Peter Blaue haare, Grüne Augen, und Gelbe Haut.
Also immer eine eindeutige zuweisung.

Aber wie kriege ich soetwas nun mit delphi raus?
Ich meine umso mehr einträge es werden, umso extrem-größer würde eine case of abfrage zb werden, ich will garnicht wissen wieviele möglichkeiten es schon bei meinem kleinen beispiel gibt, und bei meinen echten problem gibts da noch ein paar mehr möglichkeiten.
Und wie nennt man sowas eigentlich? Ist ja ziemlich nützlich wie ich finde.
Hoffe ihr habt mich verstanden, und dazu auch mein problem, und ich hoffe ich hab es halbwegs verständlich geäußert.

Gruß
Ebil

Moderiert von user profile iconNarses: Thread-Titel ergänzt ;)
Fabian E.
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 554

Windows 7 Ultimate
Visual Studio 2008 Pro, Visual Studion 2010 Ultimate
BeitragVerfasst: Fr 27.06.08 02:14 
Du kannst das mit einer If-Abfrage prüfen.
Z.B. so:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
if (Value and 1) <> 0 then
//Peter hat blaue Haare
if (Value and 2) <> 0
//Peter hat grüne augen
Ebil Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 131



BeitragVerfasst: Fr 27.06.08 02:27 
Mh ich verstehs nich ganz, entweder hast du mein problem nicht verstanden, oder ich hab deine lösung für mein problem nicht verstanden.

Mein problem ist das ich zb aus der zahl 12 die jeweiligen werte (Gelbe Haut und ein Schwarzes Hemd) ermitteln muss.
Fabian E.
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 554

Windows 7 Ultimate
Visual Studio 2008 Pro, Visual Studion 2010 Ultimate
BeitragVerfasst: Fr 27.06.08 02:31 
Ja, du schreibst für Eigenschaft eine Abfrage. Dort ersetzt du 1 bzw 2 durch die jeweilige Zahl. Dann hast du so viele Abfragen wie du Eigenschaften hast.
Tilman
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1405
Erhaltene Danke: 51

Win 7, Android
Turbo Delphi, Eclipse
BeitragVerfasst: Fr 27.06.08 02:43 
user profile iconEbil hat folgendes geschrieben:
Mh ich verstehs nich ganz, entweder hast du mein problem nicht verstanden, oder ich hab deine lösung für mein problem nicht verstanden.

Mein problem ist das ich zb aus der zahl 12 die jeweiligen werte (Gelbe Haut und ein Schwarzes Hemd) ermitteln muss.


Vielleicht hat es was mit dem Bier der deutschen Nationalmannschaft zu tun?

_________________
Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)
Ebil Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 131



BeitragVerfasst: Fr 27.06.08 03:06 
Mh stimmt... hätte nicht gedacht das es so einfach geht, funkt aber! Danke.
Man nun weiss ich nich ob ich Info studieren soll oda nich, wenn ich nichma sowas gebacken krieg, und nein, ich hab nix gesoffen :/

Ebil

//Edit: ok wenn ich so auf die uhr gucken, vllt liegt es daran :D
Hidden
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2242
Erhaltene Danke: 55

Win10
VS Code, Delphi 2010 Prof.
BeitragVerfasst: Fr 27.06.08 07:48 
Vielleicht hätte jemand erwähnen sollen, dass das and hier ein bitweises und ist. Da du mit einer Zahl 'verundelst', in der nur ein Bit gesetzt ist, verundelst du praktisch mit dem Bit.

In deiner Lösung ist nun das Bit nur dann gesetzt, wenn es vorher gesetzt war. Alle anderen Bits sind auf jeden Fall nicht gesetzt.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
  10101101 and
  00001000
00001000


  10100101 and
  00001000
00000000

Somit kommt 0 raus, wenn das Bit nicht gesetzt war, ansonsten eine Zahl, in der nur das Bit gesetzt ist. Diese ist ungleich null, was nebenbei bemerkt die Definition von Suche in der Entwickler-Ecke TRUE ist. Mit '<>0' wandelst du also praktisch dein Ergebnis in einen Boolean. if Boolean(Paul and 2then ...

'Paul and 7' würde übrigens zurückgeben, ob irgendeines der Bits 1, 2 oder 4(4 + 2 + 1 = 7) gesetzt ist.
ausblenden Die Boolean-Casts hab ich mal weggelassen:
1:
(Paul and 7) <=> ((Paul and 1or (Paul and 2or (Paul and 4))					


Edit: Überflüssige nullen entfernt

mfG,

_________________
Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)


Zuletzt bearbeitet von Hidden am Fr 27.06.08 08:50, insgesamt 1-mal bearbeitet
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: Fr 27.06.08 08:14 
Hidden, eine schöne Erklärung.
user profile iconHidden hat folgendes geschrieben:
ausblenden imho geht also auch:
1:
if Boolean(Paul and 2then ...					
Chleudert ten Purchen chu Poden!

Hidden: :mahn: Teeren und Federn sollte man dich für diesen 'Tipp' bei einer Anfängerfrage. :zwinker:

_________________
Na denn, dann. Bis dann, denn.
Ebil Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 131



BeitragVerfasst: Fr 27.06.08 13:13 
Genau das wollte ich noch nachfragen :P
Als ich das hier gesehn hab hab ich erstmal nachgeschaut was der "and" operator da zu suchen hat, dann hab ich vom "bitweisen and" gehört, aber nichts verstanden...
Deine erklärung ist da ziemlich einleuchtent, danke für die mühe!
Tilman
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1405
Erhaltene Danke: 51

Win 7, Android
Turbo Delphi, Eclipse
BeitragVerfasst: Fr 27.06.08 18:11 
user profile iconEbil hat folgendes geschrieben:
Genau das wollte ich noch nachfragen :P
Als ich das hier gesehn hab hab ich erstmal nachgeschaut was der "and" operator da zu suchen hat, dann hab ich vom "bitweisen and" gehört, aber nichts verstanden...
Deine erklärung ist da ziemlich einleuchtent, danke für die mühe!


ich wollte deir eh net unterstellen das du besoffen bist ^^ mein Hinweis-Link war scherzhaft, aber durchaus erst gemeint :lol:

_________________
Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)
Hidden
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2242
Erhaltene Danke: 55

Win10
VS Code, Delphi 2010 Prof.
BeitragVerfasst: Fr 27.06.08 18:15 
Hmm.. Den Zusammenhang zwischen seinem letzten Post und dem Bier hab ich immer noch nicht verstanden. Ein Wortspiel?

user profile iconTilman hat folgendes geschrieben:
Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
Meinen Reis bekommst du nicht!

_________________
Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
wazup
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 101

Windows XP
Delphi 2009
BeitragVerfasst: Fr 27.06.08 18:51 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
function IntegerToHaare(Wert: Integer): string;
begin
  Result := '';
  
  if Wert in [0..32then
  begin
    if 1 and Wert <> 0 then Result := Result + 'rot';  // Xd
    if 2 and Wert <> 0 then Result := Result + 'grün'// xD
    if 4 and Wert <> 0 then Result := Result + 'blau'// Xd
    if 8 and Wert <> 0 then Result := Result + 'schwarz';
    if 16 and Wert <> 0 then Result := Result + 'braun';
  end;
end;
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Fr 27.06.08 19:00 
Moin!

Alternative (leichter erweiterbar): ;)
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
function IntegerToHaare(const Wert: Integer): String;
  const
    Max = 5// Max (also MaxMax) ist hier natürlich 32 ;)
    Haarfarbe: array[1..Max] of String =
      ( 'rot','grün','blau','schwarz','braun' );
  var
    i,Bit: Integer;
begin
  Result := '';
  Bit := 1;
  for i := 1 to Max do begin
    if ( (Wert and Bit) <> 0then
      Result := Result +Haarfarbe[i]+',';
    Bit := Bit shl 1;
  end;
end;



@user profile iconwazup: Du hast einen Fehler im Code: ;)
user profile iconwazup hat folgendes geschrieben:
ausblenden Delphi-Quelltext
1:
if Wert in [0..31then					
cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.


Zuletzt bearbeitet von Narses am Fr 27.06.08 19:19, insgesamt 1-mal bearbeitet
wazup
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 101

Windows XP
Delphi 2009
BeitragVerfasst: Fr 27.06.08 19:03 
Ouh... kommt auch mal vor ^^ :oops:
Hidden
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2242
Erhaltene Danke: 55

Win10
VS Code, Delphi 2010 Prof.
BeitragVerfasst: Fr 27.06.08 19:03 
Statt shl kannst du auch "* 2" nehmen, im Binärsystem. Bedeutet "Leftshift".

Hoffe mal ich hab nichts falsches erzählt ;)

mfG,

_________________
Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)