[b+] Nukleare Kettenraktion

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

Smily

Betreff: [b+] Nukleare Kettenraktion

BeitragDo, Jan 11, 2007 19:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,
ich habe eine kleine Simulation für eine Nukleare Kettenraktion geschrieben.
Viel zu erklären gibts eigentlich nicht.
Schauts euch einfach mal an ^^

Gruß, Smily0412

Code: [AUSKLAPPEN]

Type Atom
 Field X
 Field y
End Type

Type Nukleon
 Field X#
 Field Y#
 Field RI
 Field e#
End Type

Win = CreateWindow("Nukleos", 100,100, 200, 500,0,33)
CreateLabel("Höhe:",5,0,190,15,win)
CreateLabel("Breite:",5,40,190,15,win)
CreateLabel("Atome:",5,100,190,15,win)
CreateLabel("Nukleonen per Atom:",5,140,190,15,win)
CreateLabel("Nukleonen Geschwindigkeit:",5,180,190,15,win)
CreateLabel("Nukleonen Energie Verlust:",5,220,190,15,win)
CreateLabel("Nukleonen am Start:",5,260,190,15,win)
CreateLabel("Atomgröße in px:", 5, 320, 190, 15, win)
CreateLabel("Nukleonengröße in px:", 5, 360, 190, 15, win)

gx_f = CreateTextField(5,15,190,20,win)
gy_f = CreateTextField(5,55,190,20,win)
atoms_f = CreateTextField(5,115,190,20,win)
nukleons_per_atom_f = CreateTextField(5,155,190,20,win)
nukleons_speed_f = CreateTextField(5,195,190,20,win)
nukleons_e_lost_f = CreateTextField(5,235,190,20,win)
nukleons_start_f = CreateTextField(5,275,190,20,win)
atom_size_f = CreateTextField(5,335,190,20,win)
nukleon_size_f = CreateTextField(5,375,190,20,win)
bounce_f = CreateButton("Abprallen an wand",5,400,190,20,win,2)
SetGadgetText gx_f,800
SetGadgetText gy_f,600
SetGadgetText Atoms_f, 800
SetGadgetText nukleons_per_atom_f, 3
SetGadgetText nukleons_speed_f, 1
SetGadgetText nukleons_e_lost_f, 1
SetGadgetText nukleons_start_f, 5
SetGadgetText atom_size_f, 5
SetGadgetText nukleon_size_f, 1
SetButtonState bounce_f, 0

Gobutton = CreateButton("GO",5,440,190,20,win)
optionsset = CreateComboBox(5, 465, 150, 20, win)
setbutton = CreateButton("set", 160,465,35,20,win)
AddGadgetItem optionsset,"Standart"
AddGadgetItem optionsset,"Atomkraftwerk - Normal"
AddGadgetItem optionsset,"Atomkraftwerk - Störung"

SelectGadgetItem optionsset, 0
Atoms = 500
GX = 800
GY = 600
nukleons_per_atom = 5
nukleon_speed# = 5
nukleon_e_lost# = 1
nukleons_start = 10
bounce = 0
atom_size = 5
nukleon_size = 1
SeedRnd MilliSecs()


atomline(270,175,270,225,10)
atomline(270,175,290,225,10)
atomline(290,175,290,225,10)
atomline(310,175,310,225,10)
atomline(310,225,330,225,5)
atomline(330,175,330,225,10)
atomline(350,175,350,225,10)
atomline(370,225,350,200,5)
atomline(370,175,350,200,5)
atomline(390,175,390,225,10)
atomline(390,225,410,225,5)
atomline(430,175,430,225,10)
atomline(430,180,450,180,5)
atomline(430,200,450,200,5)
atomline(430,225,450,225,5)
atomline(470,175,470,225,10)
atomline(490,175,490,225,10)
atomline(470,180,490,180,5)
atomline(470,225,490,225,5)
atomline(510,225,530,225,5)
atomline(510,200,530,200,5)
atomline(510,180,530,180,5)
atomline(510,175,510,200,5)
atomline(530,200,530,225,5)

nukleon.nukleon = New nukleon
nukleon\x = 0
nukleon\y = 0
nukleon\ri = 38
nukleon\e = 255

nukleon.nukleon = New nukleon
nukleon\x = 800
nukleon\y = 0
nukleon\ri = 180-38
nukleon\e = 255

