from time import sleep from kandinsky import * from math import log from random import * from ion import * _1=[1,1,0,0,1,0,0,1,0,0,1,0,1,1,1] _2=[1,1,1,0,0,1,1,1,1,1,0,0,1,1,1] _3=[1,1,1,0,0,1,1,1,1,0,0,1,1,1,1] _4=[1,0,1,1,0,1,1,1,1,0,0,1,0,0,1] _5=[1,1,1,1,0,0,1,1,1,0,0,1,1,1,1] _6=[1,1,1,1,0,0,1,1,1,1,0,1,1,1,1] _7=[1,1,1,0,0,1,0,1,1,0,0,1,0,0,1] _8=[1,1,1,1,0,1,1,1,1,1,0,1,1,1,1] _9=[1,1,1,1,0,1,1,1,1,0,0,1,1,1,1] _0=[1,1,1,1,0,1,1,0,1,1,0,1,1,1,1] def draw(liste,x,y,t,color): k=0 for i in range(y,y+(5*t),t): for j in range(x,x+(3*t),t): if liste[k]:fill_rect(j,i,t,t,color) k+=1 def draw_chiffre(n,x,y,t,color=(0,0,0),inutile=0): num,a=[_0,_1,_2,_3,_4,_5,_6,_7,_8,_9],0 for i in n:draw(num[int(i)],x+a,y,t,color);a+=4*t def t2048(tab): fill_rect(0,0,320,222,(255,255,255)) for i in range(9): fill_rect(i*25+60,22,1,200,(0,0,0)) for i in range(9): fill_rect(60,i*25+22,200,1,(0,0,0)) for i in range(8): for k in range(8): x=tab[k][i] if x<10:dec=7;t=2 elif x<100:dec=4;t=2 elif x<1000:dec=1;t=2 elif x<10000:dec=4;t=1 else:dec=1;t=1 if x>0: col=(max(0,255-51*(int(log(x,2))-1)),255,max(0,int(log(x,2)-1)*51-255)) fill_rect(61+i*25,23+k*25,24,24,col) draw_chiffre(str(x),61+i*25+dec,29+((t%2)*3)+k*25,t,(0,0,0),col) def chknum(n,tab): lst=[] for i in range(8): for k in range(8): if n==tab[i][k]:lst.append([i,k]) return lst def p2048(tab=[[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0]]): score=0 tab[randint(0,7)][randint(0,7)]=2 canspawn=True while True: if canspawn or tr: new=choice(chknum(0,tab)) tab[new[0]][new[1]]=2*randint(1,2) canmove=0 act=[0,0] t2048(tab) for i in range(8): for k in range(8): if act[0]==tab[i][k] or act[1]==tab[k][i] or tab[i][k]==0:canmove=1 act=[tab[i][k],tab[k][i]] act=[0,0] if not canmove:break col=(max(0,150-30*(int(log(score+0.01,2)*0.77))),150,max(0,int(log(score+0.01,2)*0.77)*30-150)) draw_string(str(score),1,1,col) while not (keydown(KEY_OK) or keydown(0) or keydown(1) or keydown(2) or keydown(3)):1 moved=[] tr=False if keydown(KEY_OK): while keydown(KEY_OK):pass a=str(input("Pause")) if keydown(1) or keydown(2):#up/down if keydown(1): key=1 key2=0 else: key=-1 key2=-1 for k in range(8): act=[0,-1] for i in range(0-7*key2,8+9*key2,key): if tab[i][k]==act[0] and not act[0]==0: tab[act[1]][k]=0 tab[i][k]=act[0]*2 score=score+act[0]*2 tr=True act=[0,-1] else: if not tab[i][k]==0:act=[tab[i][k],i] for z in range(7): for i in range(7+7*key2,0-7*key2,-key): if tab[i-key][k]==0 and not tab[i][k]==0: tab[i-key][k]=tab[i][k] tab[i][k]=0 moved.append([i,k]) if keydown(0) or keydown(3):#left/right if keydown(0): key=1 key2=0 else: key=-1 key2=-1 for i in range(8): act=[0,-1] for k in range(0-7*key2,8+9*key2,key): if tab[i][k]==act[0] and not act[0]==0: tab[i][act[1]]=0 tab[i][k]=act[0]*2 score=score+act[0]*2 tr=True act=[0,-1] else: if not tab[i][k]==0:act=[tab[i][k],k] for z in range(7): for k in range(7+7*key2,0-7*key2,-key): if tab[i][k-key]==0 and not tab[i][k]==0: tab[i][k-key]=tab[i][k] tab[i][k]=0 moved.append([i,k]) while keydown(KEY_OK) or keydown(0) or keydown(1) or keydown(2) or keydown(3):1 if len(moved)==0:canspawn=False else:canspawn=True draw_string(str(score),1,1,(255,0,0)) draw_string("Game over",114,1) print("Score:"+str(score)) p2048()