Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
1 change: 1 addition & 0 deletions summoner-battle/public/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
name="description"
content="Web site created using create-react-app"
/>
<script src="https://kit.fontawesome.com/2628447209.js" crossorigin="anonymous"></script>
<link rel="apple-touch-icon" href="%PUBLIC_URL%/logo192.png" />
<!--
manifest.json provides metadata used when your web app is installed on a
Expand Down
Binary file modified summoner-battle/src/.DS_Store
Binary file not shown.
2 changes: 2 additions & 0 deletions summoner-battle/src/app/store.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
import { configureStore } from '@reduxjs/toolkit';
import counterReducer from '../features/counter/counterSlice';
import battleReducer from '../features/battle/battleSlice';
import bossReducer from '../features/boss/bossSlice';

export const store = configureStore({
reducer: {
counter: counterReducer,
boss: bossReducer,
battle: battleReducer,
},
});
Binary file modified summoner-battle/src/features/.DS_Store
Binary file not shown.
268 changes: 268 additions & 0 deletions summoner-battle/src/features/boss/Boss.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,268 @@
import React, { useState } from 'react';
import { useSelector, useDispatch } from 'react-redux';
import {
attackToBoss,
attackCancel,
atkCriCancel,
addSkillPoint,
minusSkillPoint,
selectBoss,
selectPlayer,
} from './bossSlice';
import styles from './Boss.module.css';

export function Boss({ attacked }) {
const boss = useSelector(selectBoss);
const player = useSelector(selectPlayer);
const dispatch = useDispatch();
const [summon, fixSummon] = useState({
isThreeStar: true,
isFourStar: false,
isFiveStar: false,
element: 'fire',
});

document.addEventListener('keydown', (e) => {
if (e.code === 'Digit3') {
fixToThree(summon.element);
}
if (e.code === 'Digit4') fixToFour(summon.element);
if (e.code === 'Digit5') fixToFive(summon.element);
});
function fixToThree(element) {
fixSummon({
isThreeStar: true,
isFourStar: false,
isFiveStar: false,
element,
});
}
function fixToFour(element) {
fixSummon({
isThreeStar: false,
isFourStar: true,
isFiveStar: false,
element,
});
}
function fixToFive(element) {
fixSummon({
isThreeStar: false,
isFourStar: false,
isFiveStar: true,
element,
});
}
return (
<div>
<div className={styles.row}>HP
<span className={styles.hp}>{boss.hp}</span>/
<span className={styles.hp}>{boss.maxHp}</span>
</div>
<img className={boss.hp === 0 ? styles.boss_die : styles.boss}/>
<div className={styles.player}>
<div>
<h2>플레이어 스킬</h2>
<div>
<div>소환 성공: {player.damage}/1</div>
<div className={styles.skills}>
<div>
소환 대성공 : {player.fourStar}/3
</div>
<div>
<button onClick={() => dispatch(addSkillPoint('fourStar'))}>
+
</button>
<button onClick={() => dispatch(minusSkillPoint('fourStar'))}>
-
</button>
</div>
</div>
<div className={styles.skills}>
<div>
대박 소환 : {player.fiveStar}/3
</div>
<div>
<button onClick={() => dispatch(addSkillPoint('fiveStar'))}>
+
</button>
<button onClick={() => dispatch(minusSkillPoint('fiveStar'))}>
-
</button>
</div>
</div>
<div className={styles.skills}>
<div>
불의 소환사 : {player.fire}/5
</div>
<div>
<button onClick={() => dispatch(addSkillPoint('fire'))}>+</button>
<button onClick={() => dispatch(minusSkillPoint('fire'))}>
-
</button>
</div>
</div>
<div className={styles.skills}>
<div>
물의 소환사 : {player.water}/5
</div>
<div>
<button onClick={() => dispatch(addSkillPoint('water'))}>
+
</button>
<button onClick={() => dispatch(minusSkillPoint('water'))}>
-
</button>
</div>
</div>
<div className={styles.skills}>
<div>
바람의 소환사 : {player.wind}/5
</div>
<div>
<button onClick={() => dispatch(addSkillPoint('wind'))}>+</button>
<button onClick={() => dispatch(minusSkillPoint('wind'))}>
-
</button>
</div>
</div>
<div className={styles.skills}>
<div>
빛의 소환사 : {player.light}/3
</div>
<div>
<button onClick={() => dispatch(addSkillPoint('light'))}>
+
</button>
<button onClick={() => dispatch(minusSkillPoint('light'))}>
-
</button>
</div>
</div>
<div className={styles.skills}>
<div>
어둠의 소환사 : {player.dark}/3
</div>
<div>
<button onClick={() => dispatch(addSkillPoint('dark'))}>+</button>
<button onClick={() => dispatch(minusSkillPoint('dark'))}>
-
</button>
</div>
</div>
<div className={styles.skills}>
<div>
행운의 소환사 : {player.luck}/3
</div>
<div>
<button onClick={() => dispatch(addSkillPoint('luck'))}>+</button>
<button onClick={() => dispatch(minusSkillPoint('luck'))}>
-
</button>
</div>
</div>
<div className={styles.skills}>
<div>
강력한 소환사 : {player.power}/3
</div>
<div>
<button onClick={() => dispatch(addSkillPoint('power'))}>
+
</button>
<button onClick={() => dispatch(minusSkillPoint('power'))}>
-
</button>
</div>
</div>
</div>
</div>
</div>
<div>
<div>소환된 몬스터</div>
<div>
<input
name="star"
id="3"
type="radio"
onClick={() => fixToThree(summon.element)}
defaultChecked
/>
3성
<input
name="star"
id="4"
type="radio"
onClick={() => fixToFour(summon.element)}
/>
4성
<input
name="star"
id="5"
type="radio"
onClick={() => fixToFive(summon.element)}
/>
5성
</div>
<div>
<input
name="element"
id="fire"
type="radio"
onClick={() => fixSummon({ ...summon, element: 'fire' })}
defaultChecked
/>
불속성
<input
name="element"
id="water"
type="radio"
onClick={() => fixSummon({ ...summon, element: 'water' })}
/>
물속성
<input
name="element"
id="wind"
type="radio"
onClick={() => fixSummon({ ...summon, element: 'wind' })}
/>
바람속성
<input
name="element"
id="light"
type="radio"
onClick={() => fixSummon({ ...summon, element: 'light' })}
/>
빛속성
<input
name="element"
id="dark"
type="radio"
onClick={() => fixSummon({ ...summon, element: 'dark' })}
/>
어둠속성
</div>
</div>
<button
className={styles.button}
aria-label="Attack"
onClick={() => dispatch(attackToBoss(summon))}
>
공격
</button>
<button
className={styles.button}
aria-label="Attack"
onClick={() => dispatch(attackCancel(summon))}
>
공격 취소 (일반)
</button>
<button
className={styles.button}
aria-label="Attack"
onClick={() => dispatch(atkCriCancel(summon))}
>
공격 취소 (치명)
</button>
</div>
);
}
Loading