상속 관계에 있는 클래스들 사이에서 부모 클래스에 정의된 메소드를 그대로 사용하지 않고 자식 클래스에서 같은 이름으로 메소드를 새롭게 정의하여 사용하도록 할 수 있는데 이를 메소드 오버라이딩(method overriding) 이라고 합니다. 스타크래프트 유닛들은 플레이어가 지정한 위치나 방향으로 이동을 할 수 있는데 유닛마다 서로 다른 이동 속도를 가집니다. 빠른 유닛도 있고 느린 유닛도 있는 거죠. 참고로 공중 유닛을 위한 Flyable 클래스에는 이미 공중 이동 속도를 의미하는 flying_speed 가 정의되어 있습니다. 그래서 이번에는 지상 유닛을 위한 이동 속도를 의미하는 speed 를 Unit 클래스에 추가해보겠습니다. 그리고 이동을 위한 move() 메소드도 새롭게 정의하고 구분을 위해 [지..
스타크래프트에는 레이스와 같은 공중 유닛도 굉장히 많은데요. 공중 유닛 중에도 레이스와 같이 공격이 가능한 공중 공격 유닛이 있는 반면 마린, 탱크와 같은 지상 유닛을 다른 위치로 수송만 하며 공격력은 없는 드랍쉽 같은 공중 유닛도 있습니다. 공중 유닛의 경우 하늘을 날아서 이동하는데 이 기능은 지상 유닛에는 적용될 수 없는 내용이므로 날 수 있는 기능을 정의하는 클래스를 별도로 하나 만들겠습니다. 클래스 이름은 Flyable 이라고 하고 __init__() 생성자에는 날아서 이동할 때의 속도를 의미하는 flying_speed 를 멤버변수로 두겠습니다. 공중 유닛은 무게나 크기, 종류 및 이동 속도 업그레이드 여부에 따라 속도가 달라지거든요. 그리고 실제로 이동하는 동작을 fly() 함수에 정의할텐데, ..
이번에는 상속에 대해 공부해보겠습니다. 상속은 일반적으로 자식이 부모로부터 재산을 물려받는 것을 의미하죠. 스타크래프트에는 공격을 할 수 없는 유닛도 있다고 설명 드렸는데, 부상당한 유닛을 치료해주는 메딕이 그 대표적인 예입니다. 메딕과 같이 공격력이 없는 유닛은 AttackUnit 클래스로 생성하기에는 알맞지 않으니, 이전에 만들었던 Unit 클래스를 다시 가져와보겠습니다. AttackUnit 클래스에 공격력을 의미하는 damage 멤버 변수가 있으므로 Unit 클래스는 공격 가능 여부와 상관 없이 일반적인 유닛을 위한 클래스로 수정을 해보겠습니다. class Unit: def __init__(self, name, hp, damage): # 공격력인 damage 제외 self.name = name se..
클래스 내에서 정의되는 함수인 메소드(method)를 공부해보겠습니다. 클래스에는 여러 개의 메소드를 정의할 수 있는데 일반 함수와 다른 점이라면 메소드는 전달값을 정의하는 부분 처음에 self 를 적어준다는 점, 그리고 메소드 내에서 self. 을 통해 클래스 멤버변수에 접근 가능하다는 점입니다. 스타크래프트에는 공격을 할 수 있는 유닛이 대부분이지만 공격을 할 수 없는 유닛도 있습니다. 예를 들면 유닛들의 수송을 담당하는 드랍쉽이나 부상당한 유닛을 치료해주는 메딕처럼 말이죠. 그래서 이번에는 공격을 할 수 있는 유닛만을 위한 새로운 클래스를 정의하고 이름은 AttackUnit 이라고 하겠습니다. AttackUnit 은 Unit 클래스와 동일하게 __init__() 생성자에서 name, hp, dama..
클래스 내에서 정의된 변수를 멤버변수라고 하며 self. 와 함께 사용할 수 있습니다. Unit 클래스의 경우 name, hp, damage 가 멤버변수가 되며 클래스 내에서는 self.name 과 같은 방식으로 값을 설정하고 사용합니다. class Unit: def __init__(self, name, hp, damage): # 3개의 전달값 self.name = name # 멤버변수 name self.hp = hp # 멤버변수 hp self.damage = damage # 멤버변수 damage print("{0} 유닛이 생성되었습니다.".format(self.name)) print("체력 {0}, 공격력 {1}".format(self.hp, self.damage)) 새로운 유닛을 하나 만들어보겠습니다..
클래스에는 __init__() 메소드가 있습니다. 이를 생성자(Constructor) 라고 부르는데요, 사용자가 따로 호출하지 않아도 클래스 객체를 생성할 때 자동으로 호출이 되는 부분입니다. 객체를 생성할 때는 이 생성자의 전달값에 해당하는 갯수만큼 값을 던져줘야 합니다. 단, self 부분은 제외하고 말이죠. 앞 장에서 만든 코드를 다시 가져와보겠습니다. __init__() 생성자 부분을 보면 self 를 제외하고 name, hp, damage 를 전달받고 있으며 아래에서 유닛을 생성할 때는 각각 3개씩 값을 던져주고 있습니다. class Unit: def __init__(self, name, hp, damage): # 3개의 전달값 self.name = name self.hp = hp self.da..
스타크래프트. 1990년대 후반에 나온 이 게임은 인기가 정말 대단했습니다. 필자는 새로운 게임을 배우는 것이 귀찮은 나머지 원래부터 좋아하던 축구 게임만 즐기고 있었는데 PC방에 가는 친구들 중 90% 가 모두 스타크래프트만 했습니다. 도저히 안되겠다 싶어서 게임을 배우기 시작했고 금방 그 재미에 푹 빠지고 말았지요. 20년이 훌쩍 지난 지금까지도 이 게임을 즐기는 사람들이 많은 것을 보면 참 신기하면서도 고개가 끄덕여집니다. GG (Good Game) 라는 신조어를 만들어낸 국민 게임 스타크래프트, 파이썬으로 조금이나마 함께 만들어 봅시다. 이번에 배울 클래스는 처음 접하는 분들에게는 다소 어렵게 느껴질 수 있습니다. 어쩌면 파이썬 기본편 내용 전체를 통틀어서 가장 어려운 부분이 아닐까 싶기도 하네요..
지금까지 배운 내용을 복습하기 위한 퀴즈를 드리겠습니다. 직접 한 번 풀어보시고 나서 정답을 확인해주세요. Quiz) 당신의 회사에서는 매주 1회 작성해야 하는 보고서가 있습니다. 보고서는 항상 아래와 같은 형태로 출력되어야 합니다. - X 주차 주간보고 - 부서 : 이름 : 업무 요약 : 1주차부터 50주차까지의 보고서 파일을 만드는 프로그램을 작성하시오. 조건 : 파일명은 '1주차.txt', '2주차.txt', ... 와 같이 만듭니다. 완성된 코드를 실행시키면 소스코드와 동일한 위치에 다음과 같이 50개의 파일이 생기면 됩니다. 1주차.txt 2주차.txt 3주차.txt ... 50주차.txt 그리고 각 파일에는 해당 주차에 해당하는 주간보고 내용이 포함됩니다. (예 : 35주차.txt 파일 내용)..
파일을 가지고 어떤 작업을 할 때 open() 을 통해 파일을 열고 나면 반드시 close() 를 통해 닫아야 한다고 설명드렸습니다. close() 를 항상 잊지 말아야 한다는 부담을 드렸는데요. 이번 단원에서 그 부담을 해소해드리겠습니다. 파이썬에서는 with 란 것이 있는데, 이를 이용하면 파일을 열고 나서 close() 를 호출하지 않아도 자동으로 닫아주는 역할을 해줍니다. 아래와 같은 형태로 생겼는데요. with 작업 as 변수명: 실행 명령문1 실행 명령문2 ... with 뒤에 따라오는 작업이 바로 파일을 여는 open() 함수가 들어가는 부분입니다. open() 을 통해 열린 파일은 as 뒤에 있는 변수명으로 접근할 수 있게 되구요. if, for, while, def 와 같이 문장 끝에 콜..
컴퓨터로 문서 작업을 하다가 갑자기 프로그램이 먹통이 되면서 '응답 없음' 상태로 빠지는 아찔한 경험은 아마 한 번씩 해보셨을 겁니다. 운이 좋으면(?) 잠시 후에 정상으로 돌아오기도 하지만 많은 경우에는 프로그램이 비정상 종료됩니다. 해가 갈수록 자동 저장 기능이 프로그램마다 잘 제공되고 있어서 다시 파일을 열어 보면 그래도 어느 정도까지 작업한 분량이 남아있지만 과거에는 송두리째 작업 내용을 날리는 경우도 많았지요. 그러다 보니 습관적으로 저장 단축키인 Ctrl + s 를 눌러서 지금까지 하던 작업을 수시로 저장했던 기억이 납니다. 파이썬으로 작성한 프로그램이 실행될때는 일반적으로 많은 변수가 생겼다가 사라지고, 변수의 값도 자주 변하게 마련입니다. 새로운 리스트를 하나 만들어서 연속된 숫자 데이터를..
컴퓨터에는 수많은 파일이 있습니다. 컴퓨터를 구동시키기 위해 필요한 파일, 어떤 프로그램의 설정 정보를 담고 있는 파일, 업무용 엑셀 파일 등등 그 종류도 굉장히 다양한데요. 파이썬을 이용하면 이러한 파일을 직접 만들수도 있고 또 파일 내용을 불러올 수도 있습니다. 프로그래밍에서 파일을 다룰 때는 일반적으로 1. 파일을 열고 2. 파일에 어떤 내용을 쓰거나 읽고 3. 파일을 닫는 순서로 진행합니다. 파일을 열기 위해서는 open() 이라는 함수를 이용하면 되며 생김새는 이렇습니다. open("파일명", "열기 모드", encoding="인코딩") 이 중에서 2번째로 전달하는 "열기 모드" 에는 읽기(read, "r"), 쓰기(write, "w"), 이어쓰기(append, "a") 가 있습니다. 읽기는 말..
print() 문에서 활용할 수 있는 다양한 출력 포맷에 대해 공부해보겠습니다. 우리가 문자열 포맷을 공부를 할 때 다음과 같이 format() 을 이용할 수 있었는데요. print("{0}".format(500)) # {0} 위치에 500 값 출력 format() 내의 값들이 각각 중괄호 {0}, {1}, ... 위치에 들어가게 되는데 중괄호 부분을 수정하면 보다 다양한 형태로 출력이 가능합니다. 위 코드에서 {0} 부분을 {0: >10} 으로 바꾸게 되면 500 이란 값을 출력하는데 총 10칸의 공간을 확보한 상태에서 오른쪽으로 정렬을 하고 나머지 공간은 빈 칸으로 채우게 됩니다. 이 때 콜론(:) 뒷 부분에 오는 빈 칸, >, 10 의 역할이 각각 빈 칸으로 채우기( ), 오른쪽으로 정렬하기(>),..
- Total
- Today
- Yesterday
- c언어
- Mac
- onlineclass
- 비주얼 스튜디오 코드
- pygame
- 파이게임
- game
- Xcode
- 파이썬
- pycharm
- Tkinter
- 행맨
- 주피터노트북
- 아나콘다
- repl.it
- 나도코딩
- 코랩
- coloso
- 환경설정
- GUI
- Visual Studio Code
- Colab
- vscode
- Unity
- Coding
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |