2장. 추리 게임 튜토리얼

Gillilab - TechLog·2024년 11월 17일

Rust

목록 보기
3/21

2장. 추리 게임 튜토리얼

이 장에서는 추리 게임을 만들면서 Rust의 기본 개념들을 실습해보겠습니다:

  1. 사용자 입력 처리하기

    • std::io를 사용한 콘솔 입출력
    • String과 &str 타입 이해하기
    • Result 타입으로 에러 처리하기

    예제:

    use std::io;
    
    fn main() {
        println!("추측할 숫자를 입력하세요.");
        
        let mut guess = String::new();
        
        io::stdin()
            .read_line(&mut guess)
            .expect("입력을 읽지 못했습니다.");
        
        println!("입력한 값: {}", guess);
    }
  2. rand 크레이트 활용하기

    • Cargo.toml에 외부 크레이트 추가
    • 난수 생성기 사용법
    • 버전 관리와 의존성

    예제:

    use rand::Rng;
    
    fn main() {
        let secret_number = rand::thread_rng().gen_range(1..101);
        println!("비밀 번호: {}", secret_number);
    }
  3. 반복문과 패턴 매칭

    • loop를 사용한 게임 진행
    • match 표현식으로 조건 분기
    • break와 continue 활용

    예제:

    loop {
        // ... 사용자 입력 받기 ...
        
        match guess.cmp(&secret_number) {
            Ordering::Less => println!("너무 작습니다!"),
            Ordering::Greater => println!("너무 큽니다!"),
            Ordering::Equal => {
                println!("정답!");
                break;
            }
        }
    }
  4. 에러 처리와 타입 변환

    • Result<T,E> 타입 이해하기
    • parse() 메서드로 문자열 파싱
    • expect()와 unwrap() 차이점

    예제:

    let guess: u32 = match guess.trim().parse() {
        Ok(num) => num,
        Err(_) => {
            println!("유효한 숫자를 입력해주세요!");
            continue;
        }
    };
  5. 전체 코드

    use std::io;
    use std::cmp::Ordering;
    use rand::Rng;
    
    fn main() {
        println!("숫자 맞추기 게임!");
    
        let secret_number = rand::thread_rng().gen_range(1..101);
    
        loop {
            println!("정답을 추측하여 입력하세요.");
    
            let mut guess = String::new();
    
            io::stdin()
                .read_line(&mut guess)
                .expect("입력을 읽지 못했습니다.");
    
            let guess: u32 = match guess.trim().parse() {
                Ok(num) => num,
                Err(_) => {
                    println!("유효한 숫자를 입력해주세요!");
                    continue;
                }
            };
    
            println!("입력한 값: {}", guess);
    
            match guess.cmp(&secret_number) {
                Ordering::Less => println!("너무 작습니다!"),
                Ordering::Greater => println!("너무 큽니다!"),
                Ordering::Equal => {
                    println!("정답!");
                    break;
                }
            }
        }
    }

참조: https://doc.rust-lang.org/book/ch02-00-guessing-game-tutorial.html

0개의 댓글