가위바위보 게임 만들기
2015. 3. 24. 02:25ㆍ엘키스공간/엘키스코딩공방
728x90
728x90
1. 과제 내용
온 국민의 게임인 가위바위보 게임 만들기.
사용자에게 한글 "가위", "바위", "보"를 직접 입력받고
컴퓨터와 대결하여 승자를 출력하는 프로그램이다.
2. 결과 영상
3. 설계
- 마인드맵
큰 가지
입력 - 열거형, 가위바위보 영어로(Scissors, Rock, Paper), 비교(strcmp, 2byte~4byte), 한글로 입력받아보자!
출력 - 승자출력(UI 형태 고민), 이어하기(y/n)
예외처리 - 숫자x, 문자만 받기, while 반복문으로 제어
변수 - 사용자 손, 컴퓨터 손, 한글 받을 변수
- 수도코드
베스킨 라빈스의 과오를 극복하기 위해 좀 더 자세한 수도코드를 작성해봤다.
기능은 함수로 나누고 메인함수에서 한번에 함수 호출을 볼 수 있도록 작성했다.
- 순서도
4. 구현 코드
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <stdlib.h>
#define TRUE 1
/*
작성일 : 2015.03.17
작성자 : 조민혁
설명 : 가위 바위 보 게임.
*/
enum { ROCK, SCISSORS, PAPER }; // 묵찌빠 열거형
void PrintStartMessege();
void InputHand(int playerHand, char inputHan[] ,char printRSP[][5]);
void PrintWinner(int playerHand, int comHand);
void GenerateRandomHand(int * comHand);
void main(void)
{
char inputHan[20];
char printRSP[3][5] = {"바위", "가위", "보"};
int continueChar = 0;
int playerHand = 0;
int comHand = 0;
// 시작 메뉴 출력
PrintStartMessege();
while(TRUE){
// 사용자로부터 문자 입력
InputHand(&playerHand, inputHan , printRSP);
printf("당신이 낸 것 : %s\n", printRSP[playerHand]);
// 컴퓨터 가위, 바위, 보 만들기
GenerateRandomHand(&comHand);
printf("컴퓨터가 낸 것 : %s\n", printRSP[comHand]);
// 승자비교 및 출력
PrintWinner(playerHand, comHand);
// 컨티뉴 조건
while(getchar() != '\n');
printf("계속 하실래요? 0. 계속! 1. 그만! ");
scanf_s("%d", &continueChar, 1);
if (continueChar == 1)
{
puts("게임을 종료합니다.");
break;
}
}
}
void PrintStartMessege()
{
puts("작성일 2015.03.17 작성자 조민혁");
puts("지금부터 '가위 바위 보'게임을 시작합니다.");
}
void PrintWinner(int playerHand, int comHand)
{
if ((playerHand == 0 && comHand == 1) ||
(playerHand == 1 && comHand == 2) ||
(playerHand == 2 && comHand == 0))
{
puts("당신의 승리입니다!");
}
else if ((playerHand == 0 && comHand == 0) ||
(playerHand == 1 && comHand == 1) ||
(playerHand == 2 && comHand == 2))
{
puts("비겼습니다!");
}
else
{
puts("당신의 패배입니다!");
}
}
void GenerateRandomHand(int * comHand)
{
srand((unsigned int)time(NULL));
*comHand = rand()%3;
}
void InputHand(int* playerHand, char inputHan[] ,char printRSP[][5])
{
puts("가위, 바위, 보 중 하나를 입력해주세요.");
while(TRUE)
{
scanf_s("%s",inputHan, 20);
// 예외처리. 가위, 바위, 보로 들어오는지 검사
if (strcmp(inputHan, printRSP[0]) == 0)
{
*playerHand = ROCK;
break;
}
else if (strcmp(inputHan, printRSP[1]) == 0)
{
*playerHand = SCISSORS;
break;
}
else if (strcmp(inputHan, printRSP[2]) == 0)
{
*playerHand = PAPER;
break;
}
else
{
puts("다시 입력해주세요! 가위, 바위, 보만 입력할 수 있습니다.");
}
}
}
728x90
반응형
'엘키스공간 > 엘키스코딩공방' 카테고리의 다른 글
큐로 메시지 큐 구현하기 (0) | 2015.06.10 |
---|---|
큐 구현하기 (0) | 2015.06.10 |
[코딩] 스택 구현하기 (1) | 2015.06.10 |
베스킨라빈스 31 게임 (0) | 2015.03.24 |
발전하는 성적표 관리 시스템 (0) | 2015.03.24 |
반복문 (0) | 2015.03.23 |
문자열 함수 구현해보기 (2) | 2015.03.10 |