티스토리 뷰
이번 포스팅에서는
사용자의 정보나 쪽지같이
클라이언트와 서버에서 똑같이 쓰일 클래스를
설계하겠습니다.
======================================================================================================
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; } //================================================= } |
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개의 클래스를 묶어서 설계해야합니다.
'Project > Java를 이용한 게임 프로그램 구현' 카테고리의 다른 글
5. Rhythm Game : Signup (0) | 2018.11.29 |
---|---|
4. Rhythm Game : ClientUI & LoadingPanel (1) | 2018.11.28 |
2. Rhythm Game : Server & Client (2) | 2018.11.27 |
1. Rhythm Game : Structure & Function (0) | 2018.11.17 |
0. Rhythm Game : Introduce (0) | 2018.11.17 |
- Total
- Today
- Yesterday
- SET
- 네트워크
- 장점
- @EventListener
- QueryDSL
- 의미
- join subquery
- Queue
- 원리
- Animation
- 예제
- on('seek')
- login
- oauth
- 특징
- SDK
- IN Clause
- playbackRate
- playsinline
- API
- @subquery
- beforeunload
- Multi IN Clause
- 관리자 도구
- 로그인
- jwplayer
- @subselect
- map
- list
- 자바
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |