Befehle ändern

Übersicht BlitzBasic Allgemein

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

 

Xenox

Betreff: Befehle ändern

BeitragSa, Aug 20, 2005 18:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo zusammen

Ich hoffe mal, von euch kann mir einer helfen bei folgender Frage:


Wie verpack ich Befehle in eine Variabel??? (oder so ähnlich)

Ich möchte, dass ich am Anfang einen unwichtigen Befehl wie "goto start" in einer Variabel speichern kann. Sobald aber etwas bestimmtes geschieht (z.B. eine IF-THEN schleife endet an einem bestimmten Ort) möchte ich die Variabel umschreiben können, so dass bei einem erneuten durchlauf des Programmes nun ein anderer Befehl in dieser Variabeln gespeichert ist... Wie geht das? Wie sag ich ihm: "geh dorthin und schreib diesen Befehl in diesen um..."?


Es muss ja nicht zwingend in einer Variablen sein (glaube auch nicht, dass das überhaupt geht), aber irgendwie muss das doch möglich sein...


HHEELLFFTT MMIIRR!!! Rolling Eyes Rolling Eyes Rolling Eyes

gruss,
xenox
 

Dreamora

BeitragSa, Aug 20, 2005 18:47
Antworten mit Zitat
Benutzer-Profile anzeigen
1 Wort: Garnicht.

Variablen sind nur Variablen und können nix ausführen.


Die einzige Möglichkeit die dir bleiben würde, wäre einen String zu verwenden, welchen du über ein Select - Case Konstrukt überprüfst und entsprechend reagierst.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

Xenox

BeitragSa, Aug 20, 2005 18:53
Antworten mit Zitat
Benutzer-Profile anzeigen
ok, ich kenn mich echt noch nicht so mit programmieren aus (habt ihr ja sicher schon gemerkt)...

also könntest du mir das mit dem String ein bisschen genauer erklären?


Noch ne ähnliche frage: Gibt es auch gar keine möglichkeit eine Variable in einen "Goto" oder "Gosub" zu stecken? Bsp. Goto A$, so dass je nachdem wie A$ definiert ist, das Programm an einen anderen Ort springt? (Ich weiss selber, dass das genannte beispiel nicht funktioniert! sollte nur ne Hilfe sein...)
 

Dreamora

BeitragSa, Aug 20, 2005 18:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein kannst du nicht weil goto ein direkter Sprungbefehl ist der beim kompilieren mit der Zieladresse in der Exe gefüllt wird.

Zu meinem Beispiel:

Code: [AUSKLAPPEN]

global befehl


function parse_befehl ()

   select befehl
      case "start"
         goto start
      case "quit"
         goto quit
end function
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

Xenox

BeitragSa, Aug 20, 2005 19:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Genau so etwas hab ich gesucht Laughing

Danke, mal sehen ob ich damit fertig werde, sonst melde ich mich wieder Wink...


Gruss und nochmals danke
xenox
 

judos

BeitragSa, Aug 20, 2005 22:21
Antworten mit Zitat
Benutzer-Profile anzeigen
gleich dazu noch eine frage:

kann man den Befehl, der in einem String steht irgendwie ausführen ???


z.b.
Code: [AUSKLAPPEN]

a$="end"
mache a$


mfg judos
 

Dreamora

BeitragSa, Aug 20, 2005 22:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein das kann man nicht *siehe 2. Posting in diesem Thread*
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

DA

BeitragSa, Aug 20, 2005 22:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Moin.

Hui. Wie geil es doch wäre wenn es so gingen würde.
Man könnte sich BB in kürzester Zeit nachschreiben oder andere Dinge tun. Smile
Doch leider ist dies nicht möglich. Sad

Mfg
Deutscher Blitz Basic Chat
 

judos

BeitragSa, Aug 20, 2005 22:29
Antworten mit Zitat
Benutzer-Profile anzeigen
hehe Very Happy



ich fang dann gleich an mit dieser funktion zu proggen Very Happy

melde mich, wenn ich fertig bin...

mfg judos
 

Xenox

BeitragMo, Aug 22, 2005 17:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Dreamora hat Folgendes geschrieben:
Zu meinem Beispiel:

Code: [AUSKLAPPEN]

global befehl


function parse_befehl ()

   select befehl
      case "start"
         goto start
      case "quit"
         goto quit
end function



Geht auch nicht... "Undefined label". Und eine Gosub funktion => "may not be used inside a function"...

Vielleicht gibt es ne andere lösung, ich brauch einfach folgendes: Ich möchte auf gut deutsch, dass wenn im Programm eine Frage/Aufgabe falsch beantwortet/gelöst wurde, die wahrscheinlichkeit steigt, dass diese Frage durch "Rand" erneut aufgerufen wird.

Kann ich Rand irgendwie beeinflussen und die Wahrscheinlichkeiten ändern? wohl kaum, oder?
 

