티스토리 뷰
'''추후에 모아서 개선하기 위해 일부러 이상하게 짠 부분도 있고
필자의 실력과 식견이 부족해서 이상하게 짜 진 부분 도 있습니다.
만드는 방법은 여러가지 입니다. 다만 효율적인 코드를 정답이라고 한다면
필자의 코드는 절대로 정답이 아닙니다.
필자는 일단 정답을 만들어 낼 정도의 실력이 있는 사람도 아니지만
아래에 있는 코드는 일부러 오답을 낸 코드입니다. 추후에 수정과 보수하는것까지
블로그에 등록을 할것이기 때문에요'''
코드가 돌아가는것 자체에는 문제가 없지만 단지 그뿐인 코드.... 들에 관한 내용이 중간중간 들어가있습니다
다만 초심자분들도 제 게시물을 보게 될때 그런 내용이 산재해있다면 읽기 오히려 불편해질것같아서 일부러 하얀 글씨 처리 했습니다. 제 코드를 보고 엉망진창 엉터리로 짯구나 라는걸 알아보실 실력이시면 이미 저보다 프로그래밍을 잘하시겠지만 드래그 하시면 볼 수는 있습니다. 이 허접이 어떤 이유가 있어서 이렇게 했나.
이제까지 만들었던 모든 코드들을 짜집기 하면 이제 퍼즐 자체는 만들어 집니다.
갈 길은 멀지만요... 아직 이 게임 관한 포스팅을 2~3회는 더 써야 마무리 지을 수 있습니다. 재미 없는 과정이라고 생각이 들 수밖에 없겠네요...
우선 이제 만들었던 객체를 인스턴스화 합시다.
gameBoard = GameBoard()
네 위와 같은 코드로 객체를 생성 해서 이 객체의 메소드만 적절히 불러내면 게임이 됩니다. 게임 자체는 엄청 간단해요 객체 하나로 된다니 ㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎ......
우선 게임 보드를 출력해주고요
input으로 입력을 받습니다.
gameBoard.printGameBoard()
key = input("a 왼쪽 s 아래쪽 d 오른쪽 w 위쪽 으로 0 이 이동합니다.")
if key == "a" :
gameBoard.left()
elif key == "s" :
gameBoard.down()
elif key == "d" :
gameBoard.right()
elif key == "w" :
gameBoard.up()
else :
print("잘못된 이동입니다")
사실 파이썬으로도 switch 문법을 흉내내서 쓸 수 있고, 실제로 게임을 만들때는 조작부분에 관한 클래스도 너무 당연하게 작성하지만 어차피 상하좌우밖에 없는 게임이고, 한번에 너무 많이 알려드리면 가뜩이나 보는 사람도 없는 게시글인데 다 도망갈거 분명해서 일단은 이렇게 작성했습니다.
자 이제 게임을 실행해보면
당연히 한번 움직이고 프로그램이 끝납니다.
반복문으로 감싸줘야하는데 아직 게임 종료조건에 대해서 생각해본적이 없네요. 우선은 무한 루프로 감쌉시다. 만일 하다가 종료하고 싶다면
windows 에서는 ctrl+c
mac os 에서도 control + c 로 강제종료 가능합니다.
게임 본체 코드입니다.
우선 이제까지 했던대로 게임을 제작한다면, 콘솔이 깔끔하게 출력되지 못하고 계속 중첩해서 쌓일것입니다.
이런식으로 지워지지 않고 뜨는걸 원하는건 아니겠지요. 텍스트 기반 게임이라고 해도 이건 너무 심합니다. 일단 이걸 좀 지워봅시다. 언제 지워야할까요?
네 입력 받고 나서 갱신 후 지우고 새로 그려내면 됩니다.
나중에 그래픽 이식을 한다면야 이런 일은 없겠지만 콘솔 청소해주는 건 어렵지 않으니 (그리고 그래픽 이식을 할때도 상태 저장은 항상 해줘야합니다. 기본적으로 화면을 지우고 새로 그리는 것이기 때문에)
여기서 잠깐 게임의 구동 방식을 생각해 봅시다.
필자가 이제까지 만들었던 게임이나, 해봤던 게임 모두
입력 받음 -> 갱신 -> 그림 -> 입력받음
이 과정을 거치지 않은 게임은 하나도 없었습니다. 그래픽 이식해도 그럴거고요.
이제까지 만든게 입력 받음과 갱신입니다.
이제는 그림 부분을 조금 집중해봅시다.
터미널을 조작하는 클래스는 os 클래스이므로 우선 os 를 임포트 해줍시다
import os
임포트 이후에 아래의 코드를 작성해주시면 이 코드는 터미널에 적혀있던 모든 내용을 지워줍니다.
os.system('cls' if os.name == 'nt' else 'clear')
시스템에 따라서 클리어 명령어가 다릅니다. 이해시켜드리고 싶은데 이건 그걸 위한 블로그도 아니고, 그래픽 기반에서는 이런 명령어같은거 안씁니다. 우선 그냥 복사해서 쓰셔도 되고 스스로 공부해보셔도 됩니다. 별로 어렵진 않아요. 간단하지만 우선 넘어가겠습니다
이 코드는 어디 출력해야할까요? 당연히 새로 출력하기 전에 써줘야합니다.
어디 넣던 상관은 없는데 로직 순서만 잘 지켜지면 됩니다. 필자는 그리기 전에 지우고 새로 그렸습니다
자 여기까지 했으면 이제 깔끔하게 출력도 되고 0도 잘 이동은 합니다.
다음 포스팅에서는 게임판 뒤섞기와 승리조건에 대해서 생각해봅시다.
'Game with Python' 카테고리의 다른 글
| 16퍼즐 제작 - (5) (0) | 2017.06.12 |
|---|---|
| 16퍼즐 제작 - (4) (0) | 2017.06.02 |
| 16퍼즐 제작 - (2) (0) | 2017.05.29 |
| 16퍼즐 제작 - (1) (0) | 2017.05.29 |
| 처음 만들어 볼 게임은 16퍼즐(슬라이딩 퍼즐) 입니다. (0) | 2017.05.29 |
