티스토리 뷰
'''추후에 모아서 개선하기 위해 일부러 이상하게 짠 부분도 있고
필자의 실력과 식견이 부족해서 이상하게 짜 진 부분 도 있습니다.
만드는 방법은 여러가지 입니다. 다만 효율적인 코드를 정답이라고 한다면
필자의 코드는 절대로 정답이 아닙니다.
필자는 일단 정답을 만들어 낼 정도의 실력이 있는 사람도 아니지만
아래에 있는 코드는 일부러 오답을 낸 코드입니다. 추후에 수정과 보수하는것까지
블로그에 등록을 할것이기 때문에요'''
코드가 돌아가는것 자체에는 문제가 없지만 단지 그뿐인 코드.... 들에 관한 내용이 중간중간 들어가있습니다
다만 초심자분들도 제 게시물을 보게 될때 그런 내용이 산재해있다면 읽기 오히려 불편해질것같아서 일부러 하얀 글씨 처리 했습니다. 제 코드를 보고 엉망진창 엉터리로 짯구나 라는걸 알아보실 실력이시면 이미 저보다 프로그래밍을 잘하시겠지만 드래그 하시면 볼 수는 있습니다. 이 허접이 어떤 이유가 있어서 이렇게 했나.
우선 16퍼즐에 뭐가 필요한지 천천히 생각해봅시다.
당연히 게임판이 필요합니다.
게임판 클래스를 하나 만들어줍시다
게임판 안에는 각각의 블럭들이 있습니다. 필자는 이 블럭들을 리스트로 구현했습니다.
대충 이런식이겠네요
gameBoard = [[" 1 "," 2 "," 3 "," 4 "],[" 5 "," 6 "," 7 "," 8 "],
[" 9 "," 10"," 11"," 12"],[" 13"," 14"," 15"," 0 "]]
이렇게 짜면 각각의 원소에는 gameBoard[0][0] // 1
gameBoard[3][2] // 15
등으로 접근할 수 있습니다.
왜 안에 있는 리스트 숫자에 공백이 들어있을까요?????
아직 글자로 출력되는 게임이라 공백이 없으면 칸이 깨져 보입니다 게임하는데 상당히 불편해요 나중에 다시 설명하도록 하겠습니다.
다시 본문으로 돌아와서
위 필드에 0을 어떻게 다른 칸으로 옮길 수 있을까요?
필자는 두가지 방법을 생각해 보았습니다
1번은 0의 위치를 애시당초 가지고 있고 이동과 함께 처리한다
2번은 0의 위치를 움직이기 전에 항상 조사한다
1번은 독자분들이 직접 만들어보셔도 됩니다 필자는 2번으로 진행하겠습니다.
이렇게 되면 게임판 내에 있는 0을 이동시킬 함수가 필요하겠네요
각각을 left right up down 이라고 정의해서 안에 넣었습니다
또한 0을 찾는 함수도 필요하겠네요. 필자의 방식대로라면요
위와 같은 형식으로 5개의 함수를 선언하였습니다.
각각의 함수 내용을 채워 볼까요?
먼저 findZero 함수를 살펴보겠습니다
별거 없는 반복문입니다. 다만 위의 코드는 일단 파이써닉 하지 않구요(알고있지만 일부로 이렇게 사용했습니다. 추후에 고칠 예정입니다)
단순하게 현재 0의 위치를 찾아서 return 해줍니다.
실제 게임을 만들때는 이렇게 부실하게 찾으면 안됩니다. 그 이유도 또 나중에 설명할게요.
우선 위의 코드가 작동을 안하느냐... 하면 그건 아닙니다 작동은 잘 해서 현재 0의 위치는 잘 가지고 올 수 있습니다.
리턴값을 단 하나의 숫자로 주고있는데요. 나중에 이것때문에 left right up down 모든 함수도 파이써닉하지 못할 뿐만 아니라 코드 가독성과 속도 둘다 떨어지는 효과를 만듭니다.
그래도 일단 갑니다.
우선 단 하나의 리턴값으로 어떻게 리스트의 0의 위치를 바로 알아낼 수 있을까요?
초등수학에 보면 몫과 나머지... 가 있습니다
우리가 선언했던 리스트가 중첩리스트가 아닌 단일 리스트였다면 이런 일이 없었겠죠 이것도 일부러 이렇게 짠겁니다
i,j 위치에서 0이 발견되었을때 4*i+j 를 리턴하고 있다면
(파이써닉 하게 리턴하려면 이걸 튜플로 리턴해서 받는측에서 바로 쪼개서 받아쓰면 됩니다.)
받는 위치에서는 다시 i = 4*i+j//4 j = 4*i+j%4 를 하면 바로 i 와 j 를 얻어 낼 수 있습니다.
이제 i와 j 도 제대로 가져올 수 있으니 up down left right 함수를 작성할 수 있겠네요
글이 길어져서 읽기 불편하니 다음 게시물로 넘기겠습니다.
'Game with Python' 카테고리의 다른 글
| 16퍼즐 제작 - (4) (0) | 2017.06.02 |
|---|---|
| 16퍼즐 제작 - (3) (0) | 2017.05.31 |
| 16퍼즐 제작 - (2) (0) | 2017.05.29 |
| 처음 만들어 볼 게임은 16퍼즐(슬라이딩 퍼즐) 입니다. (0) | 2017.05.29 |
| 간단하게 토이프로젝트로 파이썬으로 게임만들기를 쓸 계획입니다. (0) | 2017.05.28 |
