How can I get one percent for 3 different values?

Question:

I have this code and it’s supposed to be a color picking game where you can edit different rgb values with the keys:"asd" and "jkl". I want it to give points based on time and accuracy and stuff but I also want a meter to tell you how close you are to the given color. So if the color is 50,50,50, you should be able to see a percent value for how close you are. So if the color is 51,51,51 it would be like 98% but if the color is 255,255,255 its like 10%. Is this even possible? My current setup is percent = (r/50)+(g/50)+(b/50) ( assuming the color is 50,50,50) but it doesn’t work at all.

import pygame,sys,time,random
pygame.init()


playerx = 0
playery = 0
sizex=500
sizey=200

r = 255
g = 0
b = 0
color = (r,g,b)
speed = 1
sleep=0.01
col1=random.randint(0,255)
col2=random.randint(0,255)
col3=random.randint(0,255)
win = pygame.display.set_mode((500,500))
pygame.display.set_caption("Hello World")
pygame.draw.rect(win, (50,50,50), pygame.Rect(0, 300, sizex, sizey))#do the culoro with col1 and stuff

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_RETURN:
                
                percent = (r/50)+(g/50)+(b/50)
                print(percent)
        #if event.type == pygame.KEYDOWN:



    #win.fill((255,255,255))
    
    pygame.draw.rect(win, color, pygame.Rect(playerx, playery, sizex, sizey))

    #pygame.draw.rect(win, (0,255,255), pygame.Rect(playerx, playery, sizex/5, sizey/5))
    keys = pygame.key.get_pressed()
   


    





    
        
    if  r  +speed <=255 and keys[pygame.K_a]:
        #print("this should be working")
        r+=speed
        color=(r,g,b)
        time.sleep(sleep)
    if keys[pygame.K_s] and g + speed <=255:
        g+=speed
        color=(r,g,b)
        time.sleep(sleep)
    if keys[pygame.K_d] and b +speed<=255:
        b+=speed
        color=(r,g,b)
        time.sleep(sleep)
    if keys[pygame.K_j] and r  - speed >=0:
        r-=speed
        color=(r,g,b)
        time.sleep(sleep)
    if keys[pygame.K_k]and g -speed >=0:
        g-=speed
        color=(r,g,b)
        time.sleep(sleep)
    if keys[pygame.K_l] and b -speed>=0:
        b-=speed
        color=(r,g,b)
        time.sleep(sleep)
    

    

    #time.sleep(0.2)
    pygame.display.update()

Asked By: ImBadAtMath

||

Answers:

Something like this will give you a metric by which you can measure the accuracy of a guess across all three colour channels.

guess = [50, 36, 120]
answer = [83, 21, 187]

accuracy = 0
for channel in range(3):
   accuracy += abs(answer[channel]-guess[channel])
accuracy /= 3*2.55

print(f"Accuracy: {100-accuracy}%")

Note the 100- that turns the measure of inaccuracy into a measure of accuracy.

Answered By: Ari Cooper-Davis
Categories: questions Tags: , , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.