From 9361fcabcb01b9b58dfba82d7ba13ea4be65b62a Mon Sep 17 00:00:00 2001 From: haerong22 Date: Mon, 21 Dec 2020 15:24:11 +0900 Subject: [PATCH] numberbaseball class component --- react_webgame/main/NumberBaseball.jsx | 84 +++++++++++++++++++-------- react_webgame/main/Try.jsx | 8 +-- 2 files changed, 64 insertions(+), 28 deletions(-) diff --git a/react_webgame/main/NumberBaseball.jsx b/react_webgame/main/NumberBaseball.jsx index c1d2b0ca..321dd131 100644 --- a/react_webgame/main/NumberBaseball.jsx +++ b/react_webgame/main/NumberBaseball.jsx @@ -3,7 +3,13 @@ import Try from './Try'; // 숫자 4개를 겹치지않고 랜덤하고 뽑는 함수 function getNumbers() { - + const candidate = [1,2,3,4,5,6,7,8,9]; + const array = []; + for (let i = 0; i < 4; i++) { + const chosen = candidate.splice(Math.floor(Math.random() * (9 - i)), 1)[0]; + array.push(chosen); + } + return array; } class NumberBaseball extends Component { @@ -11,15 +17,57 @@ class NumberBaseball extends Component { result: '', value: '', answer: getNumbers(), - tries: [], + tries: [], // push 쓰면 안됨 }; - onSubmitForm = () => { - + onSubmitForm = (e) => { + const { value, tries, answer} = this.state; + e.preventDefault(); + if(value === answer.join('')) { // 정답 + this.setState({ + result: '홈런!', + tries: [...tries, { try: value, result: '홈런!'}], + }) + alert('게임을 다시 시작합니다.'); + this.setState({ + value: '', + answer: getNumbers(), + tries: [], + }); + } else { + const answerArray = value.split('').map((v) => parseInt(v)); + let strike = 0; + let ball = 0; + if(tries.length >= 9) { // 10번이상 틀렸을 때 + this.setState( { + result: `실패! 답은 ${answer.join(',')} 였습니다!`, + }); + alert('게임을 다시 시작합니다.'); + this.setState({ + value: '', + answer: getNumbers(), + tries: [], + }); + } else { + for (let i = 0; i < 4; i++) { + if(answerArray[i] === answer[i]) { + strike++; + } else if (answer.includes(answerArray[i])) { + ball++; + } + } + this.setState( { + tries: [...tries, {try: value, result: `${strike} 스트라이크, ${ball} 볼 입니다.`}], + value: '', + }) + } + } } - onChangeInput = () => { - + onChangeInput = (e) => { + this.setState( { + value: e.target.value, + }) } input; @@ -28,31 +76,21 @@ class NumberBaseball extends Component { } render() { + const { result, value, tries } = this.state; return ( <> -

{this.state.result}

+

{result}

- + +
-
시도: {this.state.tries.length}
+
시도: {tries.length}
) diff --git a/react_webgame/main/Try.jsx b/react_webgame/main/Try.jsx index d42ca52d..351501ab 100644 --- a/react_webgame/main/Try.jsx +++ b/react_webgame/main/Try.jsx @@ -2,13 +2,11 @@ import React, { Component } from 'react'; class Try extends Component { render() { + const { tryInfo } = this.props; return (
  • - {this.props.value.fruit} - {this.props.value.description} -
    컨텐츠
    -
    컨텐츠1
    -
    컨텐츠2
    -
    컨텐츠3
    +
    {tryInfo.try}
    +
    {tryInfo.result}
  • ) }