In addition to a previous posting an improved version of the heatmap sourcecode is given. The sourcecode was formatted in the HTML mode with the "pre" tag.
import pygame class Game: def __init__(self): self.pygamewindow = pygame.display.set_mode((700, 350), pygame.HWSURFACE | pygame.DOUBLEBUF) self.fps=5 # 20 for i in range(1000000): self.pygamewindow.fill(pygame.Color(255,255,255)) self.paintmap() pygame.display.update() pygame.time.wait(int(1000/self.fps)) def heatmapcolor(self,value): # value 0..1, returns colorcode (r,g,b) # init gradient gradient=[] # (value,r,g,b) gradient.append((0.0, 0,0,1)) # blue gradient.append((0.25, 0,1,1)) # cyan gradient.append((0.5, 0,1,0)) # green gradient.append((0.75, 1,1,0)) # yellow gradient.append((1.0, 1,0,0)) # red gradient.append((1.0, 1,0,0)) # red extra # search base color for baseid in range(len(gradient)): diff=value-gradient[baseid][0] if diff>=0 and diff<0.25: break # relative color relvalue=(value-gradient[baseid][0])*1/0.25 color=[] # (r,g,b) for i in range(1,4): temp=(gradient[baseid+1][i]-gradient[baseid][i])*relvalue # get difference temp=(temp+gradient[baseid][i])*255 # convert to 255 scale temp=int(round(temp)) # round color.append(temp) return color def paintmap(self): width=pygame.display.get_surface().get_width() grid_width,grid_height=20,300 maxstep=int(round(width/grid_width)) for i in range(maxstep): value=i/maxstep # 0..1 temp=self.heatmapcolor(value) col=pygame.Color(temp[0],temp[1],temp[2]) x=0+i*grid_width pygame.draw.rect(self.pygamewindow, col, (x,0,grid_width,grid_height)) mygame=Game()The advantage is, that the resolution can be adjusted easily to reduce the gridwidth.
No comments:
Post a Comment