欢迎光临
我们一直在努力

自制2048小游戏(附源码)

 1 #!/usr/bin/python  2 #  -*- coding:utf-8 -*-  3 '''  4 Created on Mar 24, 2017  5  6 @author: zhengli  7 '''  8  9 import copy  10 import numpy  11 from PyQt5.QtCore import Qt  12 from PyQt5.QtGui import (QIcon, QFont)  13 from PyQt5.QtWidgets import (Qaction, QDesktopWidget, QGridLayout, QMainWindow, QMessageBox, QToolTip, QWidget)  14 import GameCanvas  15  16  17 class App(QMainWindow):  18 """  19  Main Window.  20 """  21  22 # noinspection PyArgumentList  23 def __init__(self):  24  25 QMainWindow.__init__(self)  26  27 # noinspection PyCallByClass,PyTypeChecker  28 QToolTip.setFont(QFont('SansSerif', 10))  29 self.setGeometry(100, 100, 600, 600)  30  self.frameGeometry().moveCenter(QDesktopWidget().availableGeometry().center())  31  self.move(self.frameGeometry().topLeft())  32 self.setWindowTitle('2048')  33 self.setWindowIcon(QIcon('python.png'))  34  self.setWindowFlags(Qt.WindowStaysOnTopHint)  35  36 self.action = dict()  37  self.actionLoad()  38  self.menuBarLoad()  39  40 self.data = dict()  41 self.canvas = 0  42 self.gameImage(4, 4)  43  44 self.statusBar().showMessage('Ready')  45  46  self.show()  47  48 def actionLoad(self):  49 """  50  set MainData.action  51 """  52 self.action["4X4"] = QAction('4X4', self)  53 self.action["4X4"].setShortcut('Ctrl+4')  54 self.action["4X4"].setStatusTip('4X4 game')  55 self.action["4X4"].triggered.connect(lambda: self.gameImage(4, 4))  56  57 self.action["5X5"] = QAction('5X5', self)  58 self.action["5X5"].setShortcut('Ctrl+5')  59 self.action["5X5"].setStatusTip('5X5 game')  60 self.action["5X5"].triggered.connect(lambda: self.gameImage(5, 5))  61  62 self.action["6X6"] = QAction('6X6', self)  63 self.action["6X6"].setShortcut('Ctrl+6')  64 self.action["6X6"].setStatusTip('6X6 game')  65 self.action["6X6"].triggered.connect(lambda: self.gameImage(6, 6))  66  67 def menuBarLoad(self):  68 """  69  set MainWindow.menuBar  70 """  71  self.statusBar()  72 menubar = self.menuBar()  73  74 gameMenu = menubar.addMenu('&Game')  75 gameMenu.addAction(self.action["4X4"])  76 gameMenu.addAction(self.action["5X5"])  77 gameMenu.addAction(self.action["6X6"])  78  79 def gameImage(self, m, n):  80 """  81  image draw.  82 """  83 # noinspection PyBroadException  84 try:  85 data = self.data["%d_%d" % (m, n)]  86 count = self.data["score_%d_%d" % (m, n)]  87 except:  88 self.data["%d_%d" % (m, n)] = numpy.zeros((m, n), dtype=int)  89 data = self.data["%d_%d" % (m, n)]  90 self.data["score_%d_%d" % (m, n)] = 0  91 count = self.data["score_%d_%d" % (m, n)]  92 self.statusBar().showMessage('Score: %d' % count)  93  94 layout = QGridLayout()  95 layout.setSpacing(10)  96  97 widget = QWidget()  98 self.canvas = GameCanvas.GameCanvas(data=data, count=count, parent=widget)  99 self.canvas.fig.canvas.mpl_connect('button_press_event', self.button_press) 100 self.canvas.fig.canvas.mpl_connect('button_release_event', self.button_release) 101 102  layout.addWidget(self.canvas) 103  widget.setLayout(layout) 104  self.setCentralWidget(widget) 105 106 def button_press(self, event): 107 """ 108  Get coordinates 109 """ 110 self.canvas.event_x = event.x 111 self.canvas.event_y = event.y 112 113 # noinspection PyUnresolvedReferences 114 def button_release(self, event): 115 """ 116  :param event: 117  :return: 118 """ 119 data_backup = copy.deepcopy(self.canvas.data) 120 if abs(self.canvas.event_x - event.x) > abs(self.canvas.event_y - event.y): 121 if event.x > self.canvas.event_x: 122 self.canvas.right_operation(data_backup=data_backup) 123 else: 124 self.canvas.left_operation(data_backup=data_backup) 125 else: 126 if event.y > self.canvas.event_y: 127 self.canvas.up_operation(data_backup=data_backup) 128 else: 129 self.canvas.down_operation(data_backup=data_backup) 130 131  self.canvas.fig.clf() 132 self.canvas.axes = self.canvas.fig.add_axes([0, 0, 1, 1], frameon=False) 133  self.canvas.complete_draw() 134  self.canvas.fig.canvas.draw() 135 136 self.data["score_%d_%d" % (self.canvas.m, self.canvas.n)] = self.canvas.count 137 self.statusBar().showMessage('Score: %d' % self.canvas.count) 138 139 # noinspection PyUnresolvedReferences 140 def keyPressEvent(self, event): 141 """ 142  :param event: 143  :return: 144 """ 145 data_backup = copy.deepcopy(self.canvas.data) 146 if event.key() == Qt.Key_Right: 147 self.canvas.right_operation(data_backup=data_backup) 148 elif event.key() == Qt.Key_Left: 149 self.canvas.left_operation(data_backup=data_backup) 150 elif event.key() == Qt.Key_Up: 151 self.canvas.up_operation(data_backup=data_backup) 152 elif event.key() == Qt.Key_Down: 153 self.canvas.down_operation(data_backup=data_backup) 154 elif event.key() == Qt.Key_Escape: 155 self.canvas.data *= 0 156 self.canvas.count = 0 157 elif event.key() == Qt.Key_Delete: 158 print("yes ") 159 160  self.canvas.fig.clf() 161 self.canvas.axes = self.canvas.fig.add_axes([0, 0, 1, 1], frameon=False) 162  self.canvas.complete_draw() 163  self.canvas.fig.canvas.draw() 164 165 self.data["score_%d_%d" % (self.canvas.m, self.canvas.n)] = self.canvas.count 166 self.statusBar().showMessage('Score: %d' % self.canvas.count) 167 168 def closeEvent(self, event): 169 """ 170  exit game. 171 """ 172 # noinspection PyCallByClass,PyTypeChecker 173 reply = QMessageBox.question(self, 'Message', "Are you sure to quit?", 174 QMessageBox.Yes | QMessageBox.No, QMessageBox.No) 175 if reply == QMessageBox.Yes: 176  event.accept() 177 else: 178 event.ignore()

  • 海报
海报图正在生成中...
赞(1) 打赏
声明:
1、本博客不从事任何主机及服务器租赁业务,不参与任何交易,也绝非中介。博客内容仅记录博主个人感兴趣的服务器测评结果及一些服务器相关的优惠活动,信息均摘自网络或来自服务商主动提供;所以对本博客提及的内容不作直接、间接、法定、约定的保证,博客内容也不具备任何参考价值及引导作用,访问者需自行甄别。
2、访问本博客请务必遵守有关互联网的相关法律、规定与规则;不能利用本博客所提及的内容从事任何违法、违规操作;否则造成的一切后果由访问者自行承担。
3、未成年人及不能独立承担法律责任的个人及群体请勿访问本博客。
4、一旦您访问本博客,即表示您已经知晓并接受了以上声明通告。
文章名称:《自制2048小游戏(附源码)》
文章链接:https://www.456zj.com/40959.html
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址