체스에서
Player
Piece (나이트, 폰, 킹 이런거)
Board
이렇게 있을때 기물들의 움직임, Move()를 구현한다하면
Player.move( )
Piece.move( )
Board.move( )
중에 뭐할래?? 셋다 일리가 있어보이는데
체스에서
Player
Piece (나이트, 폰, 킹 이런거)
Board
이렇게 있을때 기물들의 움직임, Move()를 구현한다하면
Player.move( )
Piece.move( )
Board.move( )
중에 뭐할래?? 셋다 일리가 있어보이는데
님 질문 넘 재밌음 ㅋㅋㅋ 나라면 이렇게 함. player.move(piece), piece.move_to(x,y)
망갤에 엔돌핀을 불어넣어주다니 다행이네
player.move(piece), piece.move_to(x,y) 이거를 하나로 합치는게 필요할듯. player.move_to(piece, x,y)
swap(piece.at(), board.loc(x, y))
호출하는 주체는 누구임? Main?
player.move(piece.available_act[ n ])
available_act는 무슨 말이 어디로 이동하는지에 대한 행동을 담은 함수의 배열임
player.pieces[ k ].available_acts[ n ]() 이것도 괜찮구...
언리얼 공부할때 비슷한고민한적있었는데 ㅋㅋ 캐릭터움직일때 캐릭터 클래스자체에서 무빙을 제어할지 캐릭터 컨트롤러 클래스에서 무빙을 제어할지
플레이어에 갖고있는 말들이 들어있거나 하면 플레이어가 움직이고 아니면 기물이 움직이고 보드에서 움직이는건 몰긋다
전 이번에도 Game.Move() 를 구현하겠음.
저 선택지에 없는거임?
Board.Change(), Piece.PossibleDeltaPositions() 는 괜찮겠다만
Play Logic이면 그 정보는 각각의 Data로는 불완전함. 그렇게 짜면 최종적으론 Board 클래스가 웅장해져서 결국 Board class가 Game class와 같아지게 될걸?
그럴바엔 Board class는 따로 놓고, Game class가 Board CurrentBoard를 가지도록 하는 편이 나을거로 보임
만약 너 Undo 기능 넣고싶다고 맘이 바뀌면.. Board.Undo() 만들거? 그럼 Board안에 Board[] History 넣고?
게임은 게임이고 보드는 보드.. 라는게 내 생각...뭣보다 나중에 저장하고 어쩌고 할거면 Data 클래스는 데이터 답게 두고 Logic 클래스는 Logic 답게 메서드 떡칠하는게 좋다고 봄
player.move(piece)
piece.move로 하면 이동 결과 그 기물의 종류가 바뀔때를 생각하면 애매해지고 board.move로 하면 체스판이 기물을 담는거 빼고 다른 일을 해야하니까 안됨 단순히 무슨 기물을 어디로 옮기는건 board에서 하고 갈수있는 위치중 어느쪽으로 움직이게 하는건 player에서 하게 하면됨
https://www.researchgate.net/publication/3188419_Evaluating_the_effect_of_a_delegated_versus_centralized_control_style_on_the_maintainability_of_object-oriented_software
요약만
나오는데 이런 논문이 있음
요컨대 숙련된 개발자는 위임 제어 방식을 쓰는 편이 중앙 제어 방식보다 유지보수에 걸리는 시간이 줄어들지만 비숙련자는 이해도의 문제로 반대로 중앙 제어가 더 좋은 효율을 보여주었다는듯
개인적으로는 체커같은거면 Piece.move()일텐데 체스는 프로모션때문에 애매하긴 한듯
player.move(piece)
Piece.move() - dc App
move 의 역할과 수행하는 주체에 대해 고려해서 piece.move() 일 수도 있지만 말들은 스스로 움직이지 않으니 player.move_piece(piece, ...)