Recopilación de pequeños ejercicios y scripts que voy haciendo en Godot4 para aprender.

 Recopilación de pequeños ejercicios y scripts que voy haciendo en Godot4 para aprender.

extends Control

var a : float = 3
var b : float = 2

func _ready():
    print(a + b)

----------------------------------
Imprime 5 en el Debug


Si quiero que me lo muestre en un label y no en la ventana inferior del debuger...

----------
extends Control

var a : float = 3
var b : float = 2

func _ready():
$Label.text = str(a + b)





Al presionar Botón llama a función.

Añadir un botón y que 
sea una función que no sea _ready
y que cuando apriete el botón me de el resultado de la función suma

-----

extends Control

var a : float = 3
var b : float = 2

var button7 = Button.new()

func _ready():
button7.position = Vector2(100, 180)
button7.text = "alpresionarcargafuncion"
button7.pressed.connect(self._button_pressed_7)
add_child(button7)

func addition():
$Label.text = str(a + b)

func _button_pressed_7():
addition()

--







----------
31 Marzo 2023 ej2sumlinedit_funciona
FUNCIONA y queda así:
Un simple ejercicio de sumar 2 números desde 2 LineEdit y que al darle a un botón pone la variable en un label.

(Hacer un boton y una señal que conecta el boton con el on press del boton en el Control....)

En el Control
extends Control

func _on_button_5_pressed():
var num1 = float($LineEdit1.text)
var num2 = float($LineEdit2.text)
var result = num1 + num2
$Label4.text = str(result)

---














 






Ejercicio002 27_3_23:  FUNCIONA
Un LineEdit que al ponerle un numero, y apretar un botón me haga print de ese numero.

extends Node2D

func _ready():
#$Button.connect("pressed", self, "_on_Button_pressed")

#crea label
var label = Label.new()
label.position = Vector2(250, 50)
label.text = "0"
add_child(label)

#crea boton
var button3 = Button.new()
button3.position = Vector2(250, 180)
button3.text = "print  en Debuger al numero que pongas en el Linedit"
button3.pressed.connect(self._button_pressed_3)
add_child(button3)

func _button_pressed_3():
#$Label.text = "7"
var text = $LineEdit.text
if is_number(text):
print("ok")
print(text)

func is_number(text):
var valid_chars = "0123456789.-"
for char in text:
return true
#al apretar el boton print el valor que haya introducido en el Line Edit

------------








Una variación del anterior. FUNCIONA
Introduzco un numero en el LineEdit y al pulsar un boton, ese numero se pone en el label.

extends Node2D

func _ready():
# crea label

# crea boton
var button3 = Button.new()
button3.position = Vector2(250, 180)
button3.text = "print en Debuger al numero que pongas en el Linedit"
button3.connect("pressed", Callable(self, "_button_pressed_3"))
add_child(button3)

func lohaga():
$Label5.text = $LineEdit.text

func _button_pressed_3():
var text = $LineEdit.text
lohaga()
print("ok")
print(text)
print($LineEdit.text)

#funciona

----





-----


Ejercicio: FUNCIONA
Crea un script que tenga una variable "vida" inicializada en 100, 
una función que reduzca la vida en 10 cada vez que se llame, 
y otra función que muestre la vida actual en la consola del debug.

extends Control

var vida : int = 100

func reducirvida ():
vida = vida - 10
print (vida)

func _ready():
reducirvida()
print (vida)
reducirvida()
print (vida)
reducirvida()
print (vida)
reducirvida()
print (vida)
reducirvida()
print (vida)

------


---------



En godot4. Complicando el ejercicio anterior
Usar for para hacer un bucle...
para que en el func _ready haya un bucle para que el
reducirvida()
print (vida)
se repita 12 veces

------
extends Control

var vida : int = 100

func reducirvida ():
vida = vida - 10
print (vida)

func _ready():
for i in range(12):
reducirvida()
print(vida)
------

------




Variación del ejercicio anterior; FUNCIONA
Crea un script que tenga una variable "vida" inicializada en 100, 
una función que reduzca la vida en 10 cada vez que se llame, 
y otra función que muestre la vida actual en la consola del debug.

