Ich weiß es nicht.
Wenn ich so ein "Kind" vor Augen habe sehe ich im Skript irgendwie mehr Fehler.^^
Beiträge von Mars
-
-
Nichts für ungut, aber ich verstehe nicht wieso hier die "kleinen" ihre Bilder preisgeben.
Das nimmt mir jegliche Achtung vor euren Taten. -
Wir haben uns in der Schule immer einzelne Wörter (wie Bushaltestelle, Baumbart, Merlin, Knecht, Zwiebel, usw) ausgedacht.
Wenn einer unserer Gruppe vorlas musste er versuchen möglichst viele dieser Wörter möglichst unauffällig untertzbringen. (klappt auch in Englisch/Französisch).
Wenn man es wirklich drauf hat kann man das so gut verpacken, dass es kaum auffällt. -
Angeheizt wird das durch diesen Amerika "Hype".
Mein Paradebeispiel für schlechte Umgangsformen und übertriebenes Englischsprechen wo es nicht nötig ist: Facebook.Ein Kommentar komplett in englisch ist bedeutend "cooler" als ein Gleichwertiger in Deutsch.
Hinzu kommt eine extreme Geilheit das eigene Leben, sowie die eigenen "coolen" Aktionen der Welt publik zu machen.(Zitat aus FB)
the sun finally found her way back here! and left us with a beautiful sunset painting the snowy Himalayas in pink and orange!(Ebenfalls)
I'm truly blessed with great family and amazing friends!! ♥Vermutlich wäre ein solcher Kommentar in Deutsch zu arm.
-
Die Reduktion des Wortschatzes hat nichts mit der Amerikanisierung/Zwangsverenglischung (oder wie man das nennt^^) der Deutschen Sprache zu tun.
Primitives Beispiel:
Ich habe einen Wortschatz von 5000 Wörtern. Davon 10% Englisch.
Ich habe einen Wortschatz von 3000 Wörtern. Davon 30% Englisch.Der theoretische Wortschatz steigt bei jeder Eingliederung von neuen Worten.
Die neuen Wörter wirken aber oft ersetzend oder vereinfachend, sodass nach der Einführung weniger Wörter benutzt werden als vorher. -
Ich sehe einen Unterschied zwischen Vereinfachung um die Leute zu verdummen (bringen uns ja die Billigserien im Fernsehen die ich nicht schaue) und Weiterentwicklung.
Eine Entwicklung findet immer statt. Dagegen habe ich auch nichts.
Es ist mir egal wie die Begrüßungsformeln lauten.
Es ist mir egal wie die Leute sprechen. (normal habe ich selbst einen ordentlichen Dialekt, Hochdeutsch muss aber dennoch möglich sein).
Aber es darf nicht dahin laufen, dass einfach das halbe Englische Wörterbuch (teils auch noch Sinnentfremdet) in den Deutschen Duden aufgenommen wird.
Der Wortschatz wird laufend reduziert indem man redundante Wörter nicht mehr gebraucht. (ich hätte z.B. auch verringert, verkleinert, vermindert nutzen können).Häufig gemachte Fehler werden einfach als korrekt übernommen um die Fehlerquote zu senken.
Der immer weiter steigende Anteil Leute mit einem nachträglich angeeigneten Wortschatz (der oft relativ klein ausfällt) wächst bedenklich an.An meiner These halte ich fest: Je primitiver die Sprache, desto dümmer die jenigen die sie Sprechen.
(Siehe Englisch :D) -
Ich meinte eher folgendes:
http://de.wikipedia.org/wiki/1984_%28Roman%29In der Schule gabs reichlich Distopien von vor 30 bis 70 Jahren.
Und mit freude haben wir regelmäßig festgestellt, dass 90% bereits in irgend einer Form in der Realität zu finden sind.
Man glaubt fast die Regierungen nehmen sich diese alten Schinken als Vorlage für ihren Überwachungsstaat.ZitatSie soll nach und nach die Alltagssprache (Altsprech) verdrängen und dient dazu, den Wortschatz zu reduzieren und so abgestuftes und schattiertes Denken zu unterbinden
-
Wer definiert denn gut und schlecht? Eine Entwicklung geht doch immer in die Richtung, die die Mehrheit angibt. Deshalb spiegelt Sprache auch immer das aktuelle Bild der Menschen, die diese Sprache sprechen, wieder.
Kennt jemand noch folgendes ?
gut | besser | am besten
gut | gut + | gut ++
schön | schön + | schön ++Dahin wirds gehen.
Dann sind alle gleich dumm und finden es auch noch gut so, weil sie die Mehrheit sind.
Und die handverlesene Obrigkeit wird Hochdeutsch sprechen und schreiben. -
Per Edit lässt sich aber nicht jedes "Feld" wie in DOS einzeln formatieren.
Du kannst also keinen Bunten Text mit Buntem Hintergrund machen.In GDI+ sind diese Sachen ohne weiteres möglich.
Wenn du ganz hart bist machst du es richtig schön wie in alten Zeiten mit Framebuffer je 16Bit (2x 4Bit Farbe + 8Bit Zeichen).
Anschließend in einer Schleife prüfen welche Zellen geändert wurden und nur diese neu zeichnen. Dann geht das ganze auch mit guter Performance. -
Aber Altbackenes neu zu Lackieren ist nicht so der Hit..
Das ist hier ja schon fast einn Krieg mit Bauernweisheiten^^
Wozu das Rad neu erfinden ?Zur Kollision:
Fällt der Abstand der Ameisen unter 2 px gibt es 2 Tote.
Man kann ohne wissen über den Gegnerischen Zug also nicht sagen ob man stirbt, wenn man auf ihn zu geht.
Das ist aber soweit ich weiß im Original auch so. (Deshalb bilden sich diese "Mauern" aus Ameisen, weil keine den Abstand veringern will)Kein Treffer:
A## . . A#B . . A##
##B . . ### . . ###
### . . ### . . B##Treffer:
A# . AB . A#
#B . ## . B#Da man das Array mit allen Daten sämtlicher Ameisen (eigene und Gegnerische) besitzt muss man selbst berechnen wie man vorgeht.
Das ist ja grade der Trick an der Sache. Wenn ich das wie ein Baukastensystem mache muss man ja nix mehr machen außer eine hand voll Funktionen in der Reihenfolge Variieren.Teams, Angriffspläne, Verteidigung, Sammeln usw muss man schon selbst programmieren.
Allerdings hat das je nach Anforderung an den Bot nichts mit "einstig in AutoIt" zu tun^^
einen simplen Bot der gezielt Essen sucht und angreift sowie verteidigt sollte man aber in weniger als 100 Zeilen schaffen. Auch mit simplem Code. -
Ich sehe das Problem nicht einen offiziellen Wettbewerb in klein nachzustricken.
Mehr sinn als Viereckigen Code macht es allemal und es ist für jedermann machbar.Hab mir folgendes überlegt:
Man erstellt nicht nur eine Funktion, sondern eine AU3.Darin sind einige Variablen vorhanden um die AI mit Daten zu füttern.
(zurzeit)
SIZE[2] = Größe des Spielfeldes in x und y Richtung
FELD[x][y] = Das Spielfeld
POS[2][2] = Position der Ameisenlöcher von Spieler 1 und 2In der AU3 darf man beliebig viele Funktionen und lokale Variablen benutzen.
Globale Variablen gehen auch, sofern dafür gesorgt wird, dass es keine Namenskonflikte gibt. (z.B. $_Mars_PosX wird vermutlich außer mir keiner Nutzen)
Funktionen sollten auch so gehalten werden, dass es keine Namenskonflikte gibt.Funktionen zum Zeichnen, sowie bewegen sind provisorisch fertig (noch weitestgehend ungetestet).
zum Test laufen Beide zufällig in eine Richtung. Essen gibts noch nicht, aber bald^^Die Idee mit einer einzigen Funktion hatte ich, um das einfügen zu erleichtern. Da hatte ich wohl nicht im Kopf, dass man auch Include nehmen kann
Ich kann keinen Dateianhang machen.
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#include <GDIPlus.au3>
#include <Array.au3>
#include "AI_01.au3"
#include "AI_02.au3"Opt('GUIOnEventMode', 1)
[/autoit] [autoit][/autoit] [autoit]
Opt("MustDeclareVars", 1)Global $hGUI, $hGFX, $hBMP, $hBUF, $iW, $iH, $iZ = 10, $hBRU[7], $FELD
[/autoit] [autoit][/autoit] [autoit]
Global $HIVE[2] ; Ameisen im "Speicher"
Global $POS[2][2] ; Position der AmeisenlöcherGlobal $SIZE[2] = [40, 25] ; Breite und Höhe
[/autoit] [autoit][/autoit] [autoit]
Global $aSpielfeld[$SIZE[0]][$SIZE[1]] ; SpielfeldGlobal $sError ; Errorlog für BEIDE Spieler
[/autoit] [autoit][/autoit] [autoit]
Global $iPlayer ; Spieler am Zug: 1 oder 2
Global $iRunden = 100 ; Runden die die Simulation läuft_GDIPlus_Startup()
[/autoit] [autoit][/autoit] [autoit]$iW = $SIZE[0] * $iZ
[/autoit] [autoit][/autoit] [autoit]
$iH = $SIZE[1] * $iZ
$hGUI = GUICreate('Ant AI', $iW, $iH)$hGFX = _GDIPlus_GraphicsCreateFromHWND($hGUI)
[/autoit] [autoit][/autoit] [autoit]
$hBMP = _GDIPlus_BitmapCreateFromGraphics($iW, $iH, $hGFX)
$hBUF = _GDIPlus_ImageGetGraphicsContext($hBMP);~ - [Sache] - [Farbe] - [Nummer]
[/autoit] [autoit][/autoit] [autoit]
;~ - Feld : Hellorange 0
;~ - Spieler 1 : Rot 1 - Gegner = 2 Spieler = 1
;~ - Spieler 2 : Blau 2 - Gegner = 2 Spieler = 1
;~ - Wand : Schwarz 3
;~ - Essen : Grün 4
;~ - Loch 1 : Pink 5 - Gegner = 7 Spieler = 6
;~ - Loch 2 : Türkis 6 - Gegner = 7 Spieler = 6$hBRU[0] = _GDIPlus_BrushCreateSolid(0xFFFFC000)
[/autoit] [autoit][/autoit] [autoit]
$hBRU[1] = _GDIPlus_BrushCreateSolid(0xFFFF0000)
$hBRU[2] = _GDIPlus_BrushCreateSolid(0xFF0000FF)
$hBRU[3] = _GDIPlus_BrushCreateSolid(0xFF000000)
$hBRU[4] = _GDIPlus_BrushCreateSolid(0xFF00FF00)
$hBRU[5] = _GDIPlus_BrushCreateSolid(0xFF00FFFF)
$hBRU[6] = _GDIPlus_BrushCreateSolid(0xFFFF00FF)KARTE(1)
[/autoit] [autoit][/autoit] [autoit]
DRAW()GUIRegisterMsg(0xF, 'WM_PAINT')
[/autoit] [autoit][/autoit] [autoit]
OnAutoItExitRegister('_Freigeben')
GUISetOnEvent(-3, '_Event')
GUISetState(@SW_SHOW, $hGUI)_Main()
[/autoit] [autoit][/autoit] [autoit]ConsoleWrite(@CRLF & '+ Errorlog: ' & $sError & @CRLF & @CRLF)
[/autoit] [autoit][/autoit] [autoit]Func _Main()
[/autoit] [autoit][/autoit] [autoit]For $i = 1 To $iRunden Step 1
[/autoit] [autoit][/autoit] [autoit]Sleep(10)
[/autoit] [autoit][/autoit] [autoit]If IsInt($i / 10) Then ; Alle 10 Frames eine Ameise mehr
[/autoit] [autoit][/autoit] [autoit]
$HIVE[0] += 1
$HIVE[1] += 1
EndIfSETARRAY() ; Neue Ameisen hinzufügen
[/autoit] [autoit][/autoit] [autoit]$iPlayer = 1 ; Spieler 1 ist am Zug
[/autoit] [autoit][/autoit] [autoit]
$FELD = GETARRAY()
AI_01()$iPlayer = 2 ; Spieler 2 ist am Zug
[/autoit] [autoit][/autoit] [autoit]
$FELD = GETARRAY()
AI_02()KOLLISIONEN()
[/autoit] [autoit][/autoit] [autoit]
DRAW()
WM_PAINT()Next
[/autoit] [autoit][/autoit] [autoit]EndFunc ;==>_Main
[/autoit] [autoit][/autoit] [autoit]Func KARTE($i)
[/autoit] [autoit][/autoit] [autoit]
Switch $i
Case 1
$POS[0][0] = Int($SIZE[0] / 4)
$POS[0][1] = Int($SIZE[1] / 2)
$POS[1][0] = Int($SIZE[0] * 0.75)
$POS[1][1] = Int($SIZE[1] / 2)
Case 2
Case 3
EndSwitch
EndFunc ;==>KARTEFunc MOVE($x, $y, $s)
[/autoit] [autoit][/autoit] [autoit]
If $FELD[$x][$y] = 1 Then ; Es ist eine Ameise vorhanden
Switch $s
Case 'l'
If $x > 0 Then ; es geht nach lniks.
If ($FELD[$x-1][$y] = 0) Then ; Ist das Feld frei ?
$aSpielfeld[$x-1][$y] = $iPlayer
$aSpielfeld[$x][$y] = 0
ElseIf ($FELD[$x-1][$y] = 2) Then ; Ist da ein Gegner ?
$aSpielfeld[$x-1][$y] = 0 ; Beide Tot
$aSpielfeld[$x][$y] = 0
ElseIf ($FELD[$x-1][$y] = 4) Then ; Ist da Essen =
$HIVE[$iPlayer-1] += 1
$aSpielfeld[$x-1][$y] = $iPlayer
$aSpielfeld[$x][$y] = 0
Else
$sError &= 'Spieler ' & $iPlayer & ', ERROR: 03: Laufen durch eigene Ameisen oder Wände geht nicht.' & @CRLF
EndIf
Else ; Man wandert durch den Rand.
If ($FELD[$SIZE[0]-1][$y] = 0) Then ; Ist das Feld frei ?
$aSpielfeld[$SIZE[0]-1][$y] = $iPlayer
$aSpielfeld[$x][$y] = 0
ElseIf ($FELD[$SIZE[0]-1][$y] = 2) Then ; Ist da ein Gegner ?
$aSpielfeld[$SIZE[0]-1][$y] = 0 ; Beide Tot
$aSpielfeld[$x][$y] = 0
ElseIf ($FELD[$SIZE[0]-1][$y] = 4) Then ; Ist da Essen =
$HIVE[$iPlayer-1] += 1
$aSpielfeld[$SIZE[0]-1][$y] = $iPlayer
$aSpielfeld[$x][$y] = 0
Else
$sError &= 'Spieler ' & $iPlayer & ', ERROR: 03: Laufen durch eigene Ameisen oder Wände geht nicht.' & @CRLF
EndIf
EndIf
Case 'r'
If ($x < $SIZE[0] - 1) Then ; es geht nach rechts.
If ($FELD[$x+1][$y] = 0) Then ; Ist das Feld frei ?
$aSpielfeld[$x+1][$y] = $iPlayer
$aSpielfeld[$x][$y] = 0
ElseIf ($FELD[$x+1][$y] = 2) Then ; Ist da ein Gegner ?
$aSpielfeld[$x+1][$y] = 0 ; Beide Tot
$aSpielfeld[$x][$y] = 0
ElseIf ($FELD[$x+1][$y] = 4) Then ; Ist da Essen =
$HIVE[$iPlayer-1] += 1
$aSpielfeld[$x+1][$y] = $iPlayer
$aSpielfeld[$x][$y] = 0
Else
$sError &= 'Spieler ' & $iPlayer & ', ERROR: 03: Laufen durch eigene Ameisen oder Wände geht nicht.' & @CRLF
EndIf
Else ; Es geht durch die rechte Wand
If ($FELD[0][$y] = 0) Then ; Ist das Feld frei ?
$aSpielfeld[0][$y] = $iPlayer
$aSpielfeld[$x][$y] = 0
ElseIf ($FELD[0][$y] = 2) Then ; Ist da ein Gegner ?
$aSpielfeld[0][$y] = 0 ; Beide Tot
$aSpielfeld[$x][$y] = 0
ElseIf ($FELD[0][$y] = 4) Then ; Ist da Essen =
$HIVE[$iPlayer-1] += 1
$aSpielfeld[0][$y] = $iPlayer
$aSpielfeld[$x][$y] = 0
Else
$sError &= 'Spieler ' & $iPlayer & ', ERROR: 03: Laufen durch eigene Ameisen oder Wände geht nicht.' & @CRLF
EndIf
EndIf
Case 'o'
If $y > 0 Then ; es geht nach lniks.
If ($FELD[$x][$y-1] = 0) Then ; Ist das Feld frei ?
$aSpielfeld[$x][$y-1] = $iPlayer
$aSpielfeld[$x][$y] = 0
ElseIf ($FELD[$x][$y-1] = 2) Then ; Ist da ein Gegner ?
$aSpielfeld[$x][$y-1] = 0 ; Beide Tot
$aSpielfeld[$x][$y] = 0
ElseIf ($FELD[$x][$y-1] = 4) Then ; Ist da Essen =
$HIVE[$iPlayer-1] += 1
$aSpielfeld[$x][$y-1] = $iPlayer
$aSpielfeld[$x][$y] = 0
Else
$sError &= 'Spieler ' & $iPlayer & ', ERROR: 03: Laufen durch eigene Ameisen oder Wände geht nicht.' & @CRLF
EndIf
Else ; Man wandert durch den Rand.
If ($FELD[$x][$SIZE[1]-1] = 0) Then ; Ist das Feld frei ?
$aSpielfeld[$x][$SIZE[1]-1] = $iPlayer
$aSpielfeld[$x][$y] = 0
ElseIf ($FELD[$x][$SIZE[1]-1] = 2) Then ; Ist da ein Gegner ?
$aSpielfeld[$x][$SIZE[1]-1] = 0 ; Beide Tot
$aSpielfeld[$x][$y] = 0
ElseIf ($FELD[$x][$SIZE[1]-1] = 4) Then ; Ist da Essen =
$HIVE[$iPlayer-1] += 1
$aSpielfeld[$x][$SIZE[1]-1] = $iPlayer
$aSpielfeld[$x][$y] = 0
Else
$sError &= 'Spieler ' & $iPlayer & ', ERROR: 03: Laufen durch eigene Ameisen oder Wände geht nicht.' & @CRLF
EndIf
EndIf
Case 'u'
If ($y < $SIZE[1] - 1) Then ; es geht nach rechts.
If ($FELD[$x][$y+1] = 0) Then ; Ist das Feld frei ?
$aSpielfeld[$x][$y+1] = $iPlayer
$aSpielfeld[$x][$y] = 0
ElseIf ($FELD[$x][$y+1] = 2) Then ; Ist da ein Gegner ?
$aSpielfeld[$x][$y+1] = 0 ; Beide Tot
$aSpielfeld[$x][$y] = 0
ElseIf ($FELD[$x][$y+1] = 4) Then ; Ist da Essen =
$HIVE[$iPlayer-1] += 1
$aSpielfeld[$x][$y+1] = $iPlayer
$aSpielfeld[$x][$y] = 0
Else
$sError &= 'Spieler ' & $iPlayer & ', ERROR: 03: Laufen durch eigene Ameisen oder Wände geht nicht.' & @CRLF
EndIf
Else
If ($FELD[$x][0] = 0) Then ; Ist das Feld frei ?
$aSpielfeld[$x][0] = $iPlayer
$aSpielfeld[$x][$y] = 0
ElseIf ($FELD[$x][0] = 2) Then ; Ist da ein Gegner ?
$aSpielfeld[$x][0] = 0 ; Beide Tot
$aSpielfeld[$x][$y] = 0
ElseIf ($FELD[$x][0] = 4) Then ; Ist da Essen =
$HIVE[$iPlayer-1] += 1
$aSpielfeld[$x][0] = $iPlayer
$aSpielfeld[$x][$y] = 0
Else
$sError &= 'Spieler ' & $iPlayer & ', ERROR: 03: Laufen durch eigene Ameisen oder Wände geht nicht.' & @CRLF
EndIf
EndIf
Case Else
$sError &= 'Spieler ' & $iPlayer & ', ERROR: 01: Unbekannte Richtungsangabe' & @CRLF
EndSwitch
Else
$sError &= 'Spieler ' & $iPlayer & ', ERROR: 02: Keine Ameise zum Bewegen vorhanden' & @CRLF
EndIf
EndFunc ;==>MOVEFunc KOLLISIONEN()
[/autoit] [autoit][/autoit] [autoit]
EndFunc ;==>KOLLISIONENFunc WM_PAINT()
[/autoit] [autoit][/autoit] [autoit]
_GDIPlus_GraphicsDrawImage($hGFX, $hBMP, 0, 0)
EndFunc ;==>WM_PAINTFunc GETARRAY()
[/autoit] [autoit][/autoit] [autoit]
Local $aRet = $aSpielfeld
For $x = 0 To $SIZE[0] - 1 Step 1
For $y = 0 To $SIZE[1] - 1 Step 1
Switch $aRet[$x][$y]
Case 1 ; Spieler 1 Ameise
;~ If $iPlayer = 1 Then $aRet[$x][$y] = 1
If $iPlayer = 2 Then $aRet[$x][$y] = 2
Case 2 ; Spieler 2 Ameise
;~ If $iPlayer = 1 Then $aRet[$x][$y] = 2
If $iPlayer = 2 Then $aRet[$x][$y] = 1
Case 6
;~ If $iPlayer = 1 Then $aRet[$x][$y] = 6
If $iPlayer = 2 Then $aRet[$x][$y] = 7
Case 7
;~ If $iPlayer = 1 Then $aRet[$x][$y] = 7
If $iPlayer = 2 Then $aRet[$x][$y] = 6
EndSwitch
Next
Next
Return $aRet
EndFunc ;==>GETARRAYFunc SETARRAY()
[/autoit] [autoit][/autoit] [autoit]
For $i = 0 To 1 Step 1
If $HIVE[$i] > 0 Then ; Eine Ameise ist am Start
If Not ($aSpielfeld[$POS[$i][0]][$POS[$i][1]] = 1 + $i) Then ; Wenn der Ausgang nicht blockiert ist
$aSpielfeld[$POS[$i][0]][$POS[$i][1]] = 1 + $i ; Ameise hinzu
$HIVE[$i] -= 1 ; Eine vom Stapel abziehen
EndIf
Else
If Not ($aSpielfeld[$POS[$i][0]][$POS[$i][1]] = 1 + $i) Then $aSpielfeld[$POS[$i][0]][$POS[$i][1]] = 5 + $i ; Spieler Loch setzen
EndIf
Next
EndFunc ;==>SETARRAYFunc DRAW()
[/autoit] [autoit][/autoit] [autoit]
For $x = 0 To $SIZE[0] - 1 Step 1
For $y = 0 To $SIZE[1] - 1 Step 1
_GDIPlus_GraphicsFillRect($hBUF, $x * $iZ, $y * $iZ, $iZ, $iZ, $hBRU[$aSpielfeld[$x][$y]])
Next
Next
EndFunc ;==>DRAWFunc _Freigeben()
[/autoit] [autoit][/autoit] [autoit]For $i = 0 To UBound($hBRU) - 1 Step 1
[/autoit] [autoit][/autoit] [autoit]
_GDIPlus_BrushDispose($hBRU)
Next_GDIPlus_GraphicsDispose($hBUF)
[/autoit] [autoit][/autoit] [autoit]
_GDIPlus_BitmapDispose($hBMP)
_GDIPlus_GraphicsDispose($hGFX)
_GDIPlus_Shutdown()EndFunc ;==>_Freigeben
[/autoit] [autoit][/autoit] [autoit]Func _Event()
[/autoit]
Switch @GUI_CtrlId
Case -3
Exit
EndSwitch
EndFunc ;==>_EventSpoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
Global $POS, $FELD, $SIZEFunc AI_01()
[/autoit] [autoit][/autoit] [autoit]For $x = 0 To $SIZE[0] - 1 Step 1
[/autoit] [autoit][/autoit] [autoit]
For $y = 0 To $SIZE[1] - 1 Step 1
MOVE($x, $y, _LROU())
Next
NextEndFunc
[/autoit] [autoit][/autoit] [autoit]Func _LROU()
[/autoit]
Local Static $LROU[4] = ['l', 'r', 'o', 'u']
Return $LROU[Random(0, 3, 1)]
EndFuncSpoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
Global $POS, $FELD, $SIZEFunc AI_02()
[/autoit] [autoit][/autoit] [autoit]For $x = 0 To $SIZE[0] - 1 Step 1
[/autoit] [autoit][/autoit] [autoit]
For $y = 0 To $SIZE[1] - 1 Step 1
MOVE($x, $y, LROU())
Next
NextEndFunc
[/autoit] [autoit][/autoit] [autoit]Func LROU()
[/autoit]
Local Static $LROU[4] = ['l', 'r', 'o', 'u']
Return $LROU[Random(0, 3, 1)]
EndFunc -
Ich lade mir AntMe mal herunter.
Wenn das so gut ist wie du sagst (was ich annehme, wenn du das sagst) könnte das ja schonmal unsere Grundlage sein.Edit: Deine Grundschulkinder können Visual Basic oder C# ?!
Das Einzige was ich herunterladen kann ist Quellcode.Edit2: Aaah. in \lib ist eine .exe...
Edit3: Das ist aber wesentlich umfangreicher un komplexer als das was ich eigentlich vorhatte.
Und man muss VS2008/10 installiert haben. -
Moin,
Neulich habe ich im Netz (wo sonst) etwas interessantes gefunden was für "groß und klein" machbar ist.
Es geht um die Ameisen AI. (http://de.wikipedia.org/wiki/AI_Challenge#Ants)Ich möchte nun hier Meinungen dazu Sammeln, sowie mögliche Regeln und sonstiges, damit kein Chaos ensteht.
Zum Schluss soll es klar definierte (möglichst lückenfreie) Regeln geben, damit jeder wirklich die gleiche Chance hat.Das Spiel:
Es treten immer 2 bis n Spieler gegeneinander an.
Jeder Spieler hat zu Beginn einen "Hügel" aus dem "Ameisen" herauskommen und umherlaufen.
Diese Ameisen sammeln Essen um weitere Ameisen zu produzieren.
Dabei müssen sie sich selbstständig in einem kleinen Labyrinth zurechtfinden.
Treffen sich 2 Ameisen sterben beide.
Besiegt wird ein Spieler indem eine Ameise eines Feindes den eigenen Hügel erreicht.
Sieger ist wer als letzter übrig ist, oder (falls es zu keinem eindeutigen Sieg kommt) wer am Ende die meisten Ameisen vorweisen kann.Aufgabe:
Programmieren einer künstlichen Intelligenz für die Ameisen, damit sie Essen suchen und Feinde Abwehren/Angreifen.Meine Vorstellung:
--------
Das Skript beinhaltet ein Array[x][y] welches das komplette Spielfeld beinhaltet. Mehr Daten stehen der AI nicht zur Verfügung.
Die AI Funktion hat nur einen Parameter (Das Array) welches vorher speziell generiert wird, sodass die AI selbst immer Spieler 1 ist und die anderen dann Spieler 2, 3, usw. Dadurch wird es möglich dass eine AI ein beliebiger Spieler (1 - n) sein kann ohne umgeschrieben zu werden.
MOVE verändert das Globale Array, NICHT das spezielle Array. Mit dem speziellen Array darf man machen was man will.
--------
Nur natives AutoIt ist erlaubt.
Keine DllCalls/DllCallAdress und sonstiges.
Das include Array.au3 darf benutzt werden. (keine weiteren Includes)
Keine Externen Daten (z.B. per IniRead/Write, FileRead/Write, InetGet, usw) auch nicht wenn sie zur Laufzeit erstellt werden.
Die AI darf nur genau eine Funktion sein. Weitere Funktionen sind nicht erlaubt.
Zur Manipulation der Daten darf ausschließlich MOVE(x, y, sRichtung) (sRichtung = l, r, o, u) genutzt werden.
Der Code jeder AI wird öffentlich gemacht.Es sieht also so aus, dass man nur eine einzige Funktion schreiben darf die unter Zuhilfenahme der Arraydaten das Spielfeld kennt und mittels MOVE einzelne Ameisen bewegen kann.
Regelverstöße verursachen einen Error und werden nicht ausgeführt. (Bewegen einer fremden Ameise, bewegen in "p" (die Richtung "p" existiert nicht), Bewegen einer Stelle an der sich keine Ameise befindet, Laufen durch Wände, usw.)
Es werden Spielfelder zufallsgeneriert (per Seed). Es treten dann einige (oder auch nur 2) AIs gegeneinander in 5 Levels jeweils mit vertauschten Positionen gegeneinander an. (also bei 2 Spielern 10 Durchläufe). Anschließend kann man den Sieger ermitteln.
Andere Möglichkeit: (welche mir sogar besser gefällt^^)
Mit den gleichen Regeln wie oben, aber:
Es treten immer 2 Spieler auf 5 Festgelegten Karten (mit vertauschten Positionen) gegeneinander an.
Der Sieger ist "Champ".
Nun darf jeder aus dem Forum eine AI schreiben die den "Champ" besiegen kann. (auf den gleichen 5 Karten)
Dieser Wettbewerb würde also praktisch nie zu Ende gehen, da immer jemand eine noch bessere AI schreiben kann.
Beim Beginn des wettbewerbs werde ich eine extrem schlechte AI bereitstellen die es zu schlagen gilt. (Habe nicht so viel Zeit und kann daher keine "gute" AI schreiben. Würde aber gene mitmachen)(das Skript in das man zwei AIs einsetzen kann habe ich schon angefangen)
Nun ist eure Meinung gefragt.
Habt ihr Lust es mal zu versuchen ?
Wie wollt ihr es versuchen ?
Wie viele Leute machen überhaupt mit ?___
-
Will mal ne Frage einstreuen:
Sind folgende 3 Ausdrücke gleichwertig ?
[autoit]$f = ($f < 0) ? 0 : $f
[/autoit]
If $f < 0 Then $f = 0
$f = $f * ($f > 0)
(ich denke eigentlich schon) -
-
Ein ? im Code, [] nach Funktionen, Funktionen in Variablen.
Bald ist AutoIt Code sicher.
Wenn man damit obfuscatet wird es wirklich hart etwas zu entziffern^^Und noch eine Frage: Woher kommt dieses "foo"
Ich lese das immer wieder überall bei irgendwelchen Programmen.
Kann darin aber keinen näheren Sinn erkennen. (Funktionsname/Varname/usw) -
Ich bin gegen eine Vereinfachung.
Je komplizierter eine Sprache ist, desto besser funktioniert der Denkapparat derer die sie beherrschen.
Mehrsprachig erzogene Kinder sind in der Schule meistens eine Ecke besser als ihre Mitschüler. Das liegt daran, dass im Frühen Alter direkt viel verlangt wurde was zur verbesserten Hirnaktivität führt und somit in allen "Fächern" Vorteile erbgingt.
Eine vereinfachung der Sprache würde nur bewirken, dass die Deutschsprachigen auf lange Sicht dümmer werden. -
Meinst du sowas ?
[autoit]#AutoIt3Wrapper_Run_AU3Check =N
[/autoit][autoit][/autoit][autoit]
Global $Console = ConsoleWrite_Main(5 & @CRLF, $Console)
[/autoit][autoit][/autoit][autoit]Func _Main($iZahl, $Func)
[/autoit]
$Func($iZahl)
EndFuncWenn eine Funktion als Parameter funktioniert wird sie vermutlich auch als Parameter für Objekte funktionieren.
Bin mir aber nicht ganz sicher, da ich keine Objekte (im eigentlichen Sinne) in AutoIt nutze. -
Das ist aber schon ewig möglich. Ich nutze es in meinem neuen Projekt und habe eine sehr alte Au3-Version, die ich vlt. mal update, wenn ich mich mal mit dem neuen Syntax vertraut gemacht hab.Bei meiner 3.3.8.1 Stable funktioniert das nicht.
Bei der 3.3.9.5 hingegen schon.
Es scheint also nich nicht "ewig" möglich zu sein.Edit:
Der Zugriff (zum Lesen) funktioniert auch nur ohne Schleifen.Spoiler anzeigen
[autoit]$tStruct = DllStructCreate("int X; int Y; int Z; int A[4];")
[/autoit] [autoit][/autoit] [autoit]
$tStruct.X = 12
$tStruct.Y = 34$tStruct.X += 1
[/autoit] [autoit][/autoit] [autoit]
$tStruct.Z = $tStruct.X + $tStruct.YConsoleWrite("+ " & $tStruct.X & " + " & $tStruct.Y & " = " & $tStruct.Z & @CRLF)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]For $i = 1 To 4
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
$tStruct.A($i) = $i ;not working
ConsoleWrite("! " & DllStructGetData($tStruct, "A", $i) & @CRLF)
Next$tStruct.A(1) = 11
[/autoit] [autoit][/autoit] [autoit]
$tStruct.A(2) = 22
$tStruct.A(3) = 33
$tStruct.A(4) = 44For $i = 1 To 4
[/autoit] [autoit][/autoit] [autoit]
ConsoleWrite("+ " & DllStructGetData($tStruct, "A", $i) & @CRLF)
NextFor $i = 1 To 4
[/autoit] [autoit][/autoit] [autoit]
ConsoleWrite("! " & $tStruct.A($i) & @CRLF)
NextConsoleWrite("+ " & $tStruct.A(1) & @CRLF)
[/autoit]
ConsoleWrite("+ " & $tStruct.A(2) & @CRLF)
ConsoleWrite("+ " & $tStruct.A(3) & @CRLF)
ConsoleWrite("+ " & $tStruct.A(4) & @CRLF)Edit2:
Gibt es vllt die Möglichkeit an die "neuste Version" der 3.3.9.5 zu kommen ? (intern wird es bestimmt eine weitere Versionsnummer geben). -
Ich finde die Idee mit den Dollarzeichen extrem gut.
Dann kann ich Globale und Lokale Variablen schön Trennen.
Globale mit $ und Lokale ohne.Für mich subjektiv erleichtert das die Arbeit mit Funktionen.