зделать игру 2048 на python Сделайте так, чтобы в игре велся подсчет очков, а после выигрыша или проигрыша количество набранных очков выводилось бы в ячейки.
if vis==vc and panduan()==False: # Если в каждом бите есть данные, а номер каждого элемента и смежные позиции не равны, игра будет выведена на интерфейс для завершения игры.
c1.create_oval(100,150,300,250,fill="#FF4500")
c1.create_text(200,200,text="игра закончена")
# Решите, можете ли вы продолжить операцию
def panduan ():
movex=[-1,1,0,0]
movey=[0,0,-1,1]
for i in range(4): # Оценить окружение каждого элемента
for j in range(4):
for l in range(4):
newx=int(i+movex[l])
newy=int(j+movey[l])
if (newx<0 or newx>3)or(newy<0 or newy>3):
continue
else:
if mp[i][j]==mp[newx][newy]:
return True
return False
#UP
def put_up():
init() # Инициализация, newmp, vis
for i in range(4): # Объединить, удалить сетку 0
l=0
for j in range(4):
if mp[j][i]==0:
continue
else:
newmp[l][i]=mp[j][i]
l+=1
for i in range(4): # Начиная со второго, сравнивать только с предыдущим числом, если оно равно, добавить его и сделать эту позицию равной 0
for j in range(1,4):
if newmp[j][i]==0:
break
else:
if newmp[j][i]==newmp[j-1][i]:
newmp[j-1][i]=newmp[j][i]+newmp[j-1][i]
newmp[j][i]=0
if newmp==mp: # Если после слияния вверх и добавления соседней позиции, такой же, как предыдущая без изменений, это означает, что направление не может быть изменено и выскочить напрямую
return
init_mp() # Инициализировать mp, объединить добавленное значение снова и передать его в mp
for i in range(4):
l=0
for j in range(4):
if newmp[j][i]==0:
continue
else:
mp[l][i]=newmp[j][i]
vis[l][i]=1
l+=1
random_num() # 2 или 4 генерируется случайным образом после слияния
print_interface() # Модифицировать интерфейс и отображение
gameover() # Первый судья, закончился ли он
return
#вниз
def put_down():
init()
for i in range(4):
l=3
j=3
while j>=0:
if mp[j][i]==0:
j-=1
continue
else:
newmp[l][i]=mp[j][i]
l-=1
j-=1
for i in range(4):
j=2
while j>=0:
if newmp[j][i]==0:
break
else:
if newmp[j][i]==newmp[j+1][i]:
newmp[j+1][i]=newmp[j][i]+newmp[j+1][i]
newmp[j][i]=0
j-=1
if newmp==mp:
return
init_mp()
for i in range(4):
l=3
j=3
while j>=0:
if newmp[j][i]==0:
j-=1
continue
else:
mp[l][i]=newmp[j][i]
vis[l][i]=1
l-=1
j-=1
random_num()
print_interface()
gameover() # Первый судья, закончился ли он
return
#осталось
def put_left():
init()
for i in range(4):
l=0
for j in range(4):
if mp[i][j]==0:
continue
else:
newmp[i][l]=mp[i][j]
l+=1
for i in range(4):
for j in range(1,4):
if newmp[i][j]==0:
break
else:
if newmp[i][j]==newmp[i][j-1]:
newmp[i][j-1]=newmp[i][j]+newmp[i][j-1]
newmp[i][j]=0
if newmp==mp:
return
init_mp()
for i in range(4):
l=0
for j in range(4):
if newmp[i][j]==0:
continue
else:
mp[i][l]=newmp[i][j]
vis[i][l]=1
l+=1
random_num()
print_interface()
gameover() # Первый судья, закончился ли он
return
#Направо
def put_right():
init()
for i in range(4):
l=3
j=3
while j>=0:
if mp[i][j]==0:
j-=1
continue
else:
newmp[i][l]=mp[i][j]
l-=1
j-=1
for i in range(4):
j=2
while j>=0:
if newmp[i][j]==0:
break
else:
if newmp[i][j]==newmp[i][j+1]:
newmp[i][j+1]=newmp[i][j]+newmp[i][j+1]
newmp[i][j]=0
j-=1
if newmp==mp:
return
init_mp()
for i in range(4):
l=3
j=3
while j>=0:
if newmp[i][j]==0:
j-=1
continue
else:
mp[i][l]=newmp[i][j]
vis[i][l]=1
l-=1
j-=1
random_num()
print_interface()
gameover() # Первый судья, закончился ли он
return
p.s Весь код не поместился из-за ограничения в 5000 символов
Answers & Comments
# Начальная мп
def init_mp():
for i in range(4):
for j in range(4):
mp[i][j]=0
# Изменить интерфейс
def print_interface():
for i in range(4):
for j in range(4):
cs=bgs[mp[i][j]]
c1.create_rectangle(j*100,i*100,j*100+100,i*100+100,fill="%s"%(cs))
if mp[i][j]!=0: #Control 0 output
c1.create_text((j*100+100)-50,(i*100+100)-50,text="%d"%(mp[i][j]),font=(«Курсив»,30))
# Оцените, закончилось ли это
def gameover():
if vis==vc and panduan()==False: # Если в каждом бите есть данные, а номер каждого элемента и смежные позиции не равны, игра будет выведена на интерфейс для завершения игры.
c1.create_oval(100,150,300,250,fill="#FF4500")
c1.create_text(200,200,text="игра закончена")
# Решите, можете ли вы продолжить операцию
def panduan ():
movex=[-1,1,0,0]
movey=[0,0,-1,1]
for i in range(4): # Оценить окружение каждого элемента
for j in range(4):
for l in range(4):
newx=int(i+movex[l])
newy=int(j+movey[l])
if (newx<0 or newx>3)or(newy<0 or newy>3):
continue
else:
if mp[i][j]==mp[newx][newy]:
return True
return False
#UP
def put_up():
init() # Инициализация, newmp, vis
for i in range(4): # Объединить, удалить сетку 0
l=0
for j in range(4):
if mp[j][i]==0:
continue
else:
newmp[l][i]=mp[j][i]
l+=1
for i in range(4): # Начиная со второго, сравнивать только с предыдущим числом, если оно равно, добавить его и сделать эту позицию равной 0
for j in range(1,4):
if newmp[j][i]==0:
break
else:
if newmp[j][i]==newmp[j-1][i]:
newmp[j-1][i]=newmp[j][i]+newmp[j-1][i]
newmp[j][i]=0
if newmp==mp: # Если после слияния вверх и добавления соседней позиции, такой же, как предыдущая без изменений, это означает, что направление не может быть изменено и выскочить напрямую
return
init_mp() # Инициализировать mp, объединить добавленное значение снова и передать его в mp
for i in range(4):
l=0
for j in range(4):
if newmp[j][i]==0:
continue
else:
mp[l][i]=newmp[j][i]
vis[l][i]=1
l+=1
random_num() # 2 или 4 генерируется случайным образом после слияния
print_interface() # Модифицировать интерфейс и отображение
gameover() # Первый судья, закончился ли он
return
#вниз
def put_down():
init()
for i in range(4):
l=3
j=3
while j>=0:
if mp[j][i]==0:
j-=1
continue
else:
newmp[l][i]=mp[j][i]
l-=1
j-=1
for i in range(4):
j=2
while j>=0:
if newmp[j][i]==0:
break
else:
if newmp[j][i]==newmp[j+1][i]:
newmp[j+1][i]=newmp[j][i]+newmp[j+1][i]
newmp[j][i]=0
j-=1
if newmp==mp:
return
init_mp()
for i in range(4):
l=3
j=3
while j>=0:
if newmp[j][i]==0:
j-=1
continue
else:
mp[l][i]=newmp[j][i]
vis[l][i]=1
l-=1
j-=1
random_num()
print_interface()
gameover() # Первый судья, закончился ли он
return
#осталось
def put_left():
init()
for i in range(4):
l=0
for j in range(4):
if mp[i][j]==0:
continue
else:
newmp[i][l]=mp[i][j]
l+=1
for i in range(4):
for j in range(1,4):
if newmp[i][j]==0:
break
else:
if newmp[i][j]==newmp[i][j-1]:
newmp[i][j-1]=newmp[i][j]+newmp[i][j-1]
newmp[i][j]=0
if newmp==mp:
return
init_mp()
for i in range(4):
l=0
for j in range(4):
if newmp[i][j]==0:
continue
else:
mp[i][l]=newmp[i][j]
vis[i][l]=1
l+=1
random_num()
print_interface()
gameover() # Первый судья, закончился ли он
return
#Направо
def put_right():
init()
for i in range(4):
l=3
j=3
while j>=0:
if mp[i][j]==0:
j-=1
continue
else:
newmp[i][l]=mp[i][j]
l-=1
j-=1
for i in range(4):
j=2
while j>=0:
if newmp[i][j]==0:
break
else:
if newmp[i][j]==newmp[i][j+1]:
newmp[i][j+1]=newmp[i][j]+newmp[i][j+1]
newmp[i][j]=0
j-=1
if newmp==mp:
return
init_mp()
for i in range(4):
l=3
j=3
while j>=0:
if newmp[i][j]==0:
j-=1
continue
else:
mp[i][l]=newmp[i][j]
vis[i][l]=1
l-=1
j-=1
random_num()
print_interface()
gameover() # Первый судья, закончился ли он
return
p.s Весь код не поместился из-за ограничения в 5000 символов