Here is sample code for a simple game of finding fault based on the PyQt implementation:
from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QPushButton
from PyQt5.QtGui import QPixmap, QPainter, QPen, QColor
from PyQt5.QtCore import Qt, QPoint
import random
class FindDiffGame(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("Find Diff Game")
self.setGeometry(100, 100, 800, 600)
self.central_widget = QLabel(self)
self.central_widget.setAlignment(Qt.AlignCenter)
self.central_widget.setGeometry(0, 0, 800, 600)
self.start_button = QPushButton('Start', self)
self.start_button.setGeometry(350, 500, 100, 50)
self.start_button.clicked.connect(self.start_game)
self.quit_button = QPushButton('Quit', self)
self.quit_button.setGeometry(450, 500, 100, 50)
self.quit_button.clicked.connect(QApplication.instance().quit)
self.diff_areas = []
self.diff_count = 5
self.current_diff_index = 0
self.image1 = QPixmap("image1.png")
self.image2 = QPixmap("image2.png")
self.image_width = self.image1.width()
self.image_height = self.image1.height()
self.painter = QPainter()
self.diff_painter = QPainter()
def start_game(self):
self.current_diff_index = 0
self.diff_areas.clear()
self.central_widget.clear()
self.central_widget.setPixmap(self.image1)
self.generate_diff_areas()
self.central_widget.mousePressEvent = self.check_diff
def generate_diff_areas(self):
self.diff_areas = []
for i in range(self.diff_count):
x = random.randint(0, self.image_width - 50)
y = random.randint(0, self.image_height - 50)
self.diff_areas.append((x, y))
def check_diff(self, event):
x = event.pos().x()
y = event.pos().y()
for diff_area in self.diff_areas:
if abs(x - diff_area[0]) < 50 and abs(y - diff_area[1]) < 50:
self.draw_diff_area(diff_area)
self.current_diff_index += 1
if self.current_diff_index == self.diff_count:
self.win_game()
return
self.draw_wrong_area(x, y)
def draw_diff_area(self, diff_area):
self.diff_painter.begin(self.central_widget.pixmap())
pen = QPen(QColor(255, 0, 0), 3)
self.diff_painter.setPen(pen)
self.diff_painter.drawRect(diff_area[0], diff_area[1], 50, 50)
self.diff_painter.end()
def draw_wrong_area(self, x, y):
self.painter.begin(self.central_widget.pixmap())
pen = QPen(QColor(0, 0, 255), 3)
self.painter.setPen(pen)
self.painter.drawPoint(QPoint(x, y))
self.painter.end()
def win_game(self):
self.central_widget.clear()
self.central_widget.setPixmap(QPixmap("win.png"))
if __name__ == '__main__':
app = QApplication([])
game = FindDiffGame()
game.show()
app.exec_()
If it helps you, please accept it.