본문 바로가기
프로그래밍/WEB HACKING

[WEB HACKING] javascript 반복문( while, for, for in ), 배열 / 간단한 야구게임 만들어보기

by B T Y 2017. 8. 14.
반응형

javascript 반복문( while, for, for in ), 배열 / 간단한 야구게임 만들어보기에 대해서 정리한다.

 

 

반복문: while, for, for in
 

 

while( 조건 ) {
  몸체
}
 
 
for( 초기화; 조건; 증감 ) {
  몸체
}
 


for ( 변수 in 배열 ) {
  몸체
}


 
for in
  - 파이썬의 for 루프와 유사
  - 배열(python의 리스트와 같은 개념)을 다룰때 주로 사용
  - 배열내의 각 원소들의 인덱스를 가져온다
 

배열
  - 파이썬에서의 리스트
  - 전통적인 배열과 동일( C, java, ... )
 
* 배열내의 원소 타입은 가리지 않는다.

    ( 즉, 한개의 배열 안에는 여러가지 타입의 원소가 존재할 수 있다 )
 
1. 리터럴

2. 객체
 

 

 

( javascript에서 배열을 나타낼때는 '[]' 기호를 이용하거나 객체를 사용해서 배열을 만들 수 있다 )

 

 

( 배열을 리터럴 선언방식을 이용하거나 객체 방식을 이용해도 똑같은 모양의 배열을 가진다는걸 볼 수 있다 )

 

 

( 위 코드를 그대로 실행하면 배열 안에 있는 값을 순서대로 출력 해주는게 아니라 배열내의 각 원소들의 인덱스를 출력하게 된다 )

 

 

( document.write() 함수와 for in을 이용해서 배열의 내용을 순서대로 출력 했을때

위 그림처럼 해당 원소 안의 값을 가져오려고 하면 위 코드를 예시로 들었을때

for in문 안에 document.write( array[idx] ); 와 같은 코드로 작성 해줘야 한다 )

 

 

 

 

 
[실습] 야구게임
 
  - 임의의 3자리 숫자를 한정된 횟수 내에 맞추는 게임
 
  - 사용자한테 값을 입력 받아서 지정된 임의의 3자리 숫자랑 비교
    ( 입력 받는 값도 3자리 )
  - 자리와 숫자가 모두 일치하면 스트라이크
  - 숫자만 일치하면 볼
  - 자리와 숫자가 모두 일치하지 않으면 아웃
  - 중복되는 숫자는 없다.
 
예).
  지정된 숫자: 935
 
1 입력: 123  ->  1B 2O
2 입력: 132  ->  1S 2O
...
10 입력: 935  ->  3S
 
 

baseball.html
 
<!doctype html>
 
<html>
<head>
 
</head>
        <script>
                var number = "361";
 
                for ( var i = 0; i < 10; i++ ) {
                  var strike = 0;
                  var ball = 0;
                  var out = 0;
 
                  buffer = prompt("input number");
 
                  if( buffer[0] === number[0] ) { strike++; }
                  else if ( buffer[0] === number[1] || buffer[0] === number[2] ) { ball++; }
                  else { out ++; }
 
                  if( buffer[1] === number[1] ) { strike++; }
                  else if ( buffer[1] === number[0] || buffer[1] === number[2] ) { ball++; }
                  else { out ++; }
 
                  if( buffer[2] === number[2] ) { strike++; }
                  else if ( buffer[2] === number[0] || buffer[2] === number[1] ) { ball++; }
                  else { out ++; }
 
                  alert("strike: " + strike + ", ball: " + ball + ", out: " + out );
 
                  if( strike == 3 ) { break; }
                }
 
                if( i < 10 ) { document.write("correct!!!"); }
                else { document.write("failed..."); }
        </script>
<body>
</body>
 
</html>

 

 

 

( prompt() 함수를 이용해서 메시지 박스를 띄워 사용자에게 3자리 숫자를 입력 받는다 )

 

 

( 사용자에게 341이라는 숫자를 입력 받았는데 361이라는 숫자를 맞춰야 하기 때문에 2스트라이크 1볼!!!

이라고 사용자에게 alert() 함수를 통해서 출력해 알려준다 )

 

* 크롬의 경우 document.write()가 사용자 입력이 끝날때마다 매번 출력 해주는게 아니라

반복문이 다 끝난뒤에 그 결과를 한꺼번에 출력해주는데 이 부분은 웹브라우저의 종류에 영향을 받는다.

( 익스플로러의 경우에는 입력마다 바로 그 결과를 출력 해준다 )

 

 

( 10번 안에만 맞추면 되기 때문에 몇번의 시도 끝에 3스트라이크!!! )

 

 

( 이후 사용자에게 correct!!! 이라는 말을 보여주면서 성공 했다는 걸 알려준다!! )

 

 

( 만약 10번동안의 기회 안에 성공을 하지 못할 경우에는 failed...가 나온다.. )

 

 

 

 

반응형

댓글