Dreamora

BeitragMo, Aug 22, 2005 18:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Doch. Indem du ihren Generierungebereich erweiterst und der falschen Frage mehr als nur 1 mögliche Zahl gibst. dann wird es wahrscheinlicher dass der Zufallsgenerator bei dieser Frage landet
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Firstdeathmaker

BeitragMo, Aug 22, 2005 18:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Doch, klar. Du kannst die Warscheinlichkeit bestimmen mit der etwas aufgerufen wird:


BlitzBasic: [AUSKLAPPEN]
frageXchance#=0.5

If Rnd(0,1)>frageXchance



Edit: Zahl*100=Prozentchance. D.h. wenn du bei frageXchance "1" angibst, ist die Warscheinlichkeit 100% das sie drankommt.
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon
Gewinner des BCC #57 User posted image
 

Xenox

BeitragMo, Aug 22, 2005 18:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Kann ich da auch Variabeln für verwenden?
 

Dreamora

BeitragMo, Aug 22, 2005 18:23
Antworten mit Zitat
Benutzer-Profile anzeigen
ja
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

Xenox

BeitragMo, Aug 22, 2005 18:38
Antworten mit Zitat
Benutzer-Profile anzeigen
ok, aber wie genau funktioniert da`?

Ich meine, welche werte stehen für was?

"frageXchance" Gibt ja wie gesagt die wahrscheinlichkeit in Prozent an.

Und "(0,1)>frageXchance" heist einfach, dass die wahrscheinlichkeit in diesem Falle 50 zu 50 steht?

Und wenn ich schon mal dabei bin: was ist, wenn die Prozentzahlen nicht von anfang an Hundert ergeben? Ich meine, alle Aufgaben müssen ja am Anfang die gleichen "chancen" haben. Und doch müssen sich diese später vervielfachen können...
 

Dreamora

BeitragMo, Aug 22, 2005 19:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja und?
Alle zusammen können trotzdem nur 100 ergeben. Wenn eine wahrscheinlicher wird, müssen die anderen gleichzeitig unwahrscheinlicher werden ...

Musst dir halt überlegen wie du das programmiertechnisch genau umsetzen willst und wie es am effizientisten geht.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

Xenox

BeitragMo, Aug 22, 2005 19:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Aber ich weiss immer noch nicht, was das heissen soll:

"(0,1)>frageXchance". Was ist bei mehr als zwei werten? Wie sag ich, dass dieser eine 50% wahrscheinlichkeit und nummer zwei und drei nur 25% proznte haben?
 

Dreamora

BeitragMo, Aug 22, 2005 19:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Dann machst du ein value# = rand(0,1)
Code: [AUSKLAPPEN]

if value < 0.1
  ; was soll hier passieren
elseif value < 0.2
  ; was soll hier passieren
  ; hier ist übrigens 0.1 - 0.2
elseif
 ...

endif


der Pseudocode sollte ausreichen um alle probleme zu lösen ... musst halt dann die 0.1 etc durch variablen ersetzen
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Firstdeathmaker

BeitragMo, Aug 22, 2005 20:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Du könntest es theoretisch auch folgendermaßen machen:

Jede Frage ist ein Type-Feld, in das die Warscheinlichkeit einfach als int, also als Ganzzahl eingetragen wird:

BlitzBasic: [AUSKLAPPEN]

Type Frage
Field warscheinlichkeit
Field fragentext$
End Type


Wenn du jetzt eine zufällig ermitteln möchtest, schaust du erst wieviel "Warscheinlichkeit" es insgesamt gibt:

BlitzBasic: [AUSKLAPPEN]
Local GesWarsch
For F.Frage = Each Frage
GesWarsch = GesWarsch + F.warscheinlichkeit
Next


Dann wählst du einen Wert aus der Gesamten Warscheinlichkeit aus:

BlitzBasic: [AUSKLAPPEN]
Local Wert = Rand(GesWarsch)


um jetzt die richtige Frage zu bekommen, brauchst du nur noch folgendes zu tun:

BlitzBasic: [AUSKLAPPEN]
GesWarsch = 0 ; Wird jetzt zum zählen mißbraucht
For F.Frage = Each Frage
If F.warscheinlichkeit + GesWarsch > Wert
;Frage auswählen
Else
GesWarsch =GesWarsch + F.warscheinlichkeit
EndIf
Next
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon
Gewinner des BCC #57 User posted image
 

Xenox

BeitragMo, Aug 22, 2005 20:38
Antworten mit Zitat
Benutzer-Profile anzeigen
ok, das funktioniert soweit, aber value# = rand(0,1) produziert ja nur zwei werte. Nämlich 1.00000 und 0.00000, es ist also irrelevant ob jetzt 0.1, 0.2, oder was... nur kleiner und grösser als 0.99999 ist wichtig...

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group