2024.08.19 ~ 2024.10.16
OMG_UCC.mp4
경제와 금융 개념을 배우고 싶지만 어렵고 지루하게 느껴진 적이 없으신가요?
기존의 금융 교육용 게임들이 딱딱한 UI와 구식 디자인으로 흥미를 끌지 못했던 경험이 있으신가요?
OMG와 함께 재미있고 직관적으로 경제 개념을 학습해보세요!
⩥ 현대적이고 친근한 UI: 기존 금융 게임과 달리 세련되고 매력적인 디자인
⩥ 게임을 통한 학습: 경제 개념을 쉽고 재미있게 체험하며 이해
⩥ 타겟 맞춤형 콘텐츠: 초등학생부터 중학생까지 연령대별 최적화된 학습 경험
⩥ 경제 개념을 재미있게 배우고 싶은 학생들
⩥ 자녀에게 금융 교육을 시키고 싶은 부모님
⩥ 게임을 통해 실용적인 지식을 얻고 싶은 모든 분
Back-end |
|
Front-end |
|
Infra | |
Tools |
기능 | 내용 |
---|---|
실시간 멀티플레이 경제 게임 | 웹소켓을 통한 실시간 통신으로 친구들과 함께 즐기는 경제 시뮬레이션 게임입니다. 직관적인 UI로 누구나 쉽게 접근하고 조작할 수 있습니다. |
현실 경제 시스템 반영 | 실제 경제 이벤트와 시장 로직을 게임에 적극 반영하여 현실감 있는 거래와 투자 경험을 제공합니다. 실제 경제 활동을 하는 것과 같은 생동감을 느낄 수 있습니다. |
AI 챗봇 경제 튜터 | 생성형 AI 챗봇 기능을 통해 게임 내 경제 개념이나 전략에 대해 실시간으로 질문하고 답변을 받을 수 있습니다. 어려운 경제 개념도 대화를 통해 쉽게 이해할 수 있습니다. |
게이미피케이션 기반 경제 교육 | 게이미피케이션 원리를 적용하여 경제 학습을 게임 메커니즘과 유기적으로 결합했습니다. 실시간 경쟁 시스템, 개인 미션 달성, 실시간 리더보드 등을 통해 학습 동기를 유발하고, 복잡한 경제 원리를 직관적으로 체득할 수 있는 상호작용적 학습 경험을 제공합니다. |
크리스마스 테마의 3D 게임 세계 | 아름답고 몰입감 있는 크리스마스 마을을 3D로 구현했습니다. 귀여운 캐릭터와 아이템들, 눈 내리는 거리, 반짝이는 장식들이 경제 게임에 따뜻하고 즐거운 분위기를 더합니다. Three.js를 활용한 고품질 3D 그래픽으로 시각적 매력을 극대화했습니다. |
│ .gitignore
│ build.gradle
│ Dockerfile
│ gradlew
│ gradlew.bat
│ settings.gradle
│
├─docker-elk-stack
│ │ .env
│ │ docker-compose.yml
│ │
│ ├─elasticsearch
│ │ │ Dockerfile
│ │ │
│ │ └─config
│ │ elasticsearch.yml
│ │
│ ├─filebeat
│ │ └─config
│ │ filebeat.yml
│ │
│ ├─kibana
│ │ │ Dockerfile
│ │ │
│ │ └─config
│ │ kibana.yml
│ │
│ └─logstash
│ │ Dockerfile
│ │
│ ├─config
│ │ logstash.yml
│ │ pipelines.yml
│ │
│ └─pipeline
│ logstash.conf
│
├─gradle
│ └─wrapper
│ gradle-wrapper.jar
│ gradle-wrapper.properties
│
└─src
├─main
│ ├─java
│ │ └─com
│ │ └─ssafy
│ │ └─omg
│ │ │ OmgBackApplication.java
│ │ │
│ │ ├─config
│ │ │ │ BaseTimeEntity.java
│ │ │ │ LoggingController.java
│ │ │ │ MessageController.java
│ │ │ │ RedisConfig.java
│ │ │ │ WebConfig.java
│ │ │ │ WebSocketConfig.java
│ │ │ │ WebSocketEventListener.java
│ │ │ │
│ │ │ └─baseresponse
│ │ │ BaseException.java
│ │ │ BaseResponse.java
│ │ │ BaseResponseStatus.java
│ │ │ GlobalExceptionHandler.java
│ │ │ MessageException.java
│ │ │ MessageResponseStatus.java
│ │ │
│ │ ├─domain
│ │ │ ├─arena
│ │ │ │ └─entity
│ │ │ │ Arena.java
│ │ │ │
│ │ │ ├─chat
│ │ │ │ ├─controller
│ │ │ │ │ ChatbotController.java
│ │ │ │ │ ChatController.java
│ │ │ │ │
│ │ │ │ ├─dto
│ │ │ │ │ ChatMessage.java
│ │ │ │ │
│ │ │ │ ├─handler
│ │ │ │ │ ChatHandler.java
│ │ │ │ │
│ │ │ │ └─service
│ │ │ │ ChatbotService.java
│ │ │ │ ChatbotServiceImpl.java
│ │ │ │
│ │ │ ├─game
│ │ │ │ │ GameRepository.java
│ │ │ │ │
│ │ │ │ ├─controller
│ │ │ │ │ CommonMessageController.java
│ │ │ │ │ GameController.java
│ │ │ │ │ IndividualMessageController.java
│ │ │ │ │
│ │ │ │ ├─dto
│ │ │ │ │ BattleClickDto.java
│ │ │ │ │ BattleRequestDto.java
│ │ │ │ │ BattleResultDto.java
│ │ │ │ │ ClickStatusDto.java
│ │ │ │ │ GameEventDto.java
│ │ │ │ │ GameNotificationDto.java
│ │ │ │ │ GameResultResponse.java
│ │ │ │ │ GameStatusDto.java
│ │ │ │ │ GoldMarketInfoResponse.java
│ │ │ │ │ IndividualMessageDto.java
│ │ │ │ │ MainMessageDto.java
│ │ │ │ │ MoneyCollectionRequest.java
│ │ │ │ │ MoneyCollectionResponse.java
│ │ │ │ │ PlayerDistanceDto.java
│ │ │ │ │ PlayerMinimapDto.java
│ │ │ │ │ PlayerMoveRequest.java
│ │ │ │ │ PlayerRankingResponse.java
│ │ │ │ │ PlayerResponse.java
│ │ │ │ │ PlayerStateDto.java
│ │ │ │ │ RoundStartNotificationDto.java
│ │ │ │ │ StockFluctuationResponse.java
│ │ │ │ │ StockMarketResponse.java
│ │ │ │ │ StockRequest.java
│ │ │ │ │ TimeNotificationDto.java
│ │ │ │ │ UserActionDTO.java
│ │ │ │ │
│ │ │ │ ├─entity
│ │ │ │ │ Game.java
│ │ │ │ │ GameEvent.java
│ │ │ │ │ GameStatus.java
│ │ │ │ │ LoanProduct.java
│ │ │ │ │ MoneyPoint.java
│ │ │ │ │ MoneyState.java
│ │ │ │ │ RoundStatus.java
│ │ │ │ │ StockInfo.java
│ │ │ │ │ StockState.java
│ │ │ │ │
│ │ │ │ ├─repository
│ │ │ │ │ GameEventRepository.java
│ │ │ │ │
│ │ │ │ └─service
│ │ │ │ │ GameBroadcastService.java
│ │ │ │ │ GameEventListener.java
│ │ │ │ │ GameScheduler.java
│ │ │ │ │ GameService.java
│ │ │ │ │ GameServiceImpl.java
│ │ │ │ │
│ │ │ │ └─battle
│ │ │ │ BattleState.java
│ │ │ │ GameBattleService.java
│ │ │ │
│ │ │ ├─player
│ │ │ │ ├─dto
│ │ │ │ │ PlayerAnimation.java
│ │ │ │ │ PlayerInfo.java
│ │ │ │ │ PlayerResult.java
│ │ │ │ │
│ │ │ │ └─entity
│ │ │ │ Player.java
│ │ │ │ PlayerAction.java
│ │ │ │ PlayerStatus.java
│ │ │ │
│ │ │ ├─room
│ │ │ │ ├─controller
│ │ │ │ │ RoomController.java
│ │ │ │ │ RoomMessageController.java
│ │ │ │ │
│ │ │ │ ├─dto
│ │ │ │ │ CommonRoomRequest.java
│ │ │ │ │ CommonRoomResponse.java
│ │ │ │ │
│ │ │ │ ├─entity
│ │ │ │ │ InRoomPlayer.java
│ │ │ │ │ Room.java
│ │ │ │ │
│ │ │ │ └─service
│ │ │ │ RoomService.java
│ │ │ │ RoomServiceImpl.java
│ │ │ │
│ │ │ ├─socket
│ │ │ │ └─dto
│ │ │ │ StompExceptionPayload.java
│ │ │ │ StompPayload.java
│ │ │ │ StompResponsePayload.java
│ │ │ │
│ │ │ └─user
│ │ │ ├─controller
│ │ │ │ UserController.java
│ │ │ │
│ │ │ ├─entity
│ │ │ │ User.java
│ │ │ │
│ │ │ ├─repository
│ │ │ │ UserRepository.java
│ │ │ │
│ │ │ └─service
│ │ │ UserService.java
│ │ │ UserServiceImpl.java
│ │ │
│ │ └─util
│ │ RedisUtil.java
│ │
│ └─resources
│ │ application-prod.yml
│ │ application.yml
│ │ banner.txt
│ │
│ └─static
│ index.html
│ websocket-test.html
│
└─test
└─java
├─com
│ └─ssafy
│ └─omg
│ └─domain
│ └─game
│ ├─controller
│ │ GameMessageControllerTest.java
│ │
│ └─service
│ GameBroadcastServiceTest.java
│
└─omg
└─ssafy
OmgBackApplicationTests.java
│ .env.sample
│ .gitignore
│ .prettierignore
│ .prettierrc
│ Dockerfile
│ dump.rdb
│ eslint.config.js
│ index.html
│ nginx.conf
│ package-lock.json
│ package.json
│ postcss.config.js
│ README.md
│ svg.d.ts
│ tailwind.config.js
│ tsconfig.app.json
│ tsconfig.json
│ tsconfig.node.json
│ tsconfig.tsbuildinfo
│ vite.config.d.ts
│ vite.config.js
│ vite.config.ts
│
├─public
│ │ android-chrome-192x192.png
│ │ android-chrome-512x512.png
│ │ apple-touch-icon.png
│ │ favicon-16x16.png
│ │ favicon-32x32.png
│ │ favicon.ico
│ │ site.webmanifest
│ │
│ ├─assets
│ │ alert.jpeg
│ │ candy.png
│ │ chat.png
│ │ cupcake.png
│ │ elf.png
│ │ event-card1.jpg
│ │ event-card2.jpg
│ │ event-card3.jpg
│ │ game-access-level.png
│ │ game-bg.png
│ │ gift.png
│ │ gingerbread.png
│ │ gold.png
│ │ goldbell.png
│ │ hat.png
│ │ loan-card.jpg
│ │ loan-sheet.jpg
│ │ logo.png
│ │ matrix.gif
│ │ matrix2.gif
│ │ mini-map.png
│ │ money.png
│ │ morning-sky.jpg
│ │ myroom.jpg
│ │ night-sky.jpg
│ │ rudolph.png
│ │ santa.png
│ │ shopping-basket.png
│ │ slough.png
│ │ snow.png
│ │ snowman.png
│ │ socks.png
│ │ stock-fluctuation.png
│ │ trade-button.png
│ │ white-chat.png
│ │
│ ├─models
│ │ ├─candy
│ │ │ Atlas_Xmas_Items_01.png
│ │ │ candy.bin
│ │ │ candy.gltf
│ │ │
│ │ ├─cupcake
│ │ │ cupcake.bin
│ │ │ cupcake.gltf
│ │ │ Material_001_Base_Color.png
│ │ │
│ │ ├─elf
│ │ │ elf.bin
│ │ │ elf.gltf
│ │ │ material_0_baseColor.png
│ │ │
│ │ ├─gift
│ │ │ gift.bin
│ │ │ gift.gltf
│ │ │ gift_DefaultMaterial_BaseColor.png
│ │ │ gift_DefaultMaterial_Metallic-gift_DefaultMaterial_Roughness.png
│ │ │ gift_DefaultMaterial_Normal.png
│ │ │
│ │ ├─gingerbread
│ │ │ elf-rudoft-ginger-gift.png
│ │ │ gingerbread.bin
│ │ │ gingerbread.gltf
│ │ │
│ │ ├─gold
│ │ │ gold.bin
│ │ │ gold.gltf
│ │ │
│ │ ├─goldbell
│ │ │ goldbell.bin
│ │ │ goldbell.gltf
│ │ │
│ │ ├─hat
│ │ │ 0_ChristmasHat4_white_hat_BaseColor.jpg
│ │ │ hat.bin
│ │ │ hat.gltf
│ │ │
│ │ ├─map
│ │ │ │ license.txt
│ │ │ │ scene.bin
│ │ │ │ scene.gltf
│ │ │ │
│ │ │ └─textures
│ │ │ 06_-_Defagggult_baseColor.png
│ │ │ 13_-_Defaultdsf_baseColor.png
│ │ │ 15_-_Default3_baseColor.png
│ │ │ 19_-_Defauladads_baseColor.png
│ │ │ 19_-_Default_baseColor.png
│ │ │ 20_-_Defaufsddfdflt_baseColor.png
│ │ │ 20_-_Defaulth_baseColor.png
│ │ │ 20_-_Default_baseColor.png
│ │ │ Material_135_baseColor.png
│ │ │ Material_139_baseColor.png
│ │ │ Material_140_baseColor.png
│ │ │ Material_261_baseColor.png
│ │ │ Material_262_baseColor.png
│ │ │ Material_263_baseColor.png
│ │ │ Material_26_baseColor.png
│ │ │ Material_427_baseColor.png
│ │ │ Material_427_metallicRoughness.png
│ │ │ Material_428_baseColor.png
│ │ │ Material_429_baseColor.png
│ │ │ Material_431_baseColor.png
│ │ │ Material_432_baseColor.png
│ │ │ Material_434_baseColor.png
│ │ │ Material_438_baseColor.png
│ │ │ Material_439_baseColor.png
│ │ │ Material_440_baseColor.png
│ │ │ Material_45_baseColor.png
│ │ │ Material_46_baseColor.png
│ │ │ Material_47_baseColor.png
│ │ │
│ │ ├─pouch
│ │ │ pouch.bin
│ │ │ pouch.gltf
│ │ │
│ │ ├─santa
│ │ │ material_0_baseColor.png
│ │ │ santa.bin
│ │ │ santa.gltf
│ │ │
│ │ ├─silver
│ │ │ silver.bin
│ │ │ silver.gltf
│ │ │
│ │ ├─snowman
│ │ │ snowman.bin
│ │ │ snowman.gltf
│ │ │ Snowman_baseColor.png
│ │ │
│ │ ├─socks
│ │ │ elf-rudoft-ginger-gift.png
│ │ │ socks.bin
│ │ │ socks.gltf
│ │ │
│ │ └─stocktree
│ │ Atlas_Xmas_Items_02.png
│ │ stocktree.bin
│ │ stocktree.gltf
│ │
│ ├─music
│ │ background.mp3
│ │ bell-alert.mp3
│ │ change-price-alert.mp3
│ │ chat-alert.mp3
│ │ click-chat-alert.mp3
│ │ finish-game-alert.mp3
│ │ get-coin-alert.mp3
│ │ get-item-alert.mp3
│ │ gold-alert.mp3
│ │ left-time-alert.mp3
│ │ loan-alert.mp3
│ │ round-end-alert.mp3
│ │ stock-alert.mp3
│ │ typing-sound.mp3
│ │
│ └─system
│ cursor.cur
│
└─src
│ App.tsx
│ index.css
│ main.tsx
│ vite-env.d.ts
│
├─apis
│ │ apiConstants.ts
│ │ axiosInstance.ts
│ │ errorHandler.ts
│ │
│ └─room
│ roomAPI.ts
│
├─assets
│ ├─data
│ │ characterInfo.ts
│ │ coinLocation.ts
│ │ goldMarketData.ts
│ │ introduction.ts
│ │ loanLimitLogic.ts
│ │ locationInfo.ts
│ │ nicknameData.ts
│ │ stockMarketData.ts
│ │
│ └─img
│ bg-personal1.svg
│ bg-personal2.svg
│ mini-elf.svg
│ mini-gingerbread.svg
│ mini-santa.svg
│ mini-snowman.svg
│ rank1.svg
│ rank2.svg
│ rank3.svg
│
├─components
│ ├─camera
│ │ IntroCamera.tsx
│ │
│ ├─character
│ │ Character.tsx
│ │ Item.tsx
│ │
│ ├─chat
│ │ ChatBotInteraction.tsx
│ │ ChatInputForm.tsx
│ │ ChatMessage.tsx
│ │ Chatting.tsx
│ │
│ ├─common
│ │ BackButton.tsx
│ │ Button.tsx
│ │ ChatButton.tsx
│ │ CommonLoader.tsx
│ │ ExitButton.tsx
│ │ Gauge.tsx
│ │ index.ts
│ │ Notification.tsx
│ │ Round.tsx
│ │ Snowing.tsx
│ │ SpeechBubble.tsx
│ │ Timer.tsx
│ │
│ ├─game
│ │ CanvasLoader.tsx
│ │ EventCard.tsx
│ │ EventEffect.tsx
│ │ GameLoader.tsx
│ │ GamePersonalResult.tsx
│ │ GameResult.tsx
│ │ GameTotalResult.tsx
│ │ index.ts
│ │
│ ├─gold-market
│ │ GoldBuy.tsx
│ │ GoldMarket.tsx
│ │ GoldModel.tsx
│ │ LineChart.tsx
│ │ PossessionChart.tsx
│ │
│ ├─loan-market
│ │ LoanInfo.tsx
│ │ LoanLogicModal.tsx
│ │ LoanMarket.tsx
│ │ LoanReport.tsx
│ │ LoanSheet.tsx
│ │
│ ├─main-map
│ │ MainMap.tsx
│ │ Map.tsx
│ │ MarketStatusBoard.tsx
│ │ Tutorial.tsx
│ │
│ ├─mini-game
│ │ ├─battle
│ │ │ Counter.tsx
│ │ │
│ │ └─money
│ │ MoneyCanvas.tsx
│ │
│ ├─mini-map
│ │ MiniMap.tsx
│ │
│ ├─my-room
│ │ MyRoom.tsx
│ │
│ ├─notification
│ │ DefaultAlert.tsx
│ │ getAlertComponent.tsx
│ │ index.ts
│ │ LeftTimeAlert.tsx
│ │ RoundEndAlert.tsx
│ │ StockChangeAlert.tsx
│ │
│ ├─personal-board
│ │ PersonalBoard.tsx
│ │
│ └─stock-market
│ index.ts
│ Item.tsx
│ LineChart.tsx
│ MarketState.tsx
│ PossessionChart.tsx
│ StockBuy.tsx
│ StockInfoButton.tsx
│ StockMain.tsx
│ StockMarket.tsx
│ StockSell.tsx
│ Tree.tsx
│
├─hooks
│ index.ts
│ useCharacter.ts
│ useCountUp.ts
│ useFloatingObject.ts
│ useGold.ts
│ useGoldSwing.ts
│ useSocket.ts
│ useStock.ts
│ useWaitingRoom.ts
│
├─pages
│ 404.tsx
│ Game.tsx
│ Lobby.tsx
│ Login.tsx
│ Waiting.tsx
│
├─stores
│ index.ts
│ useAlertStore.ts
│ useGameResultStore.ts
│ useGameStore.ts
│ useGoldStore.ts
│ useIntroStore.ts
│ useLoanStore.ts
│ useMainBoardStore.ts
│ useMiniMapStore.ts
│ useMiniMoneyStore.ts
│ useModalStore.ts
│ useMyRoomStore.ts
│ useOtherUserStore.ts
│ usePersonalBoardStore.ts
│ useSocketMessage.ts
│ useSoundStore.ts
│ useStockStore.ts
│ useUser.ts
│
├─types
│ index.ts
│
└─utils
ConfirmAlert.ts
formatNumberWithCommas.ts
formatTime.ts
index.ts
SocketContext.tsx
ToastAlert.ts
- 방장이 방을 생성하고 네 명의 플레이어가 모이면 게임 시작 버튼이 활성화됩니다.
- 기본적인 키 조작 방법 및 게임 룰에 대한 안내를 제공합니다.
- 미니맵을 통해 다른 플레이어들의 위치를 확인할 수 있습니다.
- 실시간 거래상황을 확인할 수 있습니다.
- 다른 플레이어와 가까워지면 상대방의 실시간 순위를 확인할 수 있습니다.
- 5가지 주식의 남은 수량과 시가를 확인할 수 있습니다.
- 물가 수준에 기반한 최대 거래 수량 만큼 거래 가능합니다.
- 주식 매수 시, 실시간으로 주가 차트 및 지분 차트가 업데이트 됩니다.
- 주식을 사면, 머리 위 선물 주머니에 담아 가지고 이동할 수 있습니다.
- 집에서 가져온 주식을 확인할 수 있습니다.
- 물가 수준에 기반한 최대 거래 수량 만큼 거래 가능합니다.
- 주식 매도 시, 실시간으로 주가 차트 및 지분 차트가 업데이트 됩니다.
- 주식 매도 행위가 일어나면, 주가 변동을 위한 게이지가 20%씩 상승합니다.
- 주식 매수 또는 금 매입 행위가 일어나면, 내부 로직에 따라 주가 변동이 가능합니다.
- 스페이스 바를 통해 행운의 코인을 획득할 수 있습니다.
- 게임이 시작된 후 초기 위치는 자신의 집입니다.
- 주식을 매수하면, 한 라운드가 끝나기 전에 자신의 집에 가지고 와야 합니다. (penalty: 현금 감소)
- 주식을 매도하려면, 집에서 주식을 챙겨가야 합니다.
- 주식을 챙기면, 머리 위 선물 주머니에 담아 가지고 이동할 수 있습니다.
- 우측 하단의 챗봇 아이콘을 토글하여 AI 챗봇에게 투자 조언을 구할 수 있습니다.
- 한 라운드가 끝나면, 해당 라운드에서 대출한 금액 및 금리를 고려해 이자가 부여됩니다.
강다현 @hyun3745 FRONTEND |
강한나 @hannabananah LEADER MAIN FRONTEND |
김현재 @Kguswo MAIN BACKEND AI |
박희연 @hi-react FRONTEND AI |
이가은 @Celinemad BACKEND |
전정민 @imjm BACKEND INFRA |