Python basic
  • Python 기초 수업
  • Python 설치
  • Python의 기본
    • Python 시작하기
    • 변수(Variable)
    • 산술 연산자
    • 문자열(String) 출력
    • 문장(Statement)
  • 자료형
    • 정수형(Integer)
    • 실수형(Float)
    • 부울형(Bool)
    • 복소수형(Complex)
    • 문자열형(String)
  • 조건문
  • 자료구조
    • List
    • Set
    • 튜플(Tuple)
    • 딕셔너리(Dictionary)
  • 반복문
  • 문제 타임
  • 함수(Function)
    • 기본형 함수
    • 매개변수(Parameter)와 반환값(Return Value)
    • 가변매개변수 함수
    • 함수 설명 표시
    • 변수의 범위
  • 모듈(Module)
    • 모듈의 이용
    • __name__ 그리고 '__main__'
  • 예외처리(Exception Handling)
    • try, except, else, finally
  • 클래스(Class)
    • Class 심화
  • PyQt
    • PyQt 설치
    • PyQt Widget
      • QWidget
      • QLabel
      • QLineEdit
      • QTextEdit
      • QPushButton
      • QCheckBox
      • Application Make
        • Widget의 배치 #1
        • Widget의 배치 #2
        • 숫자 맞추기 게임
        • 야구게임
  • OPEN API(공공데이터 포탈)
    • 공공데이터 사용하기
  • 크롤링 (Crawling)
    • Crawling Library 설치
    • 날씨, 미세먼지 농도
  • SQLlite
    • DB의 작성
  • Dic 참고
  • 함수 참고 코드
  • Widget 배치 시작 코드
  • 야구게임
Powered by GitBook
On this page
  1. PyQt
  2. PyQt Widget
  3. Application Make

야구게임

기존 만들었던 야구 게임을 GUI로 표현해봅시다.

# -*- coding: UTF-8 -*-
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qt
from PyQt5 import QtGui, QtCore
import random
class App(QWidget):
    def __init__(self):
        super(App, self).__init__()
        self.setWindowTitle('Window!!!')
        self.setGeometry(100, 100, 400, 400)
        # move(가로, 세로), resize(가로, 세로)
        self.makeQuiz()
        self.addTitle()
        self.addInput()
        self.addResult()
        self.addButtons()
    def addTitle(self):
        self.label = QLabel('야구 게임!!!', self)
        self.label.resize(400, 80)
        self.label.setAlignment(Qt.AlignCenter)
        #글자 크기 변경 
        font = QtGui.QFont()
        font.setPointSize(30)
        self.label.setFont(font)
    def addInput(self):
        #입력 : 
        self.input_title = QLabel('번호 3자리 : ', self)
        self.input_title.move(30,100)
        self.input = QLineEdit(self)
        self.input.move(100, 100)
    def addResult(self):
        self.result = QTextEdit(self)
        self.result.move(30, 160)
        self.result.resize(340,300)
        self.result.setReadOnly(True)
    def addButtons(self):
        self.btn_reset = QPushButton(self)
        self.btn_reset.setText('초기화')
        self.btn_reset.resize(340, 50)
        self.btn_reset.move(30, 550)
        self.btn_reset.clicked.connect(self.reset)
        self.btn_confirm = QPushButton(self)
        self.btn_confirm.setText('입력')
        self.btn_confirm.resize(80, 40)
        self.btn_confirm.move(240, 93)
        self.btn_confirm.clicked.connect(self.getUserInput)
    def getUserInput(self):
        #사용자 입력 값이 숫자가 아니면 알림을 준다.
        if(not self.input.text().isnumeric()) :
            QMessageBox.about(self, '알림', '숫자를 입력하세요!!!')
            self.input.setText('')
            return
        if(not len(self.input.text()) == 3) :
            QMessageBox.about(self, '알림', '3자리 숫자를 입력하세요!!!')
            self.input.setText('')
            return
        self.checkRule()
    def keyPressEvent(self, event) :
        print(event.key())
        if event.key() == QtCore.Qt.Key_Return: 
            self.getUserInput()
    def makeQuiz(self):
        number = [0,1,2,3,4,5,6,7,8,9]
        random.shuffle(number)
        #FIXME 이 앞자리에 있을 수 있음!!! 
        self.quizNum = number[:3]
        print(self.quizNum)
    #사용자 입력값이 야구 게임룰에 의해 어떤 결과인지 보여주는 함수
    def checkRule(self):
        first = self.input.text()[0]
        second = self.input.text()[1]
        third = self.input.text()[2]
        first = int(first)
        second = int(second)
        third = int(third)
        #자리와 숫자가 같다 S, 숫자가 같다 B, 같은 숫자가 없다 O
        #ball 찾는다 in quizNum
        ballCount = 0
        strikeCount = 0
        if(first in self.quizNum) :
            ballCount += 1
        if(second in self.quizNum) :
            ballCount += 1
        if(third in self.quizNum) :
            ballCount += 1
        #s 찾는다. 
        if(first == self.quizNum[0]) :
            strikeCount += 1
            ballCount -= 1
        if(second == self.quizNum[1]) :
            strikeCount += 1
            ballCount -= 1
        if(third == self.quizNum[2]) :
            strikeCount += 1
            ballCount -= 1        
        if(strikeCount == 3) :
            QMessageBox.about(self, '!!!WOW!!!', '정답을 맞추셨습니다.')
            self.reset()
        elif(ballCount > 0 or strikeCount > 0):
            self.result.append('결과는 {}S, {}B 입니다.'.format(strikeCount,ballCount))
        else :
            self.result.append('Out 입니다.')
        self.result.repaint()
        self.input.setText('')
        self.input.repaint()
    def reset(self):
        self.makeQuiz()
        self.result.clear()
if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = App()
    window.show()
    sys.exit(app.exec_())
Previous숫자 맞추기 게임NextOPEN API(공공데이터 포탈)

Last updated 6 years ago