Uncategorized

이수안 컴퓨터 연구소의 이수안입니다 오랜만에 찾아 뵙는데요 2019년도 새해 첫 강의를 시작하겠습니다 오늘은 파이썬, pygame 가지고 레이싱 카 게임을 만들어보는 걸 해 보도록 하겠습니다 목차는 파이썬 설치를 해야되고, pygame 설치, 그리고 파이썬 레이싱 카 게임 만들기를 함께 따라하면서 만들어 보시기를 바랍니다 왜 강의 때마다 파이썬 설치, 파이게임 설치하는 방법을 알려드리냐면 이 강의를, 이 유튜브 영상을 처음보는 사람들을 위해서 이렇게 매번 설명을 하는데 파이썬 설치와 파이썬 게임 설치는 인터넷에 충분히 많은 정보가 있으니까 따라해 보시기를 바라고요 파이썬 먼저 다운로드 하시고 자신의 운영체제와, 32 비트인지 64 비트인지 체크하시고 다운로드 하시면 되고요 Install하시고 여기 PATH 등록에 체크를 해 주세요 여기 밑에 체크하는 부분이 있습니다 그리고 pygame 설치는 pygame 은 잘 아시다시피 게임을 만들기 위해서 굉장히 많은 게임적인 요소, 멀티미디어 애플리케이션에서 파이게임 라이브러리를 쓰고 있는데 오픈 소스이고 파이썬에서 제공하고 있는 그런 라이브러리입니다 그래서 파이썬에 pygame 라이브러리를 추가해서 설치하는데 이거 질문하시는 분들이 많은데 설치 하실 때 pip install pygame pip install pygame 이거를 콘솔창에서 콘솔창을 열어서, 커멘드 프롬프트를 열어서 실행시키면 됩니다 이게 잘 동작하려면 PATH에 체크를 해주셔야 해요 이 질문이 많아서 다시 한 번 언급을 드렸습니다 그리고 pygame 라이브러리가 잘 설치되있느냐? 이것을 우리가 알기 위해서 import해 보고 import 해서 import pygame 했더니 정상적으로 버전과 함께 메시지가 뜨면 잘 설치가 되어 있는 것입니다 본격적으로 파이썬을 가지고 레이싱 카 게임 만들기를 해 볼텐데 레이싱 카, 제가 왜 레이싱 카를 준비했냐면 이게 제가 준비한, pygame 라이브러리를 이용해서 PyCar라는 게임을 만들 예정인데 이걸 준비한 게 새해가 시작되고 설날이었잖아요 제가 자동차에 계속 앉아 있다보니까 계속 막히고 이런 것들이 답답해서 그 답답함을 풀고자 오고 가는 차 안에서 코딩도 하면서 준비를 했습니다 제가 자동차 게임을 준비했기 때문에 예전과 다르게 퀄리티가 높아요 퀄리티가 높고 이미지나 이런 것들을 다 다운로드하고 사운드도 적합한 걸 만들어서 제가 게임 리소스를 만들어 놨습니다 게임 리소스는 이것을 찾는 과정이 오히려 게임을 만드는 과정보다 오래 걸려요 제가 이렇게 다 찾아 놨기 때문에 여기보면 crash, engine, race와 관련된 음성 사운드 파일이 있고요 그리고 나머지 이미지 파일들이 있는데 이 모든 게임 리소스는 주소를 올려놨고 주소 말고도 제 사이트에, 제 홈페이지에 올려놨습니다 홈페이지에 보시면 특강에, 특강부분에 나중에 유튜브에도 올라 가겠죠 특강부분에 파이썬 레이싱 카 게임 이렇게 만들어 놨고요 그리고 강의자료, 강의자료를 누르시면 지금 현재 보시는 강의자료 내용이 다운로드 되어 보실 수 있고요 그 다음에 게임 리소스를 누르시면 게임 소스를 다운로드 할 수 있습니다 게임 리소스 다운로드해서 한 번 해볼게요 게임 리소스를 받고, 파일을 받으셨죠? 받으시고 압축을 푼 다음에 압축을 푼 폴더 내에 작업하시는것이좋습니 그래서 이 압축을 제가 먼저 풀어 볼게요 압축을 풀고 압축을 푸니까 아까 설명드렸던 게임 리소스가 있습니다 이 폴더 안에서 작업을 하셔야 합니다 소스 코드나 이런 게

