Da die µitLight ja mehr oder minder tot ist, starte ich mal eine kleine Wettbewerb.
Die Aufgabe ist es einen Block durch eine "Welt" von einem Start zu einem Zielpunkt selbstständig navigieren zu lassen. Die Welt generiert sich bei jedem starten des Scriptes neu mit unterschiedlicher Anzahl und größe der Hindernisse. Die Generierung der Welt mit Start und Zielpunkt sowie die Bewegungsrichtungen (hoch, runter, links, rechts) habe ich schon Vorgegeben.
Dir Prüfungs zu Kollisionsvermeidung mit einem Hinterniss, das erkennen ob man am Ziel angelangt ist und die Prüfung ob es überhaupt ein Weg zum Ziel gibt müsst ihr noch machen. Es ist duchaus beabsichtigt, das Hinternisse sich überschneiden oder auch mal das Ziel über eim Hinterniss liegt und dadurch nicht erreichbar ist.
Hier das Codegrundgerüst mit einem kleinen Beispiel darin:
Spoiler anzeigen
#include <GUIConstantsEx.au3>
[/autoit] [autoit][/autoit] [autoit];~ ÄNDERUNGEN NUR IM MARKIEREN BEREICH
[/autoit] [autoit][/autoit] [autoit]$Form = GUICreate("Form1", 600, 600, 192, 124)
[/autoit] [autoit][/autoit] [autoit]Dim $wallArray[1][5]
[/autoit] [autoit][/autoit] [autoit]For $i = 0 To Random(20, 30, 1) Step 1
ReDim $wallArray[$i + 1][5]
$wallArray[$i][3] = Random(25, 50, 1) ;- Breite
$wallArray[$i][4] = Random(25, 50, 1) ;- Höhe
$wallArray[$i][1] = Random(0, (600 - $wallArray[$i][3]), 1) ;- Abstand von links
$wallArray[$i][2] = Random(0, (600 - $wallArray[$i][4]), 1) ;- Abstand von oben
$wallArray[$i][0] = GUICtrlCreateButton("", $wallArray[$i][1], $wallArray[$i][2], $wallArray[$i][3], $wallArray[$i][4])
Next
$positionen = Random(0, 575, 1)
[/autoit] [autoit][/autoit] [autoit]Dim $player[1][5]
$player[0][3] = 25 ;- Breite
$player[0][4] = 25 ;- Höhe
$player[0][1] = 0 ;- Abstand von links
$player[0][2] = $positionen ;- Abstand von oben
$player[0][0] = GUICtrlCreateButton("P", 0, $positionen, 25, 25)
Dim $ziel[1][5]
$ziel[0][3] = 25 ;- Breite
$ziel[0][4] = 25 ;- Höhe
$ziel[0][1] = 575 ;- Abstand von links
$ziel[0][2] = 575 - $positionen ;- Abstand von oben
$ziel[0][0] = GUICtrlCreateButton("Z", 575, 575 - $positionen, 25, 25)
Func move($richtung, $schritte)
Switch $richtung
Case "hoch"
For $i = 1 To $schritte Step 1
sleep(50)
$player[0][2] = $player[0][2] - 1
GUICtrlSetPos($player[0][0], $player[0][1], $player[0][2])
Next
Case "runter"
For $i = 1 To $schritte Step 1
sleep(50)
$player[0][2] = $player[0][2] + 1
GUICtrlSetPos($player[0][0], $player[0][1], $player[0][2])
Next
Case "links"
For $i = 1 To $schritte Step 1
sleep(50)
$player[0][1] = $player[0][1] - 1
GUICtrlSetPos($player[0][0], $player[0][1], $player[0][2])
Next
Case "rechts"
For $i = 1 To $schritte Step 1
sleep(50)
$player[0][1] = $player[0][1] + 1
GUICtrlSetPos($player[0][0], $player[0][1], $player[0][2])
Next
EndSwitch
EndFunc ;==>move
GUISetState(@SW_SHOW)
sleep(2000)
;~ ÄNDERUNGEN NUR IM MARKIEREN BEREICH
;~ HIER CODE EINFÜGEN
[/autoit] [autoit][/autoit] [autoit]move("hoch", 20)
move("rechts", 50)
move("runter", 30)
move("links", 40)
;~ HIER CODE EINFÜGEN
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit];~ ÄNDERUNGEN NUR IM MARKIEREN BEREICH
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
;~ ÄNDERUNGEN NUR IM MARKIEREN BEREICH
Informationen die ihr sonst noch direkt aus der Vorlage vekommt:
$wallArray[x][5] = Behinhaltet Informationen der Hinternisse: Control-ID, Abstand von links, Abstand von Oben, Breite, Höhe
$player[x][5] = Behinhaltet Informationen des Spielerblocks: Control-ID, Abstand von links, Abstand von Oben, Breite, Höhe
$zil[x][5] = Behinhaltet Informationen der Zielblocks: Control-ID, Abstand von links, Abstand von Oben, Breite, Höhe
Funktion move($richtung, $schritte) =$richtung: hoch, runter, links, rechts $schritte = Schritt welche in die jeweilige Richtung gemacht werden sollen.
Bewertet werden foglende Punkte:
- Schritte die gebraucht werden vom Start zum Ziel
- Geamte Laufzeit des Scripte einschließlich aller Berechnungen
- Logik des Scriptes, also ob z.b. unnötige Umwege gemacht werden
Zu Auswertung werden drei statische Welten vorab generier über die jede Einsendung dann getestet wird und für alle die gleichen Vorraussetzung zu haben.
Einsendeschluss ist der 07.08.2011
Also dan viel Spaß gabei