求助!编程2048时遇到错误,上网搜也搜不到怎么改。
程序代码:
import pygame,time,sys,threading,random from pygame.locals import* size=4 length=130 score_h=130 Default=(205,193,180) CFont=(120,111,102) C2=(238,228,218) C4=(237,224,200) C8=(242,177,121) C16=(245,149,99) C32=(246,124,95) C64=(246,94,59) C128=(237,207,114) C256=(237,204,98) C512=(237,200,80) C1024=(237,197,63) C2048=(225,187,0) def get_color(n): n_t=0 for i in range(1,12): if n >>i==1: n_t=i color=[Default,C2,C4,C8,C16,C32,C64,C128,C256,C512,C1024,C2048,CFont] return color[n_t] class Map: def __init__(self,size): self.size=size self.map=[[0 for i in range(size)]for i in range(size)] self.score=0 self.is_move=0 self.add() self.add() def add(self): while True: pos=random.randint(0,self.size*self.size-1) flag=self.map[pos//self.size][pos%self.size] if flag==0: num=random.randint(0,3) n=2 if num==0: n=4 self.map[pos//self.size][pos%self.size]=n self.score+=n break def failed(self): for i in self.map: for j in i: if j==0: return False for i in range(0,self.size): for j in range(0,self.size): if (i-1 >=0 and self.map[i][j]==self.map[i-1][j])or(j-1>=0 and self.map[i][j]==self.map[i][j-1])or(j+1 <self.size and self.map[i][j]==self.map[i+1][j])or(i-1 >=0 and self.map[i][j]==self.map[i][j+1]): return False return True def check(self,num): for i in self.map: for j in i: if j==num: return True return False def movetoleft(self): changed=False for a in self.map: b=[] last=0 for v in a: if v!=0: if v!=last: b.append(v) last=v else: b.append(b.pop()*2) last=0 b+=[0]*(self.size-len(b)) for i in range(0,self.size): if a[i]!=b[i]: changed=True a[:]=b return changed def change(self): self.map=[[self.map[i][j]for i in reversed(range(self.size))]for j in range(self.size)] def moveleft(self): if self.movetoleft(): self.is_move=1 self.add() def moveup(self): self.change() self.change() self.change() if self.movetoleft(): self.is_move=1 self.add() self.change() def moveright(self): self.change() self.change() if self.movetoleft(): self.is_move=1 self.add() self.change() self.change() def movedown(self): self.change() if self.movetoleft(): self.is_move=1 self.add() self.change() self.change() self.change() def display(map,screen): block_font=pygame.font.Font(None,86) score_font=pygame.font.Font(None,86) screen.fill(Default) for i in range(map.size): for j in range(map.size): block = pygame.Surface((length,length)) block.fill(get_color(map.map[i][j])) font_surf=block_font.render(str(map.map[i][j]),True,CFont) font_rect=font_surf.get_rect() font_rect.center(j*length+length/2,length*i+length/2) screen.blit(block,(j*length,i*length)) if map.map[i][j]!=0: screen.blit(font_surf,font_rect) score_surf=score_font.render('Score:'+str(map.score),True,CFont) score_rect=score_surf.get_rect() score_rect.center=(length*size/2,length*size+score_h/2) screen.blit(score_surf,score_font) pygame.display.update() def main(): pygame.init() screen=pygame.display.set_mode((length*size,length*size+score_h)) pygame.display.set_caption('2048') colck = pygame.time.Clock() map=Map(size) display(map,screen) while not map.failed(): colck.tick(5) for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() elif event.type == pygame.KEYDOWN: keys=pygame.key.get_pressed() map.is_move=0 if keys[K_UP]: map.moveup() elif keys[K_DOWN]: map.movedown() elif keys[K_RIGHT]: map.moveright() elif keys[K_LEFT]: map.moveleft() elif event.type==KEYUP: t=threading.Thread(target=display,arms=(map.screen)) t.setDaemon(True) t.start() if map.is_move==1: if map.check(2048): break time.sleep(0.01) result='You Failed!' if map.check(2048): result='You Win!' screen.fill(Default) map_font=pygame.font.Font(None,86) font_surf=map_font.render(resuult,True,CFont) font_rect=font_surf.get_rect() font_rect.center=(size*length/2,size*length/2) screen.blit(font_surf,font_rect) pygame.display.update() if __name__ == '__main__': main()
然后就一直提示TypeError: 'tuple' object is not callable
出错的地方就是加了下划线的那一段。
求大佬出手相助。