Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Develop #20

Merged
merged 165 commits into from
Jun 10, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
165 commits
Select commit Hold shift + click to select a range
af89390
게임방 구현
ijehyunpark May 2, 2023
f8b80d5
게임방 조건 수정 및 테스트 코드 작성
ijehyunpark May 3, 2023
4022ede
연결 설정
ijehyunpark May 4, 2023
216b1a8
연결 설정 개선
ijehyunpark May 4, 2023
6350dcf
Merge pull request #1 from ijehyunpark/feature/SA-38-BE-0001-gameroom
ijehyunpark May 5, 2023
0bae6f3
최초 도메인 클래스 기반 추가
ijehyunpark May 5, 2023
f528ffb
기본 자원 획득 행동 추가
SonChanhyuk May 6, 2023
3bab335
주석 추가
SonChanhyuk May 6, 2023
9349aed
스택형 자원 획득 행동 추가
SonChanhyuk May 6, 2023
43813ab
가족 늘리기 행동 추가
SonChanhyuk May 6, 2023
c04a479
뼈대 작성
SonChanhyuk May 7, 2023
addeabd
게임 시작 매커니즘 설계 구현
ijehyunpark May 7, 2023
ead2bf8
자원 설정 매커니즘 수정
ijehyunpark May 7, 2023
3ca5693
라운드 시작 매커니즘 추가
ijehyunpark May 7, 2023
51bd55a
라운드 카드 셔플링 구현
ijehyunpark May 7, 2023
15add81
라운드 종료 매커니즘 구현
ijehyunpark May 7, 2023
525e834
수확 단계 구현
ijehyunpark May 7, 2023
37bb3a0
아그리콜라 컨트롤러 개선
ijehyunpark May 7, 2023
0184fde
방 업그레이드 작성
SonChanhyuk May 7, 2023
8f7e57d
패키지 구성 변경
SonChanhyuk May 7, 2023
21e5eea
설비카드 사용제외 작성
SonChanhyuk May 7, 2023
305d869
카드 놓기 매커니즘 구현
SonChanhyuk May 7, 2023
edd3bbd
카드의 전제조건을 확인하는 부분 추가
SonChanhyuk May 7, 2023
8c32cbf
Merge pull request #2 from ijehyunpark/feature/SA-61-BE-0024-harvest
ijehyunpark May 9, 2023
bf61929
Merge branch 'feature/SA-44-BE-0007-action_trigger' of github.com:ije…
ijehyunpark May 9, 2023
2d8e63a
브랜치 병합
ijehyunpark May 10, 2023
0cad517
브랜치 병합
ijehyunpark May 10, 2023
7a15522
Merge pull request #3 from ijehyunpark/feature/SA-56-BE-0019-playerac…
ijehyunpark May 11, 2023
8781fc7
임시 저장
ijehyunpark May 11, 2023
957c521
Merge branch 'feature/SA-56-BE-0019-playeraction' of github.com:ijehy…
ijehyunpark May 11, 2023
751e530
action event 적용
ijehyunpark May 11, 2023
3bb777c
action 재구성
ijehyunpark May 11, 2023
67479ff
주석 수
ijehyunpark May 11, 2023
b17179c
Merge pull request #4 from ijehyunpark/feature/SA-99-BE-0003-게임보드판구현
SonChanhyuk May 12, 2023
f50d5fd
울타리 설치가능 위치확인, 울타리 설치
SonChanhyuk May 12, 2023
c1f61d1
울타리 설치가능 위치확인, 울타리 설치
SonChanhyuk May 12, 2023
4cd827e
서버 클라이언트 요청 형식 정의
ijehyunpark May 13, 2023
7621af0
메세지 전송 추가
ijehyunpark May 13, 2023
5f30971
라운드 시작 구현
ijehyunpark May 13, 2023
6ce00c2
라운드 증가 메소드 위치 변경
ijehyunpark May 13, 2023
f00f68c
라운드 증가 메소드 위치 변경 및 테스트 코드 수정 및 코드 개선
ijehyunpark May 13, 2023
4c4503f
액션칸 플레이 구조 작성
ijehyunpark May 13, 2023
93adb77
Merge pull request #6 from ijehyunpark/feature/SA-50-BE-0013-roundstart
ijehyunpark May 14, 2023
62009dd
merge develop
ijehyunpark May 14, 2023
6618143
merge sa-51-be-0014
ijehyunpark May 14, 2023
8fb668a
action 구현
ijehyunpark May 14, 2023
1e0303a
교환 구현
ijehyunpark May 14, 2023
608c59d
주석 개선
ijehyunpark May 14, 2023
0e60f39
설치가능한 구조물 위치 확인 구현
SonChanhyuk May 14, 2023
ba0e7e7
누락된 주석 추가
SonChanhyuk May 14, 2023
6e85e6f
통신 개선
ijehyunpark May 14, 2023
5dbb146
라운드 정보 통신 규약 수정
ijehyunpark May 14, 2023
f681e0b
유저 객체 불필요 필드 삭제
ijehyunpark May 14, 2023
112783e
오류 메세지 전송
ijehyunpark May 14, 2023
e4900b8
동물 배치 구현
SonChanhyuk May 16, 2023
4dd163c
merge conflict 수정
SonChanhyuk May 16, 2023
95ea49a
Merge pull request #5 from ijehyunpark/feature/SA-51-BE-0014-프로토콜
ijehyunpark May 16, 2023
b31d04f
Merge pull request #7 from ijehyunpark/feature/SA-52-BE-0015-turnstart
ijehyunpark May 16, 2023
22461ba
테스트 코드 수정 및 생성자 개선
ijehyunpark May 16, 2023
1550c83
불필요한 import 제거
ijehyunpark May 16, 2023
fa7a1fa
Update Room.java
ijehyunpark May 16, 2023
a4e4c13
인원수 체크 개선
ijehyunpark May 16, 2023
1a8e7a9
Merge branch 'main' of github.com:ijehyunpark/Agricola-backend into d…
ijehyunpark May 16, 2023
0ae77f6
Update README.md
ijehyunpark May 16, 2023
5e5efe1
수정중
SonChanhyuk May 17, 2023
d4ff6c0
코드 수정
SonChanhyuk May 17, 2023
6a592ae
주설비 기본 틀
SonChanhyuk May 17, 2023
af7ba4b
주설비 구현 - 일부 기능 제외
SonChanhyuk May 18, 2023
c674292
PlaceAction 수정
SonChanhyuk May 18, 2023
f1aeeb7
merge conflict 수정
SonChanhyuk May 18, 2023
7f05f69
Merge pull request #8 from ijehyunpark/feature/SA-52-BE-0015-turnstart
ijehyunpark May 18, 2023
5d15f4f
tmp
SonChanhyuk May 19, 2023
5f5ec7a
Update Farm.java
SonChanhyuk May 19, 2023
a13f9d8
Update Room.java
SonChanhyuk May 19, 2023
633e201
edit null exception
SonChanhyuk May 19, 2023
b03ebfc
Merge remote-tracking branch 'origin/feature/SA-45-BE-0008-oven' into…
SonChanhyuk May 19, 2023
6130534
Merge pull request #9 from ijehyunpark/feature/SA-45-BE-0008-oven
ijehyunpark May 19, 2023
c207e0c
메인 게임 보드 구성
ijehyunpark May 20, 2023
4578b43
메인 게임 보드 구성
ijehyunpark May 20, 2023
df6a88c
게임 보드 개발
ijehyunpark May 20, 2023
5b8823c
stack 관련 중복성 해소
ijehyunpark May 20, 2023
0a333b3
stack 관련 중복성 해
ijehyunpark May 20, 2023
97b515d
주석 사양 추가
ijehyunpark May 20, 2023
62a9a8c
번식 코드 추가
ijehyunpark May 20, 2023
7d3d41b
null 체크
ijehyunpark May 20, 2023
2f22e9f
cardDictionary 위치 수정
ijehyunpark May 20, 2023
01b06d6
null 체크 버그 수정
ijehyunpark May 20, 2023
c5cb064
직업 뼈대 작성
ijehyunpark May 20, 2023
d994699
직업 3개 구현
ijehyunpark May 20, 2023
a9d408a
직업 3개 구
ijehyunpark May 20, 2023
a7f68fd
Merge pull request #10 from ijehyunpark/feature/SA-99-BE-0003-게임보드판구현
ijehyunpark May 21, 2023
239d252
직업 목록 추가
ijehyunpark May 21, 2023
8f0381d
game 기본 사양 변경
ijehyunpark May 21, 2023
e5a0918
game 기본 사양 변경
ijehyunpark May 21, 2023
0e39bac
직업 카드 기능 추가
ijehyunpark May 21, 2023
3fa47d4
UnderGardener 구현
ijehyunpark May 21, 2023
6beee0c
action 분리
ijehyunpark May 22, 2023
9a5142e
액션 구현
ijehyunpark May 22, 2023
af09cbb
점수 계산 구현
SonChanhyuk May 22, 2023
24d0235
Merge remote-tracking branch 'origin/develop' into feature/SA-45-BE-0…
SonChanhyuk May 22, 2023
c3a8d03
예외 구현 및 action test 준비
ijehyunpark May 22, 2023
5f293e3
action 객체 singletion으로 수정
ijehyunpark May 22, 2023
648c575
스택 구현
ijehyunpark May 22, 2023
8317245
임시 커밋
SonChanhyuk May 23, 2023
d7eb9ea
수정
ijehyunpark May 23, 2023
c4bf573
테스트 코드 수정
ijehyunpark May 23, 2023
c25db08
테스트 코드 수정
ijehyunpark May 23, 2023
726f916
Merge pull request #11 from ijehyunpark/feature/action-card
ijehyunpark May 23, 2023
93bb87d
JSON 직렬화 개선
ijehyunpark May 23, 2023
999067e
직렬화 테스트
ijehyunpark May 23, 2023
688bd42
울타리 액션 구현
ijehyunpark May 23, 2023
adcc424
pull
SonChanhyuk May 26, 2023
3971033
플레이어 자원 교환 뼈대 구현 및 외양간 건설 구현
ijehyunpark May 27, 2023
43cb7da
플레이어 자원 교환 뼈대 구현 및 외양간 건설 구현
ijehyunpark May 27, 2023
27c2325
번식 구현
ijehyunpark May 27, 2023
9636e15
보조설비추가
SonChanhyuk May 30, 2023
294f368
Merge pull request #12 from ijehyunpark/feature/action-card
ijehyunpark May 30, 2023
39508d1
브랜치 병합
ijehyunpark May 30, 2023
1e26c39
브랜치 병합
ijehyunpark May 30, 2023
b87bad8
주설비보드 구현
ijehyunpark May 30, 2023
f341d0c
예약 자원 오래된 구성 삭제 및 통합
ijehyunpark May 30, 2023
b50f4ee
테스트 코드 수정
ijehyunpark May 30, 2023
3cd82f4
Merge pull request #13 from ijehyunpark/feature/card-communication
ijehyunpark May 31, 2023
968cf71
플레이어 객체 대체 식별자 버그 수정
ijehyunpark Jun 2, 2023
92ea5aa
직렬화 코드 수정 및 자원 획득 배열 리스트 변환
ijehyunpark Jun 2, 2023
17f49b9
소문자 버그 수정
ijehyunpark Jun 2, 2023
0acac96
직업카드 추가
SonChanhyuk Jun 3, 2023
98cb5ff
필드 설치, 울타리 수정
SonChanhyuk Jun 3, 2023
2d72ae4
신규 6종 이벤트 구현 및 테스트 코드 수정
ijehyunpark Jun 4, 2023
131e6c8
글자 수정
ijehyunpark Jun 6, 2023
b9bdeef
한줄수정
SonChanhyuk Jun 6, 2023
596fb7c
울타리 설치 수정 및 기타 수정
SonChanhyuk Jun 6, 2023
fc3a1d2
버그 수정
SonChanhyuk Jun 6, 2023
474e0bb
actionType위치 수정
SonChanhyuk Jun 6, 2023
fe22b9c
Merge pull request #14 from ijehyunpark/feature/card-communication
ijehyunpark Jun 6, 2023
26f61ae
더미 직업 카드 및 더미 보조설비 생성 및 배치
ijehyunpark Jun 7, 2023
0b4a54f
카드 관리 책임 분리
ijehyunpark Jun 7, 2023
df962e5
player와 game 결합 분리
ijehyunpark Jun 7, 2023
77d756f
직업 카드 수정
ijehyunpark Jun 7, 2023
bf54f64
중단점 공지
ijehyunpark Jun 7, 2023
20c9cf5
종료 공지
ijehyunpark Jun 7, 2023
d779c01
addAnimal 수정
SonChanhyuk Jun 7, 2023
dbf1f76
한글자 수정
SonChanhyuk Jun 7, 2023
d402b88
카드 관련 정보 JSON 직렬화 최적화
ijehyunpark Jun 7, 2023
b37ad03
Merge pull request #16 from ijehyunpark/feature/addTest
ijehyunpark Jun 7, 2023
c9d9414
Merge branch 'develop' of github.com:ijehyunpark/Agricola-backend int…
ijehyunpark Jun 7, 2023
793009f
moveAnimalArr outOfIndex 수정
ijehyunpark Jun 7, 2023
2245c28
동물 넘침 예외 추가
ijehyunpark Jun 7, 2023
9120977
동물 교환 구현 - 일단 요청 오면 넘친 동물 그냥 다 지움
ijehyunpark Jun 7, 2023
df90f13
요청 수정
ijehyunpark Jun 7, 2023
66694a4
dto 오류 수정
ijehyunpark Jun 7, 2023
898aa45
Merge pull request #17 from ijehyunpark/feature/card-communication
ijehyunpark Jun 8, 2023
3b4cd3a
구걸 토큰 교환 추가
ijehyunpark Jun 8, 2023
7038993
라운드 진행 버그 수정
ijehyunpark Jun 8, 2023
86026b1
라운드 진행 버그 수정
ijehyunpark Jun 8, 2023
1726388
헛간 테스트, 액션트리거 테스트 추가
SonChanhyuk Jun 8, 2023
e1a0ba6
동기화 및 버그 수정
ijehyunpark Jun 9, 2023
b58e0be
베이커 삭제
SonChanhyuk Jun 9, 2023
fd6623b
Merge pull request #18 from ijehyunpark/feature/addTest
SonChanhyuk Jun 9, 2023
0b607e2
주석 수정
ijehyunpark Jun 10, 2023
58102ee
Merge pull request #19 from ijehyunpark/feature/card-communication
ijehyunpark Jun 10, 2023
4f7bd04
Update README.md
ijehyunpark Jun 10, 2023
3cd6084
입력 버그 수정
ijehyunpark Jun 10, 2023
0cae9ad
라운드 버그 수정
ijehyunpark Jun 10, 2023
73b5cca
Merge pull request #21 from ijehyunpark/feature/card-communication
ijehyunpark Jun 10, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -23,4 +23,7 @@ build/
nbbuild/
dist/
nbdist/
.nb-gradle/
.nb-gradle/