홈페이지나 다운로드 하시고 혹시 이런 링크들은 유튜브 설명에 추가로 주소를 넣어드리도록 할게요 리소스가 확보 되었습니다. 그래서 여러분들이 굉장히 많은 시간 동안 이 리소스들을 찾아야 하는데 만들거나 이래야 하는 데 제가 다 해놨습니다 그러면 이제 코딩만 하면 돼요 이 코딩만 잘 따라하시면 충분히 자동차 게임을 만드실 수 있습니다 여러분 잘 알다 시피 파이썬 IDLE를 띄웁니다 IDLE를 띄우고 여기에 New하신 다음에 새로운 문서로 하나 만들어 놔야겠죠 새로운 문서 하나 띄우고요 이거를 제가 크기를 키울게요 잘 안 보이실 수 있으니까 크기를 키워서 이 정도면 아마 충분히 잘 보이실 수 있을 거 같아요 처음에는 import pygame을 해야 합니다 그리고 import ramdom 자동차나 이런 것들을 좀 가져오려면 랜덤 필요하고요 그 다음 sleep을 걸기 위해서 필요한 여러 요소들 time을 가져와야 됩니다 저번에 작다고 하신 분이 있어서 제가 좀 많이 키워 보겠습니다 전체 화면으로 하고 크게! 그리고 이런 질문을 하신 분들이 있어요 왜 기본 IDLE를 사용하느냐 그런데 여러분 기본으로도 충분히 게임을 만들 수 있다는 걸 보여드리기 위해서 그 다음에 이 코드 자체가 200줄이 안돼요 200줄이 안되는 데 자동차 게임을 만들 수 있거든요? 그렇기 때문에 어떤 놀라움을 보여 드리고자 이런 식으로 작업을 하고 있습니다 저도 이게 불편하긴 하지만 어쨌든 게임 창 만들어야 되겠죠? 게임 창 만들기 위해서 WITH, HEIGHT 전체 크기를 480에 800 이렇게 정의를 해 놓을 게요 그 다음에 색깔, 게임 할 때마다 색깔 들어가는 부분있잖아요? 기본적으로 블랙 화이트 들어가야 하겠고 그리고 제가 도로 색깔을 생각하다 보니까 도로 색깔이 회색이잖아요 그래서 GRAY 그 다음 레드, 레드는 중요한 텍스트 메세지나 게임 화면 구성할 때 띄우려고 레드를 설정 해놨습니다 그런데 자동차 게임이니까, 이거 저장 좀 할게요 저장을 어디다 해야 하냐면 제가 아까 얘기했다시피 다운로드 한 여러분들이 다운로드한 ‘PyCar’라는 폴더 내에 이름을 넣도록 합니다 저도 ‘PyCar’라고 할게요 이름을 ‘PyCar’라고 했습니다 저장을 했고요 이 상태에서 이제 저장을 하시면서 따라하시면 되겠습니다 그런데 자동차 게임에서 어떤 객체가 필요하죠? 바로, 말 그대로 Car라는 객채가 필요하겠죠 Car라는 객체를 불러오고 그 다음에 아까 우리가 받았던 리소스들 있잖아요 그 리소스들을 위해서 리소스를 좀 받아 올게요 그런데 이제 리소스가 리소스를 보면 이렇게 자동차 여러 개가 있잖아요 그런데 이 자동차를 먼저 가져 올게요 제가 20개나 준비했어요 왜냐 중간 중간에 차가 바뀌면서 게임의 다이나믹스를 높히기 위해서 이렇게 준비했습니다 총 20개니까요 20개를 다 여러분들이 가져와야 합니다 20개를 다 작업을 해 주어야 되겠죠 (20개를 복사해 옵니다) 이렇게만 하면 안되고 번호를 다 바꿔 주어야겠죠 이렇게 다 가져오는 이유가 이 중에서 랜덤하게 자동차들을 게임 다시 시작 할 때마다 다시 보여주어 게임의 다이나믹스를 높혀주는 형태로 하기 위해서 일일히 이런 과정을 거치고 있습니다 그래도 이 정도면 별 거 없죠? 20개 밖에 안되니까 여러분들이 먼저 이렇게 생각하시면 좋을 거 같아요 자동차 20대 가지고 있다, 20대 가지고 시작한다 자동차들 다 비싼 자동차들이죠 레이싱 카입니다 그 다음에 초기화 해야겠죠 초기화인데 초기화는 실제 자동차의 x,y 좌표값 위치가 있어야 하겠고, 이 자동차가 어디로가느냐

direction이 x좌표와 y좌표가 있잖아요 그래서 dx와 dy로 제가 이름을 정해 볼게요 그 다음에 여기에 현재 이미지가 있어야 되겠죠 자동차의 이미지가 있잖아요, 자동차의 이미지 그리고 초기화 다 일일히 해야 하겠죠 자 이렇게 초기화 해 줬고요 initialization 다 완성이 됐고 그 다음에 가져 온 이미지를 로드하는 부분이 필요합니다 그래서 self.image, 이미지 부분에 여기에 아까 어떻게 하기로 했냐면 이미지 20개 중에 랜덤하게 가져오자 그래서 우리가 import ramdom했잖아요 random으로 choise하기 위해서 chiose, 선택 해주고 거기에 self image car 바로 아까 정의했던 20개의 이미지를 가지고 있는 image car에서 우리가 랜덤하게 선택을 합니다 그러면 road image라는 function이 호출될 때마다 어떻게 될까요? 바로 자동차의 이미지가 새로운 걸로 바뀌겠죠 그 다음에 이미지가 각각의 이미지마다 너비와 부피가 있잖아요 그래서 이거를 받아옵니다 받아오는 걸로 할게요 이렇게 그래서 size 0,1 size[0]이 width이고, size[1]이 height입니다 그 다음에 그림을 그려주는 거 있잖아요 그려주는 거 screen, screen 좀 이따 넣어 줄게요 blit, blit하는 거 저번에 매번하는 그 blit 그래서 화면에 실제적으로 이 이미지를 draw해주는 역할을 합니다 draw해주고 뭐 해줘야 해요, 이미지를 넣어주고 이거는 실제 어디 위치에 draw할 거냐 그래서 x와 y좌표에 draw해달라 이렇게 우리가 쓸 수 있겠죠? 그 다음에 자동차가 움직여야죠 move_x 그 다음에 move_y도 있겠죠 그런데 move_x에 실제 x좌표에다가 x축으로 direction하는 그 방향만큼 더해 주어야겠죠 그리고 y는 self.y의 self.dy 이렇게 주면 되겠죠 이렇게 해서 move_x,y 해줬고요 그 다음에 필요한 것은 게임 만들 때마다 하는 건데 게임 화면을 넘어가면 안돼요 screen 화면을 넘어갈 수 없잖아요 그래서 화면을 넘어가는 걸 체크해주는 연산을 넣어볼게요 그래서 self.x와 self.width 이게 실제 자기 위치의 x좌표와 자기의 너비를 이렇게 더해주면 실제 자동차의 크기가 나오겠죠 그 자동차 크기가 어딜 넘어가면 안돼요 실제 우리가 정의했던 윈도우 창의 크기를 넘어가면 안되겠죠 그래서 이렇게 정의를 해 줍니다 그리고 이거는 오른쪽으로, 즉 창에서 오른쪽으로 넘어갔을 때를 체크해주는 거잖아요 그럼 왼쪽은 뭐예요? 왼쪽 끝은 좌표가 0이겠죠 그래서 0으로 이렇게 넣어줍니다 만약에 오른쪽 끝으로 넘어가거나 왼쪽 끝으로 넘어가려는 순간에 어떻게 해야 되나 간단합니다. x좌표를 실제 dx만큼 -시켜주면 돼요 그럼 아무리 해도 이동이 안되겠죠 간단하게 이렇게 체크해주는 역할을 설정해주면 되고요 그 다음에 우리가 체크해 주는 게 있어요 체크는어떻게 해주냐 이거는 자동차들이 부딫히면 crash crash car 날 수 있잖아요 그래서 자동차라는 객체를 받아서 현재 내 자동차와 다른 자동차가 부딫혔느냐 안 부딫혔느냐 체크해주는 그런 부분입니다 전체 좌표 영역을 다 체크해 주면 됩니다 그래서 마찬가지로 self.x와 self.width를 더한 값에다가 실제 파라메트로 들어 온 car에서 x좌표가 넘어갈 경우 그러면 crash된 거죠,그 좌표값 내에서는 그 다음에 또 마찬가지로 and로 해 주어야 돼요 x좌표가, 지금 현재 x가 파라메트동안 car에 x좌표의 너비값보다 작으면, and 계속 걸어줍니다 그 다음에 x좌표만 하는 게 아니라 y좌표도 해야죠

car.y에 car. height를 더해서 그 좌표가 y좌표보다 작으면 그리고 self의 y와 self의 height가 car의 y보다 크면 조건이 좀 길긴한데 이 조건이 x좌표, y좌표 즉 width와 height를 다 고려해서 자동차와 자동차 간의 겹치는 부분이 생기면 이 if문이 실행하게 돼요 겹치는 부분이 됐다 그러면 체크 부분이니까 true 즉, 겹쳤다 알려주고요 그다음에 현재 겹치지 않았다 그러면 false로 해주면 되겠습니다 이 정도만 해주면 우리 car class는 다 된거 같아요 자 car class는 이렇게 끝냈고 그 다음에 우리가 실제 name main main이죠 처음 시작하는 부분을 만들어 주고요 처음에는 pygame 초기화 해 주어야겠죠 초기화해주고 그 다음에 screen 우리가 썼는데 screen이 뭐냐면 우리가 pygame할 때마다 있는 건데 display를, 전체 크기를 정의를 해 줘야합니다 전체 크기를 정의해 줄게요 크기는 아까 위에서 define해줬죠 윈도우크기는 이렇게하기로 크기를 길게 했어요. 자동차 게임이니까 길게 해서 움직이는 형태로 했습니다 그 다음 우리 caption 넣어야겠죠 게임 이름이 있으니까 PyCar라고 했습니다 여러분들이 원하시는 이름 아무거나 하셔도 좋아요 PyCar : Racing game 이렇게 했어요 그 다음에 clock, clock인데 이건 게임에서 시간이 필요하죠 그리고 좀 더 작성을 해보면 그 다음에 제가 리소스에, 다른 리소스 20개는 넣었는데 음향과 관련된 사운드가 있죠 이 사운드를 좀 넣어 볼게요 사운드는 pygame에 mixer라는 게 있어요 mixer에 music은 배경음악 같은 건데 music은 배경음악, 게임 중에 시작되는 배경음악으로 race라는 음악을 구해 놨습니다 이거. 제가 음악을 만들기는 좀 그래서 MIDI 작업하려면 시간이 너무 많이 걸려서 오픈된 사이트에서 가져온 파일이고요 그 다음에 crash되는 사운드도 가져왔어요 그리고 엔진소리, 제가 아이디어가 생겨가지고 게임 처음 시작할 때 엔진소리를내면서 시작을 해보자, 시동을거는 것처럼 그래서 엔진소리를 가져왔습니다 물론 자동차 레이싱카 엔진소리가 아니어서 아쉽기는 하지만 마땅한 게 없더라고요 여러분들이 좋은 걸 찾아서 소리도 한 번 바꿔보시면 좋습니다 자 그래서 우리가 음악, 기본적인 세팅을 했고요 그 다음에 user, player있잖아요. player를 만들어야겠죠. Car라는 걸로 만들게요 car가 calss만든 건데 여기에서 x,y좌표랑 그 다음 direction에 대한 x,y좌표 넣기로 했죠 처음 위치는 말그대로 어떻게 해야 되냐면 중앙에 위치하면 좋겠죠 그래서 중앙위치로 설정하겠습니다 현재 윈도우 크기의 반 정확하게 중간은 아니겠지만 대충 이 정도로 하겠습니다 그 다음에 높이에서 자동차가 이 쯤에 있어야 되거든요 완전 밑에 붙으면 좀 그렇잖아요 밑에서 150 쯤 빼서 약간 위로 올리겠습니다 그 다음에 실제 direction x,y 좌표는 0으로 해놔야겠죠 현재 반응하는 게 없으니까 그 다음에 이미지를 가져와요 이게 뭐냐하면 load 이미지하면 어떻게 돼요 20개의 이미지 중에서 하나를 선택하게끔 랜덤으로 choise했잖아요. 그 부분을 넣는 거에요 그렇게 이제 추가 해 주고요 그 다음에 이제 실제 player의 자동차 뿐만이 아니라 다른 자동차들도 있어야겠죠 게임 요소로 그래서 제가 리스트로 만들고 몇 개로 하느냐, 세 개 정도 할게요 여러분들이 원하시는 만큼하면 돼요 너무 많으면 복잡하겠죠 3개 정도가 적당한 게, 두 개면 피할 구멍이 생기는 데 3개는 아예 못 피할 수 있어요 그러니까 그런 걸 게임 요소에 반영해서

