imported>miura0806 |
|
| Line 1: |
Line 1: |
| * 2013년 10월 26일 개발
| | DeleteThisPage |
| * 미완성
| |
| #include <stdio.h>
| |
| #include <stdlib.h>
| |
| #include <string.h>
| |
| #include <time.h>
| |
|
| |
| #pragma warning(disable:4996) //scanf 등의 함수로 인해 뜨는 4996에러를 무시함
| |
|
| |
| struct city
| |
| {
| |
| char name[10]; //도시의 이름
| |
| int own; //소유자
| |
| int arrive[4]; //도시에 머무르고 있는 플레이어
| |
| int level; //도시의 레벨
| |
| int cost; //1단계 기준 도시의 비용
| |
| }city[16]; //도시 구조체
| |
|
| |
| struct player
| |
| {
| |
| char name[10]; //플레이어의 이름
| |
| int cash; //현금 자산
| |
| int prop; //부동산 자산
| |
| int loca; //플레이어의 위치
| |
| int die; //파산 여부
| |
| }player[4]; //플레이어 구조체
| |
|
| |
| int rest[4]={0,0,0,0}; //무인도
| |
| int rank[4]={0,0,0,0}; //순위
| |
|
| |
| void marble_board(); //마블 게임판을 출력하는 함수
| |
| int play_marble(int play_num); //마블을 플레이하는 함수
| |
|
| |
| void main()
| |
| {
| |
| int i, j;
| |
| int play_num; //플레이어의 수
| |
| char name[3];
| |
|
| |
| srand(time(NULL));
| |
|
| |
| strcpy(city[0].name,"출발");
| |
| strcpy(city[1].name,"서울");
| |
| strcpy(city[2].name,"도쿄");
| |
| strcpy(city[3].name,"시드니");
| |
| strcpy(city[4].name,"모스크바");
| |
| strcpy(city[5].name,"두바이");
| |
| strcpy(city[6].name,"카이로");
| |
| strcpy(city[7].name,"쌍파울로");
| |
| strcpy(city[8].name,"세계여행");
| |
| strcpy(city[9].name,"하와이");
| |
| strcpy(city[10].name,"프라하");
| |
| strcpy(city[11].name,"푸켓");
| |
| strcpy(city[12].name,"무인도");
| |
| strcpy(city[13].name,"런던");
| |
| strcpy(city[14].name,"빈");
| |
| strcpy(city[15].name,"발리");
| |
|
| |
| for(i=0;i<16;i++)
| |
| {
| |
| city[i].own = -1;
| |
| city[i].level = 0;
| |
| city[i].cost = 100;
| |
| for(j=0;j<4;j++)
| |
| city[i].arrive[j] = 0;
| |
| } //city 구조체 값 초기화
| |
|
| |
| for(i=0;i<4;i++)
| |
| {
| |
| strcpy(player[i].name," ");
| |
| player[i].cash = 5000;
| |
| player[i].prop = 0;
| |
| player[i].loca = 0;
| |
| player[i].die = 0;
| |
| } //player 구조체 값 초기화
| |
|
| |
| printf("총 몇 명이 할까요(2~4)? ");
| |
| scanf("%d",&play_num);
| |
| for(i=0;i<play_num;i++)
| |
| {
| |
| printf("플레이어 %d의 이름을 지정해주세요 : ",i+1);
| |
| scanf("%s",player[i].name);
| |
| fflush(stdin);
| |
| sprintf(name,"(%d)",i+1);
| |
| strcat(player[i].name,name);
| |
| }
| |
| printf("각 플레이어는 5000원으로 시작합니다.\n");
| |
|
| |
| while(1)
| |
| {
| |
| if(play_marble(play_num) == 1)
| |
| {
| |
| printf("게임이 종료되었습니다.\n");
| |
| for(i=0;i<play_num;i++)
| |
| printf("%d등 : %s\n",i+1,player[rank[play_num-i-1]-1].name);
| |
| system("pause");
| |
| }
| |
| }
| |
| system("pause");
| |
| }
| |
|
| |
| void marble_board()
| |
| {
| |
| int i,j;
| |
|
| |
| system("cls");
| |
| for(i=0;i<5;i++)
| |
| printf("+---------------");
| |
| printf("+\n");
| |
| printf("|%15s",city[8].name);
| |
| for(i=9;i<12;i++)
| |
| printf("|%8s(레벨%d)",city[i].name,city[i].level);
| |
| printf("|%15s",city[12].name);
| |
| printf("| \n");
| |
| printf("| ");
| |
| for(i=9;i<12;i++)
| |
| printf("|-소유자:%-7d",city[i].own+1);
| |
| printf("| |\n");
| |
| for(i=8;i<13;i++)
| |
| {
| |
| printf("|");
| |
| for(j=0;j<4;j++)
| |
| {
| |
| if(city[i].arrive[j]==1)
| |
| printf("(%d)",j+1);
| |
| else
| |
| printf(" ");
| |
| }
| |
| printf(" ");
| |
| }
| |
| printf("|\n"); //첫째줄 도시 출력
| |
|
| |
| for(i=0;i<5;i++)
| |
| printf("+---------------");
| |
| printf("+\n");
| |
| printf("|%8s(레벨%d)|",city[7].name,city[7].level);
| |
| for(i=0;i<47;i++)
| |
| printf(" ");
| |
| printf("|%8s(레벨%d)|\n",city[13].name,city[13].level);
| |
| printf("|-소유자:%-7d|",city[7].own+1);
| |
| for(i=0;i<47;i++)
| |
| printf(" ");
| |
| printf("|-소유자:%-7d|\n",city[13].own+1);
| |
| printf("|");
| |
| for(j=0;j<4;j++)
| |
| {
| |
| if(city[7].arrive[j]==1)
| |
| printf("(%d)",j+1);
| |
| else
| |
| printf(" ");
| |
| }
| |
| printf(" |");
| |
| for(i=0;i<47;i++)
| |
| printf(" ");
| |
| printf("|");
| |
| for(j=0;j<4;j++)
| |
| {
| |
| if(city[13].arrive[j]==1)
| |
| printf("(%d)",j+1);
| |
| else
| |
| printf(" ");
| |
| }
| |
| printf(" |\n"); //둘째줄 도시 출력
| |
|
| |
| printf("+---------------+");
| |
| for(i=0;i<47;i++)
| |
| printf(" ");
| |
| printf("+---------------+\n");
| |
| printf("|%8s(레벨%d)|",city[6].name,city[6].level);
| |
| for(i=0;i<47;i++)
| |
| printf(" ");
| |
| printf("|%8s(레벨%d)|\n",city[14].name,city[14].level);
| |
| printf("|-소유자:%-7d|",city[6].own+1);
| |
| for(i=0;i<47;i++)
| |
| printf(" ");
| |
| printf("|-소유자:%-7d|\n",city[14].own+1);
| |
| printf("|");
| |
| for(j=0;j<4;j++)
| |
| {
| |
| if(city[6].arrive[j]==1)
| |
| printf("(%d)",j+1);
| |
| else
| |
| printf(" ");
| |
| }
| |
| printf(" |");
| |
| for(i=0;i<47;i++)
| |
| printf(" ");
| |
| printf("|");
| |
| for(j=0;j<4;j++)
| |
| {
| |
| if(city[14].arrive[j]==1)
| |
| printf("(%d)",j+1);
| |
| else
| |
| printf(" ");
| |
| }
| |
| printf(" |\n"); //셋째줄 도시 출력
| |
|
| |
| printf("+---------------+");
| |
| for(i=0;i<47;i++)
| |
| printf(" ");
| |
| printf("+---------------+\n");
| |
| printf("|%8s(레벨%d)|",city[5].name,city[5].level);
| |
| for(i=0;i<47;i++)
| |
| printf(" ");
| |
| printf("|%8s(레벨%d)|\n",city[15].name,city[15].level);
| |
| printf("|-소유자:%-7d|",city[5].own+1);
| |
| for(i=0;i<47;i++)
| |
| printf(" ");
| |
| printf("|-소유자:%-7d|\n",city[15].own+1);
| |
| printf("|");
| |
| for(j=0;j<4;j++)
| |
| {
| |
| if(city[5].arrive[j]==1)
| |
| printf("(%d)",j+1);
| |
| else
| |
| printf(" ");
| |
| }
| |
| printf(" |");
| |
| for(i=0;i<47;i++)
| |
| printf(" ");
| |
| printf("|");
| |
| for(j=0;j<4;j++)
| |
| {
| |
| if(city[15].arrive[j]==1)
| |
| printf("(%d)",j+1);
| |
| else
| |
| printf(" ");
| |
| }
| |
| printf(" |\n"); //넷째줄 도시 출력
| |
|
| |
| for(i=0;i<5;i++)
| |
| printf("+---------------");
| |
| printf("+\n");
| |
| for(i=4;i>0;i--)
| |
| printf("|%8s(레벨%d)",city[i].name,city[i].level);
| |
| printf("|%15s",city[0].name);
| |
| printf("|\n");
| |
| for(i=4;i>0;i--)
| |
| printf("|-소유자:%-7d",city[i].own+1);
| |
| printf("| |\n");
| |
| for(i=4;i>=0;i--)
| |
| {
| |
| printf("|");
| |
| for(j=0;j<4;j++)
| |
| {
| |
| if(city[i].arrive[j]==1)
| |
| printf("(%d)",j+1);
| |
| else
| |
| printf(" ");
| |
| }
| |
| printf(" ");
| |
| }
| |
| printf("|\n");
| |
| for(i=0;i<5;i++)
| |
| printf("+---------------");
| |
| printf("+\n"); //다섯째줄 도시 출력
| |
| }
| |
|
| |
| int play_marble(int play_num)
| |
| {
| |
| int dice; //주사위의 눈금
| |
| char buy; //인수 여부
| |
| int i,j;
| |
|
| |
| for(i=0;i<play_num;i++)
| |
| {
| |
| if(player[i].die == 1)
| |
| continue;
| |
| if(rank[play_num-2] != 0)
| |
| {
| |
| rank[play_num-1] = i+1;
| |
| return 1;
| |
| }
| |
| marble_board();
| |
| printf("%s의 차례입니다.\n현재 현금 : %d원 , 부동산 : %d원\n",player[i].name,player[i].cash,player[i].prop);
| |
| if(rest[i] == 1)
| |
| {
| |
| printf("무인도입니다. 한 턴을 쉽니다.\n");
| |
| printf("턴을 종료합니다.\n\n");
| |
| rest[i] = 0;
| |
| system("pause");
| |
| continue;
| |
| }
| |
|
| |
| printf("%s이(가) 주사위를 던졌습니다.\n",player[i].name);
| |
| dice = rand()%6 +1;
| |
| printf("%d이(가) 나왔습니다.\n",dice);
| |
|
| |
| if(player[i].loca+dice > 15)
| |
| {
| |
| player[i].cash+=500;
| |
| printf("월급 500원을 받았습니다.(잔액 %d원)\n",player[i].cash);
| |
| }
| |
|
| |
| city[player[i].loca].arrive[i] = 0;
| |
| player[i].loca+=dice;
| |
| if(player[i].loca>15)
| |
| player[i].loca-=16;
| |
| city[player[i].loca].arrive[i] = 1;
| |
| printf("%s에 도착했습니다.\n",city[player[i].loca].name);
| |
|
| |
| if(player[i].loca == 0)
| |
| {
| |
| printf("턴을 종료합니다.\n\n");
| |
| system("pause");
| |
| continue;
| |
| }
| |
|
| |
| else if(player[i].loca == 12)
| |
| {
| |
| rest[i] = 1;
| |
| printf("다음 턴을 쉽니다. 턴을 종료합니다.\n\n");
| |
| system("pause");
| |
| continue;
| |
| }
| |
|
| |
| else if(player[i].loca == 8)
| |
| {
| |
| printf("세계여행을 원하는 위치를 선택해주세요(출발(0)~발리(15)) : ");
| |
| city[player[i].loca].arrive[i] = 0;
| |
| scanf("%d",&player[i].loca);
| |
| fflush(stdin);
| |
| city[player[i].loca].arrive[i] = 1;
| |
| if(player[i].loca<8)
| |
| {
| |
| player[i].cash+=500;
| |
| printf("월급 500원을 받았습니다.(잔액 %d원)\n",player[i].cash);
| |
| }
| |
| printf("%s에 도착했습니다.\n",city[player[i].loca].name);
| |
| if(player[i].loca == 0)
| |
| {
| |
| printf("턴을 종료합니다.\n\n");
| |
| system("pause");
| |
| continue;
| |
| }
| |
| else if(player[i].loca == 12)
| |
| {
| |
| rest[i] = 1;
| |
| printf("다음 턴을 쉽니다. 턴을 종료합니다.\n\n");
| |
| system("pause");
| |
| continue;
| |
| }
| |
| }
| |
|
| |
| if(city[player[i].loca].own == -1)
| |
| {
| |
| printf("도시의 소유자가 없습니다. 도시를 인수할 수 있습니다.\n");
| |
| printf("인수비용은 %d원입니다.\n",city[player[i].loca].cost);
| |
| printf("인수하시겠습니까(Y/N)? : ");
| |
| scanf("%c",&buy);
| |
| fflush(stdin);
| |
|
| |
| if(buy == 'N')
| |
| {
| |
| printf("턴을 종료합니다.\n\n");
| |
| system("pause");
| |
| continue;
| |
| }
| |
|
| |
| else if(buy == 'Y')
| |
| {
| |
| if(player[i].cash >= city[player[i].loca].cost)
| |
| {
| |
| player[i].cash -= city[player[i].loca].cost;
| |
| player[i].prop += city[player[i].loca].cost;
| |
| city[player[i].loca].own = i;
| |
| city[player[i].loca].level = 1;
| |
| printf("%s(레벨 %d)를 인수했습니다.(잔액 %d원)\n",city[player[i].loca].name,city[player[i].loca].level,player[i].cash);
| |
| printf("턴을 종료합니다.\n\n");
| |
| system("pause");
| |
| continue;
| |
| }
| |
| else
| |
| {
| |
| printf("현금이 부족합니다. 턴을 종료합니다.\n\n");
| |
| system("pause");
| |
| continue;
| |
| }
| |
| }
| |
| }
| |
|
| |
| else if(city[player[i].loca].own != i)
| |
| {
| |
| printf("%s의 소유자는 %s입니다.\n",city[player[i].loca].name,player[city[player[i].loca].own].name);
| |
| printf("통행료는 %d원입니다.\n",city[player[i].loca].cost*2);
| |
| if(player[i].cash >= city[player[i].loca].cost*2)
| |
| {
| |
| player[i].cash -= city[player[i].loca].cost*2;
| |
| player[city[player[i].loca].own].cash += city[player[i].loca].cost*2;
| |
| printf("통행료를 냈습니다.(잔액 %d원)\n",player[i].cash);
| |
|
| |
| if(city[player[i].loca].level == 3)
| |
| {
| |
| printf("도시를 인수할 수 없습니다. (레벨 3)\n");
| |
| printf("턴을 종료합니다.\n\n");
| |
| system("pause");
| |
| continue;
| |
| }
| |
|
| |
| printf("도시를 인수할 수 있습니다. 인수 비용은 %d원입니다.\n",city[player[i].loca].cost*4);
| |
| printf("인수하시겠습니까(Y/N)? : ");
| |
| scanf("%c",&buy);
| |
| fflush(stdin);
| |
|
| |
| if(buy == 'N')
| |
| {
| |
| printf("턴을 종료합니다.\n\n");
| |
| system("pause");
| |
| continue;
| |
| }
| |
|
| |
| else if(buy == 'Y')
| |
| {
| |
| if(player[i].cash >= city[player[i].loca].cost*4)
| |
| {
| |
| player[i].cash -= city[player[i].loca].cost*4;
| |
| player[i].prop += city[player[i].loca].cost;
| |
| player[city[player[i].loca].own].cash += city[player[i].loca].cost*4;
| |
| player[city[player[i].loca].own].prop -= city[player[i].loca].cost;
| |
| city[player[i].loca].own = i;
| |
| printf("%s(레벨 %d)를 인수했습니다.(잔액 %d원)\n",city[player[i].loca].name,city[player[i].loca].level,player[i].cash);
| |
| printf("턴을 종료합니다.\n\n");
| |
| system("pause");
| |
| continue;
| |
| }
| |
| else
| |
| {
| |
| printf("현금이 부족합니다. 턴을 종료합니다.\n\n");
| |
| system("pause");
| |
| continue;
| |
| }
| |
| }
| |
| }
| |
| else
| |
| {
| |
| printf("통행료가 부족합니다. %s이(가) 파산하였습니다.\n",player[i].name);
| |
| player[i].die = 1;
| |
| for(j=0;j<16;j++)
| |
| {
| |
| if(city[j].own == i)
| |
| {
| |
| city[j].own = -1;
| |
| city[j].level = 0;
| |
| city[j].cost = 100;
| |
| }
| |
| }
| |
| city[player[i].loca].arrive[i] = 0;
| |
| for(j=0;j<4;j++)
| |
| {
| |
| if(rank[j] == 0)
| |
| {
| |
| rank[j] = i+1;
| |
| break;
| |
| }
| |
| else
| |
| continue;
| |
| }
| |
| continue;
| |
| }
| |
| }
| |
|
| |
| else if(city[player[i].loca].own == i)
| |
| {
| |
| if(city[player[i].loca].level == 3)
| |
| {
| |
| printf("도시를 업그레이드 할 수 없습니다. (레벨 3)\n");
| |
| printf("턴을 종료합니다.\n\n");
| |
| system("pause");
| |
| continue;
| |
| }
| |
|
| |
| else
| |
| {
| |
| printf("도시를 레벨%d로 업그레이드 할 수 있습니다. (%d원)\n",city[player[i].loca].level+1,(city[player[i].loca].level+1)*100);
| |
| printf("업그레이드하시겠습니까(Y/N)? : ");
| |
| scanf("%c",&buy);
| |
| fflush(stdin);
| |
|
| |
| if(buy == 'N')
| |
| {
| |
| printf("턴을 종료합니다.\n\n");
| |
| system("pause");
| |
| continue;
| |
| }
| |
|
| |
| else if(buy == 'Y')
| |
| {
| |
| if(player[i].cash >= (city[player[i].loca].level+1)*100)
| |
| {
| |
| player[i].cash -= (city[player[i].loca].level+1)*100;
| |
| player[i].prop += (city[player[i].loca].level+1)*100;
| |
| city[player[i].loca].level++;
| |
| city[player[i].loca].cost+=(city[player[i].loca].level)*100;
| |
|
| |
| printf("%s을(를) 업그레이드했습니다.\n",city[player[i].loca].name);
| |
| printf("턴을 종료합니다.\n\n");
| |
| system("pause");
| |
| continue;
| |
| }
| |
|
| |
| else
| |
| {
| |
| printf("현금이 부족합니다. 턴을 종료합니다.\n\n");
| |
| system("pause");
| |
| continue;
| |
| }
| |
| }
| |
| }
| |
| }
| |
| }
| |
|
| |
| return 0;
| |
| }
| |
| -----
| |
| [[최다인]]
| |
|
| |
|