자동판매기 클래스로 구현하기

이미지
이전 게시물 중 절차지향적으로 만든 파이썬 자판기 예제가 있습니다. 이번에는 클래스 를 이용해 자판기를 만들어 볼 생각입니다. 꼭 자판기를 클래스를 이용해 만들 필요는 없지만, 우리의 목적은 늘 그렇듯이 프로그래밍 스킬 향상이므로 이번에는 클래스를 이용해 객체지향적으로 자판기 를 만들어 보고자 합니다. 어제 2개월 진도반 수업시 함께 만들어본 자동판매기 클래스 버전입니다. 판매목록을 보여주고, 투입금액을 입력받은 후 물품을 선택해 구입하는 방식입니다. [자동판매기 실행화면] 먼저 코드를 한번 살펴보겠습니다. class Zapangi: def __init__(self): self.p = {'콜라':500, '사이다':400, '환타':600} self.n = {1:'콜라', 2:'사이다', 3:'환타'} self.money = 0 def showmenu(self): print('[메뉴정보]') i = 1 for k, v in self.p.items(): print(str(i)+'.', k, v, '원') i+=1 print() def inputmoney(self): while True: try: self.money += int( input('돈 투입:') ) except Exception as e: print(e) continue ...

파이썬으로 구현한 채팅 클라이언트앱

이미지
이전 채팅 서버에 이어 이번에는 채팅 클라이언트(Chat Client) 입니다. 서버측 프로그래밍 은 이전 게시물을 참조하기 바랍니다. [채팅 클라이언트 화면] Python + PyQt5를 이용해 만들어 보았습니다. 채팅 클라이언트는 client.py, window.py 두개의 파일로 구성되어 있습니다. 1. client.py 파일 분석 이 파일은 클라이언트 소켓 관련된 클래스이며, 서버 연결, 데이터 송수신과 관련된 처리를 담당합니다. 전체 소스코드를 살펴보겠습니다. from threading import * from socket import * from PyQt5.QtCore import Qt, pyqtSignal, QObject class Signal(QObject): recv_signal = pyqtSignal(str) disconn_signal = pyqtSignal() class ClientSocket: def __init__(self, parent): self.parent = parent self.recv = Signal() self.recv.recv_signal.connect(self.parent.updateMsg) self.disconn = Signal() self.disconn.disconn_signal.connect(self.parent.updateDisconnect) self.bConnect = False def __del__(self): self.stop() def connectServer(self, ip, port): ...

파이썬으로 구현한 채팅 서버앱

이미지
이번에 만든 주제는 파이썬 다자간 채팅 프로그램(Chat Server) 입니다. 구글 검색을 통해 찾아봐도 파이썬 소켓 모듈을 이용한 간단한 예제(에코 서버)는 있지만, 쓸만한(?) 코드는 찾기 힘들어 Python + PyQt5를 이용해 직접 만들어 보았습니다. 먼저 채팅 프로그램은 채팅 Server(접속 대기) 와 채팅 Client(접속 하는 자) 로 나누어 제작하고, 이번 포스팅에서는 서버 에 대한 내용을 다룹니다. 대학시절, 네트워크 프로그래밍에 관심이 많아 C++을 이용해 여러가지 (네트워크 빙고게임, 채팅, 동영상 전송 등)를 제작하며 소켓 프로그래밍에 입문하였고, 벌써 20년이라는 세월이 지났네요. 파이썬으로 소켓을 다루어 본 것은 이번이 처음입니다만 역시 파이썬... 쉽습니다. 20년이란 세월이 흘렀지만, 소켓은 크게 변한게 없습니다. 소켓은 버클리 대학에서 만들어 버클리 소켓이라고도 합니다. Socket은 복잡한 컴퓨터 네트워크 구조 (OSI 7 Layer)를 모르더라도 (즉, 우편을 보낼때, 받는주소와 내용을 적어 우체통에만 넣으면 전달되는 것처럼) 프로그래머가 소켓이라는 소프트웨어 도구를 이용해 보내고자 하는 내용을 받는 IP주소로 편리하게 전달해 주는 역할을 합니다. 우리는 우편 시스템 (보내는 사람->우체통->우체국->이동->도착지 우체국->전달완료) 을 몰라도 받는 사람의 주소만 알면 편리하게 내용을 전달하는 원리와 같습니다. 이제 본격적으로 채팅 서버를 살펴 보겠습니다. 먼저 채팅서버를 실행한 화면입니다. [채팅 서버 화면] 채팅서버의 주요 기능은 아래와 같습니다. 1. 서버 IP 주소, Port 설정 2. 접속자 정보 창 3. 받은 메시지 보기, 메시지 전송 기능 4. 다자간 채팅 기능 (여러명 접속 가능) 아래는 다음 포스팅에 살펴볼 클라이언...

파이썬으로 구현한 스네이크 게임