사용자들이 잘 피할 수 있게 설정하시면 됩니다 이것도 마찬가지로 자동차 갯수만큼 다 생성해야 하잖아요 그래서 이거를 생성하는 데 랜덤으로, 왜 랜덤이 필요하냐면 자동차가 맨날 있는 곳에서 나타나면 재미가 없잖아요 랜덤으로 언제 어디서 출력을 할지 모르게 만들어야 돼요 그래서 이런 식으로 만들어 두고요 그 다음에 y도 y도, 이거는 윗 부분에서 출몰해야죠 윗부분에서 왜냐하면 바로 여기서 출몰하면 이상하잖아요 자동차가 자동차가 계속 가는 모양으로 해야 되니까 그래서 윗 부분에, 150 이 정도에서, 이 바운더리 안에서 생성이 되도록 만들어 둘게요 그래서 Car를 x와 y 좌표를 바운더리 안에서 랜덤하게 나오도록 만들고요 그 다음에 direction x는 0으로 해놓고 그 다음에 뭐가 있어야 되냐면 y는 5에서 10 사이로 할게요 이게 뭐냐하면 y방향의 direction이잖아요 자동차가 가는 데 5에서 10사이로 direction을 조정해서 누군가는 5속도로 오고 누군가는 10속도로 오게 자동차가 레이싱하니까 게임적인 요소를 위해서 5에서 10사이로 랜덤하게 선택하는 걸로 할게요 이것도 마찬가지로 자동차에 대한 이미지를 로드해야 겠죠 그 다음에 우리가 cars라고 했죠 그래서 append 실제 car라고 만든 객체를 총 3개까지 추가해서 만들어 줘야겠죠 그래서 이렇게 관리를 해 줍니다 됐습니다 그래서 우리가 지금까지 뭐했냐면 player, 자동차 그 다음에 여러 자동차들 생성하는 것까지 했어요 그 다음에 뭘 해야 하냐면 도로에 뭐가 있냐면 회색만 있으면 박진감이 없어요 그래서 트릭인데 박진감을 위해서 자동차가 현재 움직이고 있다는 걸 보여줄려면요 다른 게 없습니다. 주변에 어떤 뭔가의 움직임이 자동차가 움직이고 있다는 것을 보여 주거든요 그런데 나무 넣고 이러면 좀 복잡하니까 뭘 하냐면 가운데 차선, 차선이 움직이는 것만 봐도 자동차가 잘 움직이고 있고 그거에 대해서 속도감이 주어지거든요 이거는 이미지로 할 건 아니고 간단히 사각형으로 우리가 그리면 됩니다 그래서 전체 크기로 10, 80짜리 차선을 그려 넣고요 그 다음에 차선들 사이에 마진이 필요하죠 마진 20정도 줍니다 20정도 주고요 그다음에 몇 개까지 할 거냐 count 20개 화면 내에서 20개가 보여지고 이 20개가 계속 차선이 움직이는 형태로 만들어 줘야겠죠 그리고 위치를 잡아야 하는 데 위치는 말 그대로 전체의 윈도우 창 크기에서 아까 우리가 정의했던 이 정도로 할게요. 차선의 너비를 빼고 뺀 거에서 나누기 2 여기에서 너비를 빼고 나머지 2이니까 이 쯤에 나올 수 있게 할게요 약간 중간에 나올 수 있게 해주고요 그 다음에 y는 -10 위치가 이렇게 뜹니다 그래서 x와 y, 현재의 위치에서 그 위치에 따라서, 지금 우리가 20개 만들기로 했잖아요 그래서 카운트 갯수만큼 더 만들어야겠죠 카운트 갯수만큼 만들도록 하겠습니다 lanes에 append 해줍니다. append 해주는 데 lane_x, lane_y 이렇게 해서 append를 해 줍니다 그리고 y좌표는 차선의 높이와 마진 마진을 줘야겠죠, 여백 자, 다 됐어요 이 정도면 도로 차선까지 만든거 같아요 그 다음에 키의 조작과 함께 화면에 출력하는 것을 만들어야 하는데

