from tkinter import * from random import randint from time import sleep,time from math import sqrt #creación da ventana alto = 500 ancho = 800 ventana = Tk() ventana.title('Cazarrás') debuxo=Canvas(ventana, width=ancho,height=alto,bg='green') debuxo.pack() #debuxo da serpe e centrado na pantalla id_serpe = debuxo.create_polygon(5,5,5,25,30,15,fill='red') id2_serpe = debuxo.create_line(5,15,-25,15,fill='red',width=2) serpe_r = 11 #o radio da cabeza da serpe aproximado CEN_X=ancho/2 CEN_Y=alto/2 debuxo.move(id_serpe,CEN_X,CEN_Y) debuxo.move(id2_serpe,CEN_X,CEN_Y) #movemento da serpe serpe_mov = 10 #distancia de movemento def mover_serpe(event): if event.keysym == 'Up': debuxo.move(id_serpe,0,-serpe_mov) debuxo.move(id2_serpe,0,-serpe_mov) if event.keysym == 'Down': debuxo.move(id_serpe,0,serpe_mov) debuxo.move(id2_serpe,0,serpe_mov) if event.keysym == 'Left': debuxo.move(id_serpe,-serpe_mov,0) debuxo.move(id2_serpe,-serpe_mov,0) if event.keysym == 'Right': debuxo.move(id_serpe,serpe_mov,0) debuxo.move(id2_serpe,serpe_mov,0) debuxo.bind_all('',mover_serpe) #rás #3 listas para as rás: identidade, lado e velocidade ra_id = list() ra_l = list() veloc_ra = list() #tamaño máximo e mínimo do lado das rás, da velocidade e do salto min_ra_l = 5 max_ra_l = 20 max_veloc_ra = 1 salto = 100 #non éstá utilizado, agás para borrar rás #crear unha rá def crear_ra(): x = randint(0,ancho) y = randint(0,alto) l = randint(min_ra_l,max_ra_l) id1 = debuxo.create_rectangle(x-l,y-l,x+l,y+l,outline='white',fill='darkgreen') ra_id.append(id1) ra_l.append(l) veloc_ra.append(randint(1,max_veloc_ra)) #mover a rá def mover_ra(): for i in range(len(ra_id)): debuxo.move(ra_id[i],-veloc_ra[i],0) #obter as coordenadas das rás def obter_coords(id_num): pos = debuxo.coords(id_num) x = (pos[0] + pos[2])/2 y = (pos[1] + pos[3])/2 return x,y #borrar rás def borrar_ra(i): del ra_l[i] del veloc_ra[i] debuxo.delete(ra_id[i]) del ra_id[i] #limpar ras fora da pantalla def limpar_ra(): for i in range(len(ra_id)-1,-1,-1): x,y = obter_coords(ra_id[i]) if x < -salto: borrar_ra(i) #distancia entre obxectos def distancia(id1,id2): x1,y1 = obter_coords(id1) x2,y2 = obter_coords(id2) return sqrt((x2-x1)**2 + (y2-y1)**2) #choque entre serpe e rá def colision(): puntos = 0 for ra in range(len(ra_id)-1,1,-1): if distancia(id_serpe, ra_id[ra]) < (serpe_r + ra_l[ra]): puntos += (ra_l[ra] + veloc_ra[ra])# alternativa: puntos += 1 borrar_ra(ra) return puntos #mostrar puntuación e tempo debuxo.create_text(50,30,text = 'TEMPO', fill='white') debuxo.create_text(150,30,text = 'PUNTOS', fill='white') texto_tempo = debuxo.create_text(50,50,fill='white') texto_puntos = debuxo.create_text(150,50,fill='white') def mostrar_puntos(puntos): debuxo.itemconfig(texto_puntos,text=str(puntos)) def mostrar_tempo(tempo_restante): debuxo.itemconfig(texto_tempo,text=str(tempo_restante)) #bucle principal: creación das rás ra_chance = 30 #variar este número delimita o nº de rás puntuacion = 0 tempo_limite=30 fin = time() + tempo_limite while time()