Upload
yongbeom-kim
View
99
Download
2
Embed Size (px)
Citation preview
JAVA네트워크 오목 게임Superblr
오목 바둑판에 두 사람이 번갈아 돌을 놓아 가로나 세로 , 대각선으로 다섯 개의 연속된 돌을 놓으면 이기는 놀이
입장 작동 흐름OK!
입장요청입장요청
오목방 인원 ( 최대 2 명 )- 2 명이하일 때
- 입장 Ok 시 ‘ Omok Msg’ 를 통해 전체 전달
입장 ! 입장 !
게임 진행 통신 방법통신 프로토콜 만들기
OK!
[ 클라이언트 메시지 ]A 는 X, Y 에 오목을 뒀어 .
A B
[ 서버 메세지 ]A 가 X,Y 에 돌을 뒀다 .B 의 차례이다 .
[ 서버 메세지 ]A 가 X,Y 에 돌을 뒀다 .B 의 차례이다 .
아 ! 내차례구나 !
게임 진행 통신 방법프로토콜 메세지 내용클라이언트
메시지 의미Room_msg 입장 요청
[NAME] 아이디 지정[START] 준비
[DROPGAME] 기권[STONE] 돌을 둔 좌표
[WIN] 승리[STOPGAME] 게임 중지
서버메시지 의미[EXIT] 상대방 퇴장
[ENTER] 상대방 입장[STONE] 상대방 돌을 둔 좌표[COLOR] 돌 색[FULL] 2 명이 된 방
[DROPGAME] 상대방 기권[WIN] 승리[LOSE] 패배
[DISCON-NECT] 상대방 접속 끊김
[PLAYERS] 유저 목록
Ex.
[STONE]3 5//x=3, y=5 인 곳에 돌을 두겠다 .
DB TableNum(int) Winner
(varchar)Startdate(varchar)
Enddate(varchar)
Playdate(varchar)
1 A 2015 년 xx 월 xx 일xx 시 xx 분 xx 초
2015 년 xx 월 xx 일xx 시 xx 분 xx 초 xx 분 xx 초
2 B 2015 년 xx 월 xx 일xx 시 xx 분 xx 초
2015 년 xx 월 xx 일xx 시 xx 분 xx 초 xx 분 xx 초
…..
클라이언트 다이어그램
public class OmokClient extends Frame implements Runnable, ActionListener
오목판을 객체하여 사용 각 돌의 위치 기억
Omok_pan 은 2 차원 배열로 각 클라이언트의 돌의 위치를 가지고 있다 .
Omok_pan[1][2]=BLACK; //x,y = 1,2 에 흑돌이 놓여져있다 . Omok_pan[4][5]=WHITE; //x,y = 4,5 에 백돌이 놓여져있다 . Omok_pan[7][6]=0; //x,y = 7,6 에 돌이 없다 .
private boolean check(Point p, int col){가로 , 세로 , 대각선 같은 돌이 연속으로 5 개 놓여 졌으면 true 반환아니면 false 반환
}
private int count(Point p, int dx, int dy, int col){
같은 색의 돌의 연속한 돌의 개수를 카운트}
if (check(new Point(x, y), color)) {
이겼을 시에 서버로 내가 이겼다는 메시지 ([WIN]) 를 전송 .
}
서버 다이어그램
public class OmokServer
접속하는 클라이언트와 소켓을 연결 쓰레드를 실행 쓰레드를 OmokMessage 객체에게 추가
private OmokMessage OM = new OmokMessage(); // 메시지 객체while (true) {
TS = SS.accept(); // 접속자와 연결된 쓰레드를 대입OT = new Omok_Thread(TS); // 쓰레드 생성OT.start(); // 쓰레드 시작OM.add(OT); // OM 에 쓰레드를 추가
}
class Omok_Thread extends Thread
소켓과 입 · 출력 스트림 외에도 클라이언트에 대한 정보를 가짐 .
클라이언트가 보낸 메시지가 누구의 메시지인지 알기 위함 .
class OmokMessage extends Vector<Object>
쓰레드의 접속여부와 아이디를 참조하여 요소로 담기 위해 벡터 상속
void sendToOthers(Omok_Thread ot, String msg) {
쓰레드와 연결된 클라이언트로 메시지를 전달}