티스토리 뷰


이번 포스팅에서는

사용자의 정보나 쪽지같이

클라이언트와 서버에서 똑같이 쓰일 클래스를

설계하겠습니다.


======================================================================================================


Rhythm Game : Common Class






1. Rhythm Game : Common Class


 공통적으로 들어갈 클래스는 3가지정도로 분류할 수 있습니다.


1. 사용자의 정보를 담고 있는 클래스 (Account.java)

2. 생성된 방의 정보를 담고 있는 클래스 (Room.java)

3. 쪽지의 정보를 담고 있는 클래스 (Message.java)





2. Rhythm Game :  Account.java


 먼저 사용자의 정보를 담고 있는 클래스에 대해서 생각해보겠습니다.


 - nick : 사용자의 정보는 기본적으로 아이디, 비밀번호, 이름이 있을 것입니다. 

 - win, lose, draw, maxScore : 사용자의 전적과 최대 점수를 저장하기 위한 변수입니다.

 - joinRoomIndex :  방의 정보를 쉽게 이용하기 위해 사용자가 입장해있는 방의 위치도 변수로 선언하였습니다.

 - messagelist : list형태로 메세지를 저장하고 관리하기 위한 변수입니다.

 - socketAddress : 사용자가 접속할 때마다 같은 ip로 접속한다는 보장이 없기 때문에 Account 객체에 로그인을 할 때마다 해당 socketaddress를 변수에 저장하겠습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
public class Account implements Serializable{
    private String nick;         // 아이디
    private String pass;        // 비밀번호
    private String name;        // 이름
    private SocketAddress socketAddress;    // 접속한 ip와 port
    private int win;            
    private int lose;
    private int draw;
    private int joinRoomIndex;            // 접속중인 방
    private List<Message> messagelist;    // 보유중인 쪽지
    private int maxScore; // 사용자의 최대 점수
    
    //======== 생성자 ================================
    public Account(String nick, String pass, String name) {
        this.nick = nick;
        this.pass = pass;
        this.name = name;
        win = lose = draw = 0;
        joinRoomIndex = -1;        // 방에 들어가지 않은 상태
        this.socketAddress = null;
        messagelist = new ArrayList<>();
        maxScore = 0;
    }
    
    //==============================================
    
    
    // 사용자 정보의 출력 or 비교하기 위한 메소드 정의
 
 
    // Getter and Setter ===============================
    public String getNick() {
        return nick;
    }
 
    public void setNick(String nick) {
        this.nick = nick;
    }
 
    public String getPass() {
        return pass;
    }
 
    public void setPass(String pass) {
        this.pass = pass;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public SocketAddress getSocketAddress() {
        return socketAddress;
    }
 
    public void setSocketAddress(SocketAddress socketAddress) {
        this.socketAddress = socketAddress;
    }
 
    public int getWin() {
        return win;
    }
 
    public void setWin(int win) {
        this.win = win;
    }
 
    public int getLose() {
        return lose;
    }
 
    public void setLose(int lose) {
        this.lose = lose;
    }
 
    public int getDraw() {
        return draw;
    }
 
    public void setDraw(int draw) {
        this.draw = draw;
    }
 
    public int getJoinRoomIndex() {
        return joinRoomIndex;
    }
 
    public void setJoinRoomIndex(int idx) {
        this.joinRoomIndex = idx;
    }
 
    public List<Message> getMessagelist() {
        return messagelist;
    }
 
    public void setMessagelist(List<Message> messagelist) {
        this.messagelist = messagelist;
    }
    
    public int getMaxScore() {
        return maxScore;
    }
 
    public void setMaxScore(int maxScore) {
        this.maxScore = maxScore;
    }
    //=================================================
}

cs






3. Rhythm Game : Room.java


 Room 클래스는 방의 정보를 담아두기 위한 클래스입니다.


 - selectMusic : 기본적으로 리듬게임이기 때문에 준비, 시작뿐만 아니라 어떤 곡이 선택되어있는지 정보도 포함해야합니다.

 - title, pass : 방의 정보를 담기 위한 변수입니다. pass는 비밀번호 방일 때만 설정됩니다.

 - joiner : 방에 입장한 유저의 목록을 담을 변수입니다. 이 게임은 최대 2명에서만 실행할 수 있기 때문에 joiner는 최대 size가 2라는 가정하에 진행하도록 하겠습니다.

 - gameStart : 게임이 시작된 방인지 아니면 게임을 진행하기 위해 대기중인 방인지 알기 위한 변수입니다. 방 목록에 방의 정보를 표시할 때 게임중인 방인지 아닌지를 표현하기 위한 변수입니다.

