c언어 간단한 가위바위보 프로그램
- 프로그래밍/C언어
- 2018. 8. 14.
간단한 가위바위보 프로그램
이번에는 간단한 가위바위보 프로그램입니다.
조건.
1=가위 2=바위 3=보
2. 1~3말고 다른 숫자를 입력하면 다시 입력받는다.
3. 가위바위보를 몇 번 했는지 나오게 한다.
4. 컴퓨터가 랜덤으로 나오게 한다.
5. 점수를 출력한다.
c언어로 가위바위보 만들기 코드
이번에는 코드입니다.
//가위바위보.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
int wl(int a, int b);
int main(){
int i,player,w,score,num=0;
srand(time(NULL));
printf("가위 바위 보 게임입니다.\n");
printf("1. 가위 2. 바위 3. 보\n");
re:
while(1){
printf("5초후 시작합니다.\n");
Sleep(1000); //1초
printf("4초\n");
Sleep(1000); //1초
printf("3초\n");
Sleep(1000); //1초
printf("2초\n");
Sleep(1000); //1초
printf("1초\n");
Sleep(1000); //1초
printf("가위 바위 보!!\n");
i=rand()%3+1; //1에서 3
//ex %5+3 => 3,4,5,6,7
scanf("%d",&player); //숫자를 입력받음
system("cls"); //화면 삭제
if(player>3||player<1){
printf("다시\n");
goto re;
}
num++; //num값이 하나 올라감.
w=wl(i,player); //wl에 i,player값을 넣고 리턴받은 값을 w에 저장
score+=w; //스코어=스코어+w
printf("점수: %d 경기횟수%d \n\n",score,num);
}
return 0;
}
int wl(int a, int b) //i,player
{
if(a==b){ //a와b가 같으면
if(a==1)printf("com = 가위 player= 가위 \n"); //둘다 1일때
else if(a==2)printf("com = 바위 player= 바위 \n"); //둘다 2일때
else if(a==3)printf("com = 보 player= 보 \n"); //둘다 3일때
printf("비김\n");
return 0; //비기면 0을 리턴함
}
switch(b){
case 1: //가위
//win
if(a==3){ //플레이어는 1을 내고 컴퓨터는 3을냄
printf("com = 보 player= 가위 \n");
printf("이김\n");
return 1; //1을 리턴
}
//lose
else if(a==2){ //플리에어는 1을내고 컴퓨터는 2를 냄
printf("com = 바위 player= 가위 \n");
printf("짐\n");
return -1; //-1을 리턴
}
case 2: //바위
//win
if(a==1){ //플레이어는 2를내고 컴퓨터는 1을냄
printf("com = 가위 player= 바위 \n");
printf("이김\n");
return 1;
}
//lose
else if(a==3){ //플레이어는2를내고 컴퓨터는 3을냄
printf("com = 보 player= 바위 \n");
printf("짐\n");
return -1;
}
case 3: //보
//win
if(a==2){ //플레이어는 3을내고 컴퓨터는2를냄
printf("com = 바위 player= 보 \n");
printf("이김\n");
return 1;
}
//lose
else if(a==1){ //플레이어는 3을내고 컴퓨터는 1을냄
printf("com = 가위 player= 보 \n");
printf("짐\n");
return -1;
}
}
}
난수
stdlib.h와 time.h를 포함해서 srand와 time함수를 사용함.
이것을 사용하지 않고 그냥 rand함수만 사용하면 게임을 실행했을때 의사난수가 나오게 된다.
srand로 시드값을 설정 컴퓨터의 시간을 가져와 시드값으로 하기때문에 매번 실행할 때마다 다른 숫자를 볼 수 있다.
(의사난수란? 컴퓨터의 알고리즘에 의해 생성된 난수로 사실상 진짜 난수는 아니다. 프로그램을 다시실행하면 똑같은 난수가 나오는 것을 볼 수 있다.)
지연과 화면삭제
windows.h를 포함해서 system("cls");와 Sleep(1000);사용 (Sleep에서 s는 대문자로 사용해야함.)
system("cls")를 사용하면 그 전에 나왔던 글자들이 모두 지워지고 Sleep(1000)은 1초를 지연시킨다.
레이블과 goto문
레이블은 구간을 나눈다고 생각하면 될것같다. 위의 코드에서는 re:로 표기했다.
goto re;를 사용해 re:로 이동했으며 권장하는 코드는 아니다.
그 외의 코드설명
wl에서 각각 0,1,-1을 리턴해서 리턴값을 w에 저장하고 score값과 더해서 점수구현.
그 외의 나머지는 위 가위바위보 코드의 주석을 참고하면 될 것 같다.
실행및 코드파일
아래는 위에서 말한 코드를 실행한 사진이다.
6번 진행하고 3점을 얻었다.(하드모드 만드려다가 이것도 이기기 어려워서 포기했다.)
but. 자동종료 불가능. 경기가 무한대로 이어짐.
5,4,3,2,1이렇게 출력되는 중에도 코드를 입력하면 보이지는 않지만 실행이 되는것 같음.