-
Notifications
You must be signed in to change notification settings - Fork 0
/
Juego.py
148 lines (120 loc) · 4.75 KB
/
Juego.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
# -*- coding: utf-8 -*-
from PyQt4 import QtGui, uic
from PyQt4.QtCore import QString
from sys import argv
from random import randint, choice
__author__ = 'figarrido'
# uic.loadUiType entrega una lista con dos elementos
# [Ui_MainWindow, PyQt4.QtGui.QMainWindow]
# El primer elemento corresponde a la clase de la ventana
# creada en QtDesigner y la segunda a la clase que hereda
form_classes = uic.loadUiType("VisualGame.ui")
OPERACIONES = [('suma', '+'), ('resta', '-'), ('mult', '*'), ('div', '/')]
NIVELES = ['facil', 'medio', 'dificil']
DIFICULTAD = 20
class Juego(form_classes[0], form_classes[1]):
def __init__(self, parent=None):
QtGui.QMainWindow.__init__(self, parent)
self.setupUi(self)
# Números aleatorios, ya que la primera operación es una suma
self.ledit_1.setText(str(randint(0, DIFICULTAD)))
self.ledit_2.setText(str(randint(0, DIFICULTAD)))
# Conexión de eventos
self.btn_new.clicked.connect(self.btn_newGame_clicked)
self.btn_result.clicked.connect(self.btn_result_clicked)
# Conectar los QRadioButton que tienen nombres parecidos
for oper in OPERACIONES:
getattr(
self, 'rbtn_' + oper[0]).toggled.connect(
self.btn_newGame_clicked)
for nivel in NIVELES:
getattr(
self, 'rbtn_' + nivel).toggled.connect(
self.rbtn_cambiar_dificultad)
# Esta variable es para que el usuario no presione el botón
# Resultado continuamente y se vea obligado a presionar el
# botón Nuevo Juego
self.siguiente = True
def rbtn_cambiar_dificultad(self):
global DIFICULTAD
for nivel in NIVELES:
if getattr(self, 'rbtn_' + nivel).isChecked():
if nivel == 'facil':
DIFICULTAD = 20
elif nivel == 'medio':
DIFICULTAD = 100
else:
DIFICULTAD = 1000
self.label_juegos.setText('0')
self.label_buenos.setText('0')
self.label_malos.setText('0')
self.btn_newGame_clicked()
def btn_newGame_clicked(self):
self.siguiente = True
self.feedback.setText('')
self.ledit_result.setText('')
if self.rbtn_random.isChecked():
oper = choice(OPERACIONES)
self.label_op.setText(oper[1])
else:
for oper in OPERACIONES:
if getattr(self, 'rbtn_' + oper[0]).isChecked():
self.label_op.setText(oper[1])
break
a = randint(0, DIFICULTAD)
b = randint(0, DIFICULTAD)
# Se quiere que las divisiones sean enteras
if oper[0] == 'div' and (b == 0 or b > a or a % b != 0):
b = randint(1, DIFICULTAD)
c = randint(0, DIFICULTAD)
a = c * b
# Trabajar con números positivos
elif oper[0] == 'resta' and b > a:
a, b = b, a
self.ledit_1.setText(str(a))
self.ledit_2.setText(str(b))
def btn_result_clicked(self):
if not self.siguiente:
self.feedback.setText('Debes comenzar un nuevo juego.')
return
# Se obtienen los datos de la interfaz
a = int(self.ledit_1.text())
b = int(self.ledit_2.text())
operacion = self.label_op.text()
entrada = self.ledit_result.text()
# Verificar que ingresa algo
if not entrada:
self.feedback.setText(u'Debe ingresar un número.')
return
# Verificar que se ingresan números
for digito in entrada:
if not str(entrada).isdigit():
self.feedback.setText(u'El resultado debe ser un número.')
return
# Se aumenta el número de juegos
actual_juegos = int(self.label_juegos.text())
self.label_juegos.setText(str(actual_juegos + 1))
if operacion == '+':
resultado = a + b
elif operacion == '-':
resultado = a - b
elif operacion == '*':
resultado = a * b
elif operacion == '/':
resultado = a // b
# Se verifica si el usuario respondió bien o mal
if resultado == int(entrada):
self.feedback.setText(u'Está correcto!')
actual_buenos = int(self.label_buenos.text())
self.label_buenos.setText(str(actual_buenos + 1))
else:
self.feedback.setText(
u'No está correcto.\nLa respuesta correcta es {}.'.format(
resultado))
actual_malos = int(self.label_malos.text())
self.label_malos.setText(str(actual_malos + 1))
self.siguiente = False
app = QtGui.QApplication(argv)
MiJuego = Juego()
MiJuego.show()
app.exec_()