La IA Crea tu propio Juego o programa: Ejemplo del Juego de la serpiente

Sharing for Developers, programms, APIs, DBs, trends

Compartir para Desarrolladores, programas, APIs, Dbs y tendencias

Sugerencia traduce tu post en inglés además del español para hacerlo más global
Suggestions : translate your post in Spanish also to make more accesible. Thanks
Avatar de Usuario
BasicOs
Site Admin
Mensajes: 2085
Registrado: 21 Nov 2006, 19:24
Ubicación: El Internet - (Canarias, España)
Contactar:

La IA Crea tu propio Juego o programa: Ejemplo del Juego de la serpiente

Mensaje por BasicOs »

Comparto este prompt para chatgpt para crear facilmente programas au3 o ejecutables de cualquier cosa que sueñes, si te diviertes create tu propio juego en un minuto, más modificaciones y mejoras que tu desees hacer:

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.
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.
Después puedes pedir una ampliación del código, (yo no la hice) pero el resultado es muy positivo - ver o1 preview:

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.
Código resultado con comentarios en español después de un minuto :smt026 :smt026 :smt026 :
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

Pulsa la barra espaciadora para iniciar el juego.
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 ! :smt031 :smt031
Salu2:) BasicOs
Responder