스케잇이 아니더라도……
요즘에 내가 하는 일에 G.G 씨 만큼 사랑을 가지고 하는게 있을까?
예전과는 다른 내 모습에서 슬픔을 느끼는중…
스케잇이 아니더라도……
요즘에 내가 하는 일에 G.G 씨 만큼 사랑을 가지고 하는게 있을까?
예전과는 다른 내 모습에서 슬픔을 느끼는중…
볼링 프로그램 작성.
중간에 점수 계산 부분에서만 주석을 달아놔서
지금 보면 무슨말인지 하나도 이해가 안된다..-_-
거기다가 3차원 배열을 사용했고.. 전역변수가 너무 많다
변수명이나 함수명도 어설프게 만들어놔서 지적을 많이 당했고…..
이 과제를 끝내놓고 다음 과제를 할때는 시간을 넉넉하게 두고
완벽하게 해보려 했지만
역시나 시간에 쫒겨서 허겁지겁 하고 있는중..
이게 뭥미?! 좀 달라지자……
===========================
#include<stdio.h>
#include<ctype.h>
#include<stdlib.h>
int Player_Score[4][12][2];
int Sum_Score[4];
int Player, i, pFrame, x, y, z, nStriker;
int Input_Player();
void Input_Print(int Player);
void Output_Score(int Player);
void Check_Score(int i, int pFrame);
void Sum_Player_Score(int x);
void Player_Ranking(int Player);
int main()
{
Input_Player();
Input_Print(Player);
Output_Score(Player);
Player_Ranking(Player);
return 0;
}
void Input_Print(int Player)
{
char tmp;
for (; pFrame<10; pFrame++)
{
for (i=0; i<Player; i++)
{
printf(”\n%d번째 선수입니다.\n”, i+1);
printf(”%d번째 프레임에서 쓰러뜨린 핀의 수를 입력하세요 : “, pFrame+1);
scanf(”%s”, &tmp);
if (ispunct(tmp) == 0 && isalpha(tmp) == 0)
{
Player_Score[i][pFrame][0] = atoi(&tmp);
if (Player_Score[i][pFrame][0] > 10 || Player_Score[i][pFrame][0] < 0)
{
printf(”핀 수는 1~10까지 입력해주세요.\n”);
Input_Print(Player);
}
else
Check_Score(i, pFrame);
}
else
{
// getchar();
printf(”잘못된 입력입니다.”);
i–;
continue;
}
}
}
}
int Input_Player()
{
printf(”*****************************\n”
“볼링 점수 계산 프로그램\n”
“*****************************\n”);
while (1)
{
char tmp;
printf(”몇명의 Player가 있습니까?(최대 4명) : “);
scanf(”%s”, &tmp);
if (isalpha(tmp) == 0)
{
Player = atoi(&tmp);
if (Player > 4 || Player < 1)
{
printf(”1~4명으로 입력해 주세요.\n”);
}
else if(ispunct(tmp) != 0)
{
printf(”\n잘못된 입력입니다.\n”);
}
else
return 0;
}
else
{
printf(”잘못된 입력입니다.\n”);
}
}
}
void Check_Score(int i, int pFrame)
{
int Count, Bonus_Count;
char tmp;
for (Count=0; Count <= 1 ; Count++)
{
if (Player_Score[i][pFrame][Count] == 10)
{
nStriker=nStriker+1;
switch (nStriker)
{
case 2:
printf(”투스트라이크입니다. 축하합니다!!!\n”);
Player_Score[i][pFrame][1] = 0;
break;
case 3:
printf(”터키입니다. 축하합니다!!!\n”);
Player_Score[i][pFrame][1] = 0;
break;
case 4:
printf(”4베거입니다. 축하합니다!!!\n”);
Player_Score[i][pFrame][1] = 0;
break;
case 5:
printf(”5베거입니다. 축하합니다!!!\n”);
Player_Score[i][pFrame][1] = 0;
break;
case 6:
printf(”6베거입니다. 축하합니다!!!\n”);
Player_Score[i][pFrame][1] = 0;
break;
case 7:
printf(”7베거입니다. 축하합니다!!!\n”);
Player_Score[i][pFrame][1] = 0;
break;
case 8:
printf(”8베거입니다. 축하합니다!!!\n”);
Player_Score[i][pFrame][1] = 0;
break;
case 9:
printf(”9베거입니다. 축하합니다!!!\n”);
Player_Score[i][pFrame][1] = 0;
break;
case 10:
printf(”9베거입니다. 축하합니다!!!\n”);
Player_Score[i][pFrame][1] = 0;
break;
default:
printf(”스트라이크입니다. 축하합니다!!!\n”);
Player_Score[i][pFrame][1] = 0;
break;
}
}
if (pFrame == 9)
{
if (Player_Score[i][pFrame][0] == 10)
{
for (Bonus_Count=0; Bonus_Count < 2; Bonus_Count++)
{
printf(”\n%d번째 보너스 프레임에서 쓰러뜨린 핀의 개수를 입력하세요. : “, Bonus_Count+1);
scanf(”%s”, &tmp);
if (isalpha(tmp) == 0)
{
Player_Score[i][pFrame+Bonus_Count+1][0] = atoi(&tmp);
if (Player_Score[i][pFrame+Bonus_Count+1][0] > 10)
{
printf(”핀 수는 1~10개까지 입력해주세요.”);
Check_Score(i, pFrame);
}
else if(ispunct(tmp) != 0)
{
printf(”\n잘못된 입력입니다.\n”);
Check_Score(i, pFrame);
}
}
else
{
printf(”잘못된 입력입니다.\n”);
Check_Score(i, pFrame);
}
Count++;
}
}
else if(Player_Score[i][pFrame][0] != 10)
{
printf(”\n%d 개의 핀이 남았습니다. 스페어 처리된 핀의 수를 입력하세요 : “, 10-Player_Score[i][pFrame][Count]);
scanf(”%s”, &tmp);
if (isalpha(tmp) == 0)
{
Player_Score[i][pFrame][Count+1] = atoi(&tmp);
if (Player_Score[i][pFrame][Count+1] > 10)
{
printf(”핀 수는 1~10개까지 입력해주세요.”);
Check_Score(i, pFrame);
}
else if(ispunct(tmp) != 0)
{
printf(”\n잘못된 입력입니다.\n”);
Check_Score(i, pFrame);
}
else if (Player_Score[i][pFrame][0] + Player_Score[i][pFrame][1] > 10)
{
printf(”남아있는 갯수보다 큽니다. 다시 입력해주세요.”);
Check_Score(i, pFrame);
}
else if (Player_Score[i][pFrame][0] + Player_Score[i][pFrame][1] == 10)
{
printf(”\n1번째 보너스 프레임에서 쓰러뜨린 핀의 개수를 입력하세요. : “);
scanf(”%s”, &tmp);
if (isalpha(tmp) == 0)
{
Player_Score[i][10][0] = atoi(&tmp);
if (Player_Score[i][10][0] > 10)
{
printf(”핀 수는 1~10개까지 입력해주세요.”);
Check_Score(i, pFrame);
}
else if(ispunct(tmp) != 0)
{
printf(”\n잘못된 입력입니다.\n”);
Check_Score(i, pFrame);
}
Count++;
}
else
{
printf(”잘못된 입력입니다.\n”);
Check_Score(i, pFrame);
}
break;
}
Count++;
}
else
{
printf(”잘못된 입력입니다.\n”);
Check_Score(i, pFrame);
}
}
}
else if (pFrame != 9 && Player_Score[i][pFrame][0] + Player_Score[i][pFrame][1] != 10)
{
nStriker=0;
printf(”\n%d 개의 핀이 남았습니다. 스페어 처리된 핀의 수를 입력하세요 : “, 10-Player_Score[i][pFrame][Count]);
scanf(”%s”, &tmp);
if (isalpha(tmp)==0)
{
Player_Score[i][pFrame][1] = atoi(&tmp);
if (Player_Score[i][pFrame][0] + Player_Score[i][pFrame][1] > 10)
{
printf(”남아있는 갯수보다 큽니다. 다시 입력해주세요. : “);
Check_Score(i, pFrame);
}
else if (Player_Score[i][pFrame][0] + Player_Score[i][pFrame][1] == 10)
printf(”축하합니다. 스페어 처리 되었습니다.\n”);
else if (ispunct(tmp) != 0)
{
printf(”\n잘못된 입력입니다.\n”);
Check_Score(i, pFrame);
}
}
else
{
printf(”잘못된 입력입니다.\n”);
Check_Score(i, pFrame);
}
Count++;
break;
}
}
}
void Output_Score(int Player)
{
printf(”———————————————————–+\n”
“프레임 | 1| 2| 3| 4| 5| 6| 7| 8| 9| 10|\n”
“———————————————————–|\n”);
for (x=0; x <= Player-1; x++)
{
printf(”선수 %d |”, x+1);
for (y=0; y < 10; y++)
{
if (y == 9)
{
if(Player_Score[x][y][0]+Player_Score[x][y][1]!=10)//스트라이크나 스페어처리가 아닐 경우 점수계산
{
printf(”%2d%2d |”,Player_Score[x][y][0], Player_Score[x][y][1]);
break;
}
else
{
if(Player_Score[x][y][0]!=10)// 스페어 처리한경우
{
printf(”%d /%3d|”,Player_Score[x][y][0], Player_Score[x][y+1][0]); // 결과 출력
break;
}
else
{
if(Player_Score[x][y+1][0]!=10)// i가 스트라이크 일때 i+1 프레임 스트라이크가 아닌 경우
{
printf(” X%2d%2d|”,Player_Score[x][y+1][0], Player_Score[x][y+2][0]); // 결과 출력
break;
}
else
{
if(Player_Score[x][y+2][0]!=10)// 스트라이크 처리한경우
{
printf(” X X%2d|”,Player_Score[x][y+2][0]); //결과 출력
break;
}
else
{
printf(” X X X|”);
break;
}
}
}
}
}
for (z=0; z <= 1 ; z++)
{
if (z == 0)
{
if (Player_Score[x][y][0] == 10)
printf(” X |”);
else
printf(”%2d”, Player_Score[x][y][z]);
}
else
{
if (Player_Score[x][y][0] == 0 && Player_Score[x][y][1] == 0)
printf(” -|”);
else if (Player_Score[x][y][0] != 10 && Player_Score[x][y][0] + Player_Score[x][y][1] == 10)
printf(” /|”);
else if (Player_Score[x][y][0] + Player_Score[x][y][1] != 10)
printf(”%2d|”, Player_Score[x][y][1]);
}
}
}
printf(”\n”);
Sum_Player_Score(x);
printf(”\n———————————————————–|\n”);
}
}
void Sum_Player_Score(int x)
{
printf(” |”);
for(i=0; i<10; i++)
{
if(Player_Score[x][i][0]+Player_Score[x][i][1]!=10)//스트라이크나 스페어처리가 아닐 경우 점수계산
{
Sum_Score[x] += Player_Score[x][i][0]+Player_Score[x][i][1]; // i 프레임의 1회 + 2회 점수
printf(”%4d|”,Sum_Score[x]); //프레임의 1 + 2 결과 출력
}
else
{
if(Player_Score[x][i][0]!=10)// 스페어 처리한경우
{
if(i==9)
{
Sum_Score[x] += Player_Score[x][i][0]+Player_Score[x][i][1]+Player_Score[x][i+1][0]; // i 프레임의 1회 + 2회 점수
printf(”%4d|”,Sum_Score[x]); //프레임의 1 + 2 결과 출력
break;
}
Sum_Score[x] += Player_Score[x][i][0]+Player_Score[x][i][1]+Player_Score[x][i+1][0]; // (i프레임의 1회) + 2회 + (i프레임+1의 1회)
printf(”%4d|”,Sum_Score[x]); // 결과 출력
}
else
{
if(Player_Score[x][i+1][0]!=10)// i가 스트라이크 일때 i+1 프레임 스트라이크가 아닌 경우
{
if(i==9)
{
Sum_Score[x] += Player_Score[x][i][0]+Player_Score[x][i+1][0]+Player_Score[x][i+2][0];
printf(”%4d|”,Sum_Score[x]); // 결과 출력
break;
}
Sum_Score[x] += Player_Score[x][i][0]+Player_Score[x][i+1][0]+Player_Score[x][i+1][1]; // (i프레임의 1회) + (i+1프레임의 1회)+(i+1프레임의 2회)
printf(”%4d|”,Sum_Score[x]); // 결과 출력
}
else
{
Sum_Score[x]+=Player_Score[x][i][0]+Player_Score[x][i+1][0]+Player_Score[x][i+2][0]; //터키를 한경우
printf(”%4d|”,Sum_Score[x]);
}
}
}
}
}
void Player_Ranking(int Player)
{
int j, temp;
int Score_Temp[4];
int Player_Num[4]={1,2,3,4};
if (Player != 1)
{
for (i=0; i < 4; i++)
{
Score_Temp[i]=Sum_Score[i];
}
for (i=0; i < Player-1; i++)
{
for (j=i+1; j < Player; j++)
{
if (Score_Temp[i] < Score_Temp[j])
{
temp = Score_Temp[j];
Score_Temp[j] = Score_Temp[i];
Score_Temp[i] = temp;
temp = Player_Num[j];
Player_Num[j] = Player_Num[i];
Player_Num[i] = temp;
}
}
}
for (i=0; i < Player; i++)
{
printf(”%d 등 : %d 번 선수\n”, i+1, Player_Num[i]);
}
printf(”\n===>경기가 종료 되었습니다.”);
}
else
printf(”\n경기가 종료 되었습니다.”);
}