A partir del ejercicio anterior, 
añadiendo un boton que al apretarlo llame a la funcion de reducir vida y muestre en un label el valor de vida. y otro label delante que diga: vida:

extends Control
"Ejercicio:
inicial:
Crea un script que tenga una variable (vida) inicializada en 100, 
una función que reduzca la vida en 10 cada vez que se llame, 
y otra función que muestre la vida actual en el debugging.

añadiendo un boton que al apretarlo
llame a la funcion de reducir vida y 
muestre en un label el valor de vida.
 y otro label delante que diga: vida:
"
var vida : int = 100

func reducirvida ():
vida = vida - 10
print (vida)

func _ready():
get_node("Label2")
RenderingServer.set_default_clear_color(Color(0.79, 0.76, 0.64, 1))
#$Viewport.black_bars_set_margins(50, 50)

func _on_button_pressed():
print("botonh")
reducirvida()
var label = get_node("../Control/Label2")
label.text = str(vida)
------



-----







Ejercicio: 30-3-2023  m17_2escenas  FUNCIONA
En Godot 4: Hacer 2 escenas con color de fondo distinto y un botón en cada una de ellas, y al apretarlo que cambie de escena.

extends Node2D

func _on_button_1_pressed():
get_tree().change_scene_to_file("res://node_2d_esce_2.tscn")





---------------------------------------


Ejercicio:
Crea un script que tenga dos variables "ancho" y "alto" que representen el tamaño de una ventana,
 una función que las multiplique para obtener el área,
 y otra función que muestre el área en una etiqueta en la pantalla.

---
Ejercicio : Que al apretar una tecla del teclado concreta se muestre 7 en un label.
variación: si se mantiene apretada que muestre 1 en el label.
--
Ejercicio para practicar y entender las diferencias entre las diferentes señales de un boton.



Ejercicio:
Que al apretar un boton, haga print de un archivo de texto.
Hacer un archivo de texto mitexto.txt con 5 líneas de texto copiadas de cualquier noticia positiva de un periódico digital.

variación del anterior:
Que al apretar el botón, muestre el texto en un label, en un richtext que haya debajo, y en el otro nodo que es de texto debajo, para ver la diferencia entre esos nodos.

----

En Godot 4.0.1
Intento esto de load y save pero me da error.
Identifier "File" not declared in the current scope.


extends Node2D

func save(content):
var file = File.new()
file.open("res://mitexto.dat", File.WRITE)
file.store_string(content)
file.close()

func load():
#var file = File.new()
file.open("res://mitexto.dat", File.READ)
var content = file.get_as_text()
file.close()
return content

----------------------------------------------------

Ejercicio:
En godot4 un script que genere una variable aleatoria entre 1 y 40, y lo haga 40 veces, y que si el numero ya ha salido, no lo elija 

Tengo que repasar el for y el while.
----------------------------------------------------

esto da error

extends Node

func _ready():
var number = randi() % 40 + 1
print (number)

