Предмет: Информатика, автор: denispozdeev07012010

зделать игру 2048 на python
Сделайте так, чтобы в игре велся подсчет очков, а после
выигрыша или проигрыша количество набранных очков
выводилось бы в ячейки.

Ответы

Автор ответа: romaoreshkin02
1

# Начальная мп

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 символов

Похожие вопросы
Предмет: Физика, автор: guzal47
Предмет: Русский язык, автор: mrdanala