Du kannst, wenn du die drei Koordinatenachsen gezeichnet hast, einen (gedachten) Quader mit den entsprechenden Seitenlängen ausgehend von 0 zeichnen. Jede Kante des Quaders ist dabei parallel zu der entsprechenden Achse, die Raumdiagonale von 0 zu der gegenüberliegenden Ecke ist dein Vektor. Da man aber etwas 3-dimensionales in 2D übeträgt, gehen Informationen verloren, d.h. man kann einen Punkt (Ortsvektor) nicht mehr eindeutig zurück zuordnen.
Beiträge von Fresapore
-
-
Theoretisch kannst du einen globalen Zähler verwenden, der bei jedem Aufruf der Funktion erhöht wird, und du als Abbruchbedingung eine Grenze dieses Wertes nimmst. Dann hast du eine Art Reset, das macht aber praktisch meistens keinen Sinn.
-
Du musst die Höhe des Baums ermitteln (rekursiv), damit wächst die Breite des Baums ja exponentiell.
Dann kannst du ziemlich gut die einzelnen Leerzeichen pro Zeile feststellen. Dann würde ich den Baum so aufbauen, dass jeder Knoten seine Childs kennt, nicht jeder Knoten seine Eltern, das machts einfacher.. -
<== auch Marvin, aber schon 17
Ahoi, willkommen an Bord. -
Was meinst du mit
ZitatWie kann ich es deklarieren, das die richtige Funktion verwendet wird
Ich werd aus deinem Beispiel nicht schlau.. -
ich habs nur mit n paar werten ausprobiert und es sah realistisch aus..was ist denn falsch?
Edit: Ist oben gefixt.
-
Hi Folks,
Ich habe mich auch mal daran probiert, natürlich ist der Quellcode ähnlich wie der meiner Vorgänger, ich fand die Idee nur auch faszinierend.
Bei mir kann man bis zu 7 Zustände varabel eingeben, da kann man ein bisschen rmprobieren.
$H * Steps sollte immer > 600 sein, damit die Controls richtig angezeigt werdenKommen interessante Dinge bei raus (rrlrll find ich interssant)
Spoiler anzeigen
[autoit]#include <GDIPlus.au3>
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
#include <GUIConstantsEx.au3>
#include <ComboConstants.au3>
#include <WindowsConstants.au3>
#include <EditConstants.au3>Opt('GUIOnEventMode', 1)
[/autoit] [autoit][/autoit] [autoit]Global Const $Size = 10, $W = 100, $H = 80
[/autoit] [autoit][/autoit] [autoit]
Global $FrameDraw = 1, $Colors = 2, $Sleep = 10
Global $Grid[$W][$H]
Global $AntPos[2] = [Ceiling($W / 2 - 1), Ceiling($H / 2 - 1)]
Global $Direction = 0 ;0: Up, 1: Right, 2: Down, 3: Left
Global $StopCalc = True
Global $Status[7] = [0, 0, 0, 0, 0, 0, 0]
Global $Steps = 0
_GDIPlus_Startup()
Global $hBrush[7] = [_GDIPlus_BrushCreateSolid(0xFFFFFFFF), _GDIPlus_BrushCreateSolid(0xFFFF0000), _GDIPlus_BrushCreateSolid(0xFF0000FF), _GDIPlus_BrushCreateSolid(0xFFFFFF00), _GDIPlus_BrushCreateSolid(0xFFFF00FF), _GDIPlus_BrushCreateSolid(0xFF00FFFF), _GDIPlus_BrushCreateSolid(0xFF00FF00)]Global $hGui = GUICreate("Turing Ameise", $W * $Size + 100, $H * $Size)
[/autoit] [autoit][/autoit] [autoit]
GUICtrlCreateLabel("Skip Frames", $W * $Size, 0, 100, 20)
Global $hInputFrame = GUICtrlCreateInput($FrameDraw, $W * $Size, 20, 100, 20, $ES_NUMBER)
Global $hUpDown = GUICtrlCreateUpdown(-1)
GUICtrlSetLimit(-1, 10000, 1)GUICtrlCreateLabel("Wait after Frame (ms)", $W * $Size, 50, 100, 20)
[/autoit] [autoit][/autoit] [autoit]
Global $hInputSleep = GUICtrlCreateInput($Sleep, $W * $Size, 70, 100, 20, $ES_NUMBER)
Global $hUpDown = GUICtrlCreateUpdown(-1)
GUICtrlSetLimit(-1, 1000, 10)GUICtrlCreateLabel("1", $W * $Size, 100, 50, 50)
[/autoit] [autoit][/autoit] [autoit]
GUICtrlSetFont(-1, 30)
GUICtrlCreateLabel("2", $W * $Size, 150, 50, 50)
GUICtrlSetFont(-1, 30)
GUICtrlCreateLabel("3", $W * $Size, 200, 50, 50)
GUICtrlSetFont(-1, 30)
GUICtrlCreateLabel("4", $W * $Size, 250, 50, 50)
GUICtrlSetFont(-1, 30)
GUICtrlCreateLabel("5", $W * $Size, 300, 50, 50)
GUICtrlSetFont(-1, 30)
GUICtrlCreateLabel("6", $W * $Size, 350, 50, 50)
GUICtrlSetFont(-1, 30)
GUICtrlCreateLabel("7", $W * $Size, 400, 50, 50)
GUICtrlSetFont(-1, 30)
GUICtrlCreateLabel("Anzahl der Zustände", $W * $Size, 450, 50, 30)
Global $hButton[7]
$hButton[0] = GUICtrlCreateButton("Left", $W * $Size + 50, 100, 50, 50)
GUICtrlSetBkColor(-1, 0xFFFFFF)
GUICtrlSetOnEvent(-1, "_Click")
$hButton[1] = GUICtrlCreateButton("Left", $W * $Size + 50, 150, 50, 50)
GUICtrlSetBkColor(-1, 0xFF0000)
GUICtrlSetOnEvent(-1, "_Click")
$hButton[2] = GUICtrlCreateButton("Left", $W * $Size + 50, 200, 50, 50)
GUICtrlSetBkColor(-1, 0x0000FF)
GUICtrlSetOnEvent(-1, "_Click")
$hButton[3] = GUICtrlCreateButton("Left", $W * $Size + 50, 250, 50, 50)
GUICtrlSetBkColor(-1, 0xFFFF00)
GUICtrlSetOnEvent(-1, "_Click")
$hButton[4] = GUICtrlCreateButton("Left", $W * $Size + 50, 300, 50, 50)
GUICtrlSetBkColor(-1, 0xFF00FF)
GUICtrlSetOnEvent(-1, "_Click")
$hButton[5] = GUICtrlCreateButton("Left", $W * $Size + 50, 350, 50, 50)
GUICtrlSetBkColor(-1, 0x00FFFF)
GUICtrlSetOnEvent(-1, "_Click")
$hButton[6] = GUICtrlCreateButton("Left", $W * $Size + 50, 400, 50, 50)
GUICtrlSetBkColor(-1, 0x00FF00)
GUICtrlSetOnEvent(-1, "_Click")
$hDropDown = GUICtrlCreateCombo("2", $W * $Size, 480, 100, 25, $CBS_DROPDOWNLIST)
GUICtrlSetData(-1, "3|4|5|6|7")$hLabelSteps = GUICtrlCreateLabel("Steps: 0", $W * $Size, 520, 100)
[/autoit] [autoit][/autoit] [autoit]Global $hButtonStart = GUICtrlCreateButton("Start", $W * $Size, $H * $Size - 60, 100, 30)
[/autoit] [autoit][/autoit] [autoit]
GUICtrlSetOnEvent(-1, "_AntGo")Global $hButtonStop = GUICtrlCreateButton("Stop", $W * $Size, $H * $Size - 30, 100, 30)
[/autoit] [autoit][/autoit] [autoit]
GUICtrlSetState(-1, $GUI_DISABLE)
GUICtrlSetOnEvent(-1, "_AntStop")GUISetState()
[/autoit] [autoit][/autoit] [autoit]
GUISetOnEvent(-3, "_exit")
GUIRegisterMsg(0xF, '_Redraw')$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGui)
[/autoit] [autoit][/autoit] [autoit]
$hBitmap = _GDIPlus_BitmapCreateFromGraphics($W * $Size, $H * $Size, $hGraphic)
$hBuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)While 1
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
While Not $StopCalc
For $i = 1 To $FrameDraw
If $StopCalc Then ExitLoop
For $j = 0 To $Colors - 1
If $Grid[$AntPos[0]][$AntPos[1]] = $j Then
$Grid[$AntPos[0]][$AntPos[1]] = Mod($Grid[$AntPos[0]][$AntPos[1]] + 1, $Colors)
Switch $Status[$j]
Case 0
_Left()
$Direction = Mod($Direction + 3, 4)
Case 1
_Right()
$Direction = Mod($Direction + 1, 4)
EndSwitch
EndIf
Next
$Steps += 1
Next
GUICtrlSetData($hLabelSteps, "Steps: " & $Steps)
_Draw()
Sleep($Sleep)
WEnd
Sleep(100)
WEndFunc _AntGo()
[/autoit] [autoit][/autoit] [autoit]
For $i = 0 To $W - 1
For $j = 0 To $H - 1
$Grid[$i][$j] = 0
Next
Next
$Steps = 0
GUICtrlSetData($hLabelSteps, "Steps: " & $Steps)
$AntPos[0] = Ceiling($W / 2 - 1)
$AntPos[1] = Ceiling($H / 2 - 1)
$Direction = 0 ;0: Up, 1: Right, 2: Down, 3: Left
$FrameDraw = Number(GUICtrlRead($hInputFrame))
$Sleep = Number(GUICtrlRead($hInputSleep))
$Colors = Number(GUICtrlRead($hDropDown))
$StopCalc = False
_Draw()
GUICtrlSetState($hButtonStart, $GUI_DISABLE)
GUICtrlSetState($hButtonStop, $GUI_ENABLE)
EndFunc ;==>_AntGoFunc _AntStop()
[/autoit] [autoit][/autoit] [autoit]
$StopCalc = True
GUICtrlSetState($hButtonStart, $GUI_ENABLE)
GUICtrlSetState($hButtonStop, $GUI_DISABLE)
EndFunc ;==>_AntStopFunc _Draw()
[/autoit] [autoit][/autoit] [autoit]
_GDIPlus_GraphicsClear($hBuffer, 0xFFFFFFFF)
For $i = 0 To $W - 1
For $j = 0 To $H - 1
If $Grid[$i][$j] > 0 Then _GDIPlus_GraphicsFillRect($hBuffer, $i * $Size, $j * $Size, $Size, $Size, $hBrush[$Grid[$i][$j]])
Next
Next
_GDIPlus_GraphicsDrawImageRect($hGraphic, $hBitmap, 0, 0, $W * $Size, $H * $Size)
EndFunc ;==>_DrawFunc _Redraw()
[/autoit] [autoit][/autoit] [autoit]
_GDIPlus_GraphicsDrawImageRect($hGraphic, $hBitmap, 0, 0, $W * $Size, $H * $Size)
EndFunc ;==>_RedrawFunc _Left()
[/autoit] [autoit][/autoit] [autoit]
Switch $Direction
Case 0
If $AntPos[0] > 0 Then
$AntPos[0] -= 1
Else
$StopCalc = True
EndIf
Case 1
If $AntPos[1] > 0 Then
$AntPos[1] -= 1
Else
$StopCalc = True
EndIf
Case 2
If $AntPos[0] < $W - 1 Then
$AntPos[0] += 1
Else
$StopCalc = True
EndIf
Case 3
If $AntPos[1] < $H - 1 Then
$AntPos[1] += 1
Else
$StopCalc = True
EndIf
EndSwitch
EndFunc ;==>_LeftFunc _Right()
[/autoit] [autoit][/autoit] [autoit]
Switch $Direction
Case 0
If $AntPos[0] < $W - 1 Then
$AntPos[0] += 1
Else
$StopCalc = True
EndIf
Case 1
If $AntPos[1] < $H - 1 Then
$AntPos[1] += 1
Else
$StopCalc = True
EndIf
Case 2
If $AntPos[0] > 0 Then
$AntPos[0] -= 1
Else
$StopCalc = True
EndIf
Case 3
If $AntPos[1] > 0 Then
$AntPos[1] -= 1
Else
$StopCalc = True
EndIf
EndSwitch
EndFunc ;==>_RightFunc _Click()
[/autoit] [autoit][/autoit] [autoit]
For $i = 0 To 6
If @GUI_CtrlId = $hButton[$i] Then
If $Status[$i] = 0 Then
GUICtrlSetData($hButton[$i], "Right")
$Status[$i] = 1
Else
GUICtrlSetData($hButton[$i], "Left")
$Status[$i] = 0
EndIf
EndIf
Next
EndFunc ;==>_ClickFunc _Exit()
[/autoit]
_GDIPlus_BitmapDispose($hBitmap)
_GDIPlus_GraphicsDispose($hGraphic)
For $i = 0 To UBound($hBrush) - 1
_GDIPlus_BrushDispose($hBrush[$i])
Next
_GDIPlus_Shutdown()
Exit
EndFunc ;==>_ExitWer die Anzahl der Zustände vergrößern möchte, kann das ganz einfach machen, ich hatte nur keine Lust auf mehr Buttons + Farben
Lg,
FresaporeEdit: Marsis Bug ist behoben.
-
Ich weiß zwar nicht genau, was du vorhast, aber du könntest evtl. eine transparente GUI über den den kompletten Bildschirm legen...
-
Klappt eigentlich ganz gut, hatte auch noch keine "Kurzworte" ;), bin auch bei Chip gelandet
-
-
Ich steige auf Ubuntu 12.04 um, aber niemals auf Win 8.
Ein Freund hatte das "versehentlich" über sein Win 7 gefummelt,
was man da mit der Maus mehr oder minder ausversehen anstellt, stört mich extrem. (Find ich schon bei Gnome 3 ;))
Ganz abgesehen von der für PC unbrauchbaren Metro-Oberfläche...
Aber wer es gut findet.. -
Ich werds mir auch holen, wenns denn mal nicht ausverkauft ist
Zum rumexperimentieren und ausprobieren ist es sicher ganz interessant..und wenn nicht, dass ists ja kein riesiger Verlust -
Kann man den überhaupt eindeutig lösen?
der sieht auf allen seiten so gleich aus...
Den schwieriegsten den ich kenne, war einer mit Zahlen, den man sudokumäßig lösen muss...
Ist mir nur kaputt gegangen, als er "ausversehen" runtergefallen ist -
Ich als (fast) Aachener finde Karneval auch nicht so pralle, habe aber trotzdem Spaß daran, mich über die 6 freien Tage mit Freunden zu treffen und Party zu machen. Aber dass das immer so mit dem Wegfenstern verbunden ist, finde ich auch unnötig.
Die Karnevalsumzüge find ich auch nervig, und die Musik ist eigentlich nur besoffen auszuhalten -
Meinst du soeinen?
[Blockierte Grafik: http://ecx.images-amazon.com/images/I/31pCtTblCKL._SL500_AA300_.jpg]
Den hab ich auch schonmal versucht, aber iwie nicht hinbekommen
Bei uns auf der Schule gibt es so einen Speedcuber, der hat immer die merkwürdigsten und unförmigsten Cubes dabei (und kann die auch noch lösen :P) -
DFPWare: Den unteren hab ich auch mal gesehen..ist aber nicht viel schwieriger als der normale...nur viel verwirrender!
Für den normalen brauch ich auch ~1:00 min, mittlerweile aber wohl n bisschen mehr -
Das liegt an x64.
[autoit]
Du kannst entweder#AutoIt3Wrapper_usex64=n
[/autoit]
einfügen oder die Programme mit rechtsklick --> run Script (x86) klickenWar jedenfalls bei mir so..
Fresapore
-
Mal in die Hilfe bei "Send" schauen?
[autoit]Send('!{TAB}')
[/autoit]Edit: Wurde wohl getan
-
Mit ner Schleife würd ichs machen..
[autoit]For $i = 30 To 39
[/autoit]
If _Ispressed($i) Then MsgBox(0, "test", "Taste " & $i - 30 & " wurde gedrückt")
NextFresapore
-
So, habe einen 2-Player-Modus hinzugefügt.
Ist aber eher unperformant, da kann ich noch was rausholen
Beim 2-Player-Modus kann man nur gewinnen, indem der andere verliert, und man muss keine Kugeln mehr zerstören..Code: Post 1
Fresapore