You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
1.각 각의 클라이언트가 한 번씩 입력하면 무승부로 자동 종료
->계속해서 게임이 진행되면서 입력에 어떻게 반응하는지 살필수 있도록 수정
2.클라이언트 -> 서버는 가능하지만 클라이언트 -> 서버 -> 클라이언트의 과정에서 제대로 전달되지 않음
->조치완료
3.DB 등 아직 제대로 구현 안됨
->일부조치완료(미숙사항 아래에 적겠음)
4.제대로 된 임계 영역을 설정하지 않음
->조치완료
5.임시로 전역 변수 사용
->일부조치완료(미숙사항 아래에 적겠음)
6.클라이언트 초기화가 제대로 안됨.
->반복적으로 실행시 소켓이 제대로 안풀리거나, 버퍼가 덧씌워지는 오류가 있는듯. 해결할수 있겠지만 다른 문제가 더시급함
2차 개발 진척상황
상호통신 완전 구현하였음.
하지만 게임룰,게임보드판 관련 구현이 많이 미흡함.
2.전역변수에 대하여.
2-1. board전역변수
board[5][5]는 전역변수로 두는게 현명함. 만일 board[5][5](이하 보드)를 전역변수로 두지 않고, 메인아래에 둘시 아래와 같은 문제가 발생함.
보드를 초기화 할때 보드의 주소를 매개변수로 함수에 넘기고 싶다면, BOARD_SIZE를 사용할수없다! (왜냐하면 2차원배열을 포인터로 가르킬때는 arr[][]는 불가하고 arr[][int]만 가능하기때문.)
EX) set_board(board[][])는 불가하지만 set_board(board[][정수])는 가능.
2-2 여러 쓰레드, 더 나아가 클라이언트와 서버가 공유하는 변수
턴(cnt_turn)이나 현재접속한 클라이언트 수(cnt_clnt)등은 전역변수로 쓰는게 불가피하다.
만일 C가 아니라 객체지향 언어였다면 DB나 UI관련 클래스에서 관리하면 되지만, C에서 그러한 틀에 맞춰 구현하는게 효과적인가? 소스코드상에서 주석을 최대한 활용하여 가독성을 높이는 게 최선이다.
앞으로 구현할 사항
클라이언트의 recv_msg안에 print_board함수를 이식하였다.
서버가 새로운 입력을 공유해줄때마다 recv가 발생하고, 그때마다 클라이언트는 자연스럽게 값반영과 화면재출력을 실행한다. 일단 클라이언트쪽에 board를 두었지만, 향후 좀더 학습효과 높은 설계를 위해서는 서버쪽에 board를 두도록 고치는것도 고려할만하다(서버 쪽에 보드가 있다면 더큰 단위의 데이터통신이 이루어 지고 난이도가 상승하기 때문)
2.서버가 시작을 눌러야만 게임이 시작하도록한다(추가적인 접속역시 차단되야한다. 즉while()문마다 탈출문을 넣어줘야한다)
3.클라이언트의 보드가 메세지에 따라 수정되도록한다.
4.수정된 클라이언트의 보드를 특정한 룰에 따라 검사한다.
5.검사결과를 수집할 버퍼를 서버쪽에 마련한다.
6.게임이 끝나는 탈출문을 만든다.
1.각 각의 클라이언트가 한 번씩 입력하면 무승부로 자동 종료
->계속해서 게임이 진행되면서 입력에 어떻게 반응하는지 살필수 있도록 수정
2.클라이언트 -> 서버는 가능하지만 클라이언트 -> 서버 -> 클라이언트의 과정에서 제대로 전달되지 않음
->조치완료
3.DB 등 아직 제대로 구현 안됨
->일부조치완료(미숙사항 아래에 적겠음)
4.제대로 된 임계 영역을 설정하지 않음
->조치완료
5.임시로 전역 변수 사용
->일부조치완료(미숙사항 아래에 적겠음)
6.클라이언트 초기화가 제대로 안됨.
->반복적으로 실행시 소켓이 제대로 안풀리거나, 버퍼가 덧씌워지는 오류가 있는듯. 해결할수 있겠지만 다른 문제가 더시급함
2차 개발 진척상황
하지만 게임룰,게임보드판 관련 구현이 많이 미흡함.
2.전역변수에 대하여.
2-1. board전역변수
board[5][5]는 전역변수로 두는게 현명함. 만일 board[5][5](이하 보드)를 전역변수로 두지 않고, 메인아래에 둘시 아래와 같은 문제가 발생함.
보드를 초기화 할때 보드의 주소를 매개변수로 함수에 넘기고 싶다면, BOARD_SIZE를 사용할수없다! (왜냐하면 2차원배열을 포인터로 가르킬때는 arr[][]는 불가하고 arr[][int]만 가능하기때문.)
EX) set_board(board[][])는 불가하지만 set_board(board[][정수])는 가능.
2-2 여러 쓰레드, 더 나아가 클라이언트와 서버가 공유하는 변수
턴(cnt_turn)이나 현재접속한 클라이언트 수(cnt_clnt)등은 전역변수로 쓰는게 불가피하다.
만일 C가 아니라 객체지향 언어였다면 DB나 UI관련 클래스에서 관리하면 되지만, C에서 그러한 틀에 맞춰 구현하는게 효과적인가? 소스코드상에서 주석을 최대한 활용하여 가독성을 높이는 게 최선이다.
앞으로 구현할 사항
서버가 새로운 입력을 공유해줄때마다 recv가 발생하고, 그때마다 클라이언트는 자연스럽게 값반영과 화면재출력을 실행한다. 일단 클라이언트쪽에 board를 두었지만, 향후 좀더 학습효과 높은 설계를 위해서는 서버쪽에 board를 두도록 고치는것도 고려할만하다(서버 쪽에 보드가 있다면 더큰 단위의 데이터통신이 이루어 지고 난이도가 상승하기 때문)
2.서버가 시작을 눌러야만 게임이 시작하도록한다(추가적인 접속역시 차단되야한다. 즉while()문마다 탈출문을 넣어줘야한다)
3.클라이언트의 보드가 메세지에 따라 수정되도록한다.
4.수정된 클라이언트의 보드를 특정한 룰에 따라 검사한다.
5.검사결과를 수집할 버퍼를 서버쪽에 마련한다.
6.게임이 끝나는 탈출문을 만든다.
시연영상
https://youtu.be/53nI-sWFtR4
The text was updated successfully, but these errors were encountered: