#include<iostream>

#include<time.h>

#include<conio.h>

#include<string>

#include<Windows.h>

using namespace std;


void cardShuffle(); // 카드 셔플

void Display1();      // 뷰 페이지 1 ( 앞면 혹은 맞춘 카드 확인 화면 )

void Display2();      // 뷰 페이지 2 ( 뒤집은 화면 )

void selectPlay1(); // 첫번째 오픈카드 입력 처리 및 카드 진위여부 확인

void selectPlay2(); // 두번째 오픈카드 입력 처리 및 카드 진위여부 확인



string front[4][5] = { { "  ","  ","  ","  ","  " },

     { "  ","  ","  ","  ","  " },

            { "  ","  ","  ","  ","  " },

      { "  ","  ","  ","  ","  " } };

string back[4][5] = { { "★","●","◆","■","▲" },

 { "♠","♥","♣","☎","♨" },

   { "★","●","◆","■","▲" },

   { "♠","♥","♣","☎","♨" } };

int result[4][5] = { { 0, 1, 2, 3, 4 },

  { 5, 6, 7, 8, 9 },  

  { 0, 1, 2, 3, 4 }, 

   { 5, 6, 7, 8, 9 } };

int openCard[4][5] = { {0,}, }; // 오픈될 카드 0 이면 뒷면, 1 이면 앞면이 나오게될 배열

int resultX1 = 5, resultY1 = 6, resultX2 = 5, resultY2 = 6; // 첫번째 카드위치 변수 resultX1, resultY1 / 두번째 카드위치 변수 resultX2, resultY2

int playCount = 0; // 카드를 뒤집은 횟수

int openCount = 0; // 맞춘 카드수


void main()

{

// 도전 과제

// 카드 뒤집기

cardShuffle();

while(1)

{

Display1();

selectPlay1();

Display1();

selectPlay2();

Display2();

if (openCount == 20) break;

}

Display1();

cout << "            " << playCount << " 번 뒤집어 성공하셨습니다" << endl;


}

void cardShuffle() {


srand(time(NULL));


int row1, row2, col1, col2; // 카드 섞을 변수


for (int i = 0; i < 1000; i++ ){

row1 = rand() % 4;

row2 = rand() % 4;

col1 = rand() % 5;

col2 = rand() % 5;


swap(back[row1][col1], back[row2][col2]);

swap(result[row1][col1], result[row2][col2]);

}


}

void Display1() {

system("cls");

cout << endl;

cout << "                카드 뒤집기 게임" << endl;

cout << " 뒤집은 횟수 : " << playCount << endl;

cout << " ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ" << endl;

//ㅡㅡ첫줄ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

cout << "  ┌──┐ ┌──┐ ┌──┐ ┌──┐ ┌──┐" << endl;

cout << "  │ ";

if ((resultX1 == 0 && resultY1 == 0) || (resultX2 == 0 && resultY2 == 0) || openCard[0][0] == 1) { cout << back[0][0]; }

else { cout << front[0][0]; }

cout << " │ │ ";

if ((resultX1 == 0 && resultY1 == 1) || (resultX2 == 0 && resultY2 == 1) || openCard[0][1] == 1) { cout << back[0][1]; }

else { cout << front[0][1]; }

cout << " │ │ ";

if ((resultX1 == 0 && resultY1 == 2) || (resultX2 == 0 && resultY2 == 2) || openCard[0][2] == 1) { cout << back[0][2]; }

else { cout << front[0][2]; }

cout << " │ │ ";

if ((resultX1 == 0 && resultY1 == 3) || (resultX2 == 0 && resultY2 == 3) || openCard[0][3] == 1) { cout << back[0][3]; }

else { cout << front[0][3]; }

cout << " │ │ ";

if ((resultX1 == 0 && resultY1 == 4) || (resultX2 == 0 && resultY2 == 4) || openCard[0][4] == 1) { cout << back[0][4]; }

else { cout << front[0][4]; }

cout << " │" << endl;

cout << "  └──┘ └──┘ └──┘ └──┘ └──┘" << endl;

//ㅡㅡ둘째줄ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

cout << "  ┌──┐ ┌──┐ ┌──┐ ┌──┐ ┌──┐" << endl;

cout << "  │ ";

if ((resultX1 == 1 && resultY1 == 0) || (resultX2 == 1 && resultY2 == 0) || openCard[1][0] == 1) { cout << back[1][0]; }

else { cout << front[1][0]; }

cout << " │ │ ";

if ((resultX1 == 1 && resultY1 == 1) || (resultX2 == 1 && resultY2 == 1) || openCard[1][1] == 1) { cout << back[1][1]; }

else { cout << front[1][1]; }

cout << " │ │ ";

if ((resultX1 == 1 && resultY1 == 2) || (resultX2 == 1 && resultY2 == 2) || openCard[1][2] == 1) { cout << back[1][2]; }

else { cout << front[1][2]; }

cout << " │ │ ";

if ((resultX1 == 1 && resultY1 == 3) || (resultX2 == 1 && resultY2 == 3) || openCard[1][3] == 1) { cout << back[1][3]; }

else { cout << front[1][3]; }

cout << " │ │ ";

if ((resultX1 == 1 && resultY1 == 4) || (resultX2 == 1 && resultY2 == 4) || openCard[1][4] == 1) { cout << back[1][4]; }

else { cout << front[1][4]; }

cout << " │" << endl;

cout << "  └──┘ └──┘ └──┘ └──┘ └──┘" << endl;

//ㅡㅡ셋째줄ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

cout << "  ┌──┐ ┌──┐ ┌──┐ ┌──┐ ┌──┐" << endl;

cout << "  │ ";

if ((resultX1 == 2 && resultY1 == 0) || (resultX2 == 2 && resultY2 == 0) || openCard[2][0] == 1) { cout << back[2][0]; }

else { cout << front[2][0]; }

cout << " │ │ ";

if ((resultX1 == 2 && resultY1 == 1) || (resultX2 == 2 && resultY2 == 1) || openCard[2][1] == 1) { cout << back[2][1]; }

else { cout << front[2][1]; }

cout << " │ │ ";

if ((resultX1 == 2 && resultY1 == 2) || (resultX2 == 2 && resultY2 == 2) || openCard[2][2] == 1) { cout << back[2][2]; }

else { cout << front[2][2]; }

cout << " │ │ ";

if ((resultX1 == 2 && resultY1 == 3) || (resultX2 == 2 && resultY2 == 3) || openCard[2][3] == 1) { cout << back[2][3]; }

else { cout << front[2][3]; }

cout << " │ │ ";

if ((resultX1 == 2 && resultY1 == 4) || (resultX2 == 2 && resultY2 == 4) || openCard[2][4] == 1) { cout << back[2][4]; }

else { cout << front[2][4]; }

cout << " │" << endl;

cout << "  └──┘ └──┘ └──┘ └──┘ └──┘" << endl;

//ㅡㅡ넷째줄ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

cout << "  ┌──┐ ┌──┐ ┌──┐ ┌──┐ ┌──┐" << endl;

cout << "  │ ";

if ((resultX1 == 3 && resultY1 == 0) || (resultX2 == 3 && resultY2 == 0) || openCard[3][0] == 1) { cout << back[3][0]; }

else { cout << front[3][0]; }

cout << " │ │ ";

if ((resultX1 == 3 && resultY1 == 1) || (resultX2 == 3 && resultY2 == 1) || openCard[3][1] == 1) { cout << back[3][1]; }

else { cout << front[3][1]; }

cout << " │ │ ";

if ((resultX1 == 3 && resultY1 == 2) || (resultX2 == 3 && resultY2 == 2) || openCard[3][2] == 1) { cout << back[3][2]; }

else { cout << front[3][2]; }

cout << " │ │ ";

if ((resultX1 == 3 && resultY1 == 3) || (resultX2 == 3 && resultY2 == 3) || openCard[3][3] == 1) { cout << back[3][3]; }

else { cout << front[3][3]; }

cout << " │ │ ";

if ((resultX1 == 3 && resultY1 == 4) || (resultX2 == 3 && resultY2 == 4) || openCard[3][4] == 1) { cout << back[3][4]; }

else { cout << front[3][4]; }

cout << " │" << endl;

cout << "  └──┘ └──┘ └──┘ └──┘ └──┘" << endl;

cout << " ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ" << endl;


}


void selectPlay1() {


int x, y; // 0행 0열이 아닌 1행 1열로 시작하게 하기 위한 변수

cout << " 1번째 뒤집을 카드를 선택하세요 ( ex) 1 1 ~ 4 5 ) : ";

cin >> x >> y;

resultX1 = x - 1;

resultY1 = y - 1;

// 4행 5열 안에 값인지 확인해서 아니면 다시 입력

while (resultX1 > 3 || resultX1 < 0 || resultY1 > 4 || resultY1 < 0 || openCard[resultX1][resultY1] == 1) {

cout << " 잘못입력하셨거나 이미 오픈된 카드입니다." << endl;

cout << " 1번째 뒤집을 카드를 재선택하세요 ( ex) 1 1 ~ 4 5 ) : ";

cin >> x >> y;

resultX1 = x - 1;

resultY1 = y - 1;

}

}

