Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: 2048 для программистов  (Прочитано 1236 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн SergeyIT

  • Автор темы
  • Зануда.
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 5743
  • Все по палатам!
    • Просмотр профиля
2048 для программистов
« : 25 Декабря 2014, 00:37:23 »
Подумалось что и такая игра может быть, а почему нет  :-\

#needs: python-tk
#modified by SergeyIT
#original: from http://blog.hrvoje.org/blog/2014/09/20/a-simple-2048-clone-in-python/

import random,Tkinter
def shift(c): return list([i for i in c if i>0] + [0]*c.count(0))
def sms(l):
    l=shift(l)
    for i in range(len(l)-1):
        if l[i+1]==l[i]: l[i], l[i+1] = 2*l[i], 0
    return shift(l)
class igra(Tkinter.Tk):
    fm = {0: '%d', 1: '0%o', 2: '0x%X'}
    b = [[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]]
    def __init__(self,parent):
        Tkinter.Tk.__init__(self,parent)
        self.parent = parent
        self.grid()
        self.bl = [Tkinter.Button(self, height=3, width=6, state=Tkinter.DISABLED, font=("Helvetica", 18)) for i in range(16)]
        for i in range(16): self.bl[i].grid(row=i//4, column=i%4)
        self.dodaj_novu()
        self.bind_all('<Key>', self.key)
        self.mainloop()
    def pr(self, d, f): return str(self.fm[f] % d)
    def rot(self): self.b = list(map(list, zip(*self.b[::-1])))
    def move(self, n):
        diff = self.b[:]
        for i in range(n): self.rot()
        for i in range(4): self.b[i] = sms(self.b[i])
        for i in range(4-n): self.rot()
        return 1 if self.b != diff else 0
    def dodaj_novu(self):
        k = [(i//4, i%4) for i,j in enumerate(sum(self.b, [])) if j == 0][random.randint(0, sum(self.b, []).count(0)-1)]
        self.b[k[0]][k[1]] = random.randint(1,2)*2
        for i in range(16):
            d = self.b[i//4][i%4]
            self.bl[i].config(text=self.pr(d, random.randint(0,2)) if d else ' ', bg='#%06x'% ((2**24-1) - (d*1500) ))
    def key(self, event):
        direction={'Left': 0, 'Down': 1, 'Right': 2, 'Up': 3}
        if self.move(direction[event.keysym]): self.dodaj_novu()
        p = self.b[:]
        for i in range(4):
            self.move(i)
            if self.b != p:
                self.b = p[:]
                return
        for i in range(16): self.bl[i].config(bg='red', text=':(')
a = igra(None)
Извините, я все еще учусь

Оффлайн Гриб_под_зонтом

  • Активист
  • *
  • Сообщений: 301
    • Просмотр профиля
Re: 2048 для программистов
« Ответ #1 : 05 Января 2015, 22:37:02 »
Скачал библиотеку , но почему то ругаеться на import(
Hp 250 G3: 8Gb RAM, Intel Celeron 2.16-2.58GHz with 2 core, Intel HD Graphics.
Ubuntu 18.04 LTS with GNOME 3.

Оффлайн SergeyIT

  • Автор темы
  • Зануда.
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 5743
  • Все по палатам!
    • Просмотр профиля
Re: 2048 для программистов
« Ответ #2 : 05 Января 2015, 23:15:09 »
Не скажу, у меня и python-tk и python3-tk стоят и все команды работают
python g.py
python3 g.py
python2.7 g.py

хотя где-то читал, что в 2-ке модуль tkinter, а в 3-ке Tkinter
Извините, я все еще учусь

Оффлайн ivsatel

  • Активист
  • *
  • Сообщений: 336
    • Просмотр профиля
Re: 2048 для программистов
« Ответ #3 : 06 Января 2015, 00:01:21 »
хотя где-то читал, что в 2-ке модуль tkinter, а в 3-ке Tkinter
Наоборот.

Оффлайн SergeyIT

  • Автор темы
  • Зануда.
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 5743
  • Все по палатам!
    • Просмотр профиля
Re: 2048 для программистов
« Ответ #4 : 06 Января 2015, 00:06:45 »
ivsatel, может быть ;)
Извините, я все еще учусь

Оффлайн alsoijw

  • Старожил
  • *
  • Сообщений: 4062
  • Fedora 25 GNOME 3 amd64
    • Просмотр профиля
Re: 2048 для программистов
« Ответ #5 : 06 Января 2015, 00:18:44 »
А что это из себя представляет? Скриншоты там что ли?
Мало видеть нам начало - надо видеть и конец. Если видишь ты создание - значит где-то есть ТВОРЕЦ
Многие жалуются: геометрия в жизни не пригодилась. Ямб от хорея им приходится отличать ежедневно?

Оффлайн SergeyIT

  • Автор темы
  • Зануда.
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 5743
  • Все по палатам!
    • Просмотр профиля
Re: 2048 для программистов
« Ответ #6 : 06 Января 2015, 00:22:20 »
alsoijw, игрушка на питоне
Извините, я все еще учусь

Оффлайн alsoijw

  • Старожил
  • *
  • Сообщений: 4062
  • Fedora 25 GNOME 3 amd64
    • Просмотр профиля
Re: 2048 для программистов
« Ответ #7 : 06 Января 2015, 00:23:26 »
SergeyIT, какие пакеты надо ставить?
Мало видеть нам начало - надо видеть и конец. Если видишь ты создание - значит где-то есть ТВОРЕЦ
Многие жалуются: геометрия в жизни не пригодилась. Ямб от хорея им приходится отличать ежедневно?

Оффлайн SergeyIT

  • Автор темы
  • Зануда.
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 5743
  • Все по палатам!
    • Просмотр профиля
Re: 2048 для программистов
« Ответ #8 : 06 Января 2015, 00:29:28 »
У меня стоят дополнительно python-tk, python3-tk для Tkinter, а может еще что надо. Я не программировал еще, так только, попробовал.

Пользователь решил продолжить мысль 06 Января 2015, 18:40:01:
Можно на Си скомпилить (так, баловство)
(Нажмите, чтобы показать/скрыть)
« Последнее редактирование: 06 Января 2015, 18:40:01 от SergeyIT »
Извините, я все еще учусь

 

Страница сгенерирована за 0.037 секунд. Запросов: 26.