Russian Qt Forum
Апрель 20, 2024, 01:29 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Игра "Пятнашки"  (Прочитано 25017 раз)
Ol3g
Гость
« : Январь 18, 2016, 18:52 »

Всем привет!.

Моя первая игра на С++ Qt v4.8.6

Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #1 : Январь 18, 2016, 19:45 »

Ура, собрал )
Ненавижу пятнашки )
Из всех головоломок самые нелюбимые, вспоминаю головоломку пятнашки в замке в Resident Evil 4
Записан

gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #2 : Январь 20, 2016, 15:28 »

Захотелось самому попробовать написать (игры у меня не получаются, а пятнашки показались простыми) и вот что получилось. Сделано на питоне с Qt:

Код
Python
#!/usr/bin/env python
# -*- coding: utf-8 -*-
 
__author__ = 'ipetrash'
 
 
if __name__ == '__main__':
   import random
   import sys
 
   from PySide.QtGui import *
   from PySide.QtCore import *
 
   app = QApplication(sys.argv)
 
   class Widget(QWidget):
       def __init__(self):
           super().__init__()
 
           self.setWindowTitle('15-puzzle')
 
           self.cell_size = 40
           self.resize(self.cell_size * 4, self.cell_size * 4)
 
           self.empty_value = 16
           self.matrix = None
 
           self.refill()
 
       def refill(self):
           seq = list(range(1, 16))
           random.shuffle(seq)
 
           # add empty cell
           seq.append(self.empty_value)
 
           self.matrix = [
               [seq.pop(0) for _ in range(4)]
               for _ in range(4)
           ]
 
       def mouseReleaseEvent(self, event):
           super().mouseReleaseEvent(event)
 
           pos = event.pos()
           x, y = pos.y() // self.cell_size, pos.x() // self.cell_size
 
           def get_cell_num(x, y):
               try:
                   return self.matrix[x][y], x, y
               except IndexError:
                   return None
 
           try:
               neig = [
                   get_cell_num(x-1, y),
                   get_cell_num(x+1, y),
                   get_cell_num(x, y-1),
                   get_cell_num(x, y+1),
               ]
 
               # Ищем пустую ячейку
               empty_cell = list(filter(lambda x: x is not None and x[0] == self.empty_value, neig))
 
               # Если соседняя клетка пустая
               if len(empty_cell) > 0:
                   # Значение текущей клетки
                   value = get_cell_num(x, y)[0]
 
                   # Значение пустой клетки, и ее координаты
                   empty_value, x2, y2 = empty_cell[0]
 
                   # Меняем клетки местами
                   self.matrix[x][y] = empty_value
                   self.matrix[x2][y2] = value
 
                   self.update()
 
                   # Матрицу переделываем в список
                   l = list()
                   for row in self.matrix:
                       l += row
                   # Последний элемент правильной собранной доски -- пустая ячейка, не учитываем ее
                   l.pop()
 
                   if l == list(range(1, 16)):
                       QMessageBox.information(self, 'Victory', 'Ok!')
 
           except IndexError:
               pass
 
       def paintEvent(self, event):
           super().paintEvent(event)
 
           painter = QPainter(self)
           painter.setRenderHint(QPainter.Antialiasing)
 
           painter.setPen(Qt.black)
 
           for i, row in enumerate(self.matrix):
               y = i * self.cell_size
 
               for j, num in enumerate(row):
                   x = j * self.cell_size
 
                   painter.setBrush(Qt.white if num == self.empty_value else Qt.yellow)
                   painter.drawRect(x, y, self.cell_size, self.cell_size)
 
                   text = str(num) if num != self.empty_value else ""
                   painter.drawText(x, y, self.cell_size, self.cell_size, Qt.AlignCenter, text)
 
   w = Widget()
   w.show()
 
   exit(app.exec_())
 
 
Записан

hayeved
Новичок

Offline Offline

Сообщений: 1


Просмотр профиля
« Ответ #3 : Январь 25, 2023, 17:50 »

Всем привет!.

Моя первая игра на С++ Qt v4.8.6



Круто, а что-то из казино, можешь сделать?
Записан
benene
Новичок

Offline Offline

Сообщений: 1


Просмотр профиля
« Ответ #4 : Январь 29, 2023, 00:08 »

Всем привет!.

Моя первая игра на С++ Qt v4.8.6



Круто, а что-то из казино, можешь сделать?


А при чем тут вообще казино, это вообще в другую степь..
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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