def process(): global a_mat global topfr global boardlist global blist global status global model l = np.where(a_mat.reshape(-1)==0)[0] #print('pl',l) val, pos = pick(l) a_mat[int(pos/4)][pos%4] = val boardlist[int(pos/4)][pos%4] = Button(topfr,text=(val),bg=bgcol[num.index(val)],fg=fgcol[num.index(val)],font=helv36) coor = [60+50*(pos%4),60 + 50*(int(pos/4))] boardlist[int(pos/4)][pos%4].place(x=coor[0],y=coor[1]) boardlist[int(pos/4)][pos%4].config(width=4, height=2) print(a_mat,'\n') tot = 0 l = logic2048.check(a_mat) stlist = ['up','down','right','left'] for st in stlist: s = len(l[st]) for bt in blist: if bt['text'] == st: if s <= 0: bt['bg'] = 'slate gray' tot += 1 else: bt['bg'] = 'black' if tot!=4: None #root.after(12,process2) else: alpha = 0.21 gamma = 0.9 reward = -1 asc = np.log(a_mat+1).reshape(1,4,4,1) val0 = model.predict(asc) model.fit(asc,(1-alpha)*val0+alpha*(reward+gamma*val0),epochs = 3) close()
def right(): global a_mat global boardlist global root global num global status global timedelay status.destroy() m = -1 l = logic2048.check(a_mat) s = l['right'] if len(s) <= 0: status = Label(root, text = 'Error',bd=1,relief=SUNKEN,anchor=W,font=helv12) status.pack(side=BOTTOM,fill=X) return status.destroy() for j in list(s): i = 2 init = 0 m = -2 while i >= 0: if i<3 and a_mat[j,i+1] == 0: init += 1 if a_mat[j,i]!= 0 and init!=0: p = 1 ia = [i for i in range(0,i+1)] ep = init for temp in ia: pos = j*4 + temp if (boardlist[int(pos/4)][pos%4] != 0): coor = [60+50*(pos%4)+ p*ep*50,60 + 50*(int(pos/4)) ] boardlist[int(pos/4)][pos%4].place(x=coor[0],y=coor[1]) a_mat[ j,ep :i + ep +1] = a_mat[j,0:i+1] a_mat[j,0: ep] = 0 for k in range(i,-1,-1): boardlist[j][k+ep] = boardlist[j][k] for lf in range(0, ep): boardlist[j][lf] = 0 i = i + ep +1 init = 0 elif i<3 and a_mat[j,i] != 0 and a_mat[j,i+1]==a_mat[j,i] and i!=m: init = 0 ep = 1 p = 1 a_mat[ j,ep :i + ep +1 ] = a_mat[j,0:i+1] a_mat[j,0: ep] = 0 a_mat[j,i+1] *= 2 ia = [i for i in range(0,i+1)] boardlist[j][i+1].destroy() for temp in ia: pos = 4*j + temp if (boardlist[int(pos/4)][pos%4] != 0): coor = [60+50*(pos%4)+ p*ep*50, 60 + 50*(int(pos/4)) ] boardlist[int(pos/4)][pos%4].place(x=coor[0],y=coor[1]) for k in range(i,-1,-1): boardlist[j][k+ep] = boardlist[j][k] for lf in range(0, ep): boardlist[j][lf] = 0 boardlist[j][i+1]['text'] = str(int(a_mat[j,i+1])) boardlist[j][i+1]['bg'] = bgcol[num.index(int(a_mat[j,i+1]))] boardlist[j][i+1]['fg'] = fgcol[num.index(int(a_mat[j,i+1]))] m = i i = i - 1 print('Right') root.after(timedelay,process)
def left(): global a_mat global boardlist global root global num global status global timedelay m = -1 l = logic2048.check(a_mat) s = l['left'] status.destroy() if len(s) <= 0: status = Label(root, text = 'Error',bd=1,relief=SUNKEN,anchor=W,font=helv12) status.pack(side=BOTTOM,fill=X) return status.destroy() for j in list(s): i = 1 init = 0 m = -2 while i<4: if i>0 and a_mat[j,i-1]==0: init = init + 1 if a_mat[j,i] != 0 and init != 0: p = 1 ia = [i for i in range(i,4)] ep = init for temp in ia: pos = j*4 + temp if (boardlist[int(pos/4)][pos%4] != 0): coor = [60+50*(pos%4) - p*ep*50, 60 + 50*(int(pos/4)) ] boardlist[int(pos/4)][pos%4].place(x=coor[0],y=coor[1]) a_mat[j,i-ep :4 - ep] = a_mat[j,i:4] a_mat[j,4 - ep:4] = 0 l = len(ia) for k in range(i-ep,4-ep): boardlist[j][k] = boardlist[j][k+ep] for lf in range(4-ep,4): boardlist[j][lf] = 0 i = i - init - 1 init = 0 elif i>0 and a_mat[j,i] != 0 and a_mat[j,i-1]==a_mat[j,i] and i!=m: ia = [i for i in range(i,4)] p = 1 ep = 1 init = 0 for temp in ia: pos = j*4 + temp if (boardlist[int(pos/4)][pos%4] != 0): coor = [60+50*(pos%4)- p*ep*50, 60 + 50*(int(pos/4)) ] boardlist[int(pos/4)][pos%4].place(x=coor[0],y=coor[1]) a_mat[j,i-ep :4 - ep] = a_mat[j,i:4] a_mat[j,4 - ep:4] = 0 a_mat[j,i-1] *= 2 boardlist[j][i-1].destroy() for k in range(i-ep,4-ep): boardlist[j][k] = boardlist[j][k+ep] for lf in range(4-ep,4): boardlist[j][lf] = 0 boardlist[j][i-1]['text'] = str(int(a_mat[j,i-1])) boardlist[j][i-1]['bg']=bgcol[num.index(int(a_mat[j,i-1]))] boardlist[j][i-1]['fg']=fgcol[num.index(int(a_mat[j,i-1]))] m = i i = i+1 print('Left') root.after(timedelay,process)
def up(): global a_mat global boardlist global root global num global status global timedelay m = -1 p = 0 l = logic2048.check(a_mat) s = l['up'] status.destroy() if len(s) <= 0: status = Label(root, text = 'Error',bd=1,relief=SUNKEN,anchor=W,font=helv12) status.pack(side=BOTTOM,fill=X) return status.destroy() init = 0 i = 1 for j in list(s): i = 1 init = 0 m = -1 while i<4: if i>0 and a_mat[i-1,j]==0: init = init + 1 if a_mat[i,j] != 0 and init != 0: p = 1 ia = [i for i in range(i,4)] ep = init for temp in ia: pos = temp*4 + j if (boardlist[int(pos/4)][pos%4] != 0): coor = [60+50*(pos%4),60 + 50*(int(pos/4)) - p*ep*50] boardlist[int(pos/4)][pos%4].place(x=coor[0],y=coor[1]) a_mat[i-ep:i - ep + len(ia),j] = a_mat[i:4,j] a_mat[i - ep + len(ia):4,j] = 0 l = len(ia) for lp in range(1,init+1): for k in range(i-lp,i-lp+l): boardlist[k][j] = boardlist[k+1][j] for lf in range(i - init + l,4): boardlist[lf][j] = 0 i = i - init - 1 init = 0 elif i>0 and a_mat[i][j] != 0 and a_mat[i-1][j]==a_mat[i][j] and i!=m: ia = [i for i in range(i,4)] l = len(ia) p = 1 ep = 1 for temp in ia: pos = temp*4 + j if (boardlist[int(pos/4)][pos%4] != 0): coor = [60+50*(pos%4),60 + 50*(int(pos/4)) - p*ep*50] boardlist[int(pos/4)][pos%4].place(x=coor[0],y=coor[1]) a_mat[i-ep:i - ep + len(ia),j] = a_mat[i:4,j] a_mat[i - ep + len(ia):4,j] = 0 a_mat[i-1,j] *= 2 boardlist[i-1][j].destroy() for lp in range(1,2): for k in range(i-lp,i-lp+l): boardlist[k][j] = boardlist[k+1][j] for lf in range(i - 1 + l,4): boardlist[lf][j] = 0 boardlist[i-1][j]['text'] = str(int(a_mat[i-1,j])) boardlist[i-1][j]['bg']=bgcol[num.index(int(a_mat[i-1,j]))] boardlist[i-1][j]['fg']=fgcol[num.index(int(a_mat[i-1,j]))] m = i i += 1 print('UP') root.after(timedelay,process)