!qN}
zcCzK8{K8H@tk}=Mwps)}y#P!kWH(Vqz^|!ParXR0$nPlf^Mx;r4L6Q*pVw{5(E1jD
z2W31mp55eYO|IWSIk#@3lxzH#O+H0q2j3r_WXLLM|JraE0PVMpge&iQ-u8)1+l~+rpey(JC3&6t{?YyzR^PB?i
z?~kiPp@)yJ^*qmPmXk+#N451H=O<&4{nD@QPPYHegy$%~#02JG%M~%sxCfnfQ$qXR
z=nszdh$)J_3)B(xm-6h3Fn@S%^VZbQwFYE<$+VX?I%Sf-$AdrI;~dv^897e&>(4>?
zt`iH^Z@l9z)q5GcH=($InIPNAmeI7Ej%fUw=Aw
yYg?SSf;
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
bQ_pLu)whvE9PJ*%QPJ{+x9ND6X=(oh?P)yI
literal 0
HcmV?d00001
From 9f4dfca0abfc4ebdd6aed5aefe115f05f0a1e147 Mon Sep 17 00:00:00 2001
From: MagnoEfren <58579707+MagnoEfren@users.noreply.github.com>
Date: Fri, 30 Sep 2022 23:09:13 -0500
Subject: [PATCH 030/124] Add files via upload
---
Efecto Matrix/main.py | 74 +++++++++++++++++++++++++++++++++++++++++++
1 file changed, 74 insertions(+)
create mode 100644 Efecto Matrix/main.py
diff --git a/Efecto Matrix/main.py b/Efecto Matrix/main.py
new file mode 100644
index 0000000..05af205
--- /dev/null
+++ b/Efecto Matrix/main.py
@@ -0,0 +1,74 @@
+
+from tkinter import Frame, Tk, Canvas
+from random import choice
+
+class Matrix(Frame):
+ def __init__(self, master):
+ super().__init__(master)
+
+ self.canvas = Canvas(master, bg= 'black')
+ self.canvas.place(relx=0, rely=0, relwidth=1, relheight=1)
+
+
+ self.velocidad = [i for i in range(0,30,5)]
+ self.pos = [i for i in range(-200,200,20)]
+ self.letters = []
+ self.green = 0
+ self.caracteres = [
+ "a", "k", "u", "u", "u", "И", "Ч",
+ "b", "l", "v", "v", "v", "Ѳ", "Р",
+ "c", "m", "w", "w", "w", "І", "С",
+ "d", "n", "x", "x", "x", "К", "Т",
+ "e", "o", "y", "y", "y", "Л", "Ѵ",
+ "f", "p", "z", "z", "z", "М", "Ф",
+ "g", "q", "1", "1", "1", "Н", "Х",
+ "h", "r", "2", "2", "2", "Ѯ", "Ѱ",
+ "i", "s", "3", "3", "3", "Ѻ", "Ѿ",
+ "j", "t", "4", "4", "4", "П", "Ц",
+ ]
+
+
+ self.draw()
+ self.update()
+
+ def draw(self):
+ for x in range(0,1600,20):
+ y = choice(self.pos)
+ for j in range(0, choice([180,220,280]),20):
+ self.obj = self.canvas.create_text(20+x, -200+y+j, text= choice(self.caracteres),
+ fill = 'green2', font= ('Arial', 14))
+ self.letters.append(self.obj)
+
+
+ def update(self):
+ for letter in self.letters:
+ v = choice(self.velocidad)
+ self.green +=5
+ color = '#{:02x}{:02x}{:02x}'.format(0,self.green,0)
+ self.canvas.itemconfig(letter, fill=color)
+ self.canvas.move(letter, 0, v)
+
+ y = self.canvas.coords(self.obj)
+
+ if self.green >=250:
+ self.green = 0
+
+ if y[1] >=800:
+ self.draw()
+ if y[1]>= 1200:
+ self.letters.clear()
+ self.canvas.delete('all')
+
+ self.canvas.after(80, self.update)
+
+
+
+
+
+if __name__ == '__main__':
+ root = Tk()
+ root.title('Matrix Animation')
+ root.config(bg= 'black')
+ root.attributes('-fullscreen', True)
+ app = Matrix(root)
+ app.mainloop()
\ No newline at end of file
From 9956b537c96051c13191acb92c884966936bbe21 Mon Sep 17 00:00:00 2001
From: MagnoEfren <58579707+MagnoEfren@users.noreply.github.com>
Date: Fri, 30 Sep 2022 23:10:46 -0500
Subject: [PATCH 031/124] Update main.py
---
Efecto Matrix/main.py | 13 ++++---------
1 file changed, 4 insertions(+), 9 deletions(-)
diff --git a/Efecto Matrix/main.py b/Efecto Matrix/main.py
index 05af205..45242bb 100644
--- a/Efecto Matrix/main.py
+++ b/Efecto Matrix/main.py
@@ -1,3 +1,6 @@
+# Efecto Matrix
+# @autor: Magno Efren
+# Youtube: https://www.youtube.com/c/MagnoEfren
from tkinter import Frame, Tk, Canvas
from random import choice
@@ -9,7 +12,6 @@ def __init__(self, master):
self.canvas = Canvas(master, bg= 'black')
self.canvas.place(relx=0, rely=0, relwidth=1, relheight=1)
-
self.velocidad = [i for i in range(0,30,5)]
self.pos = [i for i in range(-200,200,20)]
self.letters = []
@@ -27,7 +29,6 @@ def __init__(self, master):
"j", "t", "4", "4", "4", "П", "Ц",
]
-
self.draw()
self.update()
@@ -39,7 +40,6 @@ def draw(self):
fill = 'green2', font= ('Arial', 14))
self.letters.append(self.obj)
-
def update(self):
for letter in self.letters:
v = choice(self.velocidad)
@@ -47,7 +47,6 @@ def update(self):
color = '#{:02x}{:02x}{:02x}'.format(0,self.green,0)
self.canvas.itemconfig(letter, fill=color)
self.canvas.move(letter, 0, v)
-
y = self.canvas.coords(self.obj)
if self.green >=250:
@@ -61,14 +60,10 @@ def update(self):
self.canvas.after(80, self.update)
-
-
-
-
if __name__ == '__main__':
root = Tk()
root.title('Matrix Animation')
root.config(bg= 'black')
root.attributes('-fullscreen', True)
app = Matrix(root)
- app.mainloop()
\ No newline at end of file
+ app.mainloop()
From 0d848277f8b85c98e935aef17e0b19a7f7d877d6 Mon Sep 17 00:00:00 2001
From: MagnoEfren <58579707+MagnoEfren@users.noreply.github.com>
Date: Sun, 2 Oct 2022 09:51:55 -0500
Subject: [PATCH 032/124] Update login.py
---
Login/login.py | 3 ---
1 file changed, 3 deletions(-)
diff --git a/Login/login.py b/Login/login.py
index a18cc54..ede602a 100644
--- a/Login/login.py
+++ b/Login/login.py
@@ -118,12 +118,9 @@ def widgets(self):
self.entry2.bind("", lambda args: self.entry_in(self.entry2))
self.entry2.bind("", lambda args: self.entry_out(self.entry2, self.contra_marcar))
self.entry2.pack(pady=4)
-
self.indica2 = Label(self.master, bg='DarkOrchid1', fg= 'black', font= ('Arial', 8, 'bold'))
self.indica2.pack(pady=2)
-
Button(self.master, text= 'Iniciar Sesion', command = self.verificacion_users,activebackground='magenta', bg='#D64E40', font=('Arial', 12,'bold')).pack(pady=10)
-
estilo = ttk.Style()
estilo.theme_use('clam')
estilo.configure("TProgressbar", foreground='red', background='black',troughcolor='DarkOrchid1',
From bf1b1087bf212d23f22194e5273c321365e75d98 Mon Sep 17 00:00:00 2001
From: MagnoEfren <58579707+MagnoEfren@users.noreply.github.com>
Date: Sun, 2 Oct 2022 20:17:21 -0500
Subject: [PATCH 033/124] Rename juego Snake.py to Snake.py
---
Juego Snake/{juego Snake.py => Snake.py} | 0
1 file changed, 0 insertions(+), 0 deletions(-)
rename Juego Snake/{juego Snake.py => Snake.py} (100%)
diff --git a/Juego Snake/juego Snake.py b/Juego Snake/Snake.py
similarity index 100%
rename from Juego Snake/juego Snake.py
rename to Juego Snake/Snake.py
From 619f47fa8e58c0ce0c9c47e87c274e1ec88fdf4d Mon Sep 17 00:00:00 2001
From: MagnoEfren <58579707+MagnoEfren@users.noreply.github.com>
Date: Mon, 3 Oct 2022 19:37:59 -0500
Subject: [PATCH 034/124] Update reloj.py
---
Reloj transparente/reloj.py | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/Reloj transparente/reloj.py b/Reloj transparente/reloj.py
index 092fb1f..6df3d4b 100644
--- a/Reloj transparente/reloj.py
+++ b/Reloj transparente/reloj.py
@@ -6,9 +6,10 @@
ventana = Tk()
ventana.config(bg='gray')
-ventana.wm_attributes(
- '-transparentcolor', 'gray')
-ventana.overrideredirect(1) # Eliminar el borde de la ventana
+ventana.wm_attributes('-transparentcolor', 'gray')
+# ventana.wm_attributes("-alpha", 0.5) Para linux
+# ventana.wait_visibility(ventana) Para linux
+ventana.overrideredirect(1) # Eliminar barra de titulo
def salir(*args):
ventana.destroy()
From 26d2792f9e732d88484a622c217d4b8d8d8db8b1 Mon Sep 17 00:00:00 2001
From: MagnoEfren <58579707+MagnoEfren@users.noreply.github.com>
Date: Fri, 28 Oct 2022 19:19:46 -0500
Subject: [PATCH 035/124] Update main.py
---
Efecto Matrix/main.py | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)
diff --git a/Efecto Matrix/main.py b/Efecto Matrix/main.py
index 45242bb..7423417 100644
--- a/Efecto Matrix/main.py
+++ b/Efecto Matrix/main.py
@@ -39,7 +39,6 @@ def draw(self):
self.obj = self.canvas.create_text(20+x, -200+y+j, text= choice(self.caracteres),
fill = 'green2', font= ('Arial', 14))
self.letters.append(self.obj)
-
def update(self):
for letter in self.letters:
v = choice(self.velocidad)
@@ -51,13 +50,11 @@ def update(self):
if self.green >=250:
self.green = 0
-
if y[1] >=800:
self.draw()
if y[1]>= 1200:
self.letters.clear()
- self.canvas.delete('all')
-
+ self.canvas.delete('all')
self.canvas.after(80, self.update)
if __name__ == '__main__':
From 4f8ac5de0d575e51eec469c32d539d71bb061aa1 Mon Sep 17 00:00:00 2001
From: Andres Ponce <54563351+r3back@users.noreply.github.com>
Date: Sun, 20 Nov 2022 01:56:48 -0300
Subject: [PATCH 036/124] Se corrige un bug con el boton "Iniciar Sesion"
Se agrega una variable extra para verificar que el boton no fue clickeado, de lo contrario si el usuario clickea despues de haber ingresado los datos correctamente se queda la barra de carga congelada en 100%
---
Login/login.py | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/Login/login.py b/Login/login.py
index ede602a..f90fee5 100644
--- a/Login/login.py
+++ b/Login/login.py
@@ -9,6 +9,8 @@
import conexion
class Login(Frame):
+ executing = False
+
def __init__(self, master, *args):
super().__init__( master,*args)
self.user_marcar = "Ingrese su correo"
@@ -65,6 +67,9 @@ def verificacion_users(self):
password_entry = self.entry2.get()
if users_entry!= self.user_marcar or self.contra_marcar != password_entry:
+ if self.executing:
+ return None
+
users_entry = str("'" + users_entry + "'")
password_entry = str("'" + password_entry + "'")
@@ -91,6 +96,7 @@ def verificacion_users(self):
dato2 = dato2[0][2]
if dato1 != [] and dato2 != []:
+ self.executing = True
self.acceder_ventana_dos()
else:
self.indica1['text'] = 'Usuario incorrecto'
From 8c77cd8c7f51327a7cbb4bbad0ab307d274b8448 Mon Sep 17 00:00:00 2001
From: MagnoEfren <58579707+MagnoEfren@users.noreply.github.com>
Date: Sun, 20 Nov 2022 20:46:38 -0500
Subject: [PATCH 037/124] Revert "Se corrige un bug con el boton "Iniciar
Sesion""
---
Login/login.py | 6 ------
1 file changed, 6 deletions(-)
diff --git a/Login/login.py b/Login/login.py
index f90fee5..ede602a 100644
--- a/Login/login.py
+++ b/Login/login.py
@@ -9,8 +9,6 @@
import conexion
class Login(Frame):
- executing = False
-
def __init__(self, master, *args):
super().__init__( master,*args)
self.user_marcar = "Ingrese su correo"
@@ -67,9 +65,6 @@ def verificacion_users(self):
password_entry = self.entry2.get()
if users_entry!= self.user_marcar or self.contra_marcar != password_entry:
- if self.executing:
- return None
-
users_entry = str("'" + users_entry + "'")
password_entry = str("'" + password_entry + "'")
@@ -96,7 +91,6 @@ def verificacion_users(self):
dato2 = dato2[0][2]
if dato1 != [] and dato2 != []:
- self.executing = True
self.acceder_ventana_dos()
else:
self.indica1['text'] = 'Usuario incorrecto'
From b976224818553e0e670283b6efd874a2a9d23a42 Mon Sep 17 00:00:00 2001
From: MagnoEfren <58579707+MagnoEfren@users.noreply.github.com>
Date: Wed, 30 Nov 2022 00:13:28 -0500
Subject: [PATCH 038/124] Update Snake.py
---
Juego Snake/Snake.py | 20 --------------------
1 file changed, 20 deletions(-)
diff --git a/Juego Snake/Snake.py b/Juego Snake/Snake.py
index 0449d40..b409b3e 100644
--- a/Juego Snake/Snake.py
+++ b/Juego Snake/Snake.py
@@ -1,7 +1,6 @@
# Juego Snake
# @autor: Magno Efren
# Youtube: https://www.youtube.com/c/MagnoEfren
-
#print('🟢❤🍎🌍💛💚🧡🧡❤💥⚪🟥🟧🟨🟩🟦🟫🟪🔶🔸🔷🔹🔺🔻')
from tkinter import Tk, Frame, Canvas, Button,Label, IntVar, ALL
@@ -15,13 +14,10 @@
posicion_food = (15,15)
posicion_snake = [(75,75)]
nueva_posicion =[(15,15)]
-
mixer.init()
-
def coordenadas_snake():
global direccion, posicion_snake,x,y ,nueva_posicion
-
if direction =='up': # arriba
y = y-30
nueva_posicion[0:] = [(x, y)]
@@ -50,15 +46,12 @@ def coordenadas_snake():
x=15
elif x <=0:
x=15
-
posicion_snake = nueva_posicion + posicion_snake[:-1]
-
for parte, lugar in zip(canvas.find_withtag("snake"), posicion_snake):
canvas.coords(parte, lugar)
def direccion(event):
global direction
-
if event == 'left':
if direction != 'right':
direction = event
@@ -71,31 +64,22 @@ def direccion(event):
elif event == 'down':
if direction != 'up':
direction = event
-
def movimiento():
global posicion_food, posicion_snake,nueva_posicion
posiciones = [15, 45, 75,105,135,165, 195, 225, 255,
285, 315, 345, 375, 405, 435, 465]
-
coordenadas_snake()
-
if posicion_food == posicion_snake[0]:
n = len(posicion_snake)
-
cantidad['text'] = 'Cantidad 🍎 : {}'.format(n)
-
posicion_food = (random.choice(posiciones), random.choice(posiciones))
posicion_snake.append(posicion_snake[-1])
-
mixer.music.load("audio_snake.mp3")
mixer.music.play(loops=0)
-
if posicion_food not in posicion_snake:
canvas.coords(canvas.find_withtag("food"), posicion_food)
-
canvas.create_text(*posicion_snake[-1], text= '▀', fill='green2',
font = ('Arial',20), tag ='snake')
-
if posicion_snake[-1] == nueva_posicion[0] and len(posicion_snake)>=4:
cruzar_snake()
@@ -105,7 +89,6 @@ def movimiento():
cantidad.after(300, movimiento)
-
def cruzar_snake():
canvas.delete(ALL)
canvas.create_text(canvas.winfo_width() / 2, canvas.winfo_height() / 2,
@@ -122,7 +105,6 @@ def salir ():
ventana.destroy()
ventana.quit()
-
ventana = Tk()
ventana.config(bg='black')
ventana.title('Juego Snake')
@@ -139,7 +121,6 @@ def salir ():
ventana.bind("", lambda event:direccion('down'))
ventana.bind("", lambda event:direccion('left'))
ventana.bind("", lambda event:direccion('right'))
-
canvas = Canvas(frame_2, bg='black', width=479, height=479)
canvas.pack()
@@ -147,7 +128,6 @@ def salir ():
for j in range(0,460,30):
canvas.create_rectangle(i,j,i+30, j+30, fill='gray10')
-
canvas.create_text(75,75, text='🍎', fill='red2',
font = ('Arial',18), tag = 'food')
From 694f3765c895795c755f2921943a2c21835d036a Mon Sep 17 00:00:00 2001
From: MagnoEfren <58579707+MagnoEfren@users.noreply.github.com>
Date: Fri, 9 Dec 2022 21:51:40 -0500
Subject: [PATCH 039/124] Add files via upload
---
Cronometro/cronometro_v2.py | 238 ++++++++++++++++++++++++++++++++++++
1 file changed, 238 insertions(+)
create mode 100644 Cronometro/cronometro_v2.py
diff --git a/Cronometro/cronometro_v2.py b/Cronometro/cronometro_v2.py
new file mode 100644
index 0000000..5647e50
--- /dev/null
+++ b/Cronometro/cronometro_v2.py
@@ -0,0 +1,238 @@
+# Cronometro
+# @autor: Magno Efren
+# Youtube: https://www.youtube.com/c/MagnoEfren
+
+from tkinter import Canvas, Button, Frame, Label,Tk
+
+ventana = Tk()
+ventana.config(bg='black')
+ventana.geometry('500x250')
+ventana.title('Cronometro')
+ventana.minsize(width=500, height=250)
+
+ventana.columnconfigure([0,1,2],weight=2)
+#ventana.columnconfigure(1, weight=2)
+#ventana.columnconfigure(2,weight=2)
+ventana.rowconfigure(0, weight=2)
+ventana.rowconfigure(1,weight=1)
+
+frame1 = Frame(ventana)
+frame1.grid(column=0,row=0,sticky='snew')
+frame2 = Frame(ventana)
+frame2.grid(column=1,row=0,sticky='snew')
+frame3 = Frame(ventana)
+frame3.grid(column=2,row=0,sticky='snew')
+frame4 = Frame(ventana, bg='gray10')
+frame4.grid(row=1, columnspan=3, sticky='snew')
+frame5 = Frame(ventana, bg='black')
+frame5.grid(row=2, columnspan=3, sticky='snew')
+#---
+frame1.columnconfigure(0, weight=1)
+frame1.rowconfigure(0, weight=1)
+frame2.columnconfigure(0, weight=1)
+frame2.rowconfigure(0, weight=1)
+frame3.columnconfigure(0, weight=1)
+frame3.rowconfigure(0, weight=1)
+frame4.columnconfigure(0, weight=1)
+frame4.rowconfigure(0, weight=1)
+frame5.columnconfigure(0, weight=1)
+frame5.rowconfigure(0, weight=1)
+
+
+canvas1= Canvas(frame1, bg='gray40', width=200, height =200,highlightthickness=0)
+canvas1.grid(column=0,row=0, sticky='nsew')
+canvas2= Canvas(frame2, bg='gray30', width=200, height =200,highlightthickness=0)
+canvas2.grid(column=0,row=0, sticky='nsew')
+canvas3= Canvas(frame3, bg='gray20', width=200, height =200,highlightthickness=0)
+canvas3.grid(column=0,row=0, sticky='nsew')
+
+
+texto1 = canvas1.create_text(1,1, text='0', font=('Arial',12,'bold'), fill= 'White')
+texto2 = canvas2.create_text(1,1, text='0', font=('Arial',12,'bold'), fill= 'White')
+texto3 = canvas3.create_text(1,1, text='0', font=('Arial',12,'bold'), fill= 'White')
+
+texto_minutos = canvas1.create_text(1,1, text='Minutos',
+ font=('Arial',12,'bold'), fill= 'White')
+texto_segundos = canvas2.create_text(1,1, text='Segundos',
+ font=('Arial',12,'bold'), fill= 'White')
+texto_milisegundos = canvas3.create_text(1,1, text='Milisegundos',
+ font=('Arial',10,'bold'), fill= 'White')
+
+circulo1 = canvas1.create_oval(10,10,100,100, outline='red2',width=10)
+circulo2 = canvas2.create_oval(10,10,100,100, outline='medium spring green',width=10)
+circulo3 = canvas3.create_oval(10,10,100,100, outline='magenta2',width=10)
+
+mi = 0
+se = 0
+ml = 0
+contar = 0
+click_lectura = 0
+clik_stop = 0
+clik_inicio =0
+
+def iniciar_pausar():
+ global mi, se, ml, contar, clik_stop, clik_inicio
+ ml = ml + 1
+ if ml == 999:
+ ml = 0
+ se = se + 1
+ if se ==59:
+ se = 0
+ mi = mi + 1
+ contar = inicio.after(1, iniciar_pausar)
+ clik_inicio = inicio.grid_forget()
+ if clik_inicio is None:
+ stop.grid(column=0, row=0, padx =10, pady=10, sticky='nsew')
+ stop.config(bg= 'orange', text= 'DETENER')
+
+def stop_boton():
+ global contar, clik_stop
+ clik_stop = stop.grid_forget()
+ if clik_stop is None :
+ inicio.grid(column=0, row=0, padx =10, pady=10, sticky='nsew')
+ inicio.config(bg= 'aqua', text='CONTINUAR')
+ inicio.after_cancel(contar)
+
+def vueltas():
+ global mi, se, ml,click_lectura
+
+ click_lectura = click_lectura + 1
+ if click_lectura == 1:
+ lectura1.config(text='{} → {}:{}:{}'.format(click_lectura, mi,se,ml),
+ fg = 'white', bg='gray10')
+ elif click_lectura ==2:
+ lectura2.config(text='{} → {}:{}:{}'.format(click_lectura, mi,se,ml),
+ fg = 'white', bg='gray10')
+ elif click_lectura ==3:
+ lectura3.config(text='{} → {}:{}:{}'.format(click_lectura, mi,se,ml),
+ fg = 'white', bg='gray10')
+ elif click_lectura ==4:
+ lectura4.config(text='{} → {}:{}:{}'.format(click_lectura, mi,se,ml),
+ fg = 'white', bg='gray10')
+ elif click_lectura == 5:
+ lectura5.config(text='{} → {}:{}:{}'.format(click_lectura, mi,se,ml),
+ fg = 'white', bg='gray10')
+ elif click_lectura ==6:
+ lectura6.config(text='{} → {}:{}:{}'.format(click_lectura, mi,se,ml),
+ fg = 'white', bg='gray10')
+ click_lectura = 0
+
+def reiniciar():
+ global mi, se, ml, contar, click_lectura
+ mi = 0
+ se = 0
+ ml = 0
+ click_lectura = 0
+ inicio.after_cancel(contar)
+ lectura1.configure(text='Lectura 1', fg = 'white', bg='gray10')
+ lectura2.configure(text='Lectura 2', fg = 'white', bg='gray10')
+ lectura3.configure(text='Lectura 3', fg = 'white', bg='gray10')
+ lectura4.configure(text='Lectura 4', fg = 'white', bg='gray10')
+ lectura5.configure(text='Lectura 5', fg = 'white', bg='gray10')
+ lectura6.configure(text='Lectura 6', fg = 'white', bg='gray10')
+ stop.grid_forget()
+ inicio.grid(column=0, row=0, padx =10, pady=10, sticky='nsew')
+ inicio.config(bg= 'green2', text='INICIAR')
+
+def coordenadas():
+ x = canvas1.winfo_width()
+ y = canvas1.winfo_height()
+ x1 = int(x - 0.1*x - 0.1*y + 25)
+ y1 = int(y - 0.1*x - 0.1*y + 20)
+ x2 = int(x - 0.4*x - 0.4*y - 15)
+ y2 = int(y - 0.4*x - 0.4*y - 30)
+ tamano = int( y1*0.2 + x1*0.1 + 10 )
+ tamano_texto = int( y1*0.02 + x1*0.02 + 3 )
+ #print(x1, y1, x2, y2)
+ canvas1.coords(circulo1, x1,y1,x2,y2)
+ canvas2.coords(circulo2, x1,y1,x2,y2)
+ canvas3.coords(circulo3, x1,y1,x2,y2)
+
+ #cordenas numeros
+ z1 = int(x1*0.6- 10)
+ z2 = int(y1*0.6 - 10)
+ #coordenadas texto
+ w1 = int(x1*0.49 + 8)
+ w2 = int(y1*0.8 + 10)
+ canvas1.coords(texto1, z1, z2)
+ canvas2.coords(texto2, z1, z2)
+ canvas3.coords(texto3, z1, z2)
+ canvas1.itemconfig(texto1, font=('Arial',tamano,'bold'),text= mi)
+ canvas2.itemconfig(texto2, font=('Arial',tamano,'bold'),text= se )
+ canvas3.itemconfig(texto2, font=('Arial',tamano,'bold'), text= ml)
+ canvas1.coords(texto_minutos, w1, w2)
+ canvas2.coords(texto_segundos, w1, w2)
+ canvas3.coords(texto_milisegundos, w1, w2)
+ canvas1.itemconfig(texto_minutos, font=('Arial',tamano_texto,'bold'))
+ canvas2.itemconfig(texto_segundos, font=('Arial',tamano_texto,'bold'))
+ canvas3.itemconfig(texto_milisegundos, font=('Arial',tamano_texto,'bold'))
+
+ canvas1.after(1000, coordenadas)
+
+frame4.columnconfigure([0,1,2,3,4,5], weight= 1)
+frame4.rowconfigure(0, weight= 1)
+
+lectura1 = Label(frame4, text='Lectura 1', fg = 'white', bg='gray10')
+lectura1.grid(column=0,row=0, sticky='nsew')
+lectura2 = Label(frame4, text='Lectura 2', fg = 'white', bg='gray10')
+lectura2.grid(column=1,row=0, sticky='nsew')
+lectura3 = Label(frame4, text='Lectura 3', fg = 'white', bg='gray10')
+lectura3.grid(column=2,row=0, sticky='nsew')
+lectura4 = Label(frame4, text='Lectura 4', fg = 'white', bg='gray10')
+lectura4.grid(column=3,row=0, sticky='nsew')
+lectura5 = Label(frame4, text='Lectura 5', fg = 'white', bg='gray10')
+lectura5.grid(column=4,row=0, sticky='nsew')
+lectura6 = Label(frame4, text='Lectura 6', fg = 'white', bg='gray10')
+lectura6.grid(column=5,row=0, sticky='nsew')
+
+frame5.columnconfigure([0,1,2], weight= 1)
+frame5.rowconfigure(0, weight= 1)
+
+stop = Button(frame5, text = 'DETENER', relief = "raised",bd=5, bg='orange',
+ font=('Arial', 12, 'bold'), width =20, command = stop_boton)
+stop.grid(column=0, row=0, padx =10, pady=10, sticky='nsew')
+inicio = Button(frame5, text = 'INICIAR',relief = "raised",bd=5, bg='green2',
+ font=('Arial', 12, 'bold'), width =20, command = iniciar_pausar)
+inicio.grid(column=0, row=0, padx =10, pady=10, sticky='nsew')
+vuelta = Button(frame5, text = 'VUELTA',relief = "raised", bd=4, bg='blue2',
+ font=('Arial', 12, 'bold'), width =20, command = vueltas)
+vuelta.grid(column=1, row=0,padx =10, pady=10, sticky='nsew')
+fin = Button(frame5, text = 'RESTABLECER',relief = "raised",bd=4, bg='red2',
+ font=('Arial', 12, 'bold'), width =20, command = reiniciar)
+fin.grid(column=2, row=0, padx =10, pady=10, sticky='nsew')
+
+coordenadas()
+ventana.mainloop()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
From e48c9ee491fbe59f578e1dafc9a17f55b1794660 Mon Sep 17 00:00:00 2001
From: MagnoEfren <58579707+MagnoEfren@users.noreply.github.com>
Date: Fri, 9 Dec 2022 21:56:58 -0500
Subject: [PATCH 040/124] Update cronometro.py
---
Cronometro/cronometro.py | 2 ++
1 file changed, 2 insertions(+)
diff --git a/Cronometro/cronometro.py b/Cronometro/cronometro.py
index 1864c4b..b6d86ff 100644
--- a/Cronometro/cronometro.py
+++ b/Cronometro/cronometro.py
@@ -1,6 +1,8 @@
# Cronometro
# @autor: Magno Efren
# Youtube: https://www.youtube.com/c/MagnoEfren
+# Revise la versión 2 donde hay mejoras para evitar repetir codigo:
+# https://github.com/MagnoEfren/gui_python_tkinter/blob/main/Cronometro/cronometro_v2.py
from tkinter import Canvas, Button, Frame, Label,Tk
From c81f213fcfcb4c9da6db462347b2324aee94a8b5 Mon Sep 17 00:00:00 2001
From: MagnoEfren <58579707+MagnoEfren@users.noreply.github.com>
Date: Fri, 9 Dec 2022 21:57:27 -0500
Subject: [PATCH 041/124] Update cronometro_v2.py
---
Cronometro/cronometro_v2.py | 33 ---------------------------------
1 file changed, 33 deletions(-)
diff --git a/Cronometro/cronometro_v2.py b/Cronometro/cronometro_v2.py
index 5647e50..6ecce6c 100644
--- a/Cronometro/cronometro_v2.py
+++ b/Cronometro/cronometro_v2.py
@@ -203,36 +203,3 @@ def coordenadas():
coordenadas()
ventana.mainloop()
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
From ee9bf5860779ad63829ff5568a75d17ee2f4ef1e Mon Sep 17 00:00:00 2001
From: MagnoEfren <58579707+MagnoEfren@users.noreply.github.com>
Date: Wed, 14 Dec 2022 16:44:05 -0500
Subject: [PATCH 042/124] Update alarma.py
---
Alarma/alarma.py | 13 -------------
1 file changed, 13 deletions(-)
diff --git a/Alarma/alarma.py b/Alarma/alarma.py
index 44c2e87..ae4c232 100644
--- a/Alarma/alarma.py
+++ b/Alarma/alarma.py
@@ -19,14 +19,11 @@
for i in range(0,24):
lista_horas.append(i)
-
for i in range(0,60):
lista_minutos.append(i)
-
for i in range(0,60):
lista_segundos.append(i)
-
texto1 = Label(ventana, text= 'Hora', bg= 'black', fg= 'magenta', font= ('Arial',12, 'bold'))
texto1.grid(row=1, column=0, padx =5, pady=5)
texto2 = Label(ventana, text= 'Minutos', bg= 'black', fg= 'magenta', font= ('Arial',12, 'bold'))
@@ -34,7 +31,6 @@
texto3 = Label(ventana, text= 'Segundos', bg= 'black', fg= 'magenta', font= ('Arial',12, 'bold'))
texto3.grid(row=1, column=2, padx =5, pady=5)
-
combobox1 = ttk.Combobox(ventana, values = lista_horas , style = "TCombobox", justify='center',width='12', font='Arial')
combobox1.grid(row=2, column=0, padx =15, pady=5)
combobox1.current(0)
@@ -45,7 +41,6 @@
combobox3.grid(row=2, column=2, padx =15, pady=5)
combobox3.current(0)
-
style = ttk.Style()
style.theme_create('combostyle', parent='alt',settings = {'TCombobox':
{'configure':
@@ -60,7 +55,6 @@
ventana.option_add('*TCombobox*Listbox*selectBackground', 'green2')
ventana.option_add('*TCombobox*Listbox*selectForeground', 'black')
-
alarma = Label(ventana, fg = 'violet', bg='black', font = ('Radioland', 20))
alarma.grid(column=0, row=3, sticky="nsew", ipadx=5, ipady=20)
repetir = Label(ventana, fg = 'white', bg='black', text = 'Repetir', font='Arial')
@@ -69,8 +63,6 @@
cantidad.grid(row=3, column=2, padx =5, pady=5)
cantidad.current(0)
-
-
def obtener_tiempo():
x_hora = combobox1.get()
x_minutos = combobox2.get()
@@ -83,10 +75,8 @@ def obtener_tiempo():
hora_total = (hora + ' : '+ minutos+ ' : '+ segundos)
texto_hora.config(text=hora_total, font = ('Radioland', 25))
-
hora_alarma = x_hora +' : '+ x_minutos +' : '+ x_segundos
alarma['text']= hora_alarma
-
#condicion:
if int(hora) == int(x_hora):
if int(minutos) == int(x_minutos):
@@ -96,11 +86,8 @@ def obtener_tiempo():
messagebox.showinfo(message=hora_alarma, title="Alarma")
texto_hora.after(100, obtener_tiempo)
-
-
texto_hora = Label(ventana, fg = 'green2', bg='black')
texto_hora.grid(columnspan=3, row=0,sticky="nsew", ipadx=5, ipady=20)
-
obtener_tiempo()
ventana.mainloop()
From 76889cb4afb5f0345531135817cce09a4adc6749 Mon Sep 17 00:00:00 2001
From: MagnoEfren <58579707+MagnoEfren@users.noreply.github.com>
Date: Wed, 21 Dec 2022 12:34:23 -0500
Subject: [PATCH 043/124] Update main.py
---
Bloc de Notas/main.py | 14 ++------------
1 file changed, 2 insertions(+), 12 deletions(-)
diff --git a/Bloc de Notas/main.py b/Bloc de Notas/main.py
index 30e0a38..4d3ce8c 100644
--- a/Bloc de Notas/main.py
+++ b/Bloc de Notas/main.py
@@ -27,11 +27,10 @@ def __init__(self, master):
self.widgets()
self.master.columnconfigure(0, weight=1)
self.master.rowconfigure(0, weight=1)
-
+
def widgets(self):
menu = Menu(self.master)
self.master.config(menu = menu)
-
archivo = Menu(menu, tearoff=0)
archivo.add_command(label="Nuevo", command = self.nueva_ventana)
archivo.add_command(label="Ventana Nueva", command = self.segunda_ventana)
@@ -39,11 +38,9 @@ def widgets(self):
archivo.add_command(label="Guardar", command = self.guardar_archivo)
archivo.add_separator()
archivo.add_command(label="Salir", command = self.master.quit)
-
edicion = Menu(menu, tearoff=0)
edicion.add_command(label="Deshacer", command = lambda: self.texto.edit_undo())
- edicion.add_separator()
-
+ edicion.add_separator()
edicion.add_command(label="Cortar", accelerator='Ctrl+X',
command = lambda: self.master.focus_get().event_generate("<>") )
@@ -53,33 +50,27 @@ def widgets(self):
command = lambda: self.master.focus_get().event_generate("<>"))
edicion.add_command(label="Eliminar", accelerator= 'Supr',
command = lambda: self.master.focus_get().event_generate("<>"))
-
formato = Menu(menu, tearoff=0)
formato.add_checkbutton(label="Ajustes de linea", variable = self.señal_ajustes, command= self.ajustes_de_linea)
formato.add_command(label="Fuente", command= self.formato_fuente)
formato.add_command(label="Color de texto", command= self.elegir_color_texto)
formato.add_command(label="Color de fondo", command= self.elegir_color_fondo)
-
ver = Menu(menu, tearoff=0)
submenu = Menu(menu, tearoff=0)
submenu.add_command(label="Acercar", command= self.zoom_mas)
submenu.add_command(label="Alejar", command= self.zoom_menos)
submenu.add_command(label="Restaurar Zoom", command= lambda: self.texto.config(font= (self.f, 12)))
-
ver.add_cascade(label="Zoom", menu = submenu)
ver.add_checkbutton(label="Barra de estado", variable = self.info_estado, command = self.barra_de_estado)
-
ayuda = Menu(menu, tearoff=0)
ayuda.add_command(label="Ver la ayuda")
ayuda.add_separator()
ayuda.add_command(label="Acerca del Bloc de notas", command= self.acerca_de)
-
menu.add_cascade(label="Archivo", menu=archivo)
menu.add_cascade(label="Edicion", menu=edicion)
menu.add_cascade(label="Formato", menu=formato)
menu.add_cascade(label="Ver", menu=ver)
menu.add_cascade(label="Ayuda", menu=ayuda)
-
self.texto = Text(self.master, font= ('Arial', 12), undo= True, insertbackground='red')
self.texto.grid(column=0, row=0, sticky='nsew')
ladox = Scrollbar(self.master, orient = 'horizontal', command= self.texto.xview)
@@ -88,7 +79,6 @@ def widgets(self):
ladoy.grid(column = 1, row = 0, sticky='ns')
self.texto.configure(xscrollcommand = ladox.set, yscrollcommand = ladoy.set)
self.barra_estado = Label(self.master, font = ('Segoe UI Symbol', 10))
-
#eventos
self.master.bind('', self.salir)
From 54f4c6668e9ce1e6b5805de16000fc58af39af9c Mon Sep 17 00:00:00 2001
From: MagnoEfren <58579707+MagnoEfren@users.noreply.github.com>
Date: Tue, 31 Jan 2023 14:46:51 -0500
Subject: [PATCH 044/124] Update cronometro_v2.py
---
Cronometro/cronometro_v2.py | 8 --------
1 file changed, 8 deletions(-)
diff --git a/Cronometro/cronometro_v2.py b/Cronometro/cronometro_v2.py
index 6ecce6c..e81aa69 100644
--- a/Cronometro/cronometro_v2.py
+++ b/Cronometro/cronometro_v2.py
@@ -3,7 +3,6 @@
# Youtube: https://www.youtube.com/c/MagnoEfren
from tkinter import Canvas, Button, Frame, Label,Tk
-
ventana = Tk()
ventana.config(bg='black')
ventana.geometry('500x250')
@@ -38,7 +37,6 @@
frame5.columnconfigure(0, weight=1)
frame5.rowconfigure(0, weight=1)
-
canvas1= Canvas(frame1, bg='gray40', width=200, height =200,highlightthickness=0)
canvas1.grid(column=0,row=0, sticky='nsew')
canvas2= Canvas(frame2, bg='gray30', width=200, height =200,highlightthickness=0)
@@ -46,7 +44,6 @@
canvas3= Canvas(frame3, bg='gray20', width=200, height =200,highlightthickness=0)
canvas3.grid(column=0,row=0, sticky='nsew')
-
texto1 = canvas1.create_text(1,1, text='0', font=('Arial',12,'bold'), fill= 'White')
texto2 = canvas2.create_text(1,1, text='0', font=('Arial',12,'bold'), fill= 'White')
texto3 = canvas3.create_text(1,1, text='0', font=('Arial',12,'bold'), fill= 'White')
@@ -69,7 +66,6 @@
click_lectura = 0
clik_stop = 0
clik_inicio =0
-
def iniciar_pausar():
global mi, se, ml, contar, clik_stop, clik_inicio
ml = ml + 1
@@ -84,7 +80,6 @@ def iniciar_pausar():
if clik_inicio is None:
stop.grid(column=0, row=0, padx =10, pady=10, sticky='nsew')
stop.config(bg= 'orange', text= 'DETENER')
-
def stop_boton():
global contar, clik_stop
clik_stop = stop.grid_forget()
@@ -92,7 +87,6 @@ def stop_boton():
inicio.grid(column=0, row=0, padx =10, pady=10, sticky='nsew')
inicio.config(bg= 'aqua', text='CONTINUAR')
inicio.after_cancel(contar)
-
def vueltas():
global mi, se, ml,click_lectura
@@ -116,7 +110,6 @@ def vueltas():
lectura6.config(text='{} → {}:{}:{}'.format(click_lectura, mi,se,ml),
fg = 'white', bg='gray10')
click_lectura = 0
-
def reiniciar():
global mi, se, ml, contar, click_lectura
mi = 0
@@ -133,7 +126,6 @@ def reiniciar():
stop.grid_forget()
inicio.grid(column=0, row=0, padx =10, pady=10, sticky='nsew')
inicio.config(bg= 'green2', text='INICIAR')
-
def coordenadas():
x = canvas1.winfo_width()
y = canvas1.winfo_height()
From c06c3167964fb8b73552e781af61d82ee1877c99 Mon Sep 17 00:00:00 2001
From: MagnoEfren <58579707+MagnoEfren@users.noreply.github.com>
Date: Mon, 6 Feb 2023 20:17:35 -0500
Subject: [PATCH 045/124] Add files via upload
---
GUI API OpenAI/assets/icon.png | Bin 0 -> 2567 bytes
GUI API OpenAI/assets/save.png | Bin 0 -> 714 bytes
GUI API OpenAI/assets/send.png | Bin 0 -> 905 bytes
GUI API OpenAI/main.py | 91 +++++++++++++++++++++++++++++++++
4 files changed, 91 insertions(+)
create mode 100644 GUI API OpenAI/assets/icon.png
create mode 100644 GUI API OpenAI/assets/save.png
create mode 100644 GUI API OpenAI/assets/send.png
create mode 100644 GUI API OpenAI/main.py
diff --git a/GUI API OpenAI/assets/icon.png b/GUI API OpenAI/assets/icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..36d8030cef0b70a709ff7ddc525454c6140da30a
GIT binary patch
literal 2567
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
literal 0
HcmV?d00001
diff --git a/GUI API OpenAI/assets/save.png b/GUI API OpenAI/assets/save.png
new file mode 100644
index 0000000000000000000000000000000000000000..6aff5ab0d2222ac42c57df826d46cfbeb01f2c5a
GIT binary patch
literal 714
zcmV;*0yX`KP)R^
zucAmuNMym_N@NuebM*%(-a_=2TgXkkxHD5#Uff;XuE}=Hj(N}w^vAqcuc~^6(1y{M
z%Ne=HAPrDl1(3Jywb1}LfZ~nR^%I1f->pq#9)0`iibwtt!0HJ}+wiSse;eV(;rxOb
z)p@3ufGmp~09GBwTR(w2^9zv!7hiwA4#nOQ$!BCvuKftNzWzBEIgmBHMlG2+EtF{u
z!0`fBm@X)^69EKVnxBguU;#Q3VAXsizzGA|O$tD=Sb(nqrH)cyyf#jO#45W)oB{^U
zvhCWW3oZLPpzf!s(G9
zzzKkkiqMM7xQeB_PeIaE%q=^Yfs`V2!Z6yk4b|`GN)msH1D*w%rl2CC07a$H5rA`x
z4v?Y1_!gXm6AgD~MAdu%Q7=7iX!0#A#F)nLVl86X~x+Z#1$#Y
zlnc35eu_c}Ga`El
z`@JNEyuThGV%Srm^d16R0R{=Q3ve93se$-^EkGpRQ>R7tkb2`!UEU_pERb7+dHq=c
zgDN8CN{TcS2n&Cf2uV`s4k_h(0I+5-iIM^=Hdv8Y<|e}0PsogZu;LYf
zwL@tY6`=lD_qb7c*^v`#Hz3smP&z2GE*^i?T)1Aqh6oIRWhA<67G|E^S1Ft^y~9-o6;1rTs!{#$@>+*}V>rwL4O(VK&C
zcRCt45A@!6U7xMX04BLL|1AJ0l@R7#^mTx;HWdrp>s#o`nCB=GD#jcDRN+hNi2p(=
z7MLtrO%uUhfOi07f5`~6YwZcAj`)9=hZE*LQnnOp4!Afd;ghTs+ghqcmJ2v$l+HHY
zH>x^+)LZRk5PbvgNBVjy7Fg{%z))C}u%mvG>U-_d-nzNOno+Saw!l{ZTB~mX7(GY@a>R&8`$3
zVDj|fCjz?foht8$*Y~DBudSsz^C%WfrlNtlqNIU>OXxi-Rw1vXDF_?p0`ag$YtZrX
z*^|Q+AKdiSo#+@{X^Rw&aY_FJ0`(DaYP?FlOds~UG6#BhrT
Date: Sun, 12 Feb 2023 20:09:38 -0500
Subject: [PATCH 046/124] Update cronometro_v2.py
---
Cronometro/cronometro_v2.py | 2 --
1 file changed, 2 deletions(-)
diff --git a/Cronometro/cronometro_v2.py b/Cronometro/cronometro_v2.py
index e81aa69..295e2a1 100644
--- a/Cronometro/cronometro_v2.py
+++ b/Cronometro/cronometro_v2.py
@@ -10,8 +10,6 @@
ventana.minsize(width=500, height=250)
ventana.columnconfigure([0,1,2],weight=2)
-#ventana.columnconfigure(1, weight=2)
-#ventana.columnconfigure(2,weight=2)
ventana.rowconfigure(0, weight=2)
ventana.rowconfigure(1,weight=1)
From df538d02f9a2411ee262b623499589d71b793e97 Mon Sep 17 00:00:00 2001
From: MagnoEfren <58579707+MagnoEfren@users.noreply.github.com>
Date: Sun, 5 Mar 2023 10:10:09 -0500
Subject: [PATCH 047/124] Update grafica_matplotlib_scale.py
---
.../grafica_matplotlib_scale.py | 9 ---------
1 file changed, 9 deletions(-)
diff --git a/Tkinter y Matplotlib Grafica Seno - Slider/grafica_matplotlib_scale.py b/Tkinter y Matplotlib Grafica Seno - Slider/grafica_matplotlib_scale.py
index 55f8144..e87187e 100644
--- a/Tkinter y Matplotlib Grafica Seno - Slider/grafica_matplotlib_scale.py
+++ b/Tkinter y Matplotlib Grafica Seno - Slider/grafica_matplotlib_scale.py
@@ -7,7 +7,6 @@
import numpy as np
import matplotlib.pyplot as plt
-
fig, ax = plt.subplots(dpi=90, figsize=(7,5),facecolor='#00faafb7')
plt.title("Grafica en Tkinter con Matplotlib",color='red',size=16, family="Arial")
@@ -18,29 +17,22 @@
ax.axhline(linewidth=2, color='r')
ax.axvline(linewidth=2, color='r')
-
ax.set_xlabel("Eje Horizontal", color='black')
ax.set_ylabel("Eje Vertical", color='black')
ax.tick_params(direction='out', length=6, width=2,
colors='black',
grid_color='r', grid_alpha=0.5)
-
def graficar_datos():
nivel = scale.get()
x = np.arange(-np.pi, 4*np.pi, 0.01)
-
line, = ax.plot(x, nivel*np.sin(x),
color ='b', linestyle='solid')
canvas.draw()
-
label.config(text= nivel)
-
line.set_ydata(np.sin(x)+10)
-
ventana.after(100, graficar_datos)
-
ventana = Tk()
ventana.geometry('642x498')
ventana.wm_title('Grafica Matplotlib con Scale')
@@ -61,6 +53,5 @@ def graficar_datos():
style = ttk.Style()
style.configure("Horizontal.TScale", background= 'gray22')
-
ventana.mainloop()
From 2160fe77427bd864e8ea7cc0dfc18e49958b3233 Mon Sep 17 00:00:00 2001
From: MagnoEfren <58579707+MagnoEfren@users.noreply.github.com>
Date: Fri, 24 Mar 2023 11:38:24 -0500
Subject: [PATCH 048/124] Add files via upload
---
FlappyBird/audio/die.wav | Bin 0 -> 194894 bytes
FlappyBird/audio/hit.wav | Bin 0 -> 96590 bytes
FlappyBird/audio/point.wav | Bin 0 -> 177486 bytes
FlappyBird/audio/swoosh.wav | Bin 0 -> 354638 bytes
FlappyBird/audio/wing.wav | Bin 0 -> 29902 bytes
FlappyBird/images/bird.png | Bin 0 -> 7366 bytes
FlappyBird/images/pipe.png | Bin 0 -> 70544 bytes
FlappyBird/images/reiniciar.png | Bin 0 -> 1919 bytes
FlappyBird/main.py | 129 ++++++++++++++++++++++++++++++++
9 files changed, 129 insertions(+)
create mode 100644 FlappyBird/audio/die.wav
create mode 100644 FlappyBird/audio/hit.wav
create mode 100644 FlappyBird/audio/point.wav
create mode 100644 FlappyBird/audio/swoosh.wav
create mode 100644 FlappyBird/audio/wing.wav
create mode 100644 FlappyBird/images/bird.png
create mode 100644 FlappyBird/images/pipe.png
create mode 100644 FlappyBird/images/reiniciar.png
create mode 100644 FlappyBird/main.py
diff --git a/FlappyBird/audio/die.wav b/FlappyBird/audio/die.wav
new file mode 100644
index 0000000000000000000000000000000000000000..9b79fbda17f2f88d13603c64fd597231f12012e3
GIT binary patch
literal 194894
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