이미지
이번 예제는 Python 과 PyQt5를 이용한 스네이크 게임(Snake Game)입니다. [게임 화면 캡쳐] 구글에 "스네이크 게임"으로 검색하면 나오는 고전게임이며, 키보드 상,하,좌,우 화살표 키를 이용해 뱀을 이동시켜 먹이를 먹는 게임입니다. [구글 스네이크 게임 화면] 뱀이 먹이를 먹으면 한 마디씩 몸통이 늘어나는 방식이며, 뱀 머리가 자신의 몸통에 닿거나 맵의 바깥쪽으로 나가면 게임이 종료 됩니다. 예전에 저도 C++과 MFC를 이용해 만들어 본 적이 있지만(홈페이지 예제 참조),  이번에는 파이썬을 이용해 만들어 보았습니다. 스네이크 게임은 프로그래밍 공부하기 참 좋은 주제입니다. 파이썬을 공부하고 있다면 꼭 한번 도전해 보기 바랍니다. 전체 게임 소스코드는 4개의 파이썬 파일 (*.py)로 구성되어 있습니다. 1. main.py 앱을 시작시키는 메인함수. 2. window.py 프로그램 창(윈도우)를 생성하는 역할을 담당. 3. snake.py 뱀 마디 클래스(CNode)와 이를 조합한 뱀클래스(CSnake) 로 구성. 4. map.py 뱀이 이동하는 맵을 생성하고, 게임의 진행을 담당. 이 게임을 만드는데 사용된 주요 파이썬 문법 및 모듈은 아래와 같습니다. 1. if 조건문, for, while 반복문, 기본 자료형(int, bool, list 등) 2. class, function(함수), thread 및 동기화 3. PyQt5를 이용한 GUI 처리, Keyboard 입력처리 대략적인 개요를 설명드렸고, 이제 코드를 한번 살펴 볼까요. 코드는 위에서 언급한 4가...

입장료 계산프로그램을 파이썬으로 만들어보기

이미지
오늘은 입장료 계산 프로그램을 만들어 볼 계획입니다. 놀이공원, 박물관 등을 방문시 입장료를 계산하는 과정을 파이썬 코드로 구현해 보았습니다. 먼저 해당 박물관의 입장료는 아래와 같습니다. 기본적인 코드의 흐름은 아래와 같습니다. 1. 인원 수 파악 2. 국가 유공자는 성인 수에서 제외 3. 요금 계산시 단체와 개인으로 분기 4. 65세 이상 성인은 성인의 인원수에서 빼기 5. 65세 이상 성인은 초등학생의 인원수에 더하기 6. 요금 계산 및 출력 다음은 Python으로 구현된 전체 코드입니다. # 요금 튜플 선언 (개인, 단체) p = (2000, 1000, 500) pg = (1500, 700, 300) def countingPeople(target): while True: try: x = int(input(target+' 인원 수:')) except Exception as e: print('오류', e) print('다시 입력 바랍니다\n') continue else: return x while True: # 성인 인원 조사(adult) a = countingPeople('전체 성인') a65 = countingPeople('65세 이상 성인') hero = countingPeople('국가유공자') if a65+hero > a: print('성인인원 수가 맞지 않습니다') print('다시 입력해 주시기 바랍니다\n') print() continue # 청소년 인원 조사(teenag...

파이썬으로 만든 간단 슈팅게임앱

이미지
이번에 만든 주제는 파이썬 + PyQt5로 구현한 슈팅게임(Shooting Game) 입니다.   주요 기능으로, 1. 키보드를 이용한 아군 이동 2. 적군 랜덤 생성 및 이동 3. 적군 아군 충돌 감지 4. 적군 아군 총알 충돌 감지 이 코드를 이해하기 위해 필요한  사전 지식 입니다. 1. 파이썬 자료형 (정수, 문자, 리스트)  2. 파이썬 모듈 (C++의 #include와 유사)  3. 파이썬 클래스 (상속, 객체변수, 생성자) 및 쓰레드, 동기화  4. PyQt5 클래스 이해 (QPoint, QRect, QWidget, QPainter, QLayoutBox 등) PyQt5 설치 및 소개 링크   소스코드 전체 프로그램 소스는 크게 3개의 파이썬 파일(모듈)로 이루어져 있습니다. 1. map.py (아군, 적군 클래스 및 게임을 진행하는 CMap클래스로 구성)  아래는 map.py 파일의 전체 소스코드 입니다. from PyQt5.QtCore import * from PyQt5.QtGui import * from random import * import os import threading import time class CUnit: size = 10 def __init__(self): self.rect = QRect() self.color = QColor(0,0,0) class CMy(CUnit): def __init__(self): super().__init__() self.hp = 10 self.color.setRgb(0,0,255,255) self.bullet = [] class CEnemy(CUnit): def __init__(sel...

PyQt기반 타자연습게임앱 만들기

이미지
이번에 만든 주제는 파이썬 타자연습게임(Typing Game) 입니다. 주요 기능 은 아래와 같습니다. 1. 한글, 영어 선택 기능 2. 난이도 선택 기능 (초, 중, 고급) 이 코드를 이해하기 위해 필요한 사전 지식 입니다. 1. 파이썬 자료형 (정수, 문자, 튜플, 리스트) 2. 파이썬 모듈 (C++의 #include와 유사) 3. 파이썬 클래스 (상속, 객체변수, 생성자) 및 쓰레드, 동기화 4. PyQt5 클래스 이해 (QPoint, QRect, QWidget, QPainter, QLayoutBox 등) 전체 프로그램 소스는 크게 3개의 모듈로 구성되어 있습니다. 1. map.py (단어 클래스 및 게임 진행 클래스로 구성) from PyQt5.QtCore import QPointF, QRect from PyQt5.QtGui import QFont from threading import Thread, Lock from random import randint from time import sleep # 튜플 단어장 kor = ('문자열', '정수', '리스트', '튜플', '딕셔너리', '타입', '출력', '반복문', '변수', '파이썬') eng = ('input', 'int', 'string', 'type', 'list', 'class', 'print', 'python', 'tuple', 'for', 'if', 'while', 'thread', 'random...

이 블로그의 인기 게시물

Qt Designer 설치하기

PyQt5 기반 동영상 플레이어앱 만들기