티스토리 뷰
'''추후에 모아서 개선하기 위해 일부러 이상하게 짠 부분도 있고
필자의 실력과 식견이 부족해서 이상하게 짜 진 부분 도 있습니다.
만드는 방법은 여러가지 입니다. 다만 효율적인 코드를 정답이라고 한다면
필자의 코드는 절대로 정답이 아닙니다.
필자는 일단 정답을 만들어 낼 정도의 실력이 있는 사람도 아니지만
아래에 있는 코드는 일부러 오답을 낸 코드입니다. 추후에 수정과 보수하는것까지
블로그에 등록을 할것이기 때문에요'''
코드가 돌아가는것 자체에는 문제가 없지만 단지 그뿐인 코드.... 들에 관한 내용이 중간중간 들어가있습니다
다만 초심자분들도 제 게시물을 보게 될때 그런 내용이 산재해있다면 읽기 오히려 불편해질것같아서 일부러 하얀 글씨 처리 했습니다. 제 코드를 보고 엉망진창 엉터리로 짯구나 라는걸 알아보실 실력이시면 이미 저보다 프로그래밍을 잘하시겠지만 드래그 하시면 볼 수는 있습니다. 이 허접이 어떤 이유가 있어서 이렇게 했나.
up, down, left, rigth 함수를 만들때 생각해볼 여지가 있습니다
블럭을 밀어서 옮긴다면 공백과 공백이 아닌 블럭의 위치가 바뀌는것입니다.
블럭의 위치가 바뀐다는것은 공백의 위치도 바뀐다는것입니다.
그럼 상하좌우로 이동하게 되면 블럭이 공백의 위치로 이동한다는것입니다.
조작법이 정말 많이 나옵니다. 생각할 수 있는대로 생각해서 만들어보시면 됩니다.
필자는 공백 (즉 0) 의 움직임을 기술했습니다
상 : 0이 위쪽으로 이동
하 : 0이 아래쪽으로 이동
좌 : 0이 왼쪽으로 이동
우 : 0이 오른쪽으로 이동
이런 식으로 계산했습니다
그렇게 되면 원래 있던 위치의 블럭과 위치만 바뀌면 되겠네요
그리고 이동할 수 없는 조건은 따로 빼주면 됩니다
이 전 게시물에서 i와 j의 값을 어떻게 리턴했는가
4*i+j 를 return 했었습니다
그렇다면 게임 판이 어떻게 생겼는가
(0,0) (0,1) (0,2) (0,3)
(1,0) (1,1) (1,2) (1,3)
(2,0) (2,1) (2,2) (2,3)
(3,0) (3,1) (3,2) (3,3)
과 같을거고 저 식에 넣어서 계산해보면
0 1 2 3
4 5 6 7
8 9 10 11
12 13 14 15 이다
즉 위쪽으로 올라갈 수 없을때 4*i + j 값은 0,1,2,3 이고
오른쪽으로 갈 수 없을때는 3 7 11 15
왼쪽으로 갈 수 없을때는 0 4 8 12
아래로 갈 수 없을때에는 12 13 14 15 이다
def left(self):
dontMove = [0,4,8,12] ---- (1)
zeroPosition = self.findZero()
if zeroPosition in dontMove : ------(2)
print("허용되지 않은 이동입니다")
else :
self.gameBoard[zeroPosition//4][zeroPosition%4], self.gameBoard[zeroPosition//4][zeroPosition%4-1] = self.gameBoard[zeroPosition//4][zeroPosition%4-1], self.gameBoard[zeroPosition//4][zeroPosition%4]
left 함수만 떼어놓고 봅시다.
자 (1) 코드는 이동할 수 없는 리스트가 있습니다.
zeroPosition 이 dontMove 안에 있는지 판별을 합니다 ---- (2)
다음 이동할 수 없을때는 허용되지 않았다고 표시해주고
이동할 수 있을때는 이동 방향에 있는 칸과 0이 있는 칸의 내용물을 바꾸어주면 됩니다
이런식으로 right up down 모두 작성해주면 됩니다.
다음에는 게임 보드를 출력하는 로직을 짜봅시다
def printGameBoard(self):
i=0
while i<4 :
print(self.gameBoard[i])
i+=1
과 같은 로직을 짜서 게임 보드를 출력하면 되겠네요
그럼 이제 클래스 작성은 끝냈습니다 다음 글에서는 이 만든 클래스로 게임을 만들어서 실행해보고
다음 이 게임은 아직 완성되지 않았습니다. 게임이 게임이 되기위한 조건등을 생각해봅시다
그리고 만약 이 코드를 유지보수 해야한다면? 읽기 좋은 코드?? 한번 생각해봅시다 명백히 사용해서는 안되는 코드들을 발라놨는데 그것까지 조금씩 고쳐보는게 다음과 다다음 포스팅이 되겠습니다.
'Game with Python' 카테고리의 다른 글
| 16퍼즐 제작 - (4) (0) | 2017.06.02 |
|---|---|
| 16퍼즐 제작 - (3) (0) | 2017.05.31 |
| 16퍼즐 제작 - (1) (0) | 2017.05.29 |
| 처음 만들어 볼 게임은 16퍼즐(슬라이딩 퍼즐) 입니다. (0) | 2017.05.29 |
| 간단하게 토이프로젝트로 파이썬으로 게임만들기를 쓸 계획입니다. (0) | 2017.05.28 |