점수가 있어야겠어요. 점수 미리 제가 정해 놓을 게요 그 다음에 자동차가 충돌되었을 때 crash 이벤트를 가져올 비티 현상을 true, false로 현재 게임 실행 중인 거냐 아니냐 체크해주는 왜냐하면 이거 계속 이벤트 처리를 위해서 while문 반복 계속 해야하잖아요 game_on 그 다음에 이벤트 처리를 먼저 해야겠죠 이벤트 처리 다른 게임 영상에서도 보셨겠지만 event.get 해서 가져오죠 그리고 만약에 이벤트를 가져왔는 데 이벤트 타입이 pygame.QUIT 이면, 나가자, pygame. QUIT하면 어떻게 돼요 game_on 플래그를 어떻게 해주면 돼요 false로 바꿔주면 되겠죠 그러면 자동으로 이 게임이 반복문이 끝나면서 종료되게끔 만들면 되겠죠 그 다음에 crash가 있어요. 이건 뭐냐면 충돌이 났어요 충돌이 났다, 충돌이 나면 게임이 어떻게 돼요 충돌나면 게임 끝나야 겠죠. 게임 끝난 상태에서 다시 시작할 수 있을 어떤 요소를 정의해 주어야겠죠 그래서 만약에 이벤트 타입이 현재 pygame의 키가 눌렸다 키가 눌렸다. 그리고 그 키가 눌린 게 뭐냐 그 키가 K_SPACE 스페이스 버튼으로 할게요 스페이스 버튼이 눌렸다라는 뜻이에요 이게 스페이스 버튼이 눌렸으면 crash를 다시 풀어줘요 스페이스 버튼을 누르면 게임을 다시 새로운 게임으로 시작할 수 있게끔 하고자 하는 거거든요 자 이렇게 해주고 자 반복을 돌립니다 새로운 게임을 시작하기로 했잖아요 그럼 어떻게 돼요 자동차 세계를 다시 다 만들어야 하잖아요 만드는 건 아니에요. 만드는 건 이미 다 만들었어요 만드는 건 아니고 어떻게 하면 돼요 다시 위치를 잡아주기만 하면 돼요 그쵸 그래서 randrange, 0부터 WINDOW car의 현재 자동차의 너비만큼 0부터 현재 자동차의 너비를 전체 윈도우 창크기에서 전체 자동차의 너비만큼 빼서 그 range 안에서 x축의 이 부분에서 랜덤하게 골라주잖아요 그러니까 이제 알아서 위치를 잡아서 골라주겠죠 이거는 아까 150에서 50으로 하기로 했죠 150에서 50사이로 y좌표 그러니까 윗부분에서 출몰되게끔 해줘야 하기 때문에 자 그 다음에 자동차를 만들었으면 어떻게 해야 해요 이미지로 덮어줘야겠죠 새로운 이미지 20개 중에 하나 골라줘 이런겁니다 자동차 3대는 만들었는데 사용자에 대한 것도 만들어 줘야죠 사용자 자동차도 게임 다시 시작할 때 랜덤하게 다시 바꿔줄게요 그러면 load_image하면 돼요 만약에 랜덤하게 안 바꿔주고 싶다하면 이걸 빼면 되겠죠 그 다음에 player.x좌표인데 x좌표가 플레이어의 자동차의 x좌표 그냥 이렇게 하기로 했죠 x좌표는 중앙에 중앙쯤에 위치해줘 그 다음에 direction은 0으로 해주어야 겠죠 그 다음 score score는 0으로 리셋되어야 겠죠 죽었으니까 그 다음 pygame에 게임 스타트할 때 화면에 마우스를 게임에 안쓰잖아요 마우스를 없애는 형태가 필요해서 visible의 false를 주면 돼요 그 다음에 sound_engine, 아까 우리가 음향 넣어놨죠 mixer로. 플레이 해 줍니다 이게 뭐냐, 게임 시작했다고 스페이스를 누르는 순간 엔진이 울리고 그 다음에 게임이 스타트하기 위해서 이런 요소를 넣었어요 그런데 엔진 소리 좀 듣고 있어야 하잖아요 그래서 sleep으로 한 5 만큼 쉬고요 그 다음에 music.play 이건 뭐냐 배경음악있죠, 자동차가 레이싱하는 배경음악으로 제가 넣어둔 race .wav파일 있잖아요 그거를 play해줘요. 그런데 -1은 뭐냐 -1은 반복해서 수행해 줍니다 전체 게임 race.wav 파일의 시간이 있잖아요. 그 시간이 끝나도 계속 반복해서 재생해줘라는 의미이고요 그 다음에 crash가 나지 않았을 경우, crash가 나지 않았을 때 여러분들 이 align을 잘 맞추셔야 돼요 가끔 저한테 이메일이나, 가끔은 아니죠 굉장히 많이 메일이랑 이렇게 문의해 주시는 분들이 틀린 부분이 뭐냐면 이 align을 안 맞춰서 그래요 파이선은 이 aligh을 잘 맞춰 주어야 하는 그런 랭귀지입니다 잘 맞춰 주시고요 crash가 나지 않았을 경우, crash가 나지 않았다는 건 뭐에요 지금 현재 게임 중인거죠 게임 중에는 어떻게 돼요 사용자가 키를 움직이면서 자동차를 피하는 게임적인 요소를 진행하고 있겠죠

