만드는 것. 풋살 온라인 형태의 가짜 게임
매치메이킹 -> 랜덤으로 능력치 부여 -> 선수의 능력치 총합으로 결과 출력
DB
fm게임.. 경마게임 같은것
결과는 정해져있고 애니메이션만 감상하는...
선수 DB
팀 DB(인벤토리)
Squad(장비창)
내 소유의 플레이어들이 팀 테이블과 Squad테이블을 오가는 형식. 선수는 둘 중 한 테이블에만 존제합니다.
와이어 프레임
선수들을 랜덤(등급따라 확률 달라짐)
매치메이킹은 (적팀이)기존에 만든 맴버와 배틀.
스쿼드가 결성되면 점수 나오도록.( 선수정보, 전투력.. 사중치는?)
배틀은 랜덤매칭으로(승률기반 매치메이킹은 도전과제)
5판 3선승제
DB
데이터는 가져와서 사용
csv같은 파일로 만들어서 디비버같은데에 넣어서 사용
팀 노션
1. 프로젝트
프로젝트 명 : 풋살 온라인 프로젝트
소개
한 줄 정리 : 온라인 환경에서 풋살 형태의 게임을 플레이할 수 있다
내용 :
필수 기능
1. 회원가입 / 로그인
관리자와, 일반 유저의 권한을 나눈다
관리자는 선수 데이터 접근 가능 (선수 데이터 생성 및 설정)
(도전 기능) 일반 유저는 다른 유저의 Team 정보 열람 기능 (선수 목록 열람)
(도전 기능) 유저 랭킹을 조회 시스템
2. 캐시 구매
로그인 시 인증 절차가 완료되면 캐시 증가 API를 이용 가능
변경된 재화는 User 데이터에서 관리
3. 선수 데이터 준비
선수 생성 및 삭제, 수정 하는 API
생성한 모든 선수들의 목록을 조회하는 API
4. 선수 뽑기 기능
로그인으로 계정을 인증한 사용자는 선수를 랜덤으로 뽑을 수 있다
선수 목록의 데이터 베이스에서 등급에 따른 각 확률에 따라 가중치를 부여해서 랜덤한 선수를 Team 테이블에 저장
선수 뽑기를 실행할 때는 금액에 대한 차감이 있어야 함
어떤 선수를 뽑았는지 확인하는 API 필요
5. 나만의 팀 꾸리기
Team 데이터 베이스에 보유 중인 선수 목록을 조회하는 API
선수를 스쿼드로 이동시키는 API
스쿼드에 이동된 선수는 Boolean으로 구별
스쿼드에 존재하는 선수들의 모든 능력치 합산을 표시하는 API
Squad에 있는 선수를 Team으로 이동하는 API (Boolean 사용)
Team에 있는 선수를 Squad에 등록하는 API
6. 축구 게임 기능
생성된 계정 목록 내에서 상대 유저를 찾는 기능
상대 유저가 선택되면 자신 스쿼드의 능력치와 상대 스쿼드의 능력치를 비교 (내 스쿼드와 상대 스쿼드의 점수 비교)
게임의 결과를 출력하는 API (점수 증가 및 전적 기록)
WBS & Tasks
이기환
축구 게임 API 구현
윤예원
캐시 구매 API 구현
유대원
회원가입/로그인 API 구현
김종하
선수 데이터 API 구현
최슬기
나만의 팀 꾸리기 API 구현
보유 중인 선수 목록을 prisma.findmany()로 읽어온다.
보유 목록을 조회하는 API 이후, 팀원을 선택하는 API로 연계(이 부분은 프론트엔드가 있어야 가능해질 부분이라 확실치 않음)
유저가 플레이어 id를 입력해 서버에 요청을 보낸다. -> 해당 id로 선수 데이터를 읽어오고, 팀 배열에 객체 형식으로 할당한다.
배열 인덱스와 키값을 이용해서 예상 점수를 나타내는 메서드 구현(return....json({선수 구성+예상 점수}))
선수를 배열에 넣고 빼면서 팀 구성을 바꿀 때마다 예상 점수도 바꿔서 return -> 프론트 엔드가 있다면 완료 버튼으로 확정 짓고 다음 게임 세션으로 넘어가기(없다면 Insomnia 환경 변수를 이용해서 마지막 응답 헤더에 들어간 값을 요청 헤더에 할당하면 될 것 같다)
만약 포지션별 가중치 로직이 필요하다면 이곳에서 구현한 다음 스탯별 연산 결과값을 함께 return하는 게 좋을 것 같습니다.(점수 계산이 이곳에서 미리 되어야 하니까.)
김정태
선수 뽑기 API 구현
내 업무 : 캐시구매, 랜덤선물(캐시)
캐시 구매는 비번 눌러서 인증받고 구매
바디에 구매 금액, (컴파운 페스워드)비밀번호 기입
Account 테이블의 cash를 랜덤으로 증가시키기
const express = require("express");
const router = express.Router();
const { PrismaClient } = require("@prisma/client");
const prisma = new PrismaClient();
// 캐시 벌기
router.patch("/api/cash/:accountId", async (req, res, next) => {
const { accountId } = req.params; // URL에서 accountId 가져오기
// 여기에 토큰인증 넣기
// 랜덤 캐시 추가 (5~99)
const randomAdd = Math.floor(Math.random() * 95) + 5;
try {
// 해당 계정의 현재 cash 가져오기
const account = await prisma.account.findUnique({
where: { accountId },
});
if (!account) {
// 계정이 없으면 404 에러 처리
return res.status(404).json({ message: "Account not found." });
}
// 캐시 업데이트
const updatedAccount = await prisma.account.update({
where: { accountId },
data: {
cash: account.cash + randomAdd, // 기존 캐시에 추가
},
});
// 성공 응답
res.status(200).json({
message: "Cash added successfully.",
account: {
accountId: updatedAccount.accountId,
cash: updatedAccount.cash,
},
});
} catch (err) {
// 에러 발생 시 next를 통해 에러 전달
next(err);
}
});
module.exports = router;
module.exports = router;
'내일배움 과제 > CH3 풋살온라인게임' 카테고리의 다른 글
회의 241203 (2) | 2024.12.03 |
---|---|
cash API 만들기(조회, 선물, 구매) (0) | 2024.12.03 |
오류노트 (1) | 2024.12.02 |
회의 1202 _ 와이어프레임, DB테이블 (0) | 2024.12.02 |
발제 (2) | 2024.11.29 |