var numbers = []
while numbers.size() < 40:
var number = randi() % 40 + 1
if number not in numbers:
numbers.append(number)
print(number)
print ("Resultado de la suma: "+str(i)

-----------------------------------------------------------------

Mas simple.
Ejercicio que cree un numero aleatorio de 1 a 40

extends Node

func _ready():
var number = randi() % 40 + 1
print (number)
--












---------------------------------------------------------------------
Comprobando la aleatoridad del randi

extends Node

func _ready():
var number1 = randi() % 40 + 1
var number2 = randi() % 40 + 1
var number3 = randi() % 40 + 1
var number4 = randi() % 40 + 1
var number5 = randi() % 40 + 1
var number6 = randi() % 40 + 1
var number7 = randi() % 40 + 1
var number8 = randi() % 40 + 1
var number9 = randi() % 40 + 1
var number10 = randi() % 40 + 1
var number11 = randi() % 40 + 1
var number12 = randi() % 40 + 1
var number13 = randi() % 40 + 1
var number14 = randi() % 40 + 1
var number15 = randi() % 40 + 1
var number16 = randi() % 40 + 1
var number17 = randi() % 40 + 1
var number18 = randi() % 40 + 1
var number19 = randi() % 40 + 1
var number20 = randi() % 40 + 1
var number21 = randi() % 40 + 1
var number22 = randi() % 40 + 1
print (number1)
print (number2)
print (number3)
print (number4)
print (number5)
print (number6)
print (number7)
print (number8)
print (number9)
print (number10)
print (number11)
print (number12)
print (number13)
print (number14)
print (number15)
print (number16)
print (number17)
print (number18)
print (number19)
print (number20)
print (number21)
print (number22)

---



















da
28
3
11
27
18
39
8
1
23
1
24
16
26
3
21
10
20
2
34
22
29
39

--

5
6
12
22
34
15
27
15
11
20
14
6
33
39
32
23
37
33
30
24
5
26

--
23
9
35
12
28
40
26
22
38
25
33
27
28
40
25
2
20
26
28
7
13
28

--
Parece que lo hace bien. La cuestión también será comprobar que los que crea "aleatoriamente" la primera vez, no coinciden. Y hacer que no se repitan.

--------------------------------
Lo mismo que lo anterior pero con menos lineas...

extends Node

func _ready():
var numbers = []
var count = 22
while count > 0:
var number = randi() % 40 + 1
if number not in numbers:
numbers.append(number)
count -= 1
for number in numbers:
print(number)
--
Este código hace print de 22 números aleatorios entre 1 y 40 sin repetición. Utiliza una matriz para almacenar los números generados y un ciclo while con un contador para generar los números. El ciclo continúa hasta que el contador llega a 0, y cada número generado se agrega a la matriz solo si aún no está en la matriz. Finalmente, el código imprime cada número en la matriz.
# var numbers = [] crea el array
# var count = 22  crea la variable count que son los que hace print
if number not in numbers:  Si la variable creada aleatoriamente no esta en la matriz...
# numbers.append(number)
 agrega un elemento number a un array llamado numbers. append() es un método de lista que agrega un objeto al final de la lista. En resumen, esta línea de código agrega un número a la lista numbers. Por ejemplo, si number es igual a 5, entonces numbers.append(number) agrega el número 5 a la lista numbers.
#count -= 1     significa count = count - 1 osea el -= significa que es igual a lo mismo menos 1.
Es común usar esta expresión en un bucle para ir disminuyendo el valor de una variable en cada iteración, hasta que se cumpla una condición y se salga del bucle. En el contexto de generar números aleatorios sin repetición, se podría usar count para llevar la cuenta de cuántos números faltan por generar, y disminuirlo en cada iteración hasta que se hayan generado todos los números necesarios.

#for number in numbers:
La línea "for number in numbers:" es un bucle for en Python que se utiliza para iterar a través de una lista llamada "numbers". En cada iteración del bucle, la variable "number" se establece en el siguiente elemento de la lista. Por lo tanto, si la lista contiene números aleatorios generados sin repetición, esta línea se utiliza para iterar a través de los números y realizar alguna operación en cada número, como mostrarlo en la pantalla o realizar algún cálculo con él.


...

--

da

35
20
8
19
14
33
23
22
16
9
6
21
7
11
40
17
13
30
15
28
32
27

---




















------------------------------------------------------------------------------
12-4-2023 M30Tecla
Hacer ejercicio donde salga un label con un texto que diga escena1, y que si le das a la tecla escape, salga. (funciona) (aunque no hay nada mas y no esta en una funcion delta que lea a cada frame.)

extends Node2D

func _input(event):
if event is InputEventKey and event.scancode == KEY_ESCAPE:
get_tree().quit()








------------------------------------------------------------------------------
21-4-2023
Hacer 
un script que cuente las veces que se pulsa un boton, y que si se pulsa 1 vez que coja la variable carta del primer valor de la matriz numbers si se pulsa otra vez que coja la variable carta del segundo valor de la matriz numbers si se pulsa otra vez que coja la variable carta del tercer valor de la matriz numbers si se pulsa otra vez que coja la variable carta del cuarto valor de la matriz numbers
FUNCIONA (y lo muestra en el label)


extends Node2D

#matriz
var numbers = [1, 2, 3, 4, 5, 6, 7]
var index = 0

func _on_boton_pressed():
index += 1
if index > len(numbers):
index = 1
var carta = numbers[index - 1]
print("Carta: ", carta)
$valor.text= str(carta)



















---------------------------------------------------------------------------------
Lo mismo con el array...
Al apretar el boton, me da en el label el valor del array, de 1 a 40.
(Funciona)

(Ahora tengo que convertir eso a cartas, que las figuras valgan medio punto...
y las no figuras el valor que sea...)
Verificar si me lee una variable de una escena a otra. ¿Hay variables globales en godot?... mmmm


extends Node2D

var cuentaboton = 0
var numbers = []

func _on_irmenu_pressed():
get_tree().change_scene_to_file("res://Scenes/menu.tscn")

#hace la matriz
func _ready():
var count = 40
while count > 0:
var number = randi() % 40 + 1
if number not in numbers:
numbers.append(number)
count -= 1
for number in numbers:
print(numbers)

#al apretar el boton de dame carta
func _on_dame_carta_pressed():
cuentaboton += 1
if cuentaboton > len(numbers):
cuentaboton = 1
var carta = numbers[cuentaboton - 1]
$Labdame.text = str(carta)
----
















-----------------------------------------------------------------

Que al apretar un boton un label visible se haga invible y uno invisible se haga visible
(funciona)

func _on_boton_pressed():
$unlabel.visible = false
$otrolabel.visible = true

-------------------------------------------------------
Que al apretar el boton meplanto
cree un sprite en la escena una carta de res://fotos/carta1.png
en la posicion x= 322 , y=679. (funciona)

func _on_meplanto_pressed():
var sprite = Sprite2D.new()
sprite.texture = load("res://fotos/carta1.png")
sprite.position = Vector2(322, 679)
add_child(sprite)
#En la funcion de apretar el boton, la var sprite = Sprite2D.new()

----------------------------------------------------------------
Que en sprite.texture = load("res://fotos/carta1.png")
carta sea "carta" + la variable str(carta)
(funciona)
func _on_meplanto_pressed():
$Labelestasjugando.visible = false
$Labeljuegacompu.visible = true
var sprite = Sprite2D.new()
cuentaboton += 1
if cuentaboton > len(numbers):
cuentaboton = 1
var carta = numbers[cuentaboton - 1]
var ruta_imagen = "res://fotos/carta" + str(carta) + ".png"
sprite.texture = load(ruta_imagen)
sprite.position = Vector2(322, 679)
add_child(sprite)












-------------------------------------------------------------------------
 (funciona)
Llamar a una función desde un botón.
Hacer una función _barajar que haga que c= a+b
y 2 botones que al presionarlos cojan la variable c de la función 
y hagan print de c.

extends Node2D

var a = 0;
var b=0;
var c=0;

func _barajar():
c = a + b;
return

func _on_button_1_pressed():
a=3;
b=7;
_barajar()
print (c);

func _on_button_2_pressed():
a=1;
b=2;
_barajar()
print (c);














------------------------------------------------------------------------------------------------------------
(funciona) Llamar a función con parametro, o función con argumento.
En Godot4 La variable bot1 = false y bot2 = false. El boton dame_carta y el boton meplanto llaman a la funcion _mezclar quiero que la variable bot1 = true si se llama a _mezclar desde dame_carta y que la variable bot2 = true si se llama a _mezclar desde meplanto.

extends Node2D
var bot1 = false
var bot2 = false

func _mezclar(bot):
# código para mezclar las cartas
if bot == "bot1":
bot1 = true;
print ("Viene de boton1 dame carta")

elif bot == "bot2":
bot2 = true
print ("Viene de boton2 meplanto")

func _on_damecarta_pressed():
_mezclar("bot1")


func _on_meplanto_pressed():
_mezclar("bot2")

--















--------------------------------------------------------------------------------------------------------------------


Comentarios

Entradas populares de este blog

Godot4 Project Settings > Display Windows

Tipos de Nodos en Godot4

Organización de escena