;For c = 1 To nukleons_start
;nukleon.nukleon = New nukleon
;nukleon\x = gx/2
;nukleon\y = gy/2
;nukleon\e = 255
;nukleon\ri = Rand(0,359)
;next
Graphics 800,600,16,2
ftimer = CreateTimer(60)
HidePointer()
Repeat
 If Not KeyDown(28) Cls
 WaitEvent(1)
 If EventID() = $401
  Select EventSource()
  Case gobutton
   Delete Each nukleon
   Delete Each atom
 
   gx = TextFieldText(gx_f)
   gy = TextFieldText(gy_f)
   atoms = TextFieldText(atoms_f)
   nukleons_per_atom = TextFieldText(nukleons_per_atom_f)
   nukleon_speed# = TextFieldText(nukleons_speed_f)
   nukleon_e_lost# = TextFieldText(nukleons_e_lost_f)
   nukleons_start = TextFieldText(nukleons_start_f)
   atom_size = TextFieldText(atom_size_f)
   nukleon_size = TextFieldText(nukleon_size_f)
   bounce = ButtonState(bounce_f)
 
   EndGraphics
   Graphics gx,gy,16,2
   HidePointer()
 
   For c = 1 To atoms
    atom.atom = New atom
    atom\x = Rand(atom_size/2,gx-atom_size/2)
    atom\y = Rand(atom_size/2,gy-atom_size/2)
   Next

   For c = 1 To nukleons_start
    nukleon.nukleon = New nukleon
    nukleon\x = gx/2
    nukleon\y = gy/2
    nukleon\e = 255
    nukleon\ri = Rand(0,359)
   Next
  Case setbutton
   Select SelectedGadgetItem(optionsset)
    Case 0
     SetGadgetText gx_f,800
     SetGadgetText gy_f,600
     SetGadgetText Atoms_f, 800
     SetGadgetText nukleons_per_atom_f, 3
     SetGadgetText nukleons_speed_f, 5
      SetGadgetText nukleons_e_lost_f, 1
     SetGadgetText nukleons_start_f, 5
     SetGadgetText atom_size_f, 5
     SetGadgetText nukleon_size_f, 1
     SetButtonState bounce_f, 0
    Case 1
     SetGadgetText gx_f,800
     SetGadgetText gy_f,600
     SetGadgetText Atoms_f, 800
     SetGadgetText nukleons_per_atom_f, 1
     SetGadgetText nukleons_speed_f, 5
      SetGadgetText nukleons_e_lost_f, 0.1
     SetGadgetText nukleons_start_f, 10
     SetGadgetText atom_size_f, 5
     SetGadgetText nukleon_size_f, 1
     SetButtonState bounce_f, 1
    Case 2
     SetGadgetText gx_f,800
     SetGadgetText gy_f,600
     SetGadgetText Atoms_f, 800
     SetGadgetText nukleons_per_atom_f, 3
     SetGadgetText nukleons_speed_f, 3
      SetGadgetText nukleons_e_lost_f, 1
     SetGadgetText nukleons_start_f, 10
     SetGadgetText atom_size_f, 5
     SetGadgetText nukleon_size_f, 1
     SetButtonState bounce_f, 1
   End select   
  End select 
 End If

 Color 255,255,255
 
 If MouseHit(1) Then
  atom.atom = New atom
  atom\x = MouseX()
  atom\y = MouseY()
 End if

 If MouseDown(2) And (Not create_nukleon)
  create_nukleon = 1
  create_nukleon_x = MouseX()
  create_nukleon_y = MouseY()
 End if

 If create_nukleon
  If Not MouseDown(2)
   create_nukleon = 0
   nukleon.nukleon = New nukleon
   nukleon\x = create_nukleon_x
   nukleon\y = create_nukleon_y
   nukleon\e = 255
   nukleon\ri = ATan2(mousey()-create_nukleon_y,mousex()-create_nukleon_x)
   MoveMouse create_nukleon_x, create_nukleon_y
  End if
 End if
 
 atom_count = 0
 For atom.atom = Each atom
  atom_count = atom_count + 1
  delatom = 0
  Oval atom\x-atom_size/2, atom\y-atom_size/2, atom_size, atom_size
  For nukleon.nukleon = Each nukleon
   If RectsOverlap(nukleon\x-nukleon_size/2,nukleon\y-nukleon_size/2,nukleon_size,nukleon_size,atom\x-atom_size/2, atom\y-atom_size/2, atom_size, atom_size) And (not delatom)