그럼 키가 눌립니다. pygame의 key가 눌려서 key가 right, left 이런거 눌리고 있겠죠 right, left 눌렸을 때 player의 다른 자동차들은 천천히 내려오면 되는 데 player는 4정도로 움직임을 할게요 여러분들이 만약에 나의 자동차를 좀 빠르게 움직이게 하고 싶다 그러면 4가 아니라 좀 더 높은 숫자로 여러분들이 변경해 주시면 됩니다 제 영상을 보고 많은 분들이 더 재밌게 바꿔보고자 하는 사람들이 많은데 너무 좋은 거 같아요 여러분들이 원하는 걸로 costumize해서 여러분들 만의 게임을 만들어 보는 게 중요합니다 그래서 right, left 키 조작에 따라서 동작하는 걸 했고요 그 다음에 이것도 마찬가지죠, 복사해서 가져 올게요 KEYDOWN이 아니라 뭐에요, KEYUP KEYUP은 뭐에요, 키보드 뗐을 때 키보드 뗐을 때 어떻게 돼요 키보드를 뗐는 데도 움직이면 돼요 안돼요, 안돼죠 그러면 0으로 초기화를 해줍니다 똑같은 키에 대해서 키가 떼졌을 때 움직이지 않게 하기 위해서 우리가이렇게 진행을 했습니다 그러면 우리가 crash되거나 crash되지 않았거나 이것에 따라서 이벤트 핸들링은 다 했어요 이벤트 핸들링 처리하는 부분은 다 했습니다 그러면 이 for문에 대한 건 끝난 거에요 이 포문에 대한 건 끝났으니까 뭐해야 되요 이제 이제 게임이 그려져야 되요 화면에 표시되어야 하는 데 깔끔하게 처음에 gray로 일단 다 채울게요 게임 화면을 하나하나 만들어 간다고 생각하시면 돼요 gray로 다 칠해요. 그러니까 깨끗하게 만드는 거에요 깨끗하게 만들고, 만약에 crash되지 않았을 경우 crash되지 않았을 경우에는 충돌이 되지 않은 상태잖아요 충돌이 되지 않은 상태이니까 계속 게임 상태가 움직여야겠죠 게임 상태가 움직인다, 아까 우리가 도로에 뭐가 있다고 그랬죠? 차선이 있다고 그랬죠 차선을 어떻게 해 주어야 되냐면 계속 그려줘야 돼요 그런데 차선 그리는 게 사각형으로 그리기로 했잖아요 그래서 screen, screen에다가 차선 하얀색이죠 하얀색으로 그리고요 우리가 만들었던 차선대로 포문 돌아가서 [i]계속 반복해서 동작하고요 좌표 값들 넣어주고요 그리고 좌표값 뿐만 아니라 이거에 대해서 우리가 뭘 정의했냐면 차선에 대한 크기가 있죠. 크기를 넣어 줍니다 그럼 그 사각형을 screen에 그려주는 거에요 간단하죠, 간단하고 자, 그 다음에 차선을 여러분 여기 이제 중요한 건데 속도에 대한 거에요 차선을 계속 움직여서 그려야 되잖아요 계속 차선이 움직이면서 차선이 내려오는 것 처럼 그래야 마치 자동차가 가는 모양이 되잖아요 한 10 정도, 이거는 도로 차선의 속도에 대한 거니까 좀 느리게 하고 싶으시다면 느리게 하셔도 되요 여러분들 스타일로 게임을 만드시는 것에 적극적으로 찬성하는 바입니다 그리고 [i] 1 번째 그리고 여기가 이 정도 줄게요 만약에, 이게 뭐냐면 전체 게임 화면의 크기를 차선이 넘어 갔을 경우예요 넘어가면 어떻게 돼요. 넘어 간거 다시 넘어간거 없애고 위 쪽으로 바꿔줘야 하잖아요 우리가 차선을 다시 옮겨주는 부분을 이렇게 그려 놨습니다 자, 이렇게 했고요 차선은 이렇게 하면 되고 차선과 함께 사용자의 자동차가 그려져야 겠죠 draw_image라고 되어 있잖아요 자동차를 그려준대요 그 다음에 중요한 것 move_x 여러분들 우리가 키 조작에 따라서 어떻게 하기로 했죠? 자동차가 앞 뒤로는 안가요 계속 달리고 있는 모양이니까 좌, 우로만 그럼 x좌표로만 움직이겠죠 move_x넣어 주고요 물론 여러분들이 우리가 move_y라는 함수를 정의해 놓았기 때문에 앞, 뒤로도 움직일 수 있게끔 바꾸는 건 여러분들이 충분히 나중에 customize 하시면 됩니다 그리고 우리가 뭐 해줘야 하냐면 우리 아까 만들었었죠 check out of screen 스크린 밖으로 벗어나느냐 안 벗어나느냐를 체크해주는 그런 조건문이 있었어요 그것을 여기에 넣어 줍니다 그렇게 해주면 돼요 자 그 다음에 뭘 해야 하느냐 이제 player에 대한 자동차는 그렸는데 컴퓨터 자동차들이 있잖아요 그 컴퓨터 자동차들도 각각 draw_image해주어야 합니다 그런데 이건 여러 개니까 배열이 있죠 배열이 있어서 3개까지 들어가 있으니까 이거를

