Skip to content

Instantly share code, notes, and snippets.

@MechCoder
Created November 16, 2012 20:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save MechCoder/4090465 to your computer and use it in GitHub Desktop.
Save MechCoder/4090465 to your computer and use it in GitHub Desktop.
Play hangman using python
import sys
from PyQt4 import QtGui , QtCore
import time
class Hangman(QtGui.QWidget):
def __init__(self):
super(Hangman , self).__init__()
self.window()
self.hangman = [0 , 0 , 0 , 0 , 0, 0 ,0]
def window(self):
self.setWindowTitle('Hangman')
try:
self.layout.count()
except AttributeError:
self.layout = QtGui.QGridLayout()
self.text = QtGui.QLineEdit()
self.text.returnPressed.connect(self.ChkTest)
self.first = QtGui.QPushButton('Hang')
self.label = QtGui.QLabel('Ready to hang?')
self.label.setAlignment(QtCore.Qt.Alignment(QtCore.Qt.AlignCenter))
label1 = QtGui.QLabel('')
label2 = QtGui.QLabel('')
label3 = QtGui.QLabel('')
label4 = QtGui.QLabel('')
label5 = QtGui.QLabel('')
label6 = QtGui.QLabel('')
self.layout.addWidget(self.label , 0 , 2)
self.layout.addWidget(self.text , 1 , 2)
self.layout.addWidget(label3 , 1 , 0 , 1 , 2)
self.first.clicked.connect(self.ChkTest)
self.layout.addWidget(label4 , 1 , 3 , 1 , 2)
self.layout.addWidget(label5 , 2 , 0 , 1 , 2)
self.layout.addWidget(self.first , 2 , 2)
self.layout.addWidget(label6 , 2 , 3 , 1 , 2)
self.setLayout(self.layout)
self.setGeometry(200 , 200 , 1000 , 300)
self.show()
def ChkTest(self):
self.update()
self.hangman = [0 , 0 , 0 , 0 , 0, 0 , 0 , 0]
text = self.text.text()
self.input = [str(x) for x in text]
self.input = [x.lower() for x in self.input]
self.templist = self.input[:]
self.DisList = []
for x in range(len(self.input)):
self.DisList.append('___ ')
self.display = ''.join(self.DisList)
for a in self.input:
try:
float(a)
self.label.setText('Enter valid text loser')
return
except ValueError:
pass
for i in range(self.layout.count()):
self.layout.itemAt(i).widget().close()
self.find = QtGui.QLabel()
self.find.setAlignment(QtCore.Qt.Alignment(QtCore.Qt.AlignCenter))
self.find.setText(self.display)
self.q = QtGui.QPushButton('Q')
self.w = QtGui.QPushButton('W')
self.e = QtGui.QPushButton('E')
self.r = QtGui.QPushButton('R')
self.t = QtGui.QPushButton('T')
self.y = QtGui.QPushButton('Y')
self.u = QtGui.QPushButton('U')
self.i = QtGui.QPushButton('I')
self.o = QtGui.QPushButton('O')
self.p = QtGui.QPushButton('P')
self.a = QtGui.QPushButton('A')
self.s = QtGui.QPushButton('S')
self.d = QtGui.QPushButton('D')
self.f = QtGui.QPushButton('F')
self.g = QtGui.QPushButton('G')
self.h = QtGui.QPushButton('H')
self.j = QtGui.QPushButton('J')
self.k = QtGui.QPushButton('K')
self.l = QtGui.QPushButton('L')
self.z = QtGui.QPushButton('Z')
self.x = QtGui.QPushButton('X')
self.c = QtGui.QPushButton('C')
self.v = QtGui.QPushButton('V')
self.b = QtGui.QPushButton('B')
self.n = QtGui.QPushButton('N')
self.m = QtGui.QPushButton('M')
self.layout.addWidget(self.find , 0 , 0 , 1 , 10)
self.layout.addWidget(self.q , 1 , 0)
self.layout.addWidget(self.w , 1 , 1)
self.layout.addWidget(self.e , 1 , 2)
self.layout.addWidget(self.r , 1 , 3)
self.layout.addWidget(self.t , 1 , 4)
self.layout.addWidget(self.y , 1 , 5)
self.layout.addWidget(self.u , 1 , 6)
self.layout.addWidget(self.i , 1 , 7)
self.layout.addWidget(self.o , 1 , 8)
self.layout.addWidget(self.p , 1 , 9)
self.layout.addWidget(self.a , 2 , 0)
self.layout.addWidget(self.s , 2 , 1)
self.layout.addWidget(self.d , 2 , 2)
self.layout.addWidget(self.f , 2 , 3)
self.layout.addWidget(self.g , 2 , 4)
self.layout.addWidget(self.h , 2 , 5)
self.layout.addWidget(self.j , 2 , 6)
self.layout.addWidget(self.k , 2 , 7)
self.layout.addWidget(self.l , 2 , 8)
self.layout.addWidget(self.z , 3 , 1)
self.layout.addWidget(self.x , 3 , 2)
self.layout.addWidget(self.c , 3 , 3)
self.layout.addWidget(self.v , 3 , 4)
self.layout.addWidget(self.b , 3 , 5)
self.layout.addWidget(self.n , 3 , 6)
self.layout.addWidget(self.m , 3 , 7)
for i in range(self.layout.count()):
w = self.layout.itemAt(i).widget()
if isinstance(w , QtGui.QPushButton):
w.clicked.connect(self.hangmanfun)
def paintEvent(self , e):
qp = QtGui.QPainter()
qp.begin(self)
pen = QtGui.QPen(QtCore.Qt.red , 5 , QtCore.Qt.SolidLine)
qp.setPen(pen)
qp.drawLine(20 , 20 , 20 , 200)
qp.drawLine(20 , 20 , 120 , 20)
if self.hangman[0] == 1:
qp.drawLine(120 , 20 , 120 , 50)
if self.hangman[1] == 1:
point = QtCore.QPoint(120 , 70)
qp.drawEllipse(point , 20 , 20)
if self.hangman[2] == 1:
qp.drawLine(120 , 90 , 120 , 150)
if self.hangman[3] == 1:
qp.drawLine(120 , 110 , 90 , 90)
if self.hangman[4] == 1:
qp.drawLine(120 , 110 , 150 , 90)
if self.hangman[5] == 1:
qp.drawLine(120 , 130 , 90 , 150)
if self.hangman[6] == 1:
qp.drawLine(120 , 130 , 150 , 150)
qp.end()
def keyPressEvent(self , e):
key = e.key()
if key == QtCore.Qt.Key_Escape:
self.close()
elif key == QtCore.Qt.Key_Q:
self.hangmanfun('q')
elif key == QtCore.Qt.Key_W:
self.hangmanfun('w')
elif key == QtCore.Qt.Key_E:
self.hangmanfun('e')
elif key == QtCore.Qt.Key_R:
self.hangmanfun('r')
elif key == QtCore.Qt.Key_T:
self.hangmanfun('t')
elif key == QtCore.Qt.Key_Y:
self.hangmanfun('y')
elif key == QtCore.Qt.Key_U:
self.hangmanfun('u')
elif key == QtCore.Qt.Key_I:
self.hangmanfun('i')
elif key == QtCore.Qt.Key_O:
self.hangmanfun('o')
elif key == QtCore.Qt.Key_P:
self.hangmanfun('p')
elif key == QtCore.Qt.Key_A:
self.hangmanfun('a')
elif key == QtCore.Qt.Key_S:
self.hangmanfun('s')
elif key == QtCore.Qt.Key_D:
self.hangmanfun('d')
elif key == QtCore.Qt.Key_F:
self.hangmanfun('f')
elif key == QtCore.Qt.Key_G:
self.hangmanfun('g')
elif key == QtCore.Qt.Key_H:
self.hangmanfun('h')
elif key == QtCore.Qt.Key_J:
self.hangmanfun('j')
elif key == QtCore.Qt.Key_K:
self.hangmanfun('k')
elif key == QtCore.Qt.Key_L:
self.hangmanfun('l')
elif key == QtCore.Qt.Key_Z:
self.hangmanfun('z')
elif key == QtCore.Qt.Key_X:
self.hangmanfun('x')
elif key == QtCore.Qt.Key_C:
self.hangmanfun('c')
elif key == QtCore.Qt.Key_V:
self.hangmanfun('v')
elif key == QtCore.Qt.Key_B:
self.hangmanfun('b')
elif key == QtCore.Qt.Key_N:
self.hangmanfun('n')
elif key == QtCore.Qt.Key_M:
self.hangmanfun('m')
def hangmanfun(self , text):
for i in range(self.layout.count()):
w = self.layout.itemAt(i).widget()
if isinstance(w , QtGui.QPushButton):
if text == False:
button = self.sender()
text = str(button.text()).lower()
elif w.text() == text.upper():
button = w
if text not in self.input:
self.update()
for i in self.hangman:
if i == 0:
temp = self.hangman.index(i)
self.hangman[temp] = 1
break
if 0 not in self.hangman:
self.find.setText('You Lose')
button1 = QtGui.QPushButton('Reset')
button1.clicked.connect(self.dummy)
self.layout.addWidget(button1,0,10)
button.setParent(None)
else:
if button.parent() == None:
pass
else:
temp = []
for x in range(len(self.input)):
if self.input[x] == text:
temp.append(x)
for temp1 in temp:
self.DisList[temp1] = '_' + text + '_ '
self.display = ''.join(self.DisList)
self.find.setText(self.display)
button.setParent(None)
for x in range(len(self.input)):
if self.input[x] == text:
self.templist.remove(text)
if len(self.templist) == 0:
self.find.setText('Congrats , you have won')
button1 = QtGui.QPushButton('Reset')
button1.clicked.connect(self.dummy)
self.layout.addWidget(button1,0,10)
break
def dummy(self):
self.hangman = [0 , 0 , 0 , 0 , 0, 0 ,0]
for i in range(self.layout.count()):
self.layout.itemAt(i).widget().close()
self.window()
def main():
app = QtGui.QApplication(sys.argv)
ex = Hangman()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment