프로그래밍 공부

명품 C++ Programming Open Challenge 4장 한글 끝말잇기 게임 본문

Programming/명품 C++ Programming

명품 C++ Programming Open Challenge 4장 한글 끝말잇기 게임

khj1999 2019. 5. 6. 16:46

C++를 시작한지 얼마안된 학생입니다.

객체지향이라는걸 완벽히 이해하지 못하여서 틀린것이나 오류가 있을수 있으니.

참고용으로만 사용해주시면 감사하겟습니다.

#include <iostream>
#include <string>
using namespace std;

class game { // 끝말잇기 게임 class 선언
    string str; // 문자열을 입력받을 변수.
    string start = "아버지"; // 끝말잇기 시작 문자와 string class.
    int cnt = 0; // 이름을 출력하기 위한 변수.
public:
    string input() { // 문자열 입력함수.
        string s;
        cin >> s; // s에 값을 대입.
        return s; // s를 반환.
    }

    bool compare(string s1, string s2) { // 문자열 비교함수
        int len = s1.length(); // 문자열의 길이                                      // 한글 문자열은 2바이트이므로 문자열의 끝 2바이트와 시작부분 2바이트를 비교해준다.
        if ((s1[len - 1] == s2[1]) && (s1[len - 2] == s2[0])) { return true; }  // 문자열의 길이를 구해서 맨끝의 공백을 제외한 s1[len - 1] 와 s2[1]을 비교 s1[len - 2] 와 s2[0] 을 비교한다.
        else { return false; }                                                
    }  // 문자열 길이가 같으면 True 다르면 false 반환.
    
    void running(string *name, int n) { // 끝말잇기 실행부분.
        while (1) {
            cout << name[cnt] << ">>"; // 입력하는 사람의 이름 출력.
            str = input();
            if (compare(start, str) == false) { // 문자열 비교.  compare함수의 반환 값이 false 일때 실행.
                cout << name[cnt] << "(이)가 패배 하였습니다." << endl; 
                break; // 패배할결우 while문 종료.
            }
            else {
                start = str; // 함수의 반환값이 false가 아닐경우 이전에 입력했던 문자열을 다음 입력이랑 비교할 문자열에 대입
            }
            cnt++; // 이름을 출력하기 위해 cnt++ 
            if (cnt == n) cnt = 0; // cnt변수가 n이 될 경우 cnt = 0.
        }                           // cnt를 0으로 초기화 안해줄경우 배열의 범위 초과 쓰래기 값 출력하게 됨.
    }
};

int main() {

    int n;
    game wordgame; // class 선언.
    cout << "끝말 잇기 게임을 시작합니다\n게임에 참가하는 인원은 몇명입니까?";
    cin >> n; // 게임의 참가 인원수 입력.
    string *name = new string[n]; // 참가 인원만큼 string class 동적할당.
    for (int i = 0; i < n; i++) { // n만큼 반복.
        cout << "참가자의 이름을 입력하세요. 빈칸 없이>>";
        cin >> name[i]; // 이름 입력.
    }
    cout << "시작하는 단어는 '아버지' 입니다." << endl;
    wordgame.running(name, n); // 실행 부분

    return 0;
}

실행결과

 

아직 잘모르는 초보자임을 감안하고 봐주시면 감사하겟습니다.

틀린부분, 오류 지적해주시면 감사하겟습니다.

Comments