Dieses Programm ist eigentlich ein Bestandteil meines Programmes "Surprise!". Ich plane, in unregelmäßigen Abständen einzelne Programme von dort seperat vorzustellen, die ich besonders gut finde, um sie mit der Menschheit zu teilen oder Verbesserungsvorschläge zu bekommen.
Mir war mal die Idee für ein Spiel eingefallen, dass man auf einer zufälligen Wikipedia-Seite startet und dann mit möglichst wenig Klicks auf verlinkte Artikel zu einem Ziel kommen muss. Also habe ich das mal umgesetzt:
Spoiler anzeigen
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <IE.au3>
Dim $Ziele[16]=["Berlin","Schleswig-Holstein","Internet","2006","DDR","ARD","Angela_Merkel","Japan","Zweiter_Weltkrieg","Bonn","Computerspiel","Kirche","2012","Los_Angeles","Film","Fernsehen"]
$Ziel=$Ziele[Random(0,UBound($Ziele)-1,1)]
$oIE=_IECreateEmbedded()
$56Form1 = GUICreate("Wikipedia-Run", 622, 445, Default, Default, $WS_OVERLAPPEDWINDOW)
$56Label1 = GUICtrlCreateLabel("Gelange mit so wenigen Klicks wie möglich von einem Wikipedia-Artikel mit Hilfe der Links zu einem anderen Wikipedia-Artikel. Die Suchfunktion zu benutzen ist natürlich verboten.", 8, 8, 616, 17)
GUICtrlSetResizing(-1,$GUI_DOCKLEFT+$GUI_DOCKRIGHT+$GUI_DOCKTOP+$GUI_DOCKHEIGHT)
$56Label2 = GUICtrlCreateLabel("Von:", 8, 32, 26, 17)
GUICtrlSetResizing(-1,$GUI_DOCKALL)
$56Label3 = GUICtrlCreateLabel("Zufällig...", 40, 32, 147, 17)
GUICtrlSetResizing(-1,$GUI_DOCKALL)
GUICtrlSetFont(-1, 9, 800)
$56Label4 = GUICtrlCreateLabel("Nach:", 200, 32, 33, 17)
GUICtrlSetResizing(-1,$GUI_DOCKALL)
$56Label5 = GUICtrlCreateLabel("", 240, 32, 165, 17)
GUICtrlSetResizing(-1,$GUI_DOCKALL)
GUICtrlSetFont(-1, 9, 800)
GUICtrlSetData(-1,StringReplace($Ziel,"_"," "))
$56Label6 = GUICtrlCreateLabel("Klicks: 0", 8, 416, 50, 17)
GUICtrlSetResizing(-1,64+2+$GUI_DOCKSIZE)
GUICtrlSetFont(-1, 9, 800)
$56Button1 = GUICtrlCreateButton("Beenden", 520, 416, 91, 25)
GUICtrlSetResizing(-1,$GUI_DOCKBOTTOM+$GUI_DOCKRIGHT+$GUI_DOCKSIZE)
$56Obj1=GUICtrlCreateObj($oIE,8,50,606,360)
GUICtrlSetResizing(-1,$GUI_DOCKBORDERS)
WinMove($56Form1,"",(@DesktopWidth*0.2)/2,(@DesktopHeight*0.2)/2,@DesktopWidth*0.8,@DesktopHeight*0.8)
GUISetState(@SW_SHOW)
_IENavigate($oIE, "http://de.wikipedia.org/wiki/Spezial:Zuf%C3%A4llige_Seite",1)
$PageOpen=TimerInit()
$Focus=True
$LastURL=_IEPropertyGet($oIE,"locationurl")
$PageName=StringRegExp($LastURL,"wiki\/(.*?)\Z",3)
GUICtrlSetData($56Label3,StringReplace($PageName[0],"_"," "))
GUICtrlSetState($56Obj1,$GUI_FOCUS)
$Klicks=0
While 1
If $Focus=True Then
If TimerDiff($PageOpen)>=900 Then
GUICtrlSetState($56Obj1,$GUI_FOCUS)
$Focus=False
EndIf
EndIf
$URL=_IEPropertyGet($oIE,"locationurl")
If $URL<>$LastURL Then
$Klicks+=1
GUICtrlSetData($56Label6,"Klicks: "&$Klicks)
$PageName=StringRegExp($URL,"wiki\/(.*?)\Z",3)
If @error Then
MsgBox(16,"Toll gemacht... -.-","Bitte bleibe auf den Artikelseiten von Wikipedia!")
_IENavigate($oIE, $LastURL)
$PageOpen=TimerInit()
$Focus=True
GUICtrlSetState($56Obj1,$GUI_FOCUS)
ContinueLoop
EndIf
If StringLower($PageName[0])=StringLower($Ziel) Then
Sleep(1000)
If 7 = MsgBox(68,"Wikipedia-Run","Sehr gut! Du hast es nach "&$Klicks&" Klicks geschafft, das Ziel zu erreichen." & @CRLF & @CRLF & "Nochmal spielen?") Then Exit
;Und nochmal
$Ziel=$Ziele[Random(0,UBound($Ziele)-1,1)]
GUICtrlSetData($56Label5,StringReplace($Ziel,"_"," "))
$Klicks=-1
GUICtrlSetData($56Label6,"Klicks: "&$Klicks)
_IENavigate($oIE, "http://de.wikipedia.org/wiki/Spezial:Zuf%C3%A4llige_Seite",1)
$PageOpen=TimerInit()
$Focus=True
$LastURL=_IEPropertyGet($oIE,"locationurl")
$PageName=StringRegExp($LastURL,"wiki\/(.*?)\Z",3)
GUICtrlSetData($56Label3,StringReplace($PageName[0],"_"," "))
GUICtrlSetState($56Obj1,$GUI_FOCUS)
EndIf
$LastURL=$URL
EndIf
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
Sleep(50)
WEnd
Das Problem ist, dass die IE-UDF scheinbar ziemlich verbuggt ist. Schon bei geringen Änderungen im Code wird bei mir das ganze IE-Fenster weiß und außerdem laggt es sehr. Eigentlich würde ich nämlich gerne noch einbauen, dass man nicht die Suchfunktion verwenden kann und dass man nicht auf "Zufälliger Artikel" klicken kann. Also wenn jemand einen Lösungsansatz hat: Nur her damit! Auch kann ich noch gut Ideen für Ziel-Artikel gebrauchen, es ist nämlich ziemlich schwer, nicht so schwere Artikel zu finden.
btw habe ich mittlerweile gehört, dass es so etwas mit Wikipedia-Artikeln bereits als echten Wettbewerb gibt.