Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

25 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Network-Project


주요 클래스

  • ChatMsg -> 송/수신할 메세지 클래스

    • static 필드
      • MODE_ENTRANCE -> 입장 시
      • MODE_HOST -> 호스트로 입장 시
      • MODE_EXIT -> 퇴장 시
      • MODE_MESSAGE -> 일반 메세지 전송
      • MODE_COMMAND -> 명령어 전송
      • MODE_SYSTEM -> 시스템 메세지 전송
      • MODE_MAFIACHAT -> 마피아 전용 메세지 전송
      • MODE_DEADCHAT -> 사망자 전용 메세지 전송
      • MODE_CONTROL -> 코드 지정
        • CODE_START -> 게임 시작
        • CODE_END -> 게임 종료
        • CODE_DEATH -> 사망 시
        • CODE_DAY -> 낮 시간
        • CODE_VOTING -> 투표 시간
        • CODE_NIGHT -> 밤 시간
        • CODE_UPDATE -> 플레이어 목록 갱신
        • CODE_KICK -> 접속 거부 (닉네임 중복, 서버 이미 존재)
      • 일반 필드
        • String nickname
        • int mode
        • String message
        • int code
  • Mafia_Integrated -> 클라이언트 / 서버 통합 GUI 생성 (Mafia_GUI 로 변경 예정)

    • GUI 내부에 서버 입장 / 생성 버튼 공존
    • 서버 생성시 동시에 호스트 클라이언트로 입장
    • 서버가 이미 존재할 시 생성 거부
    • 서버 입장시 일반 클라이언트로 입장
    • 중복된 닉네임일 시 입장 거부
    • 게임 시작시 마피아 게임 객체 생성
    • 게임 시작 후 수신된 메세지는 마피아 게임 객체로 전달
  • Mafia -> 게임 클래스

    • 게임 시작시 참가자 정보를 활용해 역할 생성 및 랜덤 배정
    • 서버에서만 생성되며 게임 객체에서 서버를 통해 클라이언트로 메시지를 전송하여 클라이언트 GUI 원격 조작
      • 예) 게임 시작 -> new ChatMsg(CODE_START) 전송 -> 클라이언트 : 메세지 수신 -> setUnableExit(); 실행 -> 게임 나가기 버튼 비활성화
    • readMsg(ChatMsg msg) 메서드를 통해 서버로부터 메세지 수신 및 게임 상황 객체로 전달
    • 서버로부터 메세지 수신 시 송신자의 닉네임을 통해 역할 확인 후 게임 상황에 따른 메세지 반환
      • 예) 투표 시간에 일반 메세지 수신 -> new ChatMsg(CODE_SYSTEM, "투표 시간엔 대화할 수 없습니다.") 반환
    • broadcastingToAlive(ChatMsg msg) 메서드를 통해 생존자에게만 메세지 송신 -> GUI 조작 메세지 전달시 활용
      • 예) 낮이 되었을 때, new ChatMsg(ChatMsg.CODE_DAY) 전송 -> 디스플레이 활성화, 사망자 또는 관전자는 그대로 디스플레이 비활성화
    • GameState state 필드를 통해 현재 게임 상황 저장
  • GameState -> 게임 상황 클래스

    • 추상 클래스

    • 낮, 투표, 밤 상황을 각각 하위 클래스로 생성

    • 생성자를 통해 플레이어 목록 갱신 및 게임 상황 변경 방송

      • 예) "밤이 되었습니다."
    • toString() 메서드를 통해 필요시 게임 상황을 String 타입으로 반환

    • nextState() 메서드를 통해 자동으로 다음 상황으로 변경

      • 예) 투표 시간 객체에서 메서드 실행 시 밤 객체로 변경
    • readMessage(ChatMsg msg) 메서드를 통해 상황에 따른 메세지 반환

      • 예) 투표 시간에 일반 메세지 수신 -> new ChatMsg(CODE_SYSTEM, "투표 시간엔 대화할 수 없습니다.") 반환
    • String resultAbility(String nickname, String message) 메서드를 통해 역할별 능력 사용 결과 반환

      • 예) 투표 시 return "["+nominee+"] 투표";
    • GameState_Day -> 낮 클래스

      • "낮이 되었습니다." 방송
      • 생존자 채팅 디스플레이 활성화
      • 일정 시간이 지난 후 투표 시간으로 전환 -> 기본 60초
      • 생성자를 통해 밤에 일어난 일을 방송 (미구현)
      • 생성자를 통해 플레이어 목록 갱신
    • GameState_Voting -> 투표 시간 클래스

      • "투표가 시작되었습니다." 방송
      • 일반 채팅 불가 -> "투표 시간엔 대화할 수 없습니다." 반환
      • 클라이언트 측에서 /닉네임 입력시 해당 닉네임 투표
      • 해당 참가자가 없을 때, 이미 죽었을 때, 관전자일 때 "잘못된 입력입니다." 반환
      • 투표 후 최다 득표자가 나왔을 때 찬반 투표 진행
      • 클라이언트 측에서 /Y , /N 메세지로 찬반 투표
      • 과반수 이상이 찬성시 해당 플레이어 사형
      • 사형된 플레이어는 역할이 사망자로 변경
    • GameState_Night -> 밤 클래스(미구현)

      • "밤이 되었습니다." 방송
      • 일반 채팅 불가 -> "주무실 시간입니다." 반환
      • 클라이언트 측에서 /닉네임 입력시 역할에 따른 능력 사용
      • 경찰 : 해당 닉네임 수사 -> "[닉네임]은 마피아입니다.", "[닉네임]은 시민입니다."
      • 의사 : 해당 닉네임 치료 -> "[닉네임]을 치료합니다."
      • 마피아 : 해당 닉네임 공격 -> "[닉네임]을 공격합니다."
  • Role -> 역할 클래스

    • 추상 클래스

    • 시민, 마피아, 경찰, 의사, 사망자, 관전자를 각각 하위 클래스로 생성

    • ClientHandler를 필드로 저장하여 필요시 해당 플레이어에게만 메세지 전송

    • 생성자에서 클라이언트 핸들러를 통해 역할 설명 전송

      • 예) "당신은 시민입니다. 마피아의 공격으로부터 살아남아 모든 마피아를 색출하세요."
    • toString() 메서드를 통해 필요시 역할 이름을 String 타입으로 반환

    • String ability(String nickname) 메서드를 통해 밤에 사용할 능력 정의

    • Role_Civilian -> 시민 클래스

      • "당신은 시민입니다. -" 전송
      • 능력 없음
    • Role_Docktor -> 의사 클래스(미구현)

      • "당신은 의사입니다. -" 전송
      • 공격당할 플레이어를 보호 -> "닉네임을 치료합니다." 반환
      • 낮이 되었을 때 해당 플레이어가 마피아에게 공격당했다면, "닉네임이 의사에 의해 마피아의 공격에서 살아남았습니다." 방송
    • Role_Police -> 경찰 클래스(미구현)

      • "당신은 경찰입니다. -" 전송
      • 플레이어 수사 -> "[닉네임]은 마피아입니다.", "[닉네임]은 시민입니다." 반환
      • 한번만 사용가능하며, 플레이어가 생존자일 경우 즉시 능력 메세지 반환
      • 죽은 자도 수사 가능 목록에 넣을지 생각중
    • Role_Mafia -> 마피아 클래스(미구현)

      • "당신은 마피아입니다. -" 전송
      • 플레이어 공격 -> "[닉네임]을 공격합니다."
      • 마피아는 마피아끼리 공격할 플레이어를 투표하는 형식
      • 플레이어를 과반수로 공격할 경우 공격 성공
      • 공격이 엇갈릴 시 공격 실패
      • 낮이 되었을 때 의사의 보호를 받지 않았다면, 해당 플레이어 사망
      • 마피아 전용 채팅 GUI 생성 (미구현)
    • Role_Dead -> 사망자 클래스

      • "당신은 죽었습니다." 전송
      • 사형 또는 마피아의 공격에 의해 사망했을시 기존 역할 객체에서 사망자 객체로 변경
      • player.sendToClient(new ChatMsg(ChatMsg.CODE_DEATH))전송
        • 입력 패널 비활성화 및 게임 나가기 활성화
      • 사망자 전용 채팅 GUI 생성 (미구현)
    • Role_Observer -> 관전자 클래스

      • 게임이 진행 중인 서버에 접속했을 때 생성 및 부여
      • "당신은 관전자입니다." 전송
      • 사망자 전용 채팅 GUI 생성 (미구현)
      • player.sendToClient(new ChatMsg(ChatMsg.CODE_DEATH))전송
        • 입력 패널 비활성화 및 게임 나가기 활성화
      • 사망자와는 채팅 가능
  • PrivateChat -> 마피아/사망자 채팅 GUI 클래스 (미구현)

    • 마피아/사망자 채팅 GUI 생성
      • 인자로 "Mafia Chat" / "Dead Chat"를 String 타입으로 받아 제목 표시줄 지정
      • 입력 패널 및 전송 버튼 생성
      • 마피아 목록 생성
    • new ChatMsg(ChatMsg.MODE_/////, "메시지")를 통해 서버로부터 입력을 받으면 메인 GUI 디스플레이가 아닌 전용 채팅 GUI 디스플레이에 메시지 append
      • 마피아 채팅 : MODE_MAFIACHAT
      • 사망자 채팅 : MODE_DEADCHAT
    • static 필드로 HashSet privateList 를 생성하여 해당 플레이어들에게만 MODE_CHAT 전송

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages