mercredi 16 octobre 2019

Recomedations on agar-like game using pygame [on hold]

The following code seems to make pygame to fail every time it runs. It will run properly, but if tried for a second time, message is:

  Le noyau semble planté. Il va redémarrer automatiquement.

The code has some basic functions: 1. it moves the principal body based on the position of mouse pointer. 2. It enables to split up to sixteen parts. 3. every part grows as food is eaten 4. bigger parts lose weight faster.

Also working on:

  1. Reuniting cells, requires sabving info about split tree.
  2. adding multi-player. --.--
  3. fixing direction quality.

    pygame.init()

    ''' velocidades: lista de listas bidimensionales, velocidad y radio. '''

    screensize = (width,height)=(700,700) keys=pygame.key.get_pressed() center = (int(width/2),int(height/2)) run=True velocidades = [[0,0],[1,5],[10,10],[20,20],[5,10]] counter2=0 mouse=0 r = 10

    dt=0.1

    particles=[]

    for i in range(100): xo = random.randrange(width) yo = random.randrange(height) particles.append([xo,yo])

    Lista de las partes en que estará dividido el jugador. Debería empezar con una sola.

    x,y,vx,vy,a,radio,transparency=center[0],center[1],0,0,0,100,0 partes = [[x,y,vx,vy,a,radio,transparency]]

    screen = pygame.display.set_mode(screensize) myfont = pygame.font.SysFont('Comic Sans MS', 30)

    while run: pygame.time.delay(50) for event in pygame.event.get(): if event.type == pygame.QUIT: run=False #################################################################posición promedio y posición del mouse promedio = [0,0] mpos = pygame.mouse.get_pos() #################################################################Para crear nuevas partes '''

    '''
    if (event.type == pygame.MOUSEBUTTONDOWN):
        if mouse==0:
            mouse=1
    if (event.type == pygame.MOUSEBUTTONUP):
        if mouse == 1:
            counter2 = 1
            mouse=0
    
    if counter2 > 0:
        partes2=[]
        if len(partes)<16:
            for pt in partes:
                if pt[5]>=10:
                    partes2.append([pt[0],pt[1],30,0,0,pt[5]/2,1])
                    pt[5]=pt[5]/2
        for pa in partes2:
            partes.append(pa)
        if len(partes)>16:
            for i in range(len(partes)-16):
                n = random.randrange(len(partes2))
                del partes[-n]
        counter2=0
    

    partes2=[]

    for i in range(len(partes)):

    for j in range(len(partes)):

    if partes[i][0]==partes[j][0] and partes[i][1]==partes[j][1]:

    partes2.append(partes[i])

    partes2[-1][5]+=partes[j][5]

    break

    partes = partes2

    #################################################################distancia de la parte al mouse
    
    for pt in partes:
        mdis = ((mpos[0]-pt[0])**2+(mpos[1]-pt[1])**2)**(1/2)
        mvec = [mpos[0]-pt[0],mpos[1]-pt[1]]
        #############################################################velocidades en función de radio del mouse y la masa, estas deberían definirse arribe, y hay una variable sin usar : velocidades
        if mdis >0 and mdis <10:
            c = 0.1
        if mdis >=10:
            c = 1
        else:
            c=0
    
        if pt[2] > 0:
            pt[2]-=1
            pt[3]+=np.sign(mpos[0]-pt[0])*dt
            pt[4]+=np.sign(mpos[1]-pt[1])*dt
            pt[6]=1
        else:
            pt[3],pt[4],pt[6]=0,0,0
    
        pt[0]+=mdis*np.sign(mpos[0]-pt[0])*(1+pt[3])*(c)*dt*1/(pt[5])
        pt[1]+=mdis*np.sign(mpos[1]-pt[1])*(1+pt[3])*(c)*dt*1/(pt[5])
    
    
    
        #########################################################################################
    
    
        promedio[0]+=pt[0]/len(partes)
        promedio[1]+=pt[1]/len(partes)
    
    #################################################################vector para mandar promedio centro
    vector = [center[0]-promedio[0],center[1]-promedio[1]]
    #################################################################mueve partes a promedio
    for pt in partes:
        pt[0]+=vector[0]
        pt[1]+=vector[1]
        pt[5]+=(-pt[5]*dt**4)
        pygame.draw.circle(screen,(255,0,0),(int(pt[0]),int(pt[1])),int(pt[5]))
    #################################################################dibuja particulas
    for ob in particles:
        ob[0]+=vector[0]
        ob[1]+=vector[1]
        ########################################################### partículas alimentan partes
        for pt in partes:
            if (pt[0]-pt[5]/2)<ob[0]<(pt[0]+pt[5]/2) and (pt[1]-pt[5]/2)<ob[1]<(pt[1]+pt[5]/2):
                ob[0]=random.randrange(width)
                ob[1]=random.randrange(height)
                pt[5]+=1
        if ob[0]>width or ob[1]>height:
            ob[0]=random.randrange(width)
            ob[1]=random.randrange(height)
        pygame.draw.circle(screen,(255,0,0),(int(ob[0]),int(ob[1])),2)
    
    
    
    
    
        ####################################################3para borrar
    ######################e
    

    textsurface = myfont.render(str(len(partes)), False, (0, 100, 100))

    screen.blit(textsurface,(10,30))

    pygame.display.update()
    screen.fill((100,100,100))
    

    pygame.quit()

I can't see which part of the code makes pygame to 'collapse'.




Aucun commentaire:

Enregistrer un commentaire