 - resultSetting : 2인용의 게임일 경우 게임이 끝날 때 서로의 점수를 비교하여 승패를 가리게 되는데 승패를 가리는 과정에서 각 유저의 게임이 동시에 끝나는 것이 아니기 때문에 오류를 방지하기 위해 둘다 게임이 끝났는지 확인하기 위한 변수입니다.

 - twoUserRoom : 해당 방이 1인용인지 2인용인지 체크하기 위한 변수입니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
public class Room implements Serializable {
    private int selectMusic = 0;        // 방에서 선택된 곡
    private String title;            // 방 제목
    private String pass;                // 방 비밀번호
    private List<Account> joiner;    // 방에 입장한 유저목록
    private boolean gameStart;        // 게임중인지 아닌지
    private boolean resultSetting;    // 방에 존재하는 사람이 모두 게임이 끝났는지 확인
    private boolean twoUserRoom;    // 1인용인지 2인용인지 체크
    
    //======== 생성자 ================================
    public Room(Account owner, String title, boolean twouser, String pass) {            // 비밀번호 방 생성자
        joiner = new Vector<>();
        joiner.add(owner);
        this.title = title;
        this.pass = pass;
        gameStart = false;
        resultSetting = false;
        twoUserRoom = twouser;
    }
    
    public Room(Account owner, String title, boolean twouser) {        // 비밀번호가 아닌 방 생성자
        this(owner, title, twouser, "");
        gameStart = false;
    }
    //===============================================
    
    // 방의 상태와 정보를 출력하기 위한 메소드 정의
 
    // Getter and Setter =====================================
    public int getSelectMusic() {
        return selectMusic;
    }
 
    public void setSelectMusic(int selectMusic) {
        this.selectMusic = selectMusic;
    }
 
    public String getTitle() {
        return title;
    }
 
    public void setTitle(String title) {
        this.title = title;
    }
 
    public String getPass() {
        return pass;
    }
 
    public void setPass(String pass) {
        this.pass = pass;
    }
 
    public List<Account> getJoiner() {
        return joiner;
    }
 
    public void setJoiner(List<Account> joiner) {
        this.joiner = joiner;
    }
 
    public boolean isGameStart() {
        return gameStart;
    }
 
    public void setGameStart(boolean gameStart) {
        this.gameStart = gameStart;
    }
    
    public boolean isResultSetting() {
        return resultSetting;
    }
 
    public void setResultSetting(boolean resultSetting) {
        this.resultSetting = resultSetting;
    }
    
    public boolean isTwoUserRoom() {
        return twoUserRoom;
    }
 
    public void setTwoUserRoom(boolean twoUserRoom) {
        this.twoUserRoom = twoUserRoom;
    }
    // ===================================================
    
}
 
cs






4. Rhythm Game : Message.java


 Message 클래스는 메세지를 관리하기 위한 클래스입니다.

타 유저에게 쪽지를 보낸다면 보낸 사람은 발신한 메세지를 가지게 되고 받은 사람은 수신 메세지를 가지게 됩니다.


 - send : 해당 메세지를 발신한건지 수신한건지 체크하기 위한 변수입니다. 보낸거라면 true, 받은거라면 false로 저장됩니다.

 - name, ment, date : 메세지의 정보를 담기 위한 변수로 date는 발신 또는 수신한 날짜, name은 발신 또는 수신한 사람의 이름, ment는 메세지의 내용을 담습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
package Common;
 
import java.io.Serializable;
 
public class Message implements Serializable {
    private boolean send;
    private String name;
    private String ment;
    private boolean read;
    private String date;
    
    // 생성자 ==============================================================================
    public Message(boolean send, String name, String ment, boolean read, String date) {
        this.send = send;
        this.name = name;
        this.ment = ment;
        this.read = read;
        this.date = date;
    }
    // ====================================================================================
 
    // Getter and Setter ==================================================================
    public boolean isSend() {
        return send;
    }
 
    public void setSend(boolean send) {
        this.send = send;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public String getMent() {
        return ment;
    }
 
    public void setMent(String ment) {
        this.ment = ment;
    }
 
    public boolean isRead() {
        return read;
    }
 
    public void setRead(boolean read) {
        this.read = read;
    }
 
    public String getDate() {
        return date;
    }
 
    public void setDate(String date) {
        this.date = date;
    }
    // =====================================================================================
    
    public String sendToString() {
        return send ? "발신" : "수신";
    }
    
    
    
}
 
cs





=======================================================================================================

## 위의 코드에서는 package가 따로 없는데 Common 패키지를 만들어서 3개의 클래스를 묶어서 설계해야합니다.







공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함