Simulation
Übersicht

IxamBetreff: Simulation |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo
Ich möchte eine Bakterien bzw. Immunsystemsimulation schreiben. Damit ich nicht ständig wenn das Gebiet wechselt neue Themen machen muss schreib ich alle Fragen hierein... ![]() Mein erstes Problem ist folgendes Code: [AUSKLAPPEN] Type Bakterie
Field TeilungZ% Field posx% Field Posy% End Type Local B.Bakterie B= New Bakterie B\TeilungZ% = teilg% B\Posx% = 150 B\Posy% = 150 Teilg% ist ,wenn ich ihn in eine Datei schreiben lass richtig nur B\TeilungZ% ist nicht gleich ! Warum? |
||
Ixam |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Das problem habe ich inzwischen nach vielem nachdenken umgangen! ![]() Jetzt habe ich aber eine andere Frage: Wenn ich folgenden code habe: Code: [AUSKLAPPEN] Zeit%=0
Repeat Zeit%=Zeit%+1 Until keyhit(1) Wann ist dann eine sekunde rum? gibts vieleicht einen Befehl für das? Ixam |
||
![]() |
Noobody |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du machst einfach am Anfang der Schleife das da:
Code: [AUSKLAPPEN] time=Millisecs()
Das speichert die Programmzeit in der Variable time. Dann fragst du in der Schleife ab: Code: [AUSKLAPPEN] If Millisecs()-time>=1000 Then
Zeit%=Zeit%+1 time=Millisecs() EndIf Dies fragt nun ab, ob die aktuelle Zeit minus die Zeit am Anfang der Schleife grösser als 1000 Millisekunden ist (=1 Sekunde). Dann speichert es die aktuelle Zeit wieder in der Variablen time. |
||
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun |
![]() |
darth |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] t=millisecs()
repeat if millisecs()-t>1000 then text 10,10,"Sekunde ist um" ;verschwindet gleich wieder :P t=millisecs() endif until keyhit(1) millisecs() liest den aktuellen stand der millisekunden bis zu systemstart aus. die differenz zwischen zwei millisecs() werten gibt dir eine zeitspanne an, nun kannst du einfach auswählen wie gross die sein soll ![]() |
||
Diese Signatur ist leer. |
Ixam |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke!
Ixam P.S. Kannst mir jemand veraten wie ich eine kommazahl aus einer Datei auslese? |
||
![]() |
Noobody |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wie meinst du das?
Wenn jetzt z.B. 0.7 in einer TXT-Datei steht? Dann öffnest du die Datei mit OpenFile("deine_datei.txt"), speicherst den Rückgabewert und dann mit ReadFloat(rückgabewert) auslesen. Aber für sowas guckt man 1 min. lang in die Command Reference und man hat die Befehle. |
||
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun |
![]() |
darth |
![]() Antworten mit Zitat ![]() |
---|---|---|
imfalle einer von dir angelegten datei (writefloat datei,float#):
Code: [AUSKLAPPEN] zahl#=readfloat(datei)
oder (falls es in einem textfile steht) Code: [AUSKLAPPEN] tmp$=readline(datei)
zahl#=getnumberoutofstring(tmp$) natürlich musst du die funktion noch schreiben ![]() ich würde da irgendwas basteln, das die vorkomma stellen ausliest (left(string$,anz)+right(string$,anz)+len(string$) sollten da reichen) - dann die nachkommastellen, und schlussendlich vorkomma+nachkomma/10^anzal_nachkomma |
||
Diese Signatur ist leer. |
Ixam |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke für die Hilfe,aber den letzten Beitrag habe ich nicht ganz kapiert
Ixam |
||
![]() |
Silver_Knee |
![]() Antworten mit Zitat ![]() |
---|---|---|
wen deine txt so aussieht:
[quote=txt]bla Hans 1.74 Coool gammel[/quote] dann geht das einfach mit: Code: [AUSKLAPPEN] fl#=FLoat(Readline(file))
|
||
Ixam |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke
nächste Frage ![]() Gibt es einen Befehl um zu sagen das, dass nur zutrifft wenn das ergebnis von dem und dem eine natürliche zahl ist? Ixam |
||
![]() |
Skabus |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ixam hat Folgendes geschrieben: Danke
nächste Frage ![]() Gibt es einen Befehl um zu sagen das, dass nur zutrifft wenn das ergebnis von dem und dem eine natürliche zahl ist? Ixam Hm...ich seh da keine Schwierigkeiten. Ob etwas zutrifft kann man mit If abfragen. Und natürliche Zahlen sind doch alle zahlen außer die negativen.... Oder sehe ich das falsch?Ergo: Code: [AUSKLAPPEN] If (Summant + Summant) >= 0 Then Blablablabefehleblablabla Endif Hoffe ich konnte helfen.... MfG Ska |
||
"In einer so verrückten Welt, kann man um in ihr zu überleben nur eines tun, nämlich eben jenes werden: Ein Verrückter!" -Selbstzitat
aktuelles Projekt: Aves Certim - Der Galgen ist nicht weit! Ein SNES-RPG mit Handels- und Wirtschaftselemente. Infos?Hier: http://www.blitzforum.de/worklogs/234/ Besucht meine Seite: www.seelenfriedhof.de.vu |
Ixam |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Sorry ich meinte natürlich ganze zahlen ![]() Hab aber inzwischen das ganze doch selber gelößt Danke Ixam |
||
![]() |
Silver_Knee |
![]() Antworten mit Zitat ![]() |
---|---|---|
mit int kannst du runden also:
if int(zahl)=zahl also wenn die gerundete zahl = der zahl selbst und das trifft ja nur bei ganzen zahlen ein |
||
Ixam |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich habe es doch nicht gelöst (hat immer noch ne Macke).
Ich schildere es jetzt genauer: Ich lasse eine Schleife durchlaufen und zähle die Schleifendurchläufe. Ich möchte nun, dass eine bestimmte aktion alle x durchläufe ausgefürht wird. Wie mache ich das? Ixam |
||
![]() |
Skabus |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ixam hat Folgendes geschrieben: Sorry ich meinte natürlich ganze zahlen
![]() Hab aber inzwischen das ganze doch selber gelößt Danke Ixam Hm....in wie weit müssen da die Faktoren/Summanten/etc.. beachtet werden? Weil du ja im Grunde nur wissen musst ob die einzelnen Teile Kommastellen haben können wenn wir z.B. haben: Code: [AUSKLAPPEN] y# = 1.5 x# = 2.0 If (y + x) = ganze Zahl Then Blablabla EndIf Dann musst du durch subtraieren und durch Anwenden von floor() (rundet ab) und ceil() (rundet auf) den Rest hinter dem Komma herausfinden. Oder man nimmt int().Wenn der Rest dann größer ist als 0 dann handelt es sich um eine ganze Zahl. Hier am Beispiel: Code: [AUSKLAPPEN] y# = 1.5 ;erster Teil der Rechnung x# = 2.0 ;zweiter Teil der Rechnung If (y + x) = (int(y) + int(x)) Then ;Befehle..... EndIf So nach etlichen Edits hab ich mal gemerkt das ich zu doof zum rechnen bin.So klappt das ganze nun^^ MfG Ska |
||
"In einer so verrückten Welt, kann man um in ihr zu überleben nur eines tun, nämlich eben jenes werden: Ein Verrückter!" -Selbstzitat
aktuelles Projekt: Aves Certim - Der Galgen ist nicht weit! Ein SNES-RPG mit Handels- und Wirtschaftselemente. Infos?Hier: http://www.blitzforum.de/worklogs/234/ Besucht meine Seite: www.seelenfriedhof.de.vu |
Ixam |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich habe eine andere Frage:
wie kann ich bei über 10000 erstellte types in einer schleife eine Bedingung abfragen und wenn die bedingung zutrifft wird das type entfernt . Danke schon im voraus Ixam |
||
![]() |
Tankbuster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: Ich habe eine andere Frage:
wie kann ich bei über 10000 erstellte types in einer schleife eine Bedingung abfragen und wenn die bedingung zutrifft wird das type entfernt . Die Anzahl spielt keine Rolle. Allerdings läuft es bei so vielen sicherlich nicht grade schnell ![]() Ich hab mir mal 2 beispiele ausgedacht: Code: [AUSKLAPPEN] For S.spieler = Each spieler
If S\bedingung=1 Delete S Endif Next Code: [AUSKLAPPEN] For S.spieler = Each spieler
If S\leben<1 Delete S Endif Next |
||
Twitter
Download Jewel Snake! Windows|Android |
Ixam |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Das habe ich schon ausprobiert gehabt. Es klappt nicht wirklich, da alle Types gelöscht werden. Wo ist mein fehler?
Ixam |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ohne Glaskugel oder Code ist diese Frage nicht zu beantworten. | ||
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 |
![]() |
Tankbuster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich denke, du hast eine Variable genommen, zum beispiel:
Zitat: variable=1
und dann hast du folgendes hingeschrieben: Zitat: For S.spieler = Each spieler
If variable=1 Delete S Endif Next Dann wird jeder Spieler gelöscht, denn antword ist bei jedem 1! Deshalb ist es sinnvoll für jeden Type noch ein extra Feld anzulegen, in dem die Bedingung gespeichert ist. Ein kleiner beispielcode: den mag ich^^ Code: [AUSKLAPPEN] Type Schnee
Field x Field y Field speed End Type Graphics 800, 600 SetBuffer BackBuffer() ;es werden 300 Types erstellt For i=1 To 300 S.Schnee=New Schnee S\x=Rnd(800) S\y=Rnd(-1000) S\speed=Rnd(1,2) Next While Not KeyHit(1) Cls For S.Schnee=Each Schnee ;für jeden Schnee-Type S\y=S\y+S\speed ;wird S\y vergrößert Plot S\x,S\y ;und es wird ein Punkt an der Position gemalt If S\y>300 Then ;Hier! Wenn S\y größer als 300 ist, wird das Type gelöscht! Delete S EndIf Next Flip Wend |
||
Twitter
Download Jewel Snake! Windows|Android |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group