Poner este código en Chatgpt:
Cambiar la palabra Snake con otros programas o en lugar de Snake pues explica que debe hacer el programa.
Después puedes pedir una ampliación del código, (yo no la hice) pero el resultado es muy positivo - ver o1 preview:Implement Snake with Autoit Script language. The entire code should be written in a single AU3 block with embedded styles and funtions. Don’t use any remote assets. After opening the au3, user will need to hit space to start / restart the game, the snake will randomly go in one direction at the start and use 'wasd' to control the direction of the snake. Make it pretty and the playground large. Write as you were a Spanish programmer, comments and all in spanish. Modern look and responsive.
Código: Seleccionar todo
Dame mejoras quie podemos integrar para mejorar este proyecto, dame el código entero de cada uno de los archivos de la versión mejorada.
Quieres añadir obstaculos o funcionalidades extra a esta juego, para que sea tuyo propio, hazlo, y comentalo aquí mismo
Código: Seleccionar todo
; Juego de Snake en AutoIt
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Opt("GUIOnEventMode", 1)
Global $GUI_ANCHO = 800
Global $GUI_ALTO = 600
Global $TAMANO_CELDA = 20
Global $VELOCIDAD = 100
Global $direccion = ""
Global $serpiente, $comida, $temporizador
; Crear GUI
$hGUI = GUICreate("Juego de Snake", $GUI_ANCHO, $GUI_ALTO, -1, -1, $WS_OVERLAPPEDWINDOW)
GUISetBkColor(0x000000, $hGUI)
GUISetOnEvent($GUI_EVENT_CLOSE, "_Salir")
GUISetState(@SW_SHOW, $hGUI)
; Etiqueta de instrucciones
$hEtiqueta = GUICtrlCreateLabel("Presiona ESPACIO para empezar", ($GUI_ANCHO - 250) / 2, ($GUI_ALTO - 20) / 2, 250, 20)
GUICtrlSetColor(-1, 0xFFFFFF)
GUICtrlSetFont(-1, 12, 800)
; Manejadores de teclas
GUIRegisterMsg($WM_KEYDOWN, "WM_KEYDOWN")
Func _IniciarJuego()
; Eliminar etiqueta
GUICtrlDelete($hEtiqueta)
; Inicializar serpiente
$serpiente = [[Int($GUI_ANCHO / (2 * $TAMANO_CELDA)), Int($GUI_ALTO / (2 * $TAMANO_CELDA))]]
_DibujarSerpiente()
; Colocar comida
_ColocarComida()
; Dirección aleatoria
Local $direcciones = ["w", "a", "s", "d"]
$direccion = $direcciones[Random(0, 3, 1)]
; Iniciar temporizador
$temporizador = TimerInit()
; Bucle del juego
While True
If TimerDiff($temporizador) > $VELOCIDAD Then
$temporizador = TimerInit()
_MoverSerpiente()
EndIf
Sleep(10)
WEnd
EndFunc
Func _MoverSerpiente()
Local $cabeza = $serpiente[0]
Switch $direccion
Case "w"
$cabeza[1] -= 1
Case "s"
$cabeza[1] += 1
Case "a"
$cabeza[0] -= 1
Case "d"
$cabeza[0] += 1
EndSwitch
; Comprobar colisión con paredes
If $cabeza[0] < 0 Or $cabeza[0] >= $GUI_ANCHO / $TAMANO_CELDA Or $cabeza[1] < 0 Or $cabeza[1] >= $GUI_ALTO / $TAMANO_CELDA Then
_GameOver()
Return
EndIf
; Comprobar colisión con sí misma
For $i = 1 To UBound($serpiente) - 1
If $cabeza[0] = $serpiente[$i][0] And $cabeza[1] = $serpiente[$i][1] Then
_GameOver()
Return
EndIf
Next
; Mover serpiente
If $cabeza[0] = $comida[0] And $cabeza[1] = $comida[1] Then
_ColocarComida()
Else
_BorrarCelda($serpiente[UBound($serpiente) - 1][0], $serpiente[UBound($serpiente) - 1][1])
ReDim $serpiente[UBound($serpiente) - 1]
EndIf
_DibujarCelda($cabeza[0], $cabeza[1], 0x00FF00)
_InsertarEnArray($serpiente, 0, [$cabeza[0], $cabeza[1]])
EndFunc
Func _ColocarComida()
$comida = [Random(0, ($GUI_ANCHO / $TAMANO_CELDA) - 1, 1), Random(0, ($GUI_ALTO / $TAMANO_CELDA) - 1, 1)]
_DibujarCelda($comida[0], $comida[1], 0xFF0000)
EndFunc
Func _DibujarSerpiente()
For $segmento In $serpiente
_DibujarCelda($segmento[0], $segmento[1], 0x00FF00)
Next
EndFunc
Func _DibujarCelda($x, $y, $color)
Local $izquierda = $x * $TAMANO_CELDA
Local $arriba = $y * $TAMANO_CELDA
GUICtrlCreateGraphic($izquierda, $arriba, $TAMANO_CELDA, $TAMANO_CELDA)
GUICtrlSetGraphic(-1, $GUI_GR_COLOR, $color, $color)
GUICtrlSetGraphic(-1, $GUI_GR_RECT, 0, 0, $TAMANO_CELDA, $TAMANO_CELDA)
EndFunc
Func _BorrarCelda($x, $y)
Local $izquierda = $x * $TAMANO_CELDA
Local $arriba = $y * $TAMANO_CELDA
GUICtrlCreateGraphic($izquierda, $arriba, $TAMANO_CELDA, $TAMANO_CELDA)
GUICtrlSetGraphic(-1, $GUI_GR_COLOR, 0x000000, 0x000000)
GUICtrlSetGraphic(-1, $GUI_GR_RECT, 0, 0, $TAMANO_CELDA, $TAMANO_CELDA)
EndFunc
Func _GameOver()
MsgBox(0, "Fin del Juego", "¡Has chocado! Presiona ESPACIO para reiniciar.")
Exit
EndFunc
Func WM_KEYDOWN($hWnd, $Msg, $wParam, $lParam)
Local $vkCode = BitAND($wParam, 0xFF)
Switch $vkCode
Case 0x20 ; Barra espaciadora
_IniciarJuego()
Case 0x57 ; Tecla W
If $direccion <> "s" Then $direccion = "w"
Case 0x53 ; Tecla S
If $direccion <> "w" Then $direccion = "s"
Case 0x41 ; Tecla A
If $direccion <> "d" Then $direccion = "a"
Case 0x44 ; Tecla D
If $direccion <> "a" Then $direccion = "d"
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc
Func _InsertarEnArray(ByRef $array, $indice, $valor)
ReDim $array[UBound($array) + 1]
For $i = UBound($array) - 1 To $indice + 1 Step -1
$array[$i] = $array[$i - 1]
Next
$array[$indice] = $valor
EndFunc
Func _Salir()
Exit
EndFunc
Controla la serpiente con las teclas W, A, S, D.
La serpiente comenzará a moverse en una dirección aleatoria.
¡Disfruta del juego, cambialo en vez de serpiente lagarto mejicano, o cambia las teclas de uso, hazlo a tu medida, tu juego !
Salu2:) BasicOs