jotto

Untitled

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