;    Stop
     For c = 1 To nukleons_per_atom
      neu.nukleon = New nukleon
      neu\x = atom\x
      neu\y = atom\y
     neu\e = 255
      neu\ri = Rand(0,359)
     next
    delatom = 1
      Delete nukleon.nukleon
     End if
  Next
  If delatom Then Delete atom.atom
 Next

 nukleon_count = 0
 For nukleon.nukleon = Each nukleon
  nukleon_count = nukleon_count + 1
  Color nukleon\e, nukleon\e, nukleon\e
  Oval nukleon\x-nukleon_size/2,nukleon\y-nukleon_size/2,nukleon_size,nukleon_size
;  Text nukleon\x+2,nukleon\y+2,nukleon\ri
  nukleon\x = nukleon\x + cos(nukleon\ri) * nukleon_speed
  nukleon\y = nukleon\y + sin(nukleon\ri) * nukleon_speed
  nukleon\e = nukleon\e - nukleon_e_lost
  If nukleon\x > GX + nukleon_size Or nukleon\x < -nukleon_size Or nukleon\y > gy+nukleon_size Or nukleon\y < -nukleon_size Then
   If bounce
 ;  nukleon\ri = -nukleon\ri
    nukleon\ri = (nukleon\ri + 360) Mod 360
    Select true
     Case nukleon\x > GX + nukleon_size Or nukleon\x < -nukleon_size
      nukleon\ri = -nukleon\ri
     Case nukleon\y > GY + nukleon_size Or nukleon\y < -nukleon_size
      nukleon\ri = -nukleon\ri + 180
    End Select
   Else
    Delete nukleon.nukleon
   End if
  ElseIf nukleon\e < 1
    Delete nukleon.nukleon
   End if
 Next
 Color 100,100,100
 Text 0,0,atom_count + " - " + nukleon_count
 Plot MouseX(), MouseY()
 If create_nukleon
  Line MouseX(), MouseY(), create_nukleon_x, create_nukleon_y
  Color 255,255,255
  Oval create_nukleon_x-10,create_nukleon_y-10,20,20,0
  ri = ATan2(mousey()-create_nukleon_y,mousex()-create_nukleon_x)
  Line create_nukleon_x, create_nukleon_y, create_nukleon_x+cos(ri)*10,create_nukleon_y+sin(ri)*10
 else
  Oval MouseX()-10,mousey()-10,20,20,0
  Line MouseX()-10,mousey(),mousex()+10,mousey()
  Line MouseX(),mousey()-10,mousex(),mousey()+10
 End if
 flip
Until EventID() = $803 Or KeyHit(1)

Function atomline(x1#,y1#,x2#,y2#,c#)
 For create = 1 To c
  atom.atom = New atom
  atom\x = x1 + (x2-x1)/c*create
  atom\y = y1 + (y2-y1)/c*create
 Next
End function
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets

"Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!"
stummi.org

Markus2

BeitragFr, Jan 12, 2007 14:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich werde das mal in BMax umsetzen da ich kein B+ habe Smile

Smily

BeitragFr, Jan 12, 2007 16:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Hier ist eine Exe-version:
http://phpprogger.ph.funpic.de/nukleos.exe
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets

"Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!"
stummi.org

Markus2

BeitragFr, Jan 12, 2007 19:22
Antworten mit Zitat
Benutzer-Profile anzeigen
@Smily0412

jup Danke Smile

darth

BeitragFr, Jan 12, 2007 21:40
Antworten mit Zitat
Benutzer-Profile anzeigen
es werden viel zuviele neutronen ausgesandt :O
bei einer kernspaltung in einem akw entstehen 2-3 neutronen, bei dir sinds 6-8 (wenn ich richtig zählte) ...
hmm... vllt kann man das irgendwo einstellen *such*
Diese Signatur ist leer.

Smily

BeitragDo, Jan 18, 2007 16:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Sry für die Verspätete Antwort, hab den Threat erst jetzt wiederentdeckt.

Bei meiner Auflösung von 1600*1200 müsste eigentlich ein Tool-fenster zu sehen sein.

Wenn du eine kleine Auflösung hast, dass müsstest du mal das GFrafikfenster zur Seite schieben. wahrscheinlich hat sich das Toolfenster darunter versteckt ^^
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets

"Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!"
stummi.org

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group