jotto

Untitled

Mar 30th, 2015
236
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 9.10 KB | None | 0 0
  1. import numpy as np
  2. import sys
  3. from random import randint
  4. from PyQt4.QtGui import *
  5. from PyQt4.QtCore import *
  6.  
  7. a = QApplication(sys.argv)
  8.  
  9.  
  10. class Game():
  11.     def __init__(self):
  12.         self.resetgame()
  13.  
  14.     size = 4
  15.     matrix = []
  16.  
  17.     def resetgame(self):
  18.         self.matrix = np.zeros((self.size, self.size), dtype=np.int)
  19.         self.additem()
  20.         self.additem()
  21.  
  22.     def additem(self):
  23.         while 1:
  24.             temp2 = randint(0, 9)
  25.             x = randint(0, self.size - 1)
  26.             y = randint(0, self.size - 1)
  27.             if self.matrix[y, x] == 0:
  28.                 self.matrix[y, x] = 4 if temp2 == 0 else 2
  29.                 break
  30.  
  31.     def up(self):
  32.         for x in range(self.size):
  33.             temp = 0
  34.             for y in range(self.size):
  35.                 if not self.matrix[y, x] == 0:
  36.                     self.matrix[temp, x] = self.matrix[y, x]
  37.                     if not temp == y:
  38.                         self.matrix[y, x] = 0
  39.                     temp += 1
  40.  
  41.     def down(self):
  42.         for x in range(self.size):
  43.             temp = self.size - 1
  44.             for y in range(self.size - 1, -1, -1):
  45.                 if not self.matrix[y, x] == 0:
  46.                     self.matrix[temp, x] = self.matrix[y, x]
  47.                     if not temp == y:
  48.                         self.matrix[y, x] = 0
  49.                     temp -= 1
  50.  
  51.     def left(self):
  52.         for y in range(self.size):
  53.             temp = 0
  54.             for x in range(self.size):
  55.                 if not self.matrix[y, x] == 0:
  56.                     self.matrix[y, temp] = self.matrix[y, x]
  57.                     if not temp == x:
  58.                         self.matrix[y, x] = 0
  59.                     temp += 1
  60.  
  61.     def right(self):
  62.         for y in range(self.size):
  63.             temp = self.size - 1
  64.             for x in range(self.size - 1, -1, -1):
  65.                 if not self.matrix[y, x] == 0:
  66.                     self.matrix[y, temp] = self.matrix[y, x]
  67.                     if not temp == x:
  68.                         self.matrix[y, x] = 0
  69.                     temp -= 1
  70.  
  71. g = Game()
  72.  
  73.  
  74. class Window(QWidget):
  75.     def __init__(self):
  76.         super(Window, self).__init__()
  77.         self.initializeui()
  78.         self.setvalues()
  79.         self.setStyleSheet("QWidget {"
  80.                            "background-color: #bbada0;}")
  81.  
  82.     bestscore = 0
  83.     scoreval = 0
  84.     score = None
  85.     best = None
  86.     grid = QGridLayout()
  87.     color = {0:     "#ccc0b3;",
  88.              2:     "#eee4da;",
  89.              4:     "#EDE0C8;",
  90.              8:     "#F2B179;",
  91.              16:    "#F59563;",
  92.              32:    "#F67C5F;",
  93.              64:    "#F65E3B;",
  94.              128:   "#EDCE70;",
  95.              256:   "#EDCC63;",
  96.              512:   "#ECC850;",
  97.              1024:  "#ECC850;",
  98.              2048:  "#EDC22E;"}
  99.  
  100.     def setscore(self):
  101.         self.scoreval = 0
  102.         for x in range(g.size):
  103.             for y in range(g.size):
  104.                 if g.matrix[y, x] > 2:
  105.                     self.scoreval += g.matrix[y, x] * (np.log(g.matrix[y, x])/np.log(2) - 1)
  106.  
  107.     def res(self):
  108.         self.scoreval = 0
  109.         g.resetgame()
  110.         self.setvalues()
  111.         self.setFocus()
  112.  
  113.     def initializeui(self):
  114.         self.resize(g.size*112.5, g.size*125)
  115.         self.setMaximumSize(g.size*112.5, g.size*125)
  116.         self.setMinimumSize(g.size*112.5, g.size*125)
  117.         self.setWindowTitle("2048")
  118.         self.show()
  119.         self.setLayout(self.grid)
  120.  
  121.         self.best = QLabel("Best:\n%s" % self.bestscore)
  122.         self.best.setFixedHeight(50)
  123.         self.best.setFixedWidth(100)
  124.         self.best.setAlignment(Qt.AlignCenter)
  125.         self.best.setStyleSheet("QLabel {"
  126.                                 "color: #fff;"
  127.                                 "font-size: 15px;"
  128.                                 "border-radius: 5px;"
  129.                                 "background-color: #000;"
  130.                                 "font-family: Arial Black;"
  131.                                 "}")
  132.         self.grid.addWidget(self.best, 0, 1, 1, g.size/2)
  133.  
  134.         self.score = QLabel("Score:\n0")
  135.         self.score.setFixedHeight(50)
  136.         self.score.setFixedWidth(100)
  137.         self.score.setAlignment(Qt.AlignCenter)
  138.         self.score.setStyleSheet("QLabel {"
  139.                                  "color: #fff;"
  140.                                  "font-size: 15px;"
  141.                                  "border-radius: 5px;"
  142.                                  "background-color: #000;"
  143.                                  "font-family: Arial Black;"
  144.                                  "}")
  145.         self.grid.addWidget(self.score, 0, 0, 1, g.size/2)
  146.  
  147.         restart = QPushButton("Restart")
  148.         restart.clicked.connect(self.res)
  149.         restart.setFixedWidth(g.size*50 + (g.size/2 - 1)*5)
  150.         restart.setFixedHeight(50)
  151.         restart.setStyleSheet("QPushButton {"
  152.                               "color: #fff;"
  153.                               "font-size: 15px;"
  154.                               "border-radius: 5px;"
  155.                               "background-color: #000;"
  156.                               "font-family: Arial Black;"
  157.                               "}")
  158.         self.grid.addWidget(restart, 0, g.size/2, 1, g.size/2)
  159.  
  160.     def setvalues(self):
  161.         elements = [(m, n) for m in range(g.size) for n in range(g.size)]
  162.         for m, n in elements:
  163.             temp = QLabel(str(g.matrix[m, n]) if g.matrix[m, n] > 0 else " ")
  164.             temp.setFixedWidth(100)
  165.             temp.setAlignment(Qt.AlignCenter)
  166.             temp.setStyleSheet("QLabel {"
  167.                                "color: black;"
  168.                                "font-size: 35px;"
  169.                                "border-radius: %spx;"
  170.                                "font-family: Arial Black;"
  171.                                "background-color: %s"
  172.                                "}" % (g.size*12.5, self.color[g.matrix[m, n]]))
  173.             self.grid.addWidget(temp, m + 1, n)
  174.  
  175.         self.setscore()
  176.         self.score.setText("Score:\n%s" % int(self.scoreval))
  177.  
  178.         if self.bestscore < self.scoreval:
  179.             self.bestscore = self.scoreval
  180.             self.best.setText("Best:\n%s" % int(self.bestscore))
  181.  
  182.     def keyPressEvent(self, k):
  183.         if k.key() == Qt.Key_Up and self.checkup:
  184.             self.up()
  185.  
  186.         elif k.key() == Qt.Key_Down and self.checkdown:
  187.             self.down()
  188.  
  189.         elif k.key() == Qt.Key_Left and self.checkleft:
  190.             self.left()
  191.  
  192.         elif k.key() == Qt.Key_Right and self.checkright:
  193.             self.right()
  194.  
  195.     def up(self):
  196.         g.up()
  197.         for x in range(g.size):
  198.             for y in range(g.size - 1):
  199.                 if g.matrix[y, x] == g.matrix[y+1, x]:
  200.                     g.matrix[y, x] *= 2
  201.                     g.matrix[y+1, x] = 0
  202.                     g.up()
  203.         g.additem()
  204.         self.setvalues()
  205.  
  206.     def down(self):
  207.         g.down()
  208.         for x in range(g.size):
  209.             for y in range(g.size - 1, 0, -1):
  210.                 if g.matrix[y, x] == g.matrix[y-1, x]:
  211.                     g.matrix[y, x] *= 2
  212.                     g.matrix[y-1, x] = 0
  213.                     g.down()
  214.         g.additem()
  215.         self.setvalues()
  216.  
  217.     def left(self):
  218.         g.left()
  219.         for y in range(g.size):
  220.             for x in range(g.size - 1):
  221.                 if g.matrix[y, x] == g.matrix[y, x+1]:
  222.                     g.matrix[y, x] *= 2
  223.                     g.matrix[y, x+1] = 0
  224.                     g.left()
  225.         g.additem()
  226.         self.setvalues()
  227.  
  228.     def right(self):
  229.         g.right()
  230.         for y in range(g.size):
  231.             for x in range(g.size - 1, 0, -1):
  232.                 if g.matrix[y, x] == g.matrix[y, x-1]:
  233.                     g.matrix[y, x] *= 2
  234.                     g.matrix[y, x-1] = 0
  235.                     g.right()
  236.         g.additem()
  237.         self.setvalues()
  238.  
  239.     @property
  240.     def checkup(self) -> bool:
  241.         for x in range(g.size):
  242.             for y in range(g.size - 1, 0, -1):
  243.                 if g.matrix[y, x]:
  244.                     if g.matrix[y - 1, x] == 0 or g.matrix[y - 1, x] == g.matrix[y, x]:
  245.                         return True
  246.         return False
  247.  
  248.     @property
  249.     def checkdown(self) -> bool:
  250.         for x in range(g.size):
  251.             for y in range(g.size - 1):
  252.                 if g.matrix[y, x]:
  253.                     if g.matrix[y + 1, x] == 0 or g.matrix[y + 1, x] == g.matrix[y, x]:
  254.                         return True
  255.         return False
  256.  
  257.     @property
  258.     def checkleft(self) -> bool:
  259.         for y in range(g.size):
  260.             for x in range(g.size - 1, 0, -1):
  261.                 if g.matrix[y, x]:
  262.                     if g.matrix[y, x - 1] == 0 or g.matrix[y, x - 1] == g.matrix[y, x]:
  263.                         return True
  264.         return False
  265.  
  266.     @property
  267.     def checkright(self) -> bool:
  268.         for y in range(g.size):
  269.             for x in range(g.size - 1):
  270.                 if g.matrix[y, x]:
  271.                     if g.matrix[y, x + 1] == 0 or g.matrix[y, x + 1] == g.matrix[y, x]:
  272.                         return True
  273.         return False
  274.  
  275. w = Window()
  276. print(w.size())
  277. sys.exit(a.exec())
Advertisement
Add Comment
Please, Sign In to add comment