BE/C++

[C++] 타임어택 끝말잇기 게임

콩다영 2023. 10. 26.
728x90

제한시간이 있는 끝말잇기 게임을 구현해 보자.

 

[ 규칙 ]

제한시간 30초 동안 플레이어는 끝말잇기 규칙에 따라 단어를 입력 

▷ 제한시간이 종료되면 게임을 종료시키고, 입력 한 단어의 개수를 출력

▷ 단, 한번 입력된 단어는 입력하지 못하게 하기 (중복체크)

 

 

제한시간 측정에 관해서는 

시작시간과 종료시간의 시간차를 이용하여 초로 환산하여 계산해 주었다.

clock_t startTime = clock();		// 시작시간
clock_t endTime = clock();		// 종료시간

// 중략

// 시간차를 초로 환산하여 제한시간 30초 비교조건
if ((endTime - startTime) / CLOCKS_PER_SEC >= 30) {

// ...

 

실행코드

#include <iostream>
#include <string>
#include <vector>
#include <ctime>
#include <algorithm>


// 타임어택 끝말잇기 게임

using std::cout;
using std::cin;
using std::endl;
using std::string;

int main() {
	int check[100] = { 0, };
	int arySize = 0, nextWdSize = 0;
	bool chkSame;
	string beforeWord, nextWord;
	std::vector<string> wordArray[100];
	clock_t startTime = clock();

	cout << " § 타임어택(30초) 끝말잇기 게임 STRAT § " << endl;
	cout << " => 시작단어 : ";
	wordArray->push_back("apple");

	while (1) {
		chkSame = false;
		arySize = wordArray->size();
		for (int i = 0; i < arySize; i++) {
			cout << wordArray->at(i);
			if (i == wordArray->size() - 1) {
				cout << endl;
			}
			else {
				cout << "->";
			}
		}
		cout << "\n다음 단어를 입력하세요 : ";
		cin >> nextWord;


		// 제한시간 check !!
		clock_t endTime = clock();
		// 제한시간 30초
		if ((endTime - startTime) / CLOCKS_PER_SEC >= 30) {
			cout << "타임오버 !" << endl;
			break;
		}

		arySize = wordArray->size();
		beforeWord = wordArray->at(arySize - 1);
		int size = beforeWord.size();

		// 이전단어 마지막 문자와 다음단어 처음 문자 일치 여부 확인.
		if (beforeWord[size - 1] == nextWord[0]) {
			//중복체크
			for (int i = 0; i < arySize; i++) {
				if (nextWord == wordArray->at(i)) {
					chkSame = true;
				}
			}

			if (chkSame) {
				cout << "중복된 단어입니다." << endl;
			}
			else {
				wordArray->push_back(nextWord);
			}
		}
		else {
			cout << "잘못된 입력입니다." << endl;
		}
	}
	cout << "\n게임 종료 !" << endl;
	cout << "총 입력한 단어 개수 : " << wordArray->size() << endl;
}

 

실행결과

 

보완점

: 소켓 통신방법을 응용해서 혼자가 아닌 상대방과 2인으로 할 수 있는 게임으로도 구현해보고 싶다.

: 시작단어를 사용자가 지정해서 시작해도 되는 방법으로도 구현해 볼 수 있겠다.

728x90
반응형

댓글