### Dockerfile ###
Dockerfile
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
# Agricola-backend
[![Java CI with Gradle](https://github.com/ijehyunpark/Agricola-backend/actions/workflows/gradle.yml/badge.svg?branch=develop)](https://github.com/ijehyunpark/Agricola-backend/actions/workflows/gradle.yml)
# SE MEOSS Agricola-backend
5 changes: 5 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,14 @@ repositories {

dependencies {
implementation 'org.springframework.boot:spring-boot-starter-websocket'
implementation 'org.junit.jupiter:junit-jupiter:5.7.0'
implementation 'junit:junit:4.13.1'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
implementation 'org.springframework.boot:spring-boot-starter-validation'
testImplementation 'org.assertj:assertj-core:3.24.2'
testImplementation 'org.mockito:mockito-inline:5.2.0'
}

tasks.named('test') {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,156 @@
package com.semoss.agricola.GamePlay.controller;

import com.semoss.agricola.GamePlay.dto.AgricolaActionRequest;
import com.semoss.agricola.GamePlay.dto.AgricolaExchangeRequest;
import com.semoss.agricola.GamePlay.dto.AgricolaRelocationRequest;
import com.semoss.agricola.GamePlay.exception.AnimalOverflowException;
import com.semoss.agricola.GamePlay.exception.BlockingException;
import com.semoss.agricola.GamePlay.service.AgricolaService;
import com.semoss.agricola.GameRoom.domain.GameRoom;
import com.semoss.agricola.GameRoom.service.GameRoomService;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import lombok.extern.log4j.Log4j2;
import org.springframework.messaging.handler.annotation.DestinationVariable;
import org.springframework.messaging.handler.annotation.MessageMapping;
import org.springframework.messaging.handler.annotation.Payload;
import org.springframework.messaging.simp.SimpMessageHeaderAccessor;
import org.springframework.messaging.simp.SimpMessageSendingOperations;
import org.springframework.stereotype.Controller;

import java.util.List;

@Controller
@RequiredArgsConstructor
@Log4j2
public class AgricolaController {

private final SimpMessageSendingOperations simpMessageSendingOperations;
private final AgricolaService agricolaService;
private final GameRoomService gameRoomService;

/**
* 게임 시작 요청
* @param gameRoomId 게임을 진행할 게임방 식별자
*/
@MessageMapping("/start-game/{gameRoomId}")
public void startGame(@DestinationVariable Long gameRoomId) {
// 게임 시작 매커니즘 시작
agricolaService.start(gameRoomId);

// 게임 룸 반환
GameRoom gameRoom = gameRoomService.getOne(gameRoomId);

// 게임 상태 전송
simpMessageSendingOperations.convertAndSend("/sub/channel/" + gameRoomId, gameRoom);

}

/**
* 플레이어 행동 요청
* @param gameRoomId 게임을 진행할 게임방 식별자
* @param actionRequest 행동 요청 필드
* @param headerAccessor 웹 소켓 메세지 헤더 접근자
*/
@MessageMapping("/play-action/{gameRoomId}")
public void playAction(@DestinationVariable Long gameRoomId, @Payload @Valid AgricolaActionRequest actionRequest, SimpMessageHeaderAccessor headerAccessor) {
// 현재 플레이어 턴인지 확인
if(!agricolaService.validatePlayer(gameRoomId, headerAccessor.getSessionAttributes().get("userId")))
throw new RuntimeException("잘못된 요청");

// 게임 룸 반환
GameRoom gameRoom = gameRoomService.getOne(gameRoomId);

// 플레이어 액션 진행
try {
agricolaService.playAction(gameRoomId, actionRequest.getEventId(), actionRequest.getActs());
} catch (BlockingException ex) {
log.debug("게임이 일시중단되었습니다.");
simpMessageSendingOperations.convertAndSend("/sub/channel/" + gameRoomId, gameRoom);
simpMessageSendingOperations.convertAndSend("/sub/errors" , ex.getLocalizedMessage());
} catch (AnimalOverflowException ex) {
log.debug("게임이 일시중단되었습니다. : 동물 재배치 필요");
simpMessageSendingOperations.convertAndSend("/sub/channel/" + gameRoomId, gameRoom);
simpMessageSendingOperations.convertAndSend("/sub/errors" , ex.getLocalizedMessage());
}

// 게임 상태 전송
simpMessageSendingOperations.convertAndSend("/sub/channel/" + gameRoomId, gameRoom);
}

/**
* 플레이어 교환 요청
* @param gameRoomId 게임을 진행할 게임방 식별자
* @param exchangeRequest 교환 요청 필드
* @param headerAccessor 웹 소켓 메세지 헤더 접근자
*/
@MessageMapping("/play-exchange/{gameRoomId}")
public void playExchange(@DestinationVariable Long gameRoomId, @Payload @Valid List<AgricolaExchangeRequest> exchangeRequest, SimpMessageHeaderAccessor headerAccessor) {
// 현재 플레이어 턴인지 확인
if(!agricolaService.validatePlayer(gameRoomId, headerAccessor.getSessionAttributes().get("userId")))
throw new RuntimeException("잘못된 요청");

// 게임 룸 반환
GameRoom gameRoom = gameRoomService.getOne(gameRoomId);

// 플레이어 교환 진행
try{
for(AgricolaExchangeRequest exchange : exchangeRequest){
if(exchange.getResource() != null)
agricolaService.playExchange(gameRoomId, exchange.getImprovementId(), exchange.getResource(), exchange.getCount());
else
agricolaService.playExchange(gameRoomId, exchange.getImprovementId(), exchange.getAnimal(), exchange.getCount());
}
} catch (BlockingException ex) {
log.debug("게임이 일시중단되었습니다.");
simpMessageSendingOperations.convertAndSend("/sub/channel/" + gameRoomId, gameRoom);
simpMessageSendingOperations.convertAndSend("/sub/errors" , ex.getLocalizedMessage());
} catch (AnimalOverflowException ex) {
log.debug("게임이 일시중단되었습니다. : 동물 재배치 필요");
simpMessageSendingOperations.convertAndSend("/sub/channel/" + gameRoomId, gameRoom);
simpMessageSendingOperations.convertAndSend("/sub/errors" , ex.getLocalizedMessage());
}

// 게임 상태 전송
simpMessageSendingOperations.convertAndSend("/sub/channel/" + gameRoomId, gameRoom);
}

/**
* 가축 재배치 요청
* @param gameRoomId 게임을 진행할 게임방 식별자
* @param relocationRequest 교환 요청 필드
* @param headerAccessor 웹 소켓 메세지 헤더 접근자
*/
@MessageMapping("/play-relocation/{gameRoomId}")
public void playRelocation(@DestinationVariable Long gameRoomId, @Payload @Valid List<AgricolaRelocationRequest> relocationRequest, SimpMessageHeaderAccessor headerAccessor) {
// 현재 플레이어 턴인지 확인
if(!agricolaService.validatePlayer(gameRoomId, headerAccessor.getSessionAttributes().get("userId")))
throw new RuntimeException("잘못된 요청");


// 게임 룸 반환
GameRoom gameRoom = gameRoomService.getOne(gameRoomId);

// 가축 재배치 진행
try{
for(AgricolaRelocationRequest relocate : relocationRequest) {
if (relocate.getAnimal() != null)
agricolaService.playRelocation(gameRoomId, relocate.getAnimal(), relocate.getNewY(), relocate.getNewX(), relocate.getCount());
else
agricolaService.playRelocation(gameRoomId, relocate.getY(), relocate.getX(), relocate.getNewY(), relocate.getNewX(), relocate.getCount());
}
} catch (BlockingException ex) {
log.debug("게임이 일시중단되었습니다.");
simpMessageSendingOperations.convertAndSend("/sub/channel/" + gameRoomId, gameRoom);
simpMessageSendingOperations.convertAndSend("/sub/errors" , ex.getLocalizedMessage());
} catch (AnimalOverflowException ex) {
log.debug("게임이 일시중단되었습니다. : 동물 재배치 필요");
simpMessageSendingOperations.convertAndSend("/sub/channel/" + gameRoomId, gameRoom);
simpMessageSendingOperations.convertAndSend("/sub/errors" , ex.getLocalizedMessage());
}

// 게임 상태 전송
simpMessageSendingOperations.convertAndSend("/sub/channel/" + gameRoomId, gameRoom);
}

}
Loading