배열로 접근해서, index[i]로 접근해서 각각을 그려줍니다 자, 그리고 얘는 y, y로 움직여요 player는 좌, 우로 움직이고요 컴퓨터 자동차들은 위, 아래로 움직여요 그래서 y의 dy로 해 가지고 위, 아래로 움직일 수 있게끔 만듭니다 그러니까 우리가 충돌을 피해야겠죠 레이싱한다는 게 그런거잖아요 그리고 이거는, 만약에 그 자동차들, 세 개죠 지금은 카운트가 세 개의 자동차들이 화면에 벗어났을 경우 벗어나면 어떻게 돼요 벗어나면 일단 점수를 좀 줄게요. 왜냐하면 그 자동차를 피했다는 의미잖아요 그래서 점수를 10점 정도 주고 그 다음에 y좌표를 다시 선택을 합니다 randrange 안에서 아까 -150에 -50 이렇게 했죠 이거는 아까 한 것처럼 그대로 할게요 아까 어떻게 했냐면 아까 생성할 때, 여기 있죠 여기 이 부분 그냥 복사 해 올게요. 다 치셔도 되고 복사해도 되고 자, 이렇게 제가 복사를 좀 해 왔습니다 그러면 x. x, y가 바뀌긴 했지만 어쨋든 똑같은 거라서 이렇게 해주고요 그 다음에 이게 있어요 x, y좌표는 이렇게 하면 되는 데 우리 뭐가 있었어요 dy해 주어야죠. y좌표로 움직이는 자동차의 속도를 랜덤하게 해주기로 했잖아요 그래서 random으로 randint로 5에서 10정도로. 아까 했죠 아까 5에서 10 정도로 선택했습니다 5에서 10정도로 이렇게 선택을 하고 그 다음에 load_image에서 자동차를 그려주면 됩니다 자 그러면 벌써 자동차는 다 그렸어요 자동차는 다 그렸고 물론 여기다 넣어도 되는데 이 for문을 좀 꺼낼게요 왜냐하면 그리고 선택하는 이런 것들 처리랑. 로직상 구분하고 쉽게 보기 위해서 이렇게 꺼내 놓고요 얘는 뭐 해야 하느냐면 충돌이 났을 경우에요 충돌이 났는 데 player의 우리 아까 뭐 만들었죠. check_crash 만들었죠 check_crash로 자 이거에요 바로, check_crash인데, 이 자동차들 우리가 들어가 있는 cars 배열있죠 거기에 i 번 째. 물론 그러면 반복문을 돌면서 세 개의 자동차를 다 비교하겠죠 그래서 지금 내 자동차가 세 개의 자동차와 부딫히고 있느냐 안 부딫히고 있느냐를 체크해 주는 거예요 그러면 만약에 얘가 체크했는데 true잖아요 true면 어떻게 돼요 crash가 true예요. 부딫힌거예요. 부딫힌거고 그다음에 부딫혔으면 어떡게 해 주어야 되냐면 여러분 부딫혔는 데 음악 계속 나오면 안되겠죠 그래서 race 배경음악을 종료 시켜줍니다 그 다음에 crash와 관련된 사운드가 준비되어 있습니다 그래서 그거를 재생해요 자동차끼리 부딫히는 쾅!하는 소리를 제가 찾아봤어요 쾅!하는 걸 듣고 잠깐 대기하기 위해서 sleep 2해 주고요 그 다음에 종료했으니까 아까 마우스 있죠 마우스 false로 해서 안 보이게 해놨는데 마우스를 보여주는 걸로 해서 게임이 끝난 상황을 알려주고 그 다음에 break해 줍니다. break해 주고요 score를 좀 넣어야 겠네요. score score를 화면에 보여주어야 하니까, 아직 함수를 안 만들었는데 draw_score만들어주고요 좀 이따 함수 같이 만들게요 이거는 display.flip. flip하는 거 해주고요 그 다음에 else. 이 else가 뭐냐면 이거 따라가면 if not crash잖아요 crash되지 않았을 때 게임 동작 중에선 이렇게 화면에 출력하고 그럼 crash됐을 땐 어떻게 해야 되요 crash가 됐을 땐 게임을 다시 해야해죠 그래서 이것도 게임 메뉴 하나 그려서 보여주는 걸로 할게요 그럼 게임 메뉴랑 draw_score하는 function. 이거를 우리가 실제 정의를 아직 안했으니까 정의를 해야겠죠 그거야 뭐 우리가 맨날하던 그런겁니다 자 이렇게 하면 되요 pygame.quit이 뭔지 보면 이 wile문 종료됐을 때 flag가, 게임문이 false로 되면 종료되게끔 이렇게 만든겁니다 자 그럼 이 두 가지 함수만 만들면 되겠네요 draw_score랑 draw_main 메뉴 그리는 겁니다 이거는 우리가 좀 빼놓을 게요 함수로 뺴놔서 구현하는 데 왜냐 저 안에다가 두기에는 복잡하니까 그래서 draw_main 메뉴 있었죠 main 메뉴인데 main메뉴 그려주어야겠죠 draw_x. 어디 위치에 그려줄 거냐 말 그대로 우리 보통 중앙부에 계속 그리고 있으니까요

이것도 마찬가지로 나누지 2해서 중앙부인데 중앙부에서 살짝 위에부터, 그러니까 중앙부에서 살짝 왼 쪽이죠. 살짝 왼 쪽 좌표 이쪽에 그려주는 걸로 할게요 중앙부에서 -200 좌표값 이동하자 이런 의미입니다 그리고 높이도 중앙을 체크하기 위해서 이렇게 했습니다 그런데 여러분 제가 인트로 이미지 하나 받아 봤습니다 제가 게임의 요소, 리소스에다가 넣어놨는데 그런게 좀 필요하죠 PyCar.png파일 제가 준비해 놨어요 자동차 애니메이션 그림으로 된거 구글에서 찾아서 가져왔으니까요 그리고 blit해서 뭐 해주어야 해요 intro 실제 그려주어야 겠죠 그려주는 데 어디다가 그려주느냐 draw_x와 y좌표 정의해놨으니까 이 위치에다 그려줘 그런데 y좌표 바로 옆에다가 그려주면 안되고 중앙이잖아요 지금 y 좌표가 중앙에서 살짝 위에 띄우도록 할게요 그럼 한 280 정도 띄워죠 그래서 이건 이렇게 띄워줍니다 그 다음에 어떤게 필요하냐면 타이틀도 쓰고 이렇게 해 주어야 겠죠 폰트를 좀 정의할게요. 그래서 pygame의 font font의 SysFont FixedSys 콘솔차에서 쓰는 그런 폰트인데 이걸로 할게요 여러분들이 원하는 폰트로 바꾸는 건 일도 아니니까요 여러분들이 나중에 해 보세요 크기 40짜리, 30짜리 구분을 좀 할게요 크기에 따라서 좀 다른 출력을 하기 위해서 그 다음에 타이틀 출력 타이틀 출력에서 타이틀은 좀 커야되니까 폰트 40짜리로 하고요 랜더링 위해서 랜더함수 호출하고 우리 Pycar라는 이름으로 지금 만들고 있죠 그래서 Racing Car Game 뭐 이렇게 얘는 블랙으로 출력을 해 볼게요, 타이틀 blit, screen.blit해가지고 텍스트 타이틀을 출력 해 줍니다 얘도 draw_x와 draw_y의 좌표인데 출력을 정중앙에 타이틀이니까 정중앙에 출력을 해 볼게요 그 다음에 뭐해야 하느냐, score text_score로 해야겠다 score인데 score는 text_score font 40으로 할게요 이거는 뭐냐면 게임이 중간에 죽어서 내가 지금 현재 나와졌어요. 게임에 나와졌지만 내가 지금 몇 점을 받았는지는 보고싶을 때 score라는 변수를 스트링으로 변환해주고 그거를 출력해줘 이런겁니다 얘도 마찬지로 blit을 통해 그려주는 데 text_score를 그려주고 x,y 그런데 y 여기다가 그려주면 안되죠 정중앙에는 타이틀이 있으니까 정중앙보다 약간 밑에 한 70정도 띄울게요 그렇게 해주고 그 다음에 text_start start를 넣어줍니다 얘는 뭐냐면, 폰트 30정도로 할까요 이제그거 해야죠 스페이스 버튼 누르면 우리 어떻게 하기로 했죠 Press Space Key To Start 이렇게 해서 스페이스를 눌렀을 때 게임이 시작된다는 걸 알려주기 위해서 이렇게 넣어줬습니다 그런데 얘는 좀 강렬하게 레드로 색깔을 칠해 볼게요 마찬가지로 start 출력을 해 주는데 어떻게 출력을 해주냐하면 70부분이 있으니까 밑에 좀 140정도 그래서 밑에 부분을 좀 띄우게 만듭니다 그 다음에 pygame.display.flip 이렇게 해서 우리가 실제 화면에 draw하는 걸 걸어주고요 그 다음에 뭐가 있었냐면, 게임 중에 score 띄우는 부분있죠 게임 중에도 화면 왼쪽 중에 점수가 떠야 되잖아요 폰트 30으로 그대로 가져옵니다 text_score도 그대로 가져옵니다 이렇게 띄워주는 데 화면 상에 보여주어야 되니까 화면에는 화이트가 아니라 블랙으로 할게요 그리고 screen, 얘는 실제 text_score를 출력하는 데 draw를 어디다가 하냐면 15, 15 정도로 할게요. 왼쪽의 좌표값에 해당이 되겠죠 자 이렇게 하면 될거 같아요 잘 됐는지 입력은 다 했어요 잘 됐는지 제가 눌러 볼게요 다 됐다 가정하고 F5 자 보시면 이렇게 syntax 에러가 있습니다

syntax에러가 있네요. 여기에 하나 안쳤죠 좋아요 여러분 화면에 띄웠습니다. 이렇게 뜨는 거예요 이렇게 뜨는 데 아까 우리가 그렸었던 draw_main 메뉴가 이렇게 뜨죠 실제 자동차 이미지, 제가 pycar라고 넣어 놨습니다 타이틀 떴고, 스코어 떴고, Press Space Key To Start 떴죠 그럼 눌러 볼게요 start! 엔진 소리가 납니다. 우리 기능 구현했었죠 엔진 소리하고 sleep 5 해놓고 여기에 에러가 났습니다 이런게 에러가 발생하죠 폰트 40이 없죠, 여러분 30이죠 자, 다시 실행 할게요! 다시 실행, F5! 잘 되는 지 볼까요 잘 됩니다 여러분! 이렇게 자동차가 이 player의 자동차가 컴퓨터 자동차 3 대, 최대 3 대까지 나오게 되어있죠 이렇게 차선이 움직이는 걸로 해서 이 차선이 움직이는 걸로 스피드 감이 속도감이 전달 되죠? 그래서 화면에 피하거나 하는 것들 지금 여기 부딫혔죠. 부딫히면 쾅하는 소리하고 sleep 2 해줬죠 sleep 2하고 어떻게 돼요? 다시 메인 메뉴가 뜨는 겁니다 이렇게 계속 반복해서. 그런데 메인메뉴에 스코어 380이 뜨죠. 이렇게 뜨는 거 이렇게 해서 만들어 봤고요 게임 계속 해 보고 싶지만 만드는 영상은 여기까지 찍어야 하고요 여러분들이 여기에 좀더 다양하고 재미난 요소들을 충분히 여러분들이 아이디어들을 이 게임애 넣을 수 있습니다 게임 이미지를 바꿀 수도 있고 그리고 혹은 자동차끼리 충돌했을 때 폭발되는이미지도 넣을 수 있고요 여러 게임 요소들이 많아요 그렇기 때문에 여러분들이 생각해 보면서 좀 더 재미나고 박진감 넘치는 중독성 있는그런 게임으로 만들어 보시길 바랍니다 파이카 레이싱 카 게임 만들기는 여기까지 하고요 다음에 더 재미있는 영상으로 찾아 뵙도록 하겠습니다 감사합니다

You Want To Have Your Favorite Car?

We have a big list of modern & classic cars in both used and new categories.