Danke für das Lob ![]()
Ja der Editor ist so in 5 min (ok, untertrieben) entstanden, da hab ich mir keine Mühe mit dem Design gemacht, der war anfangs nur, damit ich die INIs nicht selber schreiben muss ![]()
MfG,
Fresapore
P.S. 2.Reihe, 1.Spalte ![]()
Danke für das Lob ![]()
Ja der Editor ist so in 5 min (ok, untertrieben) entstanden, da hab ich mir keine Mühe mit dem Design gemacht, der war anfangs nur, damit ich die INIs nicht selber schreiben muss ![]()
MfG,
Fresapore
P.S. 2.Reihe, 1.Spalte ![]()
Hi Forum,
ich wollte mal mein Tagesprojekt vorstellen.
Vllt kennen diejenigen, die glückliche Besitzer eines Android-Handys sind, das Spiel Bubble Blast.
Dabei geht es darum, durch Klicken auf die Blasen eine Kettenreaktion auszulösen, da rote Blasen kleine Blasen in alle Himmelsrichtungen schicken, um weitere Blasen zu treffen.
Ich wollte erst ein Programm schreiben, welches mir das Endergebnis einer Kettenreaktion ausrechnet, und naja, daraus ist ein Kleines SpielCHEN mit erbärmlicher Grafik geworden, welche ich evtl später verbessere.
Mir sind so direkt keine Bugs bekannt, vllt findet ihr welche
Bis jetzt enthalten: Source für Spiel + Editor, zwei Beispiellevel
Kommen sollen: Bessere Performance (bin für jede Idee offen ;)), bessere Grafik, mehr Level, ein "Storymodus", evtl Multiplayermodus.
#include <GDIPlus.au3>
#include <GuiConstants.au3>
#include <Misc.au3>
Opt('MouseCoordMode', 0)
_GDIPlus_Startup()
$Open = FileOpenDialog("Wähle Level", @ScriptDir, "ini (*.ini)")
Global $Rows = IniRead($Open, "General", "x", 5), $Colls = IniRead($Open, "General", "y", 6), $Touches = IniRead($Open, "General", "touch", 5)
Global $aCells[$Rows][$Colls], $aPops[$Rows][$Colls][4][2]
Global $hGui, $hTouches
Global $hBrush[6], $hColor[6] = [0xFF00000, 0xFFFF0000, 0xFF00FF00, 0xFFFFFF00, 0xFF0000FF], $hGraphic, $hBitmap, $hBuffer
For $i = 0 To 5
$hBrush[$i] = _GDIPlus_BrushCreateSolid($hColor[$i])
Next
For $i = 0 To $Rows - 1
For $j = 0 To $Colls - 1
$aCells[$i][$j] = IniRead($Open, "Map", ($i + 1) & ($j + 1), 1)
For $k = 0 To 3
$aPops[$i][$j][$k][0] = -1
$aPops[$i][$j][$k][1] = -1
Next
Next
Next
$hGui = GUICreate("Bubble Blast", $Rows * 100, $Colls * 100 + 50, @DesktopWidth / 2 - ($Rows * 100 / 2), @DesktopHeight / 2 - ($Colls * 100 / 2))
$hTouches = GUICtrlCreateLabel("Berührungen übrig: " & $Touches, 0, $Colls * 100, $Rows * 100, 50)
If $Rows < 3 Then
GUICtrlSetFont(-1, $Rows * ![]()
Else
GUICtrlSetFont(-1, 20)
EndIf
GUISetState()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGui)
$hBitmap = _GDIPlus_BitmapCreateFromGraphics($Rows * 100, $Colls * 100, $hGraphic)
$hBuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)
_GDIPlus_GraphicsClear($hBuffer)
For $i = 0 To $Rows - 1
For $j = 0 To $Colls - 1
_GDIPlus_GraphicsFillEllipse($hBuffer, $i * 100 + 10, $j * 100 + 10, 80, 80, $hBrush[$aCells[$i][$j]])
Next
Next
_GDIPlus_GraphicsDrawImageRect($hGraphic, $hBitmap, 0, 0, $Rows * 100, $Colls * 100)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_GraphicsDispose($hBuffer)
_GDIPlus_BitmapDispose($hBitmap)
_GDIPlus_Shutdown()
Exit
EndSwitch
If _IsPressed(01) And WinActive("Bubble Blast") Then
$Pos = MouseGetPos()
$X = ($Pos[0] - Mod($Pos[0], 100)) / 100
$Y = ($Pos[1] - Mod($Pos[1], 100)) / 100
If $X >= 0 And $X <= $Rows - 1 And $Y >= 0 And $Y <= $Colls - 1 Then
If $aCells[$X][$Y] <> 0 Then
$Touches -= 1
GUICtrlSetData($hTouches, "Berührungen übrig: " & $Touches)
_ClickBubble($X, $Y)
Sleep(100)
EndIf
EndIf
EndIf
Sleep(40)
WEnd
Func _ClickBubble($iX, $iY)
Local $iTest = 0
_PopBubble($iX, $iY)
_GDIPlus_GraphicsClear($hBuffer)
For $i = 0 To $Rows - 1
For $j = 0 To $Colls - 1
$Color = $aCells[$i][$j]
Select
Case $Color = 0
_GDIPlus_GraphicsFillEllipse($hBuffer, $i * 100 + 10, $j * 100 + 10, 80, 80, $hBrush[0])
Case $Color = 1
_GDIPlus_GraphicsFillEllipse($hBuffer, $i * 100 + 10, $j * 100 + 10, 80, 80, $hBrush[1])
Case $Color = 2
_GDIPlus_GraphicsFillEllipse($hBuffer, $i * 100 + 10, $j * 100 + 10, 80, 80, $hBrush[2])
Case $Color = 3
_GDIPlus_GraphicsFillEllipse($hBuffer, $i * 100 + 10, $j * 100 + 10, 80, 80, $hBrush[3])
Case $Color = 4
_GDIPlus_GraphicsFillEllipse($hBuffer, $i * 100 + 10, $j * 100 + 10, 80, 80, $hBrush[4])
EndSelect
Next
Next
_GDIPlus_GraphicsDrawImageRect($hGraphic, $hBitmap, 0, 0, $Rows * 100, $Colls * 100)
For $i = 0 To $Rows - 1
For $j = 0 To $Colls - 1
$iTest += $aCells[$i][$j]
Next
Next
If $iTest > 0 And $Touches = 0 Then
MsgBox(0, "Spiel zuende", "Du hast verloren")
Exit
ElseIf $iTest = 0 Then
MsgBox(0, "Spiel zuende", "Du hast gewonnen")
Exit
EndIf
EndFunc ;==>_ClickBubble
Func _PopBubble($iX, $iY)
If $iX >= 0 And $iY >= 0 Then
If $aCells[$iX][$iY] > 0 Then
_ChainPop($iX, $iY)
Do
For $i = 0 To ($Rows - 1)
For $j = 0 To ($Colls - 1)
If $aPops[$i][$j][0][0] <> -1 Then
If $aPops[$i][$j][0][0] > 0 Then
$aPops[$i][$j][0][0] -= 1
If $aCells[$aPops[$i][$j][0][0]][$aPops[$i][$j][0][1]] <> 0 Then
$iTempX = $aPops[$i][$j][0][0]
$iTempY = $aPops[$i][$j][0][1]
$aPops[$i][$j][0][0] = -1
$aPops[$i][$j][0][1] = -1
_ChainPop($iTempX, $iTempY)
EndIf
Else
$aPops[$i][$j][0][0] = -1
$aPops[$i][$j][0][1] = -1
EndIf
EndIf
If $aPops[$i][$j][1][0] <> -1 Then
If $aPops[$i][$j][1][1] > 0 Then
$aPops[$i][$j][1][1] -= 1
If $aCells[$aPops[$i][$j][1][0]][$aPops[$i][$j][1][1]] <> 0 Then
$iTempX = $aPops[$i][$j][1][0]
$iTempY = $aPops[$i][$j][1][1]
$aPops[$i][$j][1][0] = -1
$aPops[$i][$j][1][1] = -1
_ChainPop($iTempX, $iTempY)
EndIf
Else
$aPops[$i][$j][1][0] = -1
$aPops[$i][$j][1][1] = -1
EndIf
EndIf
If $aPops[$i][$j][2][0] <> -1 Then
If $aPops[$i][$j][2][0] < ($Rows - 1) Then
$aPops[$i][$j][2][0] += 1
If $aCells[$aPops[$i][$j][2][0]][$aPops[$i][$j][2][1]] <> 0 Then
$iTempX = $aPops[$i][$j][2][0]
$iTempY = $aPops[$i][$j][2][1]
$aPops[$i][$j][2][0] = -1
$aPops[$i][$j][2][1] = -1
_ChainPop($iTempX, $iTempY)
EndIf
Else
$aPops[$i][$j][2][0] = -1
$aPops[$i][$j][2][1] = -1
EndIf
EndIf
If $aPops[$i][$j][3][0] <> -1 Then
If $aPops[$i][$j][3][1] < ($Colls - 1) Then
$aPops[$i][$j][3][1] += 1
If $aCells[$aPops[$i][$j][3][0]][$aPops[$i][$j][3][1]] <> 0 Then
$iTempX = $aPops[$i][$j][3][0]
$iTempY = $aPops[$i][$j][3][1]
$aPops[$i][$j][3][0] = -1
$aPops[$i][$j][3][1] = -1
_ChainPop($iTempX, $iTempY)
EndIf
Else
$aPops[$i][$j][3][0] = -1
$aPops[$i][$j][3][1] = -1
EndIf
EndIf
Next
Next
For $h = 10 To 20
_GDIPlus_GraphicsClear($hBuffer)
For $i = 0 To $Rows - 1
For $j = 0 To $Colls - 1
If $aPops[$i][$j][0][0] <> -1 Then
_GDIPlus_GraphicsFillEllipse($hBuffer, ($aPops[$i][$j][0][0] + 1) * 100 + 45 - $h * 10, $aPops[$i][$j][0][1] * 100 + 45, 10, 10, $hBrush[1])
EndIf
If $aPops[$i][$j][1][0] <> -1 Then
_GDIPlus_GraphicsFillEllipse($hBuffer, $aPops[$i][$j][1][0] * 100 + 45, ($aPops[$i][$j][1][1] + 1) * 100 + 45 - $h * 10, 10, 10, $hBrush[1])
EndIf
If $aPops[$i][$j][2][0] <> -1 Then
_GDIPlus_GraphicsFillEllipse($hBuffer, ($aPops[$i][$j][2][0] - 1) * 100 + 45 + $h * 10, $aPops[$i][$j][2][1] * 100 + 45, 10, 10, $hBrush[1])
EndIf
If $aPops[$i][$j][3][0] <> -1 Then
_GDIPlus_GraphicsFillEllipse($hBuffer, $aPops[$i][$j][3][0] * 100 + 45, ($aPops[$i][$j][3][1] - 1) * 100 + 45 + $h * 10, 10, 10, $hBrush[1])
EndIf
Next
Next
For $i = 0 To $Rows - 1
For $j = 0 To $Colls - 1
$Color = $aCells[$i][$j]
Select
Case $Color = 0
_GDIPlus_GraphicsFillEllipse($hBuffer, $i * 100 + 10, $j * 100 + 10, 80, 80, $hBrush[0])
Case $Color = 1
_GDIPlus_GraphicsFillEllipse($hBuffer, $i * 100 + 10, $j * 100 + 10, 80, 80, $hBrush[1])
Case $Color = 2
_GDIPlus_GraphicsFillEllipse($hBuffer, $i * 100 + 10, $j * 100 + 10, 80, 80, $hBrush[2])
Case $Color = 3
_GDIPlus_GraphicsFillEllipse($hBuffer, $i * 100 + 10, $j * 100 + 10, 80, 80, $hBrush[3])
Case $Color = 4
_GDIPlus_GraphicsFillEllipse($hBuffer, $i * 100 + 10, $j * 100 + 10, 80, 80, $hBrush[4])
EndSelect
Next
Next
_GDIPlus_GraphicsDrawImageRect($hGraphic, $hBitmap, 0, 0, $Rows * 100, $Colls * 100)
Sleep(30)
Next
$iAll = ($Rows * $Colls) * 4
For $i = 0 To ($Rows - 1)
For $j = 0 To ($Colls - 1)
For $k = 0 To 3
$iAll += $aPops[$i][$j][$k][0]
Next
Next
Next
Until $iAll = 0
EndIf
EndIf
EndFunc ;==>_PopBubble
Func _ChainPop($iX, $iY)
$aCells[$iX][$iY] -= 1
If $aCells[$iX][$iY] = 0 Then
For $i = 0 To 3
$aPops[$iX][$iY][$i][0] = $iX
$aPops[$iX][$iY][$i][1] = $iY
Next
EndIf
EndFunc ;==>_ChainPop
#include <GuiConstants.au3>
#include <ComboConstants.au3>
Global $Rows, $Colls, $Name
[/autoit] [autoit][/autoit] [autoit]Global $hName, $hRows, $hColls, $hTouches, $hNext
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]GuiCreate("Einstellungen", 200, 100, @DesktopWidth / 2 - 100, @DesktopHeight / 2 - 50)
GuiCtrlCreateLabel("Name:", 0, 0, 60, 25)
GuiCtrlSetFont(-1, 15)
$hName = GuiCtrlCreateInput("", 60, 0, 70, 25)
GuiCtrlCreateLabel("x:", 0, 25, 20, 25)
GuiCtrlSetFont(-1, 15)
$hRows = GuiCtrlCreateCombo("3", 60, 25, 70, 25, $CBS_DROPDOWNLIST)
GuiCtrlSetData(-1, "4|5|6|7|8|9")
GuiCtrlCreateLabel("y:", 0, 50, 20, 25)
GuiCtrlSetFont(-1, 15)
$hColls = GuiCtrlCreateCombo("3", 60, 50, 70, 25, $CBS_DROPDOWNLIST)
GuiCtrlSetData(-1, "4|5|6|7")
GuiCtrlCreateLabel("Züge:", 0, 75, 50, 25)
GuiCtrlSetFont(-1, 15)
$hTouches = GuiCtrlCreateCombo("1", 60, 75, 70, 25, $CBS_DROPDOWNLIST)
GuiCtrlSetData(-1, "2|3|4|5|6|7")
$hNext = GuiCtrlCreateButton("Weiter", 130, 0, 70, 100)
GuiSetState()
Do
$nMsg = GUIGetMsg()
If $nMsg = $GUI_EVENT_CLOSE Then Exit
Until $nMsg = $hNext And GuiCtrlRead($hName) <> ""
$Rows = GuiCtrlRead($hRows)
$Colls = GuiCtrlRead($hColls)
$Touches = GuiCtrlRead($hTouches)
$Name = GuiCtrlRead($hName)
GuiDelete()
Global $aCells[$Rows][$Colls]
Global $hGui, $hDropdown[$Rows][$Colls][2], $hCreate, $hHelp
For $i = 0 To $Rows - 1
For $j = 0 To $Colls - 1
$aCells[$i][$j] = 0
Next
Next
$hGui = GUICreate("Bubble Blast Editor", $Rows * 50, $Colls * 50 + 50, @DesktopWidth / 2 - ($Rows * 50 /2), @DesktopHeight / 2 - ($Colls*50/2))
For $i = 0 To $Rows - 1
For $j = 0 To $Colls - 1
$hDropdown[$i][$j][0] = GUICtrlCreateCombo("0", $i * 50 + 10, $j * 50, 30, 30, $CBS_DROPDOWNLIST)
GuiCtrlSetData(-1, "1|2|3|4")
Next
Next
$hCreate = GuiCtrlCreateButton("Erstellen", 0, $Colls * 50, $Rows*50*0.8, 50)
$hHelp = GuiCtrlCreateButton("Hilfe", $Rows*50*0.8, $Colls * 50, $Rows*50*0.2, 50)
GUISetState()
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $hCreate
For $i = 0 to $Rows - 1
For $j = 0 to $Colls - 1
$aCells[$i][$j] = Number(GuiCtrlRead($hDropdown[$i][$j][0]))
Next
Next
IniWrite(@ScriptDir & "/" & $Name & ".ini", "General", "x", $Rows)
IniWrite(@ScriptDir & "/" & $Name & ".ini", "General", "y", $Colls)
IniWrite(@ScriptDir & "/" & $Name & ".ini", "General", "Touch", $Touches)
For $i = 1 to $Rows
For $j = 1 to $Colls
IniWrite(@ScriptDir & "/" & $Name & ".ini", "Map", $i&$j, $aCells[$i-1][$j-1])
Next
Next
MsgBox(0, "Fertig", "Level erfolgreich im Editor-Verzeichnis erstellt")
Case $hHelp
MsgBox(0, "Hilfe", "Mit den Comboboxen stellt man die Stufe der Blase fest."&@CRLF&"0 bedeutet, dass keine Blase erscheint.")
EndSwitch
Sleep(40)
WEnd
An alle, die einigermaßen GDI+ können: ich habe mir zwar nicht sonderlich viel Mühe mit der Performance gegeben, aber wie wäre denn da noch was rauszuholen?
Ihr könnt euch gerne an schönere Umsetzungen machen ![]()
MfG,
Fresapore
Hi,
geniale Idee und (wies aussieht) coole Umsetzung!
Ich bin zwar kein Modellierer, aber gibt es nicht freie Schiffsmodelle im Inet?
MfG,
Fresapore
Sowas in die Richtung haben wir auch mal überlegt,
aber wir wollten auf sowenig fremde UDFs zugreifen wie möglich,
und bis auf das Drücken kann man afaik nichts vom Mausrad abfangen..
MfG,
Fresapore
Er meint damit, dass es effizienter ist, da du, wie es den Anschein macht, sehr viele Controls löschen willst, einfach die Gui zu löschen und die übrigen Controls neu zu erstellen. (<-- Was fürn Satz Ôo) Natürlich wäre da eine Funktion zur Erstellung der GUI sinnvoll.
Dennoch ist es (Meiner Ansicht nach) besser, mit GuiCtrlSetState() zu arbeiten.
MfG,
Fresapore
Du musst die Controls löschen, und nicht den Array (wobei es sinnvoll wäre, den auch mitzulöschen ;))
[autoit]For $i = 0 to Ubound($arControl) -1
GuiCtrlDelete($arControl[$i][0])
GuiCtrlDelete($arControl[$i][1])
Next
MfG,
Fresapore
Hi,
Danke, werds mal auprobieren.
Hast du evtl die genaue Syntax, kriegs grad nicht hin ![]()
Hi,
danke erstmal.
Diesen Artikel habe ich schon gelesen..die schreiben da ja offensichtlich, dass hal nicht mehr benötigt wird (für KDE) aber ich will Gnome nehmen, daher weiß ich nicht, was genau ich dafür machen muss
MfG,
Fresapoer
Hi Forum,
ich habe eine ziemlich spezielle Frage zum Thema Gentoo Linux.
Ich habe mir Gentoo gestern erfolgreich installiert, und heute wollte ich mich am X Server versuchen.
Ich habe folgende Anleitung verwendet: klick
Nachdem ich
"emerge xorg-server" gemacht habe,
sollte ich
"/etc/init.d/hald start"
aufrufen.
Allerdings findet er die datei "hald" nicht. Weiß einer wo der Fehler liegt? ich kommer nicht mehr weiter..
MfG,
Fresapore
Soetwas geht einfacher mit
[autoit]_ispressed("1B")
[/autoit]
Also einfach in die Schleife der Funktion:
If _ispressed("1B") Then exitloop
[/autoit]
oder sowas ähnliches.
MfG,
Fresapore
Also, wenn du die Skripte includest, dann werden sie beim compilieren einfach an die Stelle geschrieben, d.h man braucht die anderen au3s nicht mehr. Wenn du die einzelnen Skripte getrennt starten willst, geht das über run(), bzw. shellexecute().
Aber wenn du includierst, solltest du bei den includierten Skripten einfach dein "Hauptcode", also der Teil, der bei Start des Scriptes ausgeführt wird, in eine Funktion packen, und von dem Hauptskript aufrufen..(Hoffe du hast verstanden was ich meine ![]()
MfG,
Fresapore
Nein, man benötigt kein Autoit, um eine Exe auszuführen, welche eine (mehrere) au3s includiert.
Um welche Uhrzeiten ihr alle online seid Ôo..
Naja, Herzlichen Glückwunsch auch von mir!
Fresapore
Also wenn es wirklich 3D-Bilder mit Farben und Texturen sind, würde ich sie entweder aus dem Internet (Copyright!) beziehen oder extern zeichnen..
Wenn es sich aber um Strichzeichungen handelt, lassen diese sich mit recht einfachen Mitteln mit GDI+ zeichnen...
Hast du die Datei denn auch in den richtigen Ordner gespeichert?
Und auch die Scite.Properties richtig geändert? Dann sollte es eig. funzen ohne Datei-Auswahl..
"Falsch" ist das nicht, da musst du die au3 von OI auswählen, soweit ich weiß.
Die Control-ID wird doch von der Funktion zurückgegeben.
Einfach
$PicID = GuiCtrlCreatePic(...)
[/autoit]
MfG,
Fresapore
Hi Forum,
Ich hab ne Frage zu _IEImgClick().
Ich habe auf einer Website im Quelltext folgende Zeile stehen:
<input type="image" style="width: 82px" alt="Anmelden" src="/img/btn_anmelden.gif">
Diesen "Button" möchte ich anklicken,
Allerdings scheitert:
_IEImgclick($oIE, "Anmelden", "alt")
_IEImgClick($oIE, "/img/btn_anmelden.gif", "src")
_IEFormImageClick($oForm, "Anmelden", "alt") ;$oForm ist korrekt belegt
Gibt es weiter Möglichkeiten?
Sämtliche Versuche scheitern mit dem Fehler 7 (No Match found)
Danke,
MfG,
Fresapore
Was ist denn das Problem mit der von dir beschriebenen Methode? So würde ich das auch machen...
Man kann der GUI den Style $WS_SIZEBOX geben, dann kann der User die GUI am Rand festhalten und verändern...Falls du das meinst....