void selectPlay2() {


playCount++; // 입력할때마다 증가

int x, y; // 0행 0열이 아닌 1행 1열로 시작하게 하기 위한 변수

cout << " 2번째 뒤집을 카드를 선택하세요 ( ex) 1 1 ~ 4 5 ) : ";

cin >> x >> y;

resultX2 = x - 1;

resultY2 = y - 1;

// 4행 5열 안에 값인지 확인해서 아니면 다시 입력

while (resultX2 > 3 || resultX2 < 0 || resultY2 > 4 || resultY2 < 0 || openCard[resultX2][resultY2] == 1 || (resultX1 == resultX2 && resultY1 == resultY2)) {

cout << " 잘못입력하셨거나 이미 오픈된 카드입니다." << endl;

cout << " 2번째 뒤집을 카드를 재선택하세요 ( ex) 1 1 ~ 4 5 ) : ";

cin >> x >> y;

resultX2 = x - 1;

resultY2 = y - 1;

}


// 카드를 맞추었다면 

if (result[resultX1][resultY1] == result[resultX2][resultY2]) {

openCard[resultX1][resultY1] = 1;

openCard[resultX2][resultY2] = 1;

openCount += 2;

}

}

void Display2() {


system("cls");

cout << endl;

cout << "                카드 뒤집기 게임" << endl;

cout << " 뒤집은 횟수 : " << playCount << endl;

cout << " ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ" << endl;

//ㅡㅡ첫줄ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

cout << "  ┌──┐ ┌──┐ ┌──┐ ┌──┐ ┌──┐" << endl;

cout << "  │ ";

if ((resultX1 == 0 && resultY1 == 0) || (resultX2 == 0 && resultY2 == 0) || openCard[0][0] == 1) { cout << back[0][0]; }

else { cout << front[0][0]; }

cout << " │ │ ";

if ((resultX1 == 0 && resultY1 == 1) || (resultX2 == 0 && resultY2 == 1) || openCard[0][1] == 1) { cout << back[0][1]; }

else { cout << front[0][1]; }

cout << " │ │ ";

if ((resultX1 == 0 && resultY1 == 2) || (resultX2 == 0 && resultY2 == 2) || openCard[0][2] == 1) { cout << back[0][2]; }

else { cout << front[0][2]; }

cout << " │ │ ";

if ((resultX1 == 0 && resultY1 == 3) || (resultX2 == 0 && resultY2 == 3) || openCard[0][3] == 1) { cout << back[0][3]; }

else { cout << front[0][3]; }

cout << " │ │ ";

if ((resultX1 == 0 && resultY1 == 4) || (resultX2 == 0 && resultY2 == 4) || openCard[0][4] == 1) { cout << back[0][4]; }

else { cout << front[0][4]; }

cout << " │" << endl;

cout << "  └──┘ └──┘ └──┘ └──┘ └──┘" << endl;

//ㅡㅡ둘째줄ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

cout << "  ┌──┐ ┌──┐ ┌──┐ ┌──┐ ┌──┐" << endl;

cout << "  │ ";

if ((resultX1 == 1 && resultY1 == 0) || (resultX2 == 1 && resultY2 == 0) || openCard[1][0] == 1) { cout << back[1][0]; }

else { cout << front[1][0]; }

cout << " │ │ ";

if ((resultX1 == 1 && resultY1 == 1) || (resultX2 == 1 && resultY2 == 1) || openCard[1][1] == 1) { cout << back[1][1]; }

else { cout << front[1][1]; }

cout << " │ │ ";

if ((resultX1 == 1 && resultY1 == 2) || (resultX2 == 1 && resultY2 == 2) || openCard[1][2] == 1) { cout << back[1][2]; }

else { cout << front[1][2]; }

cout << " │ │ ";

if ((resultX1 == 1 && resultY1 == 3) || (resultX2 == 1 && resultY2 == 3) || openCard[1][3] == 1) { cout << back[1][3]; }

else { cout << front[1][3]; }

cout << " │ │ ";

if ((resultX1 == 1 && resultY1 == 4) || (resultX2 == 1 && resultY2 == 4) || openCard[1][4] == 1) { cout << back[1][4]; }

else { cout << front[1][4]; }

cout << " │" << endl;

cout << "  └──┘ └──┘ └──┘ └──┘ └──┘" << endl;

//ㅡㅡ셋째줄ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

cout << "  ┌──┐ ┌──┐ ┌──┐ ┌──┐ ┌──┐" << endl;

cout << "  │ ";

if ((resultX1 == 2 && resultY1 == 0) || (resultX2 == 2 && resultY2 == 0) || openCard[2][0] == 1) { cout << back[2][0]; }

else { cout << front[2][0]; }

cout << " │ │ ";

if ((resultX1 == 2 && resultY1 == 1) || (resultX2 == 2 && resultY2 == 1) || openCard[2][1] == 1) { cout << back[2][1]; }

else { cout << front[2][1]; }

cout << " │ │ ";

if ((resultX1 == 2 && resultY1 == 2) || (resultX2 == 2 && resultY2 == 2) || openCard[2][2] == 1) { cout << back[2][2]; }

else { cout << front[2][2]; }

cout << " │ │ ";

if ((resultX1 == 2 && resultY1 == 3) || (resultX2 == 2 && resultY2 == 3) || openCard[2][3] == 1) { cout << back[2][3]; }

else { cout << front[2][3]; }

cout << " │ │ ";

if ((resultX1 == 2 && resultY1 == 4) || (resultX2 == 2 && resultY2 == 4) || openCard[2][4] == 1) { cout << back[2][4]; }

else { cout << front[2][4]; }

cout << " │" << endl;

cout << "  └──┘ └──┘ └──┘ └──┘ └──┘" << endl;

//ㅡㅡ넷째줄ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

cout << "  ┌──┐ ┌──┐ ┌──┐ ┌──┐ ┌──┐" << endl;

cout << "  │ ";

if ((resultX1 == 3 && resultY1 == 0) || (resultX2 == 3 && resultY2 == 0) || openCard[3][0] == 1) { cout << back[3][0]; }

else { cout << front[3][0]; }

cout << " │ │ ";

if ((resultX1 == 3 && resultY1 == 1) || (resultX2 == 3 && resultY2 == 1) || openCard[3][1] == 1) { cout << back[3][1]; }

else { cout << front[3][1]; }

cout << " │ │ ";

if ((resultX1 == 3 && resultY1 == 2) || (resultX2 == 3 && resultY2 == 2) || openCard[3][2] == 1) { cout << back[3][2]; }

else { cout << front[3][2]; }

cout << " │ │ ";

if ((resultX1 == 3 && resultY1 == 3) || (resultX2 == 3 && resultY2 == 3) || openCard[3][3] == 1) { cout << back[3][3]; }

else { cout << front[3][3]; }

cout << " │ │ ";

if ((resultX1 == 3 && resultY1 == 4) || (resultX2 == 3 && resultY2 == 4) || openCard[3][4] == 1) { cout << back[3][4]; }

else { cout << front[3][4]; }

cout << " │" << endl;

cout << "  └──┘ └──┘ └──┘ └──┘ └──┘" << endl;

cout << " ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ" << endl;

Sleep(1000);

// 초기화

resultX1 = 5;

resultY1 = 6;

resultX2 = 5;

resultY2 = 6;

}

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

카드 뒤집기 게임으로 1행 1열부터 4행 5열까지 가진 4 X 5 행렬로 총 20장의 카드로 2장씩 각각 동일한

문양을 가지고 있고 숫자를 입력 ( ex) 1행 1열의 카드를 뒤집고 싶으면 1 1 를 입력 ) 해서 

카드를 확인해 볼 수 있고 또한 이미 오픈된 카드는 입력할 수 없고 해당 행렬을 벗어난 값을 입력할 수도 없다.

종료화면처럼 카드를 다 맞추면 몇번 뒤집어 성공한지 출력되며 게임이 종료된다.

시작화면 그림

중간화면 그림

종료화면 그림


↓ 소스파일 

카드뒤집기.cpp


'SGA 스터디 > C++ 코딩' 카테고리의 다른 글

strcpy 문자열 복사 , strcmp 문자열 비교 함수 작성  (0) 2015.10.12
공 허들넘기 ㅋㅋ  (0) 2015.08.20
월남뽕  (0) 2015.08.13
별찍기  (0) 2015.08.11
하이 로우 세븐 카드게임 ( High & Low 7 )  (0) 2015.08.11

+ Recent posts