Project_xxx
[Project_] FO - 1
wakelight23
2024. 12. 3. 21:26
Futsal Online Project (풋살 온라인 프로젝트)
● 게임 플레이를 어떻게 구현해야할까?
- 풋살 온라인이라고는 했지만 공부한 내용을 적용해보는 실습이다
- 팀 프로젝트이며 각 맡은 파트 별로 구현하는 게 다르다
- 내가 맡은 부분은 게임 플레이인데 어떤 식으로 구현을 해야할까?
1. 카드 대결 게임 형식으로 구현
- 자신의 인벤토리(TeamMember)에서 능력치를 합산할 선수 3명을 선택
- 선택된 3명의 선수들의 능력치 합산 = '전투력'
- 각 선수들의 능력치에 설정한 가중치 더해서 전투력에 대한 차별점
- 랜덤 수 하나를 뽑아서 승률 비교로 승/패 결정
- 플레이한 게임 내용 기록
2. 구현한 코드
- 선수 3명의 능력치 합산하는 함수
function calculateTeamPower(selectedPlayers) {
return selectedPlayers.reduce((total, member) => {
// 각 능력치 가중치 적용 -> 이 부분 적용할지 안 할지 미정
// 이쪽 부분은 임의 수치 설정 가능
const powerScore =
(speed * 1.2) + // 스피드: 20% 추가
(goalFinishing * 1.5) + // 골 결정력: 50% 추가
(shootPower * 1.3) + // 슛파워: 30% 추가
(defense * 1.1) + // 수비력: 10% 추가
(stamina * 1.0); // 스태미나: 기본
// 강화 레벨 보너스 (레벨당 5% 추가)
// 데이터 테이블에 저장된 upgrade의 수치에 따라 5%씩 각 능력치에 가중치 적용
const upgradeBonus = 1 + (member.upgrade * 0.05);
return total + (powerScore * upgradeBonus);
}, 0);
- myPower : 3명의 능력치를 합산하는 과정
// myPower 계산 예시
const player = {
speed: 90, // 90 * 1.2 = 108
goalFinishing: 85, // 85 * 1.5 = 127.5
shootPower: 88, // 88 * 1.3 = 114.4
defense: 75, // 75 * 1.1 = 82.5
stamina: 80 // 80 * 1.0 = 80
};
const upgrade = 2; // 강화 레벨 2 (10% 보너스)
const powerScore = 108 + 127.5 + 114.4 + 82.5 + 80 = 512.4
const myPower = powerScore * (1 + (2 * 0.05)) = 512.4 * 1.1 = 563.64
// opponentPower 계산
const minPower = 563.64 * 0.8 = 450.91
const maxPower = 563.64 * 1.2 = 676.37
const opponentPower = 랜덤값(450.91 ~ 676.37)
- 승패 결정 과정
function determineWinner(myPower, opponentPower) {
// 승률 계산 예시
const powerDiff = myPower - opponentPower;
// 예: myPower = 600, opponentPower = 500
// powerDiff = 100
const winProbability = 0.5 + (powerDiff / (myPower + opponentPower)) * 0.5;
// 예: 0.5 + (100 / 1100) * 0.5 = 0.545 (54.5% 승률)
const randomFactor = Math.random(); // 0~1 사이 랜덤값
// 예: randomFactor = 0.4
const isWin = randomFactor < winProbability;
// 0.4 < 0.545 이므로 승리
- 게임이 진행되면서 나오는 값들 정리
myPower: 563.64
opponentPower: 520.00
powerDiff: 43.64
winProbability: 52.3%
randomFactor: 0.4
결과: 승리 (randomFactor < winProbability)
● 개선할 점
- 게임 플레이 방식을 구현하긴 했지만 단조로운 느낌이 든다.
- 한 가지의 방법만이 아닌 여러가지의 방법으로 게임 플레이를 구현해야할 듯 하다.