복피지 최종

2025. 3. 25. 21:59·C언어
/* -----------------------헤더----------------------- */
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <stdint.h>

#include <time.h>
#define SIZE 50 // 맵싸이즈

#define STR_BASIC 10 //스텟을 초기화해도 STR, DEX, INT는 10 고정
#define DEX_BASIC 10
#define INT_BASIC 10


/* 터미널을 설정해서 엔터없이 입력받기 */
#include<unistd.h>
#include<termios.h>
int getch() // 엔터없이 입력
{
    int c;
    struct termios oldattr, newattr;

    tcgetattr(STDIN_FILENO, &oldattr);           // 현재 터미널 설정 읽음
    newattr = oldattr;
    newattr.c_lflag &= ~(ICANON | ECHO);         // CANONICAL과 ECHO 끔
    newattr.c_cc[VMIN] = 1;                      // 최소 입력 문자 수를 1로 설정
    newattr.c_cc[VTIME] = 0;                     // 최소 읽기 대기 시간을 0으로 설정
    tcsetattr(STDIN_FILENO, TCSANOW, &newattr);  // 터미널에 설정 입력
    c = getchar();                               // 키보드 입력 읽음
    tcsetattr(STDIN_FILENO, TCSANOW, &oldattr);  // 원래의 설정으로 복구
    return c;
}
/* 터미널을 설정해서 엔터없이 입력받기 */

char ch;


/* -----------------------구조체----------------------- */ //(붕어빵틀)
//스킬 만드는 틀
struct made_skill
{   
    char skill_name[30];
    int skill_type;
    int need_level;
    int magic_rate;
    int minus_mp;
};

//장비 아이템 구조체
typedef struct 
{
    char name[50];
    int type; // 0: 장비 1: 소비 2: 재료
    int tier; // 등급
    int attack; //공격력
    int a_magic; //마법공격력
    int critical; //치명타율
    int avoid; //회피율
    int defense; //방어력       
    int price; //가격

    int upgrade; // 강화 수치(+0~+10)
    int element;    // 불물자연
    int enchant_bonus;  // 인첸트로 오르는 %
    int atack_all; // 모든 공격력 + 10%
    int def;    // 데미지감소%
    int sangtaeX;  // 상태이상 안걸림
    int magic_p; // 마법배율

} 
EquipmentItem; //자료형이름
typedef struct 

{   
    char name[50];

    int attack;
    int effectype;  // 0: hp 회복, 1: mp 회복, 2: 상태 이상 회복
    int effectvalue;
    int price;
} ConsumableItem; //자료형이름

// 재료 아이템 구조체
typedef struct 
{
    char name[50];
    int tier;
    int count;
} MaterialItem; //자료형이름

// 몬스터 특성 구조체
typedef struct {
    char name[50];
    int maxhp;
    int minhp;
    int maxatt;
    int minatt;
    int maxdf;
    int mindf;
    int weak;
    int strong;
} Monster; //


/* -----------------------초기값----------------------- */

// 선택값
int village_num;                                      /*마을에서 5개 중 어디로 갈지 결정*/
int click = 0;                                        /*장비 구매할지 아이템 구매할지 */
int tools, weapon, cloth, shoe, cloak, head, glove;   /*무기 고르기, 무기, 갑옷, 신발, 망토, 투구, 장갑*/
int medicine, health_med, magic_med, condition, move; /*약 고르기, 체력 물약, 마나 물약, 상태 회복 아이템, 이동 주문서*/
int heal, heal_3;                                     /*성소에서 힐, 상태회복, 스탯 초기화 중 고르는 것 , 스탯 초기화 할지 고르는 것 */
int out, find, choice, pick, count, bank_count;       /*모든 행동 후 나갈지 말지, 은행에서 물건을 찾을 것인지 보관할 것인지, 은행에서 몇 번 물건을 보관건지, 몇 번 물건을 찾을건지, 보관함이 얼마나 차있는지*/
int k_out, take_off;                                  /*k에 들어가서 장비 확인하고 나갈건지, 무기 해제*/
int tmp=0;                                            // 엔터 누르면 넘어감
int att_fir_choice;


// 소비템 관련
int red = 0, orange = 0, pure = 0;                   /*빨간 물약, 주황 물약, 맑은 물약*/
int blue, white, rainbow;                            /*파란 물약, 하얀 물약, 무지개 물약*/
int all_heal;                                        /*엘릭서*/      
int haedock, blessing, manbung;                      /* 해독제, 축복 주문서, 만병 통치약*/
int move_to_town, sungan_idong = 100;                      /*마을 이동 주문서, 순간 이동 주문서*/
int item_choice;                                     /* 아이템 고르는 변수*/



// 용사복이 상태창 (능력치)
int money = 100;
int LEVEL = 1;
int hp = 100, mp = 10;
int max_hp = 100, max_mp = 140;
int power = 20, magic_power = 10, aviod_rate, critical, defen;  // 공,마공,회피,치명타, 방어
int STR=10, DEX=10, INT=10;                                         // 보너스 스탯 포인트를 하면 올릴 수 있음/
int overdose = 0, curse = 0;                                       // 중독, 저주
int bonus_point = 0;                                       // 보너스 스텟 포인트*/
int max_exp = 100, exp_ = 10, nam_exp;                               // 경험치통 최대크기, 얻는 경험치
int inv_count = 0, inv_out, inv_see, wearing, change;      //인벤토리에 장비가 몇 개 있는지, 인벤토리에서 나갈건지, 인벤토리에서 장비 착용, 장비 변경
// // 추가할것
int atack_all = 1; // 모든 공격력 + 10%


int def = 0;    // 데미지감소%
int sangtaeX = 0;  // 상태이상 안걸림
int magic_p = 0; // 마법배율

// 몬스터 관련 초기값
int hard = 1;                  // 전역변수로 놔두고 보스를 잡을때마다 ++ 
int hard_mode = 1;             // 하드모드 몬스터 설정값
int named_mode = 1;            // 네임드 몬스터 설정값
int monster_count = 20;

// 마을 맵 관련 초기값
char input;                    // 마을에서 입력받는 변수
int z = 0;
int map[6][SIZE][SIZE] = {0};  // 전체맵
int v_me[2] = {25, 25};        // 마을에서 좌표


// 던전 맵 관련
int me[2] = {1, 1};            // 던전에서 좌표
int seed = 1;                  // 난수의 변하는값. 던전층이 올라가면 ++
int mosnter_seed = 1;          // 왜 사용안해도 랜덤이 되는거지?
int portal_i, portal_j, monster_i, monster_j; // 포탈과 몬스터 좌표 변수

// 전투 관련

int dungeon_switch = 1;
int att_choice; // 어떤 공격할건지

// 제련소 관련
int upgradeIndex;
int choice2;
int repair_a = 1;

// 스텟 관련
int use_point, point_up; //보너스 포인트 사용할건지 나갈건지, 어떤 스탯포인트를 올릴건지

//배틀 튀기
int battle_end;
int village1;
int dungeon_switch;
int main_switch = 1;
int battle_switch;
/* -----------------------아이템 목록----------------------- */

// 1. 장비
// (이름, 1.타입 2.등급 3.공격력 4.마법배율 5.치명타율 6.회피율 7.방어력 8.가격)
// 타입 = 용복이 착용 상태 (1~5)
  
EquipmentItem EquipmentItems[] = 
{
     // 무기
    {"맨손", 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 
    {"기본검", 1, 1, 2, 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0},      // 1
    {"장검", 1, 2, 10, 0, 0, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0},      // 2
    {"일본도", 1, 3, 20, 0, 0, 0, 0, 10000, 0, 0, 0, 0, 0, 0, 0},  // 3
    {"싸울아비 장검", 1, 4, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
    {"혼돈의 검", 1, 5, 50, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
    {"천사천하제일 무쌍도", 1, 5, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
    {"마왕을 멸하는 마검", 1, 5, 50, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5},   // 마법배율 추가
    {"운영자검", 1, 6, 1111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
    
    // 갑옷
    {"가죽갑옷", 2, 1, 0, 0, 0, 0, 2, 50, 0, 0, 0, 0, 0, 0, 0},
    {"철갑옷", 2, 2, 0, 0, 0, 0, 6, 600, 0, 0, 0, 0, 0, 0, 0},
    {"강철갑옷", 2, 3, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0},
    {"미스릴갑옷", 2, 4, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0},
    {"진격하는자의갑옷", 2, 5, 0, 20, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0},
    {"정화의갑주", 2, 5, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 1, 0}, // 상태 이상 안걸림 해결 
    
    // 신발
    {"가죽신발", 3, 1, 0, 0, 0, 0, 1, 50, 0, 0, 0, 0, 0, 0, 0},
    {"철신발", 3, 2, 0, 0, 0, 0, 3, 600, 0, 0, 0, 0, 0, 0, 0},
    {"미스릴신발", 3, 4, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0},
    {"포세이돈의신발", 3, 5, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 1, 0}, // 상태 이상 안걸림 해결 
    {"헤르메스의 신발", 3, 5, 0, 0, 0, 20, 8, 0, 0, 0, 0, 0, 0, 0, 0},
    {"하데스의 신발", 3, 5, 10, 0, 0, 8, 0, 0, 0, 0, 1, 0, 0, 0},   // 모든공격력
    
    // 망토
    {"천망토", 4, 1, 0, 0, 0, 0, 1, 50, 0, 0, 0, 0, 0, 0, 0},
    {"면망토", 4, 2, 0, 0, 0, 0, 3, 600, 0, 0, 0, 0, 0, 0, 0},
    {"비단망토", 4, 3, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0},
    {"마법망토", 4, 4, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0},
    {"순백의망토", 4, 5, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0},
    {"용기의망토", 4, 5, 10, 0, 0, 0, 8, 0, 0, 0, 0, 10, 0, 0, 0},
    {"진홍의망토", 4, 5, 0, 0, 20, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0},
    
    // 투구
    {"가죽투구", 5, 1, 0, 0, 0, 0, 1, 50, 0, 0, 0, 0, 0, 0, 0},
    {"철투구", 5, 2, 0, 0, 0, 0, 3, 600, 0, 0, 0, 0, 0, 0, 0},
    {"강철투구", 5, 3, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0},
    {"미스릴투구", 5, 4, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0},
    {"용사의투구", 5, 5, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0}, // 받는 데미지 감소 +10% 누락
    {"용기사투구", 5, 5, 10, 0, 0, 0, 8, 0, 0, 0, 0, 10, 0, 0, 0},
    {"기묘한두건", 5, 5, 0, 0, 0, 30, 1, 0, 0, 0, 0, 0, 0, 0, 0},
    
    /*인벤토리에서 비어있는 칸을 뜻하는 변수*/
    {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0},
    
    // 장갑
    {"가죽 장갑", 6, 1, 0, 0, 0, 0, 1, 50, 0, 0, 0, 0, 0, 0, 0},
    {"철 장갑", 6, 2, 0, 0, 0, 0, 3, 600, 0, 0, 0, 0, 0, 0, 0},
    {"강철 장갑", 6, 3, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0},
    {"미스릴 장갑", 6, 4, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0},
    {"죄악의 마수 ", 6, 5, 10, 0, 0, 0, 8, 0, 0, 0, 0, 10, 0, 0, 0}, //모든공격력 + 10%
    {"요정의 팔찌", 6, 5, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 10, 0, 0}, // 받는 데미지 +10% 감소
    {"혼돈의 수갑", 6, 5, 0, 0, 20, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0}    //42번
    
    // 현재 보완할 점 : 소비 아이템 "체력 회복", "마나 회복", "HP,MP 회복", "중독상태","저주상태" 회복
    // 강화재료 장비 강화시 아이템별 강화 장비 등급당 사용할 수 있는 재료 분류와 인챈트 사용 부분
    
};

// 2. 소비
// (1.티어, 2.종류(hp회복, mp회복, 상태이상회복, 주문서) 3.회복율 4.가격)
ConsumableItem consumableItems[] = 
{
    {"빨간물약", 1, 0, 30, 30},
    {"주황물약", 2, 0, 60, 200},
    {"맑은물약", 3, 0, 80, 1000},
    {"파란물약", 1, 1, 30, 50},
    {"하얀물약", 2, 1, 60, 300},
    {"무지개물약", 3, 1, 80, 1500},
    {"엘릭서", 4, 2, 100, 0},
    {"해독제", 2, 2, 0, 500},
    {"축복 주문서", 3, 2, 0, 2000},
    {"만병통치약", 4, 2, 0, 0},
    {"마을이동주문서", 1, 0, 0, 200},
    {"순간이동주문서", 2, 0, 0, 1000}
};

// 3. 재료  
// 특성 추가 필요
MaterialItem materialItems[] =
{
    {"작은 화염 조각", 1, 0},
    {"푸른 화염 조각", 2, 0},
    {"강렬한 화염 조각", 3, 0},
    {"미친 화염 조각", 4, 0},
    {"마력 응축석", 3, 0}
};


/* -----------------------스킬----------------------- */
// 스킬속성
char type_name[3][20] = {"Fire", "Aqua", "Nature"}; // 0.1.2

// 스킬
struct made_skill skills[12] = 
{{"Fireball", 0,1,2,2}, {"Firespear", 0,25,6,50}, {"Blast", 0,50,10,150}, {"Meteor", 0,65,15,200}, //불
{"WaterSpear", 1,5,5,30}, {"WaterBomb", 1,20,5,30}, {"Iceball", 1,20,5,50}, {"Blizard", 1,60,15,200}, //물
{"ThunderBolts", 2,10,3,15}, {"Stoneshower", 2,15,3,15}, {"WindCutter", 2,40,3,15}, {"Tornado",2,70,3,15}, //자연
}; 


/* -----------------------몬스터----------------------- */

Monster monster[8] = {
    {"오크전사", 120, 80, 20, 10, 0, 0, 0, 1},
    {"좀비", 120, 80, 40, 25, 0, 0, 1, 2},
    {"구울", 200, 120, 80, 50, 10, 5, 1, 2},
    {"해골", 400, 250, 110, 70, 30, 15, 2, 3},
    {"리치", 350, 300, 300, 230, 15, 10, 2, 3},
    {"바실리스크", 900, 600, 130, 100, 50, 30, 0, 3},
    {"마왕(보스)", (500), (500), 350, 250, 0, 0, 2, 3},
    {"이동녀크(찐보스)", (1000), (1000), 600, 500, 0, 0, 3, 3},
};

Monster meet[1] = {0}; // 내가 만난 몬스터 배열


/* -----------------------가방----------------------- */
// 아이템창 i
ConsumableItem Item_pocket[1300] = {{"비어있음", 0, 0, 0, 0},{"비어있음", 0, 0, 0, 0},{"비어있음", 0, 0, 0, 0},{"비어있음", 0, 0, 0, 0},{"비어있음", 0, 0, 0, 0},{"비어있음", 0, 0, 0, 0},{"비어있음", 0, 0, 0, 0},{"비어있음", 0, 0, 0, 0},{"비어있음", 0, 0, 0, 0},{"비어있음", 0, 0, 0, 0},{"비어있음", 0, 0, 0, 0},{"비어있음", 0, 0, 0, 0}}; // 12x99개

//인벤토리 창 j
EquipmentItem Inventory[20] ={{"비어있음", 0, 0, 0, 0, 0, 0, 0, 0},{"비어있음", 0, 0, 0, 0, 0, 0, 0, 0},{"비어있음", 0, 0, 0, 0, 0, 0, 0, 0},{"비어있음", 0, 0, 0, 0, 0, 0, 0, 0},{"비어있음", 0, 0, 0, 0, 0, 0, 0, 0},{"비어있음", 0, 0, 0, 0, 0, 0, 0, 0},{"비어있음", 0, 0, 0, 0, 0, 0, 0, 0},{"비어있음", 0, 0, 0, 0, 0, 0, 0, 0},{"비어있음", 0, 0, 0, 0, 0, 0, 0, 0},{"비어있음", 0, 0, 0, 0, 0, 0, 0, 0},{"비어있음", 0, 0, 0, 0, 0, 0, 0, 0},{"비어있음", 0, 0, 0, 0, 0, 0, 0, 0},{"비어있음", 0, 0, 0, 0, 0, 0, 0, 0},{"비어있음", 0, 0, 0, 0, 0, 0, 0, 0},{"비어있음", 0, 0, 0, 0, 0, 0, 0, 0},{"비어있음", 0, 0, 0, 0, 0, 0, 0, 0},{"비어있음", 0, 0, 0, 0, 0, 0, 0, 0},{"비어있음", 0, 0, 0, 0, 0, 0, 0, 0},{"비어있음", 0, 0, 0, 0, 0, 0, 0, 0},{"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}};
EquipmentItem temp[1] = {{0}};

// 장비창 k
// 1 : 무기, 2: 갑옷, 3 : 신발, 4: 망토, 5: 투구 6 : 장갑
EquipmentItem now_wear[] = {{"비어있음", 1, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 2, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 3, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 4, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 5, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 6, 0, 0, 0, 0, 0, 0, 0}};

// 재료창 m
MaterialItem Material_Pocket[] = {
    {"작은 화염 조각", 1, 550},
    {"푸른 화염 조각", 2, 50},
    {"강렬한 화염 조각", 3, 50},
    {"미친 화염 조각", 4, 50},
    {"마력 응축석", 3, 0}
};

// 은행창
EquipmentItem Bank[100] = {{"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}, {"비어있음", 0, 0, 0, 0, 0, 0, 0, 0}};



/* -----------------------함수이름----------------------- */

void village();

// 마켓
void market();
void hospital();
void repair_shop();
void exchant();
void bank();

void show_inven();
void show_bank();
void show_now();

void meet_monster();
void make_monster();
void c(); // 중독,저주

void dungeon_();    // 던전 전체 변수
void dungeon_map(); // 던전만드는 변수
void dungeon_map_print();    // 던전맵 출력하는 함수
void dungeon_move_();    // 이동하는 함수
void event();   // 던전에서 무언가 만났을때 함수

void village_map_print();
void move_();
void village_move();

void key_key_();

void battle_();
int a_damage();
int my_defense();
void print_hp();
void print_mp();
void print_exp();
void show_item();
void stat_point();
void upgradeEquipment();
void upgradeEquipment2();
void repair_shopMenu();
void print_monster_hp();
int getRandomPercentage();
/* -----------------------메인----------------------- */


int main()
{   
    printf("        GGGGGGGGGGGGG     OOOOOOOOO               BBBBBBBBBBBBBBBBB        OOOOOOOOO     KKKKKKKKK    KKKKKKK      !!!\n"); 
    printf("      GGG::::::::::::G   OO:::::::::OO             B::::::::::::::::B     OO:::::::::OO   K:::::::K    K:::::K     !!:!!\n");
    printf("      GG:::::::::::::::G OO:::::::::::::OO           B::::::BBBBBB:::::B  OO:::::::::::::OO K:::::::K    K:::::K     !:::!\n");
    printf("     G:::::GGGGGGGG::::GO:::::::OOO:::::::O          BB:::::B     B:::::BO:::::::OOO:::::::OK:::::::K   K::::::K     !:::!\n");
    printf("    G:::::G       GGGGGGO::::::O   O::::::O            B::::B     B:::::BO::::::O   O::::::OKK::::::K  K:::::KKK     !:::!\n");
    printf("   G:::::G              O:::::O     O:::::O            B::::B     B:::::BO:::::O     O:::::O  K:::::K K:::::K        !:::!\n");
    printf("   G:::::G              O:::::O     O:::::O            B::::BBBBBB:::::B O:::::O     O:::::O  K::::::K:::::K         !:::!\n");
    printf("   G:::::G    GGGGGGGGGGO:::::O     O:::::O            B:::::::::::::BB  O:::::O     O:::::O  K:::::::::::K          !:::!\n");
    printf("   G:::::G    G::::::::GO:::::O     O:::::O            B::::BBBBBB:::::B O:::::O     O:::::O  K:::::::::::K          !:::!\n");
    printf("   G:::::G    GGGGG::::GO:::::O     O:::::O            B::::B     B:::::BO:::::O     O:::::O  K::::::K:::::K         !:::!\n");
    printf("   G:::::G        G::::GO:::::O     O:::::O            B::::B     B:::::BO:::::O     O:::::O  K:::::K K:::::K        !!:!!\n");
    printf("    G:::::G       G::::GO::::::O   O::::::O            B::::B     B:::::BO::::::O   O::::::OKK::::::K  K:::::KKK      !!! \n");
    printf("     G:::::GGGGGGGG::::GO:::::::OOO:::::::O          BB:::::BBBBBB::::::BO:::::::OOO:::::::OK:::::::K   K::::::K\n");
    printf("      GG:::::::::::::::G OO:::::::::::::OO           B:::::::::::::::::B  OO:::::::::::::OO K:::::::K    K:::::K      !!!\n"); 
    printf("        GGG::::::GGG:::G   OO:::::::::OO             B::::::::::::::::B     OO:::::::::OO   K:::::::K    K:::::K     !!:!!\n");
    printf("           GGGGGG   GGGG     OOOOOOOOO               BBBBBBBBBBBBBBBBB        OOOOOOOOO     KKKKKKKKK    KKKKKKK      !!!\n");

    
    char ch;
    printf("\n게임을 시작하시려면 엔터를 눌러주세요!\n");
    scanf("%c", ch);
    while (ch = getchar() != '\n');

    while (main_switch)
    {
        village();
        dungeon_();
        printf("야호호호");
    }
}


/* -----------------------함수----------------------- */

void key_key_() // I J K M B 눌렀을 때
{
    if ((input == 'I') || (input == 'i')) // 아이템사용
    {
        system("clear");
        printf("아이템사용!!\n");
        show_item();
        while (getchar() == '\n')
        {
            continue;
        }
    }

    else if ((input == 'J') || (input == 'j'))
    {
        system("clear");
        printf("인벤토리!!\n");
        show_inven();
        while (getchar() == '\n')
        {
            continue;
        }
    }

    else if ((input == 'K') || (input == 'k'))
    {
        system("clear");
        printf("착용 중인 장비 확인!!\n");
        show_now();
        while (getchar() == '\n')
        {
            continue;
        }
    }

    else if ((input == 'M') || (input == 'm'))
    {
        system("clear");
        printf("재료창!!\n");
        while (getchar() == '\n')
        {
            continue;
        }
    }

    else if ((input == 'B') || (input == 'b'))
    {
        system("clear");
        printf("스텟창!!\n");
        stat_point();
        while (getchar() == '\n')
        {
            continue;
        }
    }
}

void level_up()
{
    nam_exp = exp_ - max_exp;
    exp_  = 0 + nam_exp;
    LEVEL = LEVEL + 1;
    max_exp = max_exp + 10;
    hp = hp + 20;
    mp = mp + 10;
    max_hp += 20;
    max_mp += 10;
    bonus_point += 1;
}

void stat_point()
{
    {
        //b를 누르면 상태창으로 입장 
        printf("[   상태창   ]\n");
        printf("공격력 : %d\n",power);
        printf("마법 공격력 : %d\n",magic_power);
        printf("방어력 : %d\n",defen);
        printf("회피율 : %d\n",aviod_rate);
        printf("치명타율 : %d\n",critical);
        printf("\n");
        printf("STR : %d\n", STR); //스탯포인트 몇인지 끌어옴
        printf("INT : %d\n", INT);
        printf("DEX : %d\n", DEX);
        printf("\n");
        printf("보너스 포인트 : %d개",bonus_point);
        printf("\n");
        printf("(1) 보너스 포인트 사용하기 (2) 나가기\n");// 보너스 포인트가 없을 때 경우 생각하기
        scanf("%d",&use_point);
    
        if (use_point == 1)
        {
            printf("어떤 것을 올릴까요?\n1.STR\n2.INT\n3.DEX\n");
            scanf("%d",&point_up);
    
            if (point_up == 1)//STR 포인트 올렸을 때
            {
                printf("STR 포인트가 올랐습니다.\n");
                STR += 1;
                bonus_point -= 1;
                hp += 5;    //hp +5
                power += 2; //공격력 +2
            }
    
            else if (point_up == 2)// INT 포인트 올렸을 때
            {
                printf("INT 포인트가 올랐습니다.\n");
                INT += 1;
                bonus_point -= 1;
                mp += 2;    //mp+2
                magic_power += 1;   //마법 공격력 +1
            }
    
            else if (point_up == 3)//DEX 포인트 올렸을 떄 ( %확인 )
            {
                printf("DEX 포인트가 올랐습니다.\n");
                DEX += 1;
                bonus_point -= 1;
                aviod_rate += 0.2;  //회피율 +0.2%
                critical += 0.5;    //치명타율 +0.5%
            }
        }
    
    }
}

void show_bank_all() /*은행 보관함에 뭐가 있는지 보여줌*/
{
    for (int i = 0; i < 20; i++)
    {
        printf("[ %d]:%s ", i ,Bank[i].name);
    }
    printf("\n");
    for (int i = 20; i < 101; i++)
    {
        printf("[%d]:%s ", i ,Bank[i].name);

    }
}

void show_bank() // 은행보관함 보려고 만들어둠
{
    printf("[ 현재 보관함 현황 ]\n\n");

    // if 뱅크에 1개라도 있을 때

    if (bank_count > 0)
    {
        for (int i = 0; i < 100; i++) /*보관함 중에서*/
        {   
            if (Bank[i].tier > 0)/*현재 있는 것만 출력*/
            {
                printf("[%d]: %s\n ", i ,Bank[i].name);
                bank_count += 1;/*현재 보관함에 몇 개 있는지 카운트*/
            }  
        }
    }

    // else 뱅크에 아무것도 없을 때
    // 아무것도 없습니다 < 출력
    else
    {
        
        printf("현재 보관함에 아무것도 없습니다.\n");
        // printf("마을로 돌아갑니다(enter)\n");
        // do
        // {   char tmp;
        //     scanf("%c", &tmp);
        // } while (getchar() != '\n'); // 엔터 누르면 넘어감
    }

    printf("\n");
}

void show_now() // k.장비착용창
{
    //     k를 누른 뒤 현재 장비 착용 현황을 보여줌
    while (99)
    {
        // k 누르면 착용중인 장비 보여주고
        for (int i = 0; i < 6; i++)
        {
            printf("현재 착용중인 장비는 %s\n", now_wear[i].name);
        }

        printf("\n(1)나가기\n");
        scanf("%d", &inv_out);
        if (inv_out == 1)  //나가기
        {
            break;
        }
        else
            break;
    }
}

void show_inven() // j.인벤토리창
{
    while (1)
    {
        printf("\n[보유 장비템 목록]\n\n"); /*인벤토리에 보유중인 장비템 출력*/
        for (int i = 0; i < 10; i++)
        {
            printf("  [% d]:%s\n", i, Inventory[i].name);
        }
        for (int i = 10; i < 20; i++)
        {
            printf("  [%d]:%s\n", i, Inventory[i].name);
        }
        printf("\n");

        printf("(1)장비 자세히 보기  (2)나가기 ...나가기(j)\n");
        scanf("%d", &inv_out);

        if (inv_out == 1)   /*장비 자세히 보기*/
        {
            printf("\n몇 번 장비를 보시겠습니까?\n");
            scanf("%d", &inv_see);
            for (int i = 0; i < 21; i++) // 현재 인벤토리 뭐있는지 보여줌
            {
                if ((Inventory[i].tier > 0) && (inv_see == i)) /*인벤토리 i번의 장비의 티어가 0이상이고, 몇번인지 선택한 숫자와 i가 같을 때*/
                {
                    printf("1. 장비 : %s\n2. 등급 : %d\n3. 공격력 : %d\n4. 마법배율: %d\n5. 치명타율 : %d\n6. 회피율 : %d\n7. 방어력 : %d\n", Inventory[i].name, Inventory[i].tier, Inventory[i].attack, Inventory[i].a_magic, Inventory[i].critical, Inventory[i].avoid, Inventory[i].defense);
                    printf("\n(1) 장비착용   (2) 나가기\n");
                    scanf("%d", &wearing); // 1,2번 중 선택

                    if (wearing == 1) /*착용을 선택했을 때*/
                    {
                        for (int j = 0; j <= 6; j++)//now wear가 6개 있으므로 6번 반복
                        {
                            if (strcmp(now_wear[j].name, "비어있음") == 0) /*now_wear 가 비어있을 때 */
                            {   
                                for ( int k = 0; k <=42; k++)/*장비의 개수만큼 k로 훑는다*/
                                {
                                    if (Inventory[i].type == EquipmentItems[k].type) // 내가 고른 장비템의 타입이 EquipmentItems와 타입이 같을 때
                                    {   // 무갑신망투장 123456 
                                        temp[0] = now_wear[j]; /*temp를 사용해서 장비 - 현재 입은 것 바꾸기*/
                                        now_wear[j] = Inventory[i];
                                        Inventory[i] = temp[0];
                                        
                                        power = power + now_wear[k].attack;              // 장비에 따른 공격력 업그레이드
                                        magic_power = magic_power + now_wear[k].a_magic; // 마법 공격력 업그레이드
                                        aviod_rate = aviod_rate + now_wear[k].avoid;     // 회피율 얻그레이드
                                        critical = critical + now_wear[k].critical;      // 치명타율 업그레이드
                                        defen = defen + now_wear[k].defense;             // 방어력 업그레이드
                                       
                                        break;
                                    
                                    }
                                }

                                printf("현재 착용중인 장비: [%s]\n", now_wear[j].name);

                                break;
                            }

                            //현재 착용중인 장비의 타입과 입력한 값이 같고 now_wear가 비어있지 않을 때
                            else if ((now_wear[j].type == Inventory[i].type) && (strcmp(now_wear[j].name, "비어있음") != 0))    
                            {
                                printf("이미  %s 착용중인 상태입니다.\n", now_wear[j].name);
                                printf("[%s]로 변경하시려면 0번 나가려면 1번을 눌러주세요.\n", Inventory[i].name);
                                scanf("%d", &change);
    
                                if (change == 0)    //변경한다
                                {
                                    temp[0] = now_wear[j]; /*temp를 사용해서 장비 - 현재 입은 것 바꾸기*/
                                    now_wear[j] = Inventory[i];
                                    Inventory[i] = temp[0];
                                    printf("현재 착용중인 장비는 %s\n", now_wear[j].name); // 현재 내가 착용하고있는거
                                    break;
                                }
                            }
                        }
                    }

                    //나가기
                    else if (wearing == 2)
                    {
                        break;
                    }
                }
            }
        }
    
        else if (inv_out == 2)
        {
            break;
        }
        
        else
        break;

        
    }
}

void show_item() // i.아이템창
{
    while (99)
    {
        printf("[현재 아이템 보유 현황]\n");
        printf(" [%d]:%s       %d개 \n ", 0, consumableItems[0].name, red);           // 빨간 물약
        printf("[%d]:%s       %d개 \n ", 1, consumableItems[1].name, orange);        // 주황 물약
        printf("[%d]:%s       %d개 \n ", 2, consumableItems[2].name, pure);          // 맑은 물약
        printf("[%d]:%s       %d개 \n ", 3, consumableItems[3].name, blue);          // 파란 물약
        printf("[%d]:%s       %d개 \n ", 4, consumableItems[4].name, white);         // 하얀 물약
        printf("[%d]:%s     %d개 \n ", 5, consumableItems[5].name, rainbow);       // 무지개 물약
        printf("[%d]:%s         %d개 \n ", 6, consumableItems[7].name, haedock);       // 해독제
        printf("[%d]:%s    %d개 \n ", 7, consumableItems[8].name, blessing);      // 축복 주문서
        printf("[%d]:%s %d개 \n ", 8, consumableItems[10].name, move_to_town); // 마을 이동 주문서
        printf("[%d]:%s %d개 \n ", 9, consumableItems[11].name, sungan_idong); // 순간 이동 주문서       
        printf("\n");
        printf("비매품 [%d]:%s     %d개 \n", 10, consumableItems[6].name, all_heal); //엘릭서, 비매품
        printf("비매품 [%d]:%s %d개 \n", 11, consumableItems[9].name, manbung);  //만병 통치약, 비매품
        printf("\n");

        printf("(1)아이템 사용하기  ...나가기(i)\n");
        scanf("%d", &k_out);

        if (k_out == 1)  // 아이템 사용하기
        {
            printf("사용하실 아이템을 번호로 선택해주세요 !\n");
            scanf("%d",&item_choice);
    
            if (item_choice == 0)
            {
                if (red <= 0)
                {
                printf("수량이 없습니다. 사용하실 수 없습니다.\n");
                }        
                else
                {
                printf("빨간 물약을 사용하셨습니다.\n체력이 30%%회복됩니다.\n");
                hp += (100 + ((LEVEL - 1) * 20) + ((STR - 10) * 5)*0.3);
                red -= 1;
                }
                
            }
    
            if (item_choice == 1)
            {
                if (orange <= 0)
                {
                printf("수량이 없습니다. 사용하실 수 없습니다.\n");
                }        
                else
                {
                printf("주황 물약을 사용하셨습니다.\n체력이 60%%회복됩니다.\n");
                hp += (100 + ((LEVEL - 1) * 20) + ((STR - 10) * 5)*0.6);
                orange -= 1;
                }
            }
    
            if (item_choice == 2)
            {
                if (pure <= 0)
                {
                printf("수량이 없습니다. 사용하실 수 없습니다.\n");
                }        
                else
                {
                printf("맑은 물약을 사용하셨습니다.\n체력이 80%%회복됩니다.\n");
                hp += (100 + ((LEVEL - 1) * 20) + ((STR - 10) * 5)*0.8);
                pure -= 1;
                }
            }
    
            if (item_choice == 3)
            {
                if (blue <= 0)
                {
                printf("수량이 없습니다. 사용하실 수 없습니다.\n");
                }        
                else
                {
                printf("파란 물약을 사용하셨습니다.\n마나가 30%%회복됩니다.\n");
                mp += (10 + ((LEVEL - 1) * 10) + ((INT - 10) * 1)*0.3);
                blue -= 1;
                }
            }
    
            if (item_choice == 4)
            {
                if (white <= 0)
                {
                printf("수량이 없습니다. 사용하실 수 없습니다.\n");
                }    
                else
                {
                printf("하얀 물약을 사용하셨습니다.\n마나가 60%%회복됩니다.\n");
                mp += (10 + ((LEVEL - 1) * 10) + ((INT - 10) * 1)*0.6);
                white -= 1;
                }
            }
    
            if (item_choice == 5)
            {
                if (rainbow <= 0)
                {
                printf("수량이 없습니다. 사용하실 수 없습니다.\n");
                }    
                else
                {
                printf("무지개 물약을 사용하셨습니다.\n마나가 80%%회복됩니다.\n");
                mp += (10 + ((LEVEL - 1) * 10) + ((INT - 10) * 1)*0.8);
                rainbow -= 1;
                }
            }
    
            if (item_choice == 6)
            {
                if (haedock <= 0)
                {
                printf("수량이 없습니다. 사용하실 수 없습니다.\n");
                }    
                else
                {
                printf("해독제을 사용하셨습니다.\n중독 상태가 회복됩니다.\n");
                overdose = 0;
                haedock -= 1;
                }
            }
    
            if (item_choice == 7)
            {
                if (blessing <= 0)
                {
                printf("수량이 없습니다. 사용하실 수 없습니다.\n");
                }    
                else
                {
                printf("축복 주문서를 사용하셨습니다.\n저주 상태가 회복됩니다.\n");
                curse = 0;
                blessing -= 1;
                }
            }
    
            if (item_choice == 8)
            {
                if (move_to_town <= 0)
                {
                printf("수량이 없습니다. 사용하실 수 없습니다.\n");
                }    
                else
                {
                printf("마을 이동 주문서를 사용하셨습니다.\n마을로 이동합니다.\n");
                //마을로 이동해야함 

                battle_switch = 0;
                z = 0; // 마을로 바꿈
                v_me[0] = 25; // 마을 시작좌표 초기화
                v_me[1] = 25;
                me[0] = 1; // 내 던전 위치 초기화
                me[1] = 1;
                seed ++;    // 랜덤값 ++
                hp = max_hp;
                mp = max_mp;
                monster_count = 20; // 몬스터 마릿수 초기화
                dungeon_switch = 0;
                sleep(10);
                
                move_to_town -= 1;
                break;
                }
            }
    
            if (item_choice == 9)
            {
                if (sungan_idong <= 0)
                {
                printf("수량이 없습니다. 사용하실 수 없습니다.\n");
                }    
                else
                {
                printf("1. 순간 이동 주문서를 사용.\n2. 위치 기억.\n");
                //정해진 위치로 이동해야함
            
                int teleport[5][3] = {{0}};  // 전역변수에 추가 teleport[5][3] = {{0}}
                int teleport1;
                scanf("%d", &teleport1);
            
                switch (teleport1)
                {
                case 1:
                    for (int i = 0; i < 5; i++)
                    {
                        printf("%d. %d층 [%d][%d]\n", i, teleport[i][0], teleport[i][1], teleport[i][2]);
                    }
                    printf("이동하실 좌표 번호를 알려주세요 : ");
                    int teleport_dungeon;
            
                    scanf("%d", &teleport_dungeon);
                    z = teleport[teleport_dungeon - 1][0];
                    me[0] = teleport[teleport_dungeon - 1][1];
                    me[1] = teleport[teleport_dungeon - 1][2];
            
                    seed ++;    // 랜덤값 ++
                    monster_count = 20; // 몬스터 마릿수 초기화
                    dungeon_map();
            
                    break;
                case 2:
                    int teleport_count = 0;
            
                    // map[z][me[0]][me[1]]
                    for(int i = 0; i < 5; i++)
                    {
                        teleport[i][0] != 0;
                        teleport_count ++;
                    }
                    if (teleport_count > 5)
                    {
                        printf("저장하실 자리가 없어요!");
                    }
                    else
                    {
                        for(int i = 0; i < 5; i++)
                        {
                            if (teleport[i][0] == 0)
                            {
                                teleport[i][0] = z;
                                teleport[i][1] = me[0];
                                teleport[i][2] = me[1];
                            }
                        }
                    }
                    printf("위치 저장");
                    
                    break;
                default:
                    break;
                }
                
                sungan_idong -= 1;
                }
            }
            if (item_choice == 10)
            {
                if (all_heal <= 0)
                {
                printf("수량이 없습니다. 사용하실 수 없습니다.\n");
                }    
                else
                {
                printf("엘릭서을 사용하셨습니다.\n체력과 마나가 모두 회복됩니다.\n");
                hp = 100 + ((LEVEL - 1) * 20) + ((STR - 10) * 5);
                mp = 10 + ((LEVEL - 1) * 10) + ((INT - 10) * 1);
                all_heal -= 1;
                }
            }
    
            if (item_choice == 11)
            {
                if (manbung <= 0)
                {
                printf("수량이 없습니다. 사용하실 수 없습니다.\n");
                }    
                else
                {
                printf("만병 통치약을 사용하셨습니다.\n 저주 상태와 중독 상태가 회복됩니다.\n");
                overdose = 0;
                curse = 0;
                manbung -= 1;
                }
            }

            else
            {
                printf("잘못 입력하셨습니다.\n");
                continue;
            }
        }
        
        else
            break;

        printf("아이템 창에 더 있으려면 :0\n마을로 돌아가고 싶으면 : 1\n"); /*계속 성소에 남아 있을지, 마을로 돌아갈지 물어봄*/
        scanf("%d", &out);
        if (out == 0)
        {
            continue;
        }

        else if (out == 1)
            break;
    }
    
}


/* --------------------마을 관련 함수-------------------- */

void village()
{
    village1 = 1;
    // 대업님 마을맵 코드
    while (village1)
    {   
        village_map_print();
        printf("\n");

        // 🥚미래에 상태창이될 알들🥚
        printf("🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚\n");
        printf("🥚                                                          🥚  [B] 스텟 확인         🥚                              🥚\n");
        printf("🥚  ");print_hp();
        printf("                              🥚  [I] 아이템 확인       🥚                              🥚\n");
        printf("🥚  ");print_mp();
        printf("                              🥚  [J] 인벤토리 확인     🥚                              🥚\n");
        printf("🥚  ");print_exp();
        printf("                              🥚  [K] 착용장비 확인     🥚                              🥚\n");
        printf("🥚                                                          🥚  [M] 재료창 확인       🥚                              🥚\n");
        printf("🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚\n");
        

        input = getch();

        move_(); // 이동 
        village_move(); // 어딘가에 도착했을 때

    }
}


void market_() // 종류 안나누고 전체출력
{
    printf("⬛⬜⬜⬜⬜⬛⬜⬜⬜⬜⬜⬛⬛⬜⬜⬜⬛⬛⬜⬜⬜⬜⬛⬛⬜⬜⬜⬜⬜\n");
    printf("⬜⬛⬛⬛⬛⬛⬛⬛⬜⬛⬛⬛⬜⬛⬛⬛⬜⬛⬜⬛⬛⬛⬜⬛⬜⬛⬛⬛⬛\n");
    printf("⬛⬜⬜⬜⬜⬛⬛⬛⬜⬛⬛⬛⬜⬛⬛⬛⬜⬛⬜⬜⬜⬜⬛⬛⬜⬜⬜⬜⬜\n");
    printf("⬛⬛⬛⬛⬜⬛⬛⬛⬜⬛⬛⬛⬜⬛⬛⬛⬜⬛⬜⬛⬜⬛⬛⬛⬜⬛⬛⬛⬛\n");
    printf("⬜⬜⬜⬜⬛⬛⬛⬛⬜⬛⬛⬛⬛⬜⬜⬜⬛⬛⬜⬛⬛⬜⬜⬛⬜⬜⬜⬜⬜\n");
    while (99) /*상점으로 이동*/
    {       
        printf("잡화상입니다.\n");
        printf("1번: 장비템 / 2번: 소비템 / 3번: 나가기 \n");
        scanf("%d", &click);

        if (click == 1) // 장비를 선택 했을 때
        {
            printf("\n");
            for (int i = 0; i <= 42; i++) /* 구매가능 장비 리스트 */
            {
                if ((EquipmentItems[i].price) > 0) // 가격이 0원 이상인것만 출력
                printf("%d번: %s(%d)\n",
                    i, EquipmentItems[i].name, EquipmentItems[i].price);  
            }

            printf("\n몇 번을 구매하시겠습니까? ");
            scanf("%d", &tools); // 번호 입력받기

            for (int i = 0; i < 42; i++) // 뭐 구매했는지 알려줌
            {
                if (tools == i)
                {
                    if (money <= EquipmentItems[i].price)
                    {
                        printf("돈이 부족해요 !!!!!구매하실 수 없습니다.\n");
                    }
                    else
                    {
                    printf("%s를 구매하셨습니다. %d원입니다.\n",EquipmentItems[i].name,EquipmentItems[i].price);
                    money = (money - EquipmentItems[i].price);
                    printf("남은 돈은 %d입니다.\n",money); 
                    }
                    
                    for (int j = 0; j < 20; j++)
                    {
                        if (Inventory[j].tier == 0) // 내인벤토리 i인덱스의 티어값이 0이면 아이템이 없다!
                        {
                            Inventory[j] = EquipmentItems[i];   // 내가 i 번 아이템을 샀을때 인벤토리에 넣는다
                            break;
                        }  
                    }
                }
            }
            
            
        }

        else if (click == 2) // 소비를 선택 했을 때
        {
            //sobi();
            printf("어떤 아이템을 구매하시겠습니까?:\n");
            printf("1번: HP물약 / 2번: MP물약 / 3번: 상태 회복서 / 4번: 이동서 / 5번: 나가기\n");
            scanf("%d", &medicine);

            if (medicine == 1) /*체력 물약을 산다고 선택 */
            {
                for (int i = 0; i <= 2; i++) /*체력 물약의 메뉴판 */
                {
                    if ((consumableItems[i].price) > 0)
                        printf("%s(%d) : %d\n", consumableItems[i].name, consumableItems[i].price, i);
                }
                scanf("%d", &health_med);

                for (int i = 0; i <= 2; i++) /*체력 물약 구매 후 출력*/
                {
                    if (health_med == i)
                    {
                        printf("%s를 구매하셨습니다. %d원입니다.\n", consumableItems[i].name, consumableItems[i].price);
                        money = (money - consumableItems[i].price);
                        printf("남은 돈은 %d입니다.\n", money);

                        for (int j = 0; j <= 2; j++) // 템창에 저장
                        {
                            if (strcmp(Item_pocket[j].name, "비어있음") == 0) // 아이템 포켓의 네임이 비어있음 이면 넣는다!
                            {
                                Item_pocket[j] = consumableItems[i]; // 내가 i 번 아이템을 샀을때 아이템 포켓에 넣는다
                                if (i == 0)
                                {
                                    red = red + 1;
                                    printf("%s:%d개",Item_pocket[j].name, red);
                                }
                                if (i == 1)
                                {
                                    orange = orange + 1;
                                }
                                if (i == 2)
                                {
                                    pure += 1;
                                }
                                break;
                            }
                           
                        }

                    }
                }
                
                printf("\n계속 구매 하려면 :0\n마을로 돌아가고 싶으면 : 1\n");
                scanf("%d", &out);
                if (out == 0)
                {
                    continue;
                }

                else if (out == 1)
                    break;
            }

            if (medicine == 2) /*마법 물약을 산다고 선택 */
            {
                for (int i = 1; i <= 3; i++) /*마법 물약의 메뉴판 */
                {
                    if ((consumableItems[i + 2].price) > 0)
                        printf("%s(%d) : %d\n", consumableItems[i + 2].name, consumableItems[i + 2].price, i);
                }
                scanf("%d+2", &magic_med);

                for (int i = 1; i <= 3; i++) /*마법 물약 구매 후 출력*/
                {
                    if (magic_med == i)
                    {
                        printf("%s를 구매하셨습니다. %d원입니다.\n", consumableItems[i + 2].name, consumableItems[i + 2].price);
                        money = (money - consumableItems[i + 2].price);
                        printf("남은 돈은 %d입니다.\n", money);
                        for (int j = 3; j <= 5; j++)
                        {
                            if (strcmp(Item_pocket[j].name, "비어있음") == 0) // 아이템 포켓의 네임이 비어있음 이면 넣는다!
                            {
                                Item_pocket[j] = consumableItems[i]; // 내가 i 번 아이템을 샀을때 아이템 포켓에 넣는다
                                if (i == 1)
                                {
                                    blue += 1;
                                }
                                if (i == 2)
                                {
                                    white += 1;
                                }
                                if (i == 3)
                                {
                                    rainbow += 1;
                                }
                                break;
                            }
                        }
                    }
                }
                printf(" 계속 구매 하려면 :0\n마을로 돌아가고 싶으면 : 1\n");
                scanf("%d", &out);
                if (out == 0)
                {
                    continue;
                }

                else if (out == 1)
                    break;
            }

            if (medicine == 3) /*상태 회복서를 산다고 선택 */
            {
                for (int i = 1; i <= 3; i++) //*상태 회복서 메뉴 보여주기 */
                {
                    if ((consumableItems[i + 6].price) > 0)
                        printf("%s(%d) : %d\n", consumableItems[i + 6].name, consumableItems[i + 6].price, i);
                }
                scanf("%d+6", &condition);

                for (int i = 1; i <= 3; i++) /*상태 회복서 구매 후 출력*/
                {
                    if (condition == i)
                    {
                        printf("%s를 구매하셨습니다. %d원입니다.\n", consumableItems[i + 6].name, consumableItems[i + 6].price);
                        money = (money - consumableItems[i + 6].price);
                        printf("남은 돈은 %d입니다.\n", money);
                        for (int j = 7; j <= 8; j++)
                        {
                            if (strcmp(Item_pocket[j].name, "비어있음") == 0) // 아이템 포켓의 네임이 비어있음 이면 넣는다!
                            {
                                Item_pocket[j] = consumableItems[i]; // 내가 i 번 아이템을 샀을때 아이템 포켓에 넣는다
                                if (i == 1)
                                {
                                    haedock += 1;
                                }
                                if (i == 2)
                                {
                                    blessing += 1;
                                }
                                break;
                            }
                        }
                    }
                }
                printf(" 계속 구매 하려면 :0\n마을로 돌아가고 싶으면 : 1\n");
                scanf("%d", &out);
                if (out == 0)
                {
                    continue;
                }

                else if (out == 1)
                    break;
            }

            if (medicine == 4) /*이동서를 산다고 선택 */
            {
                for (int i = 1; i <= 2; i++) /*이동서 메뉴판 */
                {
                    if ((consumableItems[i + 9].price) > 0)
                        printf("%s(%d) : %d\n", consumableItems[i + 9].name, consumableItems[i + 9].price, i);
                }
                scanf("%d+9", &move);

                for (int i = 1; i <= 3; i++) /*이동서 구매 후 출력*/
                {
                    if (move == i)
                    {
                        printf("%s를 구매하셨습니다. %d원입니다.\n", consumableItems[i + 9].name, consumableItems[i + 9].price);
                        money = (money - consumableItems[i + 9].price);
                        printf("남은 돈은 %d입니다.\n", money);

                        for (int j = 10; j <= 11; j++)
                        {
                            if (strcmp(Item_pocket[j].name, "비어있음") == 0) // 아이템 포켓의 네임이 비어있음 이면 넣는다!
                            {
                                Item_pocket[j] = consumableItems[i]; // 내가 i 번 아이템을 샀을때 아이템 포켓에 넣는다
                                if (i == 1)
                                {
                                    move_to_town += 1;
                                }
                                if (i == 2)
                                {
                                    sungan_idong += 1;
                                }
                                
                                break;
                            }
                        }
                    }
                }
                printf(" 계속 구매 하려면 :0\n마을로 돌아가고 싶으면 : 1\n");
                scanf("%d", &out);
                if (out == 0)
                {
                    continue;
                }

                else if (out == 1)
                    break;
            }
        
            else
                break;
        }
    
        else if (click == 3)
        {
            break;
        }
        
        
    }
}

void hospital()
{
    printf("⬜⬛⬛⬛⬜⬛⬜⬜⬜⬜⬜⬛⬛⬛⬜⬛⬛⬛⬛⬜⬛⬛⬛⬛⬛⬜⬜⬜⬜⬜⬛⬛⬜⬜⬜⬛⬛⬜⬛⬛⬛⬜⬛⬜⬜⬜⬜⬜\n");
    printf("⬜⬛⬛⬛⬜⬛⬜⬛⬛⬛⬛⬛⬛⬜⬛⬜⬛⬛⬛⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜⬛⬜⬛⬛⬛⬜⬛⬜⬜⬛⬛⬜⬛⬜⬛⬛⬛⬛\n");
    printf("⬜⬜⬜⬜⬜⬛⬜⬜⬜⬜⬜⬛⬜⬜⬜⬜⬜⬛⬛⬜⬛⬛⬛⬛⬛⬛⬛⬜⬛⬛⬛⬜⬛⬛⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬜⬜⬜⬜\n");
    printf("⬜⬛⬛⬛⬜⬛⬜⬛⬛⬛⬛⬛⬜⬛⬛⬛⬜⬛⬛⬜⬛⬛⬛⬛⬛⬛⬜⬛⬛⬛⬛⬜⬛⬛⬛⬜⬛⬜⬛⬛⬜⬜⬛⬜⬛⬛⬛⬛\n");
    printf("⬜⬛⬛⬛⬜⬛⬜⬜⬜⬜⬜⬛⬜⬛⬛⬛⬜⬛⬛⬜⬜⬜⬜⬛⬛⬜⬜⬜⬜⬜⬛⬛⬜⬜⬜⬛⬛⬜⬛⬛⬛⬜⬛⬜⬜⬜⬜⬜\n");
    printf("\n");

        while (99)/*성소로 가는 것을 선택*/
    {
        printf("성소에 오신 것을 환영합니다!\n");
        printf("현재 나의 hp는 %d\nmp는 %d입니다.",hp,mp);
        printf("hp와 mp 100프로 회복하시려면 : 1\n모든 상태 이상을 회복하시려면 : 2\n모든 스텟을 초기화 하시려면 :3\n");
        scanf("%d",&heal);

        if (heal == 1) /*hp, mp 100%회복*/
        {
            hp = 100 + ((LEVEL-1) * 20) + ((STR - STR_BASIC) * 5);    /*hp = 기본 체력 + ((내 레벨 -1 )*20) + ((STR-10)*5)*/
            mp = 10 + ((LEVEL-1) * 10) + ((INT - INT_BASIC) * 1);    /*mp = 기본 체력 + ((내 레벨 -1)*10) + ((INT -10)*1)*/
            printf("현재 나의 hp는 %d\nmp는 %d입니다.\n",hp,mp);
        }

        if (heal == 2) /*모든 상태 이상을 회복하려면*/
        {
            overdose = 0;       /*중독 = 0*/
            curse = 0;          /*저주 = 0*/
            printf("상태이상을 회복합니다.\n");
        }
                
        if (heal == 3) // 스텟 초기화
        {
            printf("1.스텟 초기화\n2.나가기\n");
            scanf("%d",&heal_3);

            if (heal_3 == 1)            /*스텟 초기화 STR,DEX, INT는 10으로 고정 */
            {
                STR = STR_BASIC;    
                DEX = DEX_BASIC;
                INT = INT_BASIC;
                bonus_point = LEVEL - 1;
                printf("%d",bonus_point); /*초기화 후 쌓을 수 있는 스텟 포인트, 추후에 스텟을 쌓을 때 사용 */
            }

            if (heal_3 == 2)
            {
                continue;
            }
        }

        printf("성소에 더 있으려면 :0\n마을로 돌아가고 싶으면 : 1\n"); /*계속 성소에 남아 있을지, 마을로 돌아갈지 물어봄*/
        scanf("%d", &out);
        if (out == 0)
        continue;

        else if (out == 1)
        break;

        else
        break;
    }

}

void repair_shop() // 사용xxx - 밑에 다른거 있음
{
    repair_a = 1;
    while (repair_a)
    {
        printf("\n[제련소]\n1. 장비 강화\n2. 나가기\n선택: ");
        scanf("%d", &choice);

        switch (choice) 
        {
            case 1:
            printf("어떤 장비를 강화 할까요?\n");
            printf("(1)착용중인 장비   (2)인벤토리 장비\n");

            scanf("%d", &choice2);
            switch (choice2)
            {
                case 1: // 착용중인 장비
                printf("\n[강화할 장비 리스트]\n");
                printf("용복이의 장비 \n");
                for (int i = 0; i < 6; i++) 
                {
                    printf("%d번 %d강 %s (공격:%d)\n",
                        i + 1, now_wear[i].upgrade, now_wear[i].name, now_wear[i].attack
                    );
                }
                printf("\n");
            
                printf("보유중인 강화조각 개수\n");
                printf("화염 조각: 작은[%d] 푸른[%d] 강렬한[%d] 미친[%d]\n",
                        Material_Pocket[0].count, Material_Pocket[1].count,
                        Material_Pocket[2].count, Material_Pocket[3].count);
                printf("보유 Money: %d원\n", money);

                printf("강화할 장비 번호 선택: ");
                scanf("%d", &upgradeIndex);

                if(now_wear[upgradeIndex - 1].type == 0)    // 내가 고른 번호에 아무것도 없으면
                {
                    printf("거기에는 아무것도없어용\n");
                    continue;
                }

                else if ((0 < upgradeIndex) && (7 > upgradeIndex))
                {
                    upgradeEquipment(); // 조건 맞으면 강화 함수 실행
                }

                else
                {
                    printf("잘못된 번호를 고르셨어요.\n");
                    
                }
                //break;

                case 2: // 인벤토리에 있는 장비
                printf("\n[강화할 장비 리스트]\n");
                printf("인벤토리 장비 \n");
                for (int i = 0; i < 20; i++) 
                {
                        printf("%d번 %d강 %s (공격:%d)\n",
                            i + 1, Inventory[i].upgrade, Inventory[i].name, Inventory[i].attack
                        );
                }
                printf("\n");
            
                printf("보유중인 강화조각 개수\n");
                printf("화염 조각: 작은[%d] 푸른[%d] 강렬한[%d] 미친[%d]\n",
                        Material_Pocket[0].count, Material_Pocket[1].count,
                        Material_Pocket[2].count, Material_Pocket[3].count);
                printf("보유 Money: %d원\n", money);

                printf("강화할 장비 번호 선택: ");
                scanf("%d", &upgradeIndex);

                if(Inventory[upgradeIndex - 1].type == 0)    // 내가 고른 번호에 아무것도 없으면
                {
                    printf("거기에는 아무것도없어용. 다른 번호를 골라주세요.\n");
                    continue;
                }

                else if ((0 < upgradeIndex) && (7 > upgradeIndex))
                {
                    // upgradeEquipment(Inventory[upgradeIndex - 1].upgrade);
                    upgradeEquipment2();
                }

                else
                {
                    printf("(거기에는 아무것도없어용)잘못된 번호를 고르셨어요\n");
                    break;
                }
                //break;
            }
        
            case 2:
            printf("나가기\n");
            repair_a = 0;
            break;

            default:
            printf("잘못된 입력입니다.\n");

        }
    }
};

void exchant() // 추가 해야됨
{
    printf("⬜⬜⬜⬜⬜⬛⬜⬛⬛⬛⬜⬛⬛⬜⬜⬜⬛⬛⬜⬛⬛⬛⬜⬛⬛⬛⬜⬛⬛⬛⬜⬛⬛⬛⬜⬛⬜⬜⬜⬜⬜\n");
    printf("⬜⬛⬛⬛⬛⬛⬜⬜⬛⬛⬜⬛⬜⬛⬛⬛⬜⬛⬜⬛⬛⬛⬜⬛⬛⬜⬛⬜⬛⬛⬜⬜⬛⬛⬜⬛⬛⬛⬜⬛⬛\n");
    printf("⬜⬜⬜⬜⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬛⬛⬛⬛⬜⬜⬜⬜⬜⬛⬜⬜⬜⬜⬜⬛⬜⬛⬜⬛⬜⬛⬛⬛⬜⬛⬛\n");
    printf("⬜⬛⬛⬛⬛⬛⬜⬛⬛⬜⬜⬛⬜⬛⬛⬛⬜⬛⬜⬛⬛⬛⬜⬛⬜⬛⬛⬛⬜⬛⬜⬛⬛⬜⬜⬛⬛⬛⬜⬛⬛\n");
    printf("⬜⬜⬜⬜⬜⬛⬜⬛⬛⬛⬜⬛⬛⬜⬜⬜⬛⬛⬜⬛⬛⬛⬜⬛⬜⬛⬛⬛⬜⬛⬜⬛⬛⬛⬜⬛⬛⬛⬜⬛⬛\n");
    while (1)
    {
        printf("무기에 인챈트를 하러 왔나?\n 랜덤인건 각오하고 왔겠지?\n");
        printf("계속 하려면 :0\n마을로 돌아가고 싶으면 : 1\n");
        scanf("%d", &out);
        if (out == 0)
        {
            continue;
        }

        else if (out == 1)
        break;

    }
};

void bank()
{
    printf("⬜⬜⬜⬜⬛⬛⬛⬛⬜⬛⬛⬛⬜⬛⬛⬛⬜⬛⬜⬛⬛⬛⬜\n");
    printf("⬜⬛⬛⬛⬜⬛⬛⬜⬛⬜⬛⬛⬜⬜⬛⬛⬜⬛⬜⬛⬛⬜⬛\n");
    printf("⬜⬜⬜⬜⬛⬛⬜⬜⬜⬜⬜⬛⬜⬛⬜⬛⬜⬛⬜⬜⬜⬛⬛\n");
    printf("⬜⬛⬛⬛⬜⬛⬜⬛⬛⬛⬜⬛⬜⬛⬛⬜⬜⬛⬜⬛⬛⬜⬛\n");
    printf("⬜⬜⬜⬜⬛⬛⬜⬛⬛⬛⬜⬛⬜⬛⬛⬛⬜⬛⬜⬛⬛⬛⬜\n");
    while (99)/*은행을 선택했을때*/
    {
        printf("은행입니다.\n");
        show_bank();

        printf("1.보관 / 2.찾기 / 3.나가기\n");
        scanf("%d", &find);

        if (find == 1)/*물건을 보관*/
        {
            printf("인벤토리에서 보관할 물건의 번호를 선택해주세요.");
            scanf("%d",&choice);
            for (int i = 0; i <21 ;i++) /*인벤토리를 0-20까지 for문으로 체크*/
            {
                if (choice == i) /*인벤토리에서 보관할 물건의 번호*/
                {
                    printf("%s을 보관하셨습니다. \n",Inventory[i].name);
                    for (int j = 0; j < 100; j++)/* j로 0~100까지 반복해서 i와 같은지 체크*/
                    {    
                        if (Bank[j].tier == 0) // 내 인벤토리 i인덱스의 티어값이 0이면 아이템이 없다!
                        {
                            Bank [j] = Inventory[i];  // inventory[i]번에 있는 아이템을 은행 보관함에 넣는다
                            Inventory[i] = EquipmentItems[35]; /*인벤토리에서 아이템 빠진 자리를 빈칸으로 */
                            break;
                        }   
                    }   
                }  
            }
        }

        if (find == 2)/*물건을 찾으러 옴*/
        {
            printf("보관함을 보여드릴게요!\n");
            for (int i = 0; i < 100; i++)    /*보관함 출력*/
            {   
                if (Bank[i].tier > 0)/*현재 있는 것만 출력*/
                {
                    printf("[%d]: %s\n ", i ,Bank[i].name);
                    count += 1;/*현재 몇 개 있는지 카운트*/
                }  
            }

            printf("현재 %d/100개 있습니다.",count);
            printf("몇 번 물건이 필요하신가요?\n");/*pick을 사용해서 필요한 물건의 번호를 받는다*/
            scanf("%d", &pick);

            for (int j = 0; j < 100; j++)/*0~101까지 반복한다*/
            {
                for (int k = 0; k < 20; k++)/*인벤토리를 20번 반복해서 티어값이 있는지 확인, 티어값이 0이면 넣는다*/
                {
                    if ((Inventory[k].tier == 0) && (Bank[j].tier > 0) && (pick == j))/*(인벤토리 티어가 0 즉, 비어있으면), (뱅크에 있는 무기 티어가 0이상 ), (픽 = 원하는 번호 일 때)*/
                    {   
                        printf("%s를 돌려드릴게요! 1000원입니다.\n", Bank[j].name);
                        Inventory[k] = Bank [j];                        /*인벤토리에 bank j번호 에 있는 물건을 넣는다.*/
                        Bank [j]= EquipmentItems[35];                   /*보관함 j를 비워준다 */
                        break;
                    }  
                }  
            }
            
            money = (money - 1000);/*돈 차감*/
        }

        else // 3.나가기
            break;

        printf("계속 은행 거래를 하려면 :0\n마을로 돌아가고 싶으면 : 1\n");/*계속 할건지*/
        scanf("%d", &out);
        if (out == 0)
        continue;

        else if (out == 1)
        break;
    }

}   



void village_map_print()    // 맵 출력하는 함수
{
    // 맵초기화 
    for (int i = 0; i < (SIZE); i++)
    {
        for (int j = 0; j < ( SIZE ); j++)
        {    
            map[z][i][j] = 0;
        }
    }
    system("clear");

    for (int i = v_me[0] - 20; i < v_me[0] + 20; i++)
    {
        for(int j = v_me[1] - 20; j < v_me[1] + 20; j++)
        {
            if((v_me[0] == i) && (v_me[1] == j)) // 내위치를 😃로 표시
            {
                printf("😃 ");
            }
            else if((z == 0)  && ((i <= 10) && (1 <= i)) && ((j <= 10) && (1 <= j)))
            {
                printf("🏪 "); // 잡화
            }
            else if((z == 0)  && ((i <= 29) && (20 <= i)) && ((j <= 48) && (39 <= j)))
            {
                printf("🧚‍♀️ "); // 성소
            }
            else if((z == 0)  && ((i <= 10) && (1 <= i)) && ((j <= 48) && (39 <= j)))
            {
                printf("🛠️ "); // 제련
            }
            else if((z == 0)  && ((i <= 48) && (39 <= i)) && ((j <= 10) && (1 <= j)))
            {
                printf("🎇 "); // 인첸트
            }
            else if((z == 0)  && ((i <= 29) && (20 <= i)) && ((j <= 10) && (1 <= j)))
            {
                printf("💸 "); // 은행
            }
            else if((z == 0)  && ((i <= 48) && (39 <= i)) && ((j <= 48) && (39 <= j)))
            {
                printf("🚨📛"); // 던전
            }
            else if(((i < 0) || (50 < i)) || ((j < 0) || (50 < j)))

            {
                printf(" ");
            }
            else
            {
                printf("   ");  // 나머지는 🌳ㅈ
            }
        }
        printf("\n");
    }

};

void move_()    // 이동하는 함수
{
    
    if((((input == 'W') || (input == 'w'))) && (v_me[0] > 0))   // w를 입력받고 내 y좌표(반복문에서 i)가 0보다 클때
    {
        v_me[0]--;
    }
    else if((((input == 'S') || (input == 's'))) && (v_me[0] < SIZE - 1))  // s를 입력받고 내 y좌표(반복문에서 i)가 SIZE보다 작을때
    {
        v_me[0]++;
    }
    else if((((input == 'A') || (input == 'a'))) && (v_me[1] > 0))  // a를 입력받고 내 x좌표(반복문에서 j)가 0보다 클때
    {
        v_me[1]--;
    }
    else if((((input == 'D') || (input == 'd'))) && (v_me[1] < SIZE - 1))  // d를 입력받고 내 x좌표(반복문에서 j)가 SIZE보다 작을
    {
        v_me[1]++;
    }

    key_key_(); // 단축키
    
};

void village_move() // 내가 장소에 도착하면 확인해쥬는 함수
{
    // else if(((i <= 10) && (1 <= i)) && ((j <= 10) && (1 <= j)))w

    // 1.잡화접 갔을 때
    if((z == 0)  && ((v_me[0] <= 10) && (1 <= v_me[0])) && ((v_me[1] <= 10) && (1 <= v_me[1])))
    {
        system("clear");
        //market();   // 잡화점 함수 실행!
        market_();
        while (getchar() != '\n')
        {
            continue;
        }
    }
    
    // 2.성소 갔을 때
    else if((z == 0)  && ((v_me[0] <= 29) && (20 <= v_me[0])) && ((v_me[1] <= 48) && (39 <= v_me[1])))
    {
        system("clear");
        hospital();
        while (getchar() != '\n')
        {
            continue;
        }
    }

    // 3.제련소 갔을 때
    else if((z == 0)  && ((v_me[0] <= 10) && (1 <= v_me[0])) && ((v_me[1] <= 48) && (39 <= v_me[1])))
    {
        system("clear");
        repair_shopMenu();
        while (getchar() != '\n')
        {
            continue;
        }
    }

    // 4.인첸트 갔을 때
    else if((z == 0)  && ((v_me[0] <= 48) && (39 <= v_me[0])) && ((v_me[1] <= 10) && (1 <= v_me[1])))
    {
        system("clear");
        exchant();
        while (getchar() != '\n')
        {
            continue;
        }
    }

    // 5.은행 갔을 때
    else if((z == 0)  && ((v_me[0] <= 29) && (20 <= v_me[0])) && ((v_me[1] <= 10) && (1 <= v_me[1])))
    {
        system("clear");
        bank();
        while (getchar() != '\n')
        {
            continue;
        }
    }

    // 6.던전 갔을 때
    else if((z == 0)  && ((v_me[0] <= 48) && (39 <= v_me[0])) && ((v_me[1] <= 48) && (39 <= v_me[1])))
    {
        system("clear");

        dungeon_switch = 1;
        village1 = 0;
        // dungeon_();
        // while (getchar() != '\n')
        // {
        //     continue;
        // }
    }
};



/* ------------------던전 관련 함수------------------ */

void dungeon_()
{
    z = 1;
    dungeon_map();

    while (dungeon_switch)
    {
        dungeon_map_print();

        // 🥚미래에 상태창이될 알들🥚
        printf("🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚\n");
        printf("🥚    %d 층                                                  🥚  [I] 아이템 확인       🥚\n", z);
        printf("🥚  ");print_hp();
        printf("                              🥚  [J] 인벤토리 확인     🥚\n");
        printf("🥚  ");print_mp();
        printf("                              🥚  [K] 착용장비 확인     🥚\n");
        
        printf("🥚  ");print_exp();
        printf("                              🥚  [M] 재료창 확인       🥚\n");
        printf("🥚                                                          🥚  [B] 스텟창 확인       🥚\n");
        printf("🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚\n");
        printf("💵 : %d원     하드모드 : %d?\n", money, hard);
        input = getch();
        //가로 44 세로 44
        dungeon_move_();
        event();
    }
};

void dungeon_map()  // 던전맵을 만드는 함수
{
    srand(seed);
    
    // 맵초기화 
    for (int i = 0; i < (SIZE); i++)
    {
        for (int j = 0; j < ( SIZE ); j++)
        {    
            map[z][i][j] = 0;
        }
    }

    // 벽생성   (수정필요)
    for (int i = 0; i < (SIZE); i++)
    {
        for (int j = 0; j < (SIZE); j++)
        {    
            if (rand()%65 > (SIZE))
            {
                map[z][i][j] = 1;
            }
        }
    }

    // 맵 테두리 생성
    for (int i = 0; i < SIZE; i++)
    {
        for (int j = 0; j < SIZE; j++)
        {             
            map[z][0][j] = 2;
            map[z][49][j] = 2;
            map[z][i][0] = 2;
            map[z][i][49] = 2;
        }
    }

    // 포탈 좌표값 지정해주기

    portal_i = rand()%9 + 40;
    portal_j = rand()%9 + 40;
    map[z][portal_i][portal_j] = 3;

    for (int i = 1; i < 5; i++)
    {
        for (int j = 1; j < 5; j++)
            map[z][i][j] = 0;
    }
    
    // 몬스터 생성

    int monster_count2 = 0;
    while(monster_count >= monster_count2)
    {
        // srand(mosnter_seed); // 필요가 없음 . 왜 없어도 돌아가지 ?
        monster_i = (rand()%46 + 2);    // 몬스터의 i 값을 2 ~ 47 랜덤으로 초기화
        monster_j = (rand()%46 + 2);    // 몬스터의 j 값을 2 ~ 47 랜덤으로 초기화

        // 초기화된 몬스터 좌표가 벽이아니거나 포탈이 아니면 합격!
        if ((z == 1) && (map[z][monster_i][monster_j] != 1) && ((map[z][monster_i][monster_j]) != (map[z][portal_i][portal_j]))) 
        {
            (map[z][monster_i][monster_j]) = (rand()%1 + 5);

            // monster_count --;
            monster_count2++;
        }
        else if ((z == 2) && (map[z][monster_i][monster_j] != 1) && ((map[z][monster_i][monster_j]) != (map[z][portal_i][portal_j]))) 
        {
            (map[z][monster_i][monster_j]) = (rand()%2 + 5);

            // monster_count --;
            monster_count2++;
        }
        else if ((z == 3) && (map[z][monster_i][monster_j] != 1) && ((map[z][monster_i][monster_j]) != (map[z][portal_i][portal_j]))) 
        {
            (map[z][monster_i][monster_j]) = (rand()%2 + 6);

            // monster_count --;
            monster_count2++;
        }
        else if ((z == 4) && (map[z][monster_i][monster_j] != 1) && ((map[z][monster_i][monster_j]) != (map[z][portal_i][portal_j]))) 
        {
            (map[z][monster_i][monster_j]) = (rand()%2 + 7);

            // monster_count --;
            monster_count2++;
        }
        else if ((z == 5) && (map[z][monster_i][monster_j] != 1) && ((map[z][monster_i][monster_j]) != (map[z][portal_i][portal_j]))) 
        {
            (map[z][monster_i][monster_j]) = (rand()%3 + 8);

            // monster_count --;
            monster_count2++;
        }
    }
    
    for (int i = 0; i < SIZE; i++)
    {
        for (int j = 0; j < SIZE; j++)
        {             
            // map[z][i][j] = 2;

        }
    }

};

void dungeon_map_print()    // 던전맵 출력하는 함수
{

    system("clear");

    for (int i = me[0] - 22; i < me[0] + 22; i++)
    // for (int i = 0; i < SIZE; i++)
    {
        for(int j = me[1] - 22; j < me[1] + 22; j++)
        // for(int j = 0; j < SIZE; j++)
        {
            if((me[0] == i) && (me[1] == j)) // 내위치를 😃로 표시
            {
                printf("😃");
            }
            // 맵 밖을 벽으로 바꾸기
            else if((((i < 0) || SIZE <= i)) || ((j < 0) || (SIZE <= j))) // || (map[z][i][j] = -1)
            // else if((map[z][i][j] = -1))
            {
                printf("🟫");       // 좌표가 맵을 벗어나면 🟫벽으로 바꾸기
            }
            else if(map[z][i][j] == 1)   // 좌표값이 1번이면 🟫벽으로 바꾸기
            {
                printf("🟫");
            }
            else if(map[z][i][j] == 2)  // 좌표값이 2번이면 🟪
            {
                printf("🟪");
            }
            else if(map[z][i][j] == 3)  // 좌표값이 3번이면 🟪
            {
                if (z != 5)
                {
                    printf("💠");
                }
                else
                {
                    printf("⬛");

                }
            }

            /* 던전 층수에 따른 몬스터 출력 조건문 */

            else if((z == 1)  && (map[1][i][j] == 5))  // 1 ~ 2층일때 등장
            {
                printf("🐶");  // 오크전사
            }
            else if((z == 2)  && (map[2][i][j] == 5))  // 1 ~ 2층일때 등장
            {
                printf("🐶");  // 오크전사
            }
            else if((2 == z)  && (map[2][i][j] == 6))  // 2 ~ 3층일때 등장
            {
                printf("🦁");  // 좀비
            }
            else if(((z == 3))  && (map[3][i][j] == 6))  // 2 ~ 3층일때 등장
            {
                printf("🦁");  // 좀비
            }
            else if(((3 == z))  && (map[3][i][j] == 7))  // 3 ~ 4 층일때 등장
            {
                printf("🐻");  // 구울
            }
            else if(((z == 4))  && (map[4][i][j] == 7))  // 3 ~ 4 층일때 등장
            {
                printf("🐻");  // 구울
            }
            else if((4 == z)  && (map[4][i][j] == 8))  // 4 ~ 5층일때 등장
            {
                printf("🐘");  // 해골
            }
            else if(((z == 5))  && (map[5][i][j] == 8))  // 4 ~ 5층일때 등장
            {
                printf("🐘");  // 해골
            }
            else if((5 == z) && (map[5][i][j] == 9))  // 5층일때 등장
            {
                printf("🐵");  // 리치
            }
            else if((5 == z) && (map[5][i][j] == 10))  // 5층일때 등장
            {
                printf("🐯");  // 바실리스크
            }
            else if((5 == z) && (map[5][i][j] == 11))  // 5층일때 등장
            {
                printf("🐸");  // 마왕(보스)
            }
            else if((5 == z) && (map[5][i][j] == 12))  // 5층일때 등장
            {
                printf("🦍");  // 이동녀크(찐보스)
            }
            /* 맵 밖을 나갔을때 출력할 문자 */
            else
            {
                printf("⬛");  // 나머지는 ⬛
            }
        }
        printf("\n");
    }
};

void dungeon_move_()    // 던전에서 이동하는 함수
{
    if((((input == 'W') || (input == 'w'))) && (map[z][me[0] - 1][me[1]] != 1))  // w를 입력받고 내 y좌표(반복문에서 i)가 0보다 클때
    {
        me[0]--;
    }
    else if((((input == 'S') || (input == 's'))) && (me[0] < SIZE - 2) && (map[z][me[0] + 1][me[1]] != 1))  // s를 입력받고 내 y좌표(반복문에서 i)가 SIZE보다 작을때
    {
        me[0]++;
    }
    else if((((input == 'A') || (input == 'a'))) && (me[1] > 1) && (map[z][me[0]][me[1] - 1] != 1))  // a를 입력받고 내 x좌표(반복문에서 j)가 0보다 클때
    {
        me[1]--;
    }
    else if((((input == 'D') || (input == 'd'))) && (me[1] < SIZE - 2) && (map[z][me[0]][me[1] + 1] != 1))  // d를 입력받고 내 x좌표(반복문에서 j)가 SIZE보다 작을
    {
        me[1]++;
    }
};

void print_exp()    // 경험치를 상태창에 출력하는 함수
{
    printf("EXP : ");
    int exp_ten = max_exp / 10; // 경험치의 10프로를 저장

    int exp_print = 0;  // 내가 출력해줄 🟨 갯수 정하기

    if ((0 < exp_ ) && (exp_  < exp_ten))  // 현재 경험치가 0 보다크고 10프로보다 같거나 작을때
    {
        exp_print = 0;  // 출력할 🟨 갯수를 + 1
    }
    else if ((exp_< exp_ten * 2))
    {
        exp_print = 1;
    }
    else if ((exp_< exp_ten * 3))
    {
        exp_print = 2;
    }
    else if ((exp_< exp_ten * 4))
    {
        exp_print = 3;
    }
    else if ((exp_< exp_ten * 5))
    {
        exp_print = 4;
    }
    else if ((exp_< exp_ten * 6))
    {
        exp_print = 5;
    }
    else if ((exp_< exp_ten * 7))
    {
        exp_print = 6;
    }
    else if ((exp_< exp_ten * 8))
    {
        exp_print = 7;
    }
    else if ((exp_< exp_ten * 9))
    {
        exp_print = 8;
    }
    else
    {
        exp_print = 9;
    }
    
    for (int i = 0; i < 10; i++)
    {
        if(exp_print > 0)   // 내가 출력해줄 🟨 갯수가 있는지 확인
        {
            printf("🟨");   // 출력해주기
            exp_print --;   // 갯수 차감
        }
        else
        {
            printf("⬜");   // 나머지는 하양색
        }
    }   
};

void print_hp()
{
    printf("H P : ");
    int hp_ten = max_hp / 10; // 경험치의 10프로를 저장

    int hp_print = 0;  // 내가 출력해줄 🟥 갯수 정하기

    if ((0 < hp) && (hp <= hp_ten))  // 현재 경험치가 0 보다크고 10프로보다 같거나 작을때
    {
        hp_print = 1;  // 출력할 🟥 갯수를 + 1
    }
    else if ((hp <= hp_ten * 2))
    {
        hp_print = 2;
    }
    else if ((hp <= hp_ten * 3))
    {
        hp_print = 3;
    }
    else if ((hp <= hp_ten * 4))
    {
        hp_print = 4;
    }
    else if ((hp <= hp_ten * 5))
    {
        hp_print = 5;
    }
    else if ((hp <= hp_ten * 6))
    {
        hp_print = 6;
    }
    else if ((hp <= hp_ten * 7))
    {
        hp_print = 7;
    }
    else if ((hp <= hp_ten * 8))
    {
        hp_print = 8;
    }
    else if ((hp < hp_ten * 10))
    {
        hp_print = 9;
    }
    else
    {
        hp_print = 10;
    }
    
    for (int i = 0; i < 10; i++)
    {
        if(hp_print > 0)   // 내가 출력해줄 🟥 갯수가 있는지 확인
        {
            printf("🟥");   // 출력해주기
            hp_print --;   // 갯수 차감
        }
        else
        {
            printf("⬜");   // 나머지는 하양색
        }
    }   
};

void print_mp()
{
    printf("M P : ");
    int mp_ten = max_mp / 10; // 경험치의 10프로를 저장

    int mp_print = 0;  // 내가 출력해줄 🟦 갯수 정하기

    if ((0 < mp) && (mp <= mp_ten))  // 현재 경험치가 0 보다크고 10프로보다 같거나 작을때
    {
        mp_print = 1;  // 출력할 🟦 갯수를 + 1
    }
    else if ((mp <= mp_ten * 2))
    {
        mp_print = 2;
    }
    else if ((mp <= mp_ten * 3))
    {
        mp_print = 3;
    }
    else if ((mp <= mp_ten * 4))
    {
        mp_print = 4;
    }
    else if ((mp <= mp_ten * 5))
    {
        mp_print = 5;
    }
    else if ((mp <= mp_ten * 6))
    {
        mp_print = 6;
    }
    else if ((mp <= mp_ten * 7))
    {
        mp_print = 7;
    }
    else if ((mp <= mp_ten * 8))
    {
        mp_print = 8;
    }
    else if ((mp < mp_ten * 10))
    {
        mp_print = 9;
    }
    else
    {
        mp_print = 10;
    }
    
    for (int i = 0; i < 10; i++)
    {
        if(mp_print > 0)   // 내가 출력해줄 🟦 갯수가 있는지 확인
        {
            printf("🟦");   // 출력해주기
            mp_print --;   // 갯수 차감
        }
        else
        {
            printf("⬜");   // 나머지는 하양색
        }
    }   
};



void meet_monster() // 내가 만난 몬스터 데이터를 생성
{

    srand(time(NULL));
    int named = rand()%101;

    /*      하드모드일때        */

    if (hard == 1)
    {
        hard_mode = 1;
    }
    else    // hard가 1이아니면 하드모드
    {
        if (map[z][me[0]][me[1]] == 5)
        {
            hard_mode = 6;
        }
        if (map[z][me[0]][me[1]] == 6)
        {
            hard_mode = 5;
        }
        if (map[z][me[0]][me[1]] == 7)
        {
            hard_mode = 4;
        }
        if (map[z][me[0]][me[1]] == 8)
        {
            hard_mode = 3;
        }
        if (map[z][me[0]][me[1]] == 9)
        {
            hard_mode = 2;
        }
        if (map[z][me[0]][me[1]] == 10)
        {
            hard_mode = 2;
        }
    }

    /*      네임드 만났을떄     */

    if(named < 10)
    {
        named_mode = 2;
    }
    else
    {
        named_mode = 1;
    }
    int my_locate = map[z][me[0]][me[1]]; // 현제 좌표를 숫자로 알려주는 변수

    make_monster();
    if (named_mode == 2)
    {
        printf("엄청강한 ");
    }
};

void make_monster() // 몬스터의 데이터를 랜덤으로 생성하기
{
    int my_locate = map[z][me[0]][me[1]]; // 현제 좌표를 숫자로 알려주는 변수
    
    strcpy(meet[0].name, monster[my_locate - 5].name); // 문자열 복사해서 이름을 복사
    
    meet[0].maxhp = (rand()%((monster[my_locate - 5].maxhp - monster[my_locate - 5].minhp) + 1) + monster[my_locate - 5].minhp) * hard_mode * named_mode;
    meet[0].minhp = meet[0].maxhp;
    /* 순서대로 / 내가만난 몬스터의 배열의 체력 = 랜덤(만난 몬스터의) % (최대채력 - 최소체력) + 최소체력    // ((최대채력 - 최소체력) + 최소체력) = 체력범위 */
    meet[0].maxatt = (rand()%((monster[my_locate - 5].maxatt - monster[my_locate - 5].minatt) + 1) + monster[my_locate - 5].minatt) * hard_mode * named_mode;
    meet[0].maxdf = (rand()%((monster[my_locate - 5].maxdf - monster[my_locate - 5].mindf) + 1) + monster[my_locate - 5].mindf) * hard_mode * named_mode;
    meet[0].weak = (monster[my_locate - 5].weak);
    meet[0].strong = (monster[my_locate - 5].strong);
    
    if (map[z][me[0]][me[1]] == 11)
    {
        int my_locate = map[z][me[0]][me[1]]; // 현제 좌표를 숫자로 알려주는 변수
        strcpy(meet[0].name, monster[my_locate - 5].name); // 문자열 복사해서 이름을 복사
        
        meet[0].maxhp = monster[my_locate - 5].maxhp + (max_hp * 3);
        meet[0].minhp = meet[0].maxhp;
        /* 순서대로 / 내가만난 몬스터의 배열의 체력 = 랜덤(만난 몬스터의) % (최대채력 - 최소체력) + 최소체력    // ((최대채력 - 최소체력) + 최소체력) = 체력범위 */
        meet[0].maxatt = (rand()%((monster[my_locate - 5].maxatt - monster[my_locate - 5].minatt) + 1) + monster[my_locate - 5].minatt) * hard_mode * named_mode;
        meet[0].maxdf = 0;
        meet[0].weak = (monster[my_locate - 5].weak);
        meet[0].strong = (monster[my_locate - 5].strong);
    }
    if (map[z][me[0]][me[1]] == 12)
    {
        int my_locate = map[z][me[0]][me[1]]; // 현제 좌표를 숫자로 알려주는 변수
        strcpy(meet[0].name, monster[my_locate - 5].name); // 문자열 복사해서 이름을 복사
        
        meet[0].maxhp = monster[my_locate - 5].maxhp + (max_hp * 5);
        meet[0].minhp = meet[0].maxhp;
        /* 순서대로 / 내가만난 몬스터의 배열의 체력 = 랜덤(만난 몬스터의) % (최대채력 - 최소체력) + 최소체력    // ((최대채력 - 최소체력) + 최소체력) = 체력범위 */
        meet[0].maxatt = (rand()%((monster[my_locate - 5].maxatt - monster[my_locate - 5].minatt) + 1) + monster[my_locate - 5].minatt) * hard_mode * named_mode;
        meet[0].maxdf = 0;
        meet[0].weak = (monster[my_locate - 5].weak);
        meet[0].strong = (monster[my_locate - 5].strong);
    }
};

void event()    // 만나는함수?
{
    // 내가 포탈에 들어갔을때
    if((me[0] == portal_i) && (me[1] == portal_j) && (z != 5))
    {
        me[0] = 1; // 내위치 초기화
        me[1] = 1;
        z++;    // 층수 ++
        seed++; // 랜덤값 ++
        monster_count = 20;
        dungeon_map();
    }

    // 몬스터를 만났을때
    else if ((map[z][me[0]][me[1]] >= 5) && (12 >= map[z][me[0]][me[1]]))
    {
        system("clear");

        meet_monster();
        battle_();
        if (battle_end==2) {
            if (input == 'w')
            {
               me[0]++;
            }
            if (input == 's')
            {
                me[0]--; 
            }
            if (input == 'a')
            {
                me[1]++;
            }
            if (input == 'd')
            {
                me[1]--;
            }
            
        }
    }

    key_key_();
}



// ---------------- 장비 강화 함수 ----------------

// 확률 체크 함수 (0~99 사이의 난수를 생성)
int getRandomPercentage() 
{
    return rand() % 100;
}

void upgradeEquipment() // 장비착용창에 있는거 강화
{
    // 내가고른 무기의 강화도를 current에 저장
    int current = now_wear[upgradeIndex - 1].upgrade;  
    // 강화하는데 드는 비용, 성공확률, 떨어질 확률, 파괴확률
    int cost = 0, successRate = 100, downgradeRate = 0, destroyRate = 0;
    int stoneType = 0, requiredStone = 0;

    switch (current) {  // 내가 고른 무기 강화도 확인
        case 0: cost = 100; requiredStone = 2; stoneType = 0; break;

        case 1: cost = 200; requiredStone = 3; stoneType = 0; break;

        case 2: cost = 300; requiredStone = 4; stoneType = 0; successRate = 90; break;

        case 3: cost = 1000; requiredStone = 2; stoneType = 1; successRate = 90; break;

        case 4: cost = 2000; requiredStone = 3; stoneType = 1; successRate = 80; break;

        case 5: cost = 3000; requiredStone = 4; stoneType = 1; successRate = 80; break;

        case 6: cost = 10000; requiredStone = 2; stoneType = 2; successRate = 70; downgradeRate = 10; break;

        case 7: cost = 20000; requiredStone = 3; stoneType = 2; successRate = 60; downgradeRate = 20; break;

        case 8: cost = 30000; requiredStone = 4; stoneType = 2; successRate = 50; downgradeRate = 20; break;

        case 9: cost = 100000; requiredStone = 3; stoneType = 3; successRate = 30; downgradeRate = 30; destroyRate = 30; break;

        default:
            printf("이미 최대 강화입니다!\n");
            return;
    }
    // 돈이 부족하면 살패
    if (money < cost) 
    {
        printf("돈이 부족합니다\n");
        return;
    }

    if (Material_Pocket[stoneType].count < requiredStone)
    {    
        printf("재료가 부족합니다\n");
        return;
    }

    money -= cost;  // 돈 차감
    Material_Pocket[stoneType].count -= requiredStone;    // 재료갯수 차감

    // 랜덤하게 강화가능성 조절
    int chance = getRandomPercentage();
    int chance2, chance3;
    if (now_wear[upgradeIndex - 1].upgrade >= 6)
    {
        int a = (rand()%(100 - successRate));
        printf("%d", a);
        int chance2 = a;
        int chance3 = (rand()%(100 - successRate - destroyRate));
    }

    if (chance < successRate) // 성공했을때
    { 
        now_wear[upgradeIndex - 1].upgrade++;  // 업그레이드 ++
        // applyStatBonus(equip, 1);
        printf("%s 강화 성공! 현재 +%d\n", now_wear[upgradeIndex - 1].name, now_wear[upgradeIndex - 1].upgrade);   // 확인
    } 

    else if ((current >= 6) && (chance2 < downgradeRate)) // 실패했을때
    {
        now_wear[upgradeIndex - 1].upgrade--;
        printf("강화 실패! 단계 하락! 현재 +%d\n", now_wear[upgradeIndex - 1].upgrade);
    } 

    else if ((current == 9) && (chance3 < destroyRate)) // 파괴됬을때
    {
        printf("강화 실패! 장비 파괴됨...\n");
        now_wear[upgradeIndex - 1] = EquipmentItems[36];
    } 

    else 
    {
        printf("강화 실패! 변화 없음.\n");
    }
}

void upgradeEquipment2() // 인벤토리창에 있는거 강화
{
    int current = Inventory[upgradeIndex - 1].upgrade;  

    // 강화하는데 드는 비용, 성공확률, 떨어질 확률, 파괴확률
    int cost = 0, successRate = 100, downgradeRate = 0, destroyRate = 0;
    int stoneType = 0, requiredStone = 0;

    switch (current) {  // 내가 고른 무기 강화도 확인
        case 0: cost = 100; requiredStone = 2; stoneType = 0; break;

        case 1: cost = 200; requiredStone = 3; stoneType = 0; break;

        case 2: cost = 300; requiredStone = 4; stoneType = 0; successRate = 90; break;

        case 3: cost = 1000; requiredStone = 2; stoneType = 1; successRate = 90; break;

        case 4: cost = 2000; requiredStone = 3; stoneType = 1; successRate = 80; break;

        case 5: cost = 3000; requiredStone = 4; stoneType = 1; successRate = 80; break;

        case 6: cost = 10000; requiredStone = 2; stoneType = 2; successRate = 70; downgradeRate = 10; break;

        case 7: cost = 20000; requiredStone = 3; stoneType = 2; successRate = 60; downgradeRate = 20; break;

        case 8: cost = 30000; requiredStone = 4; stoneType = 2; successRate = 50; downgradeRate = 20; break;

        case 9: cost = 100000; requiredStone = 3; stoneType = 3; successRate = 30; downgradeRate = 30; destroyRate = 30; break;

        default:
            printf("이미 최대 강화입니다!\n");
            return;
    }
    
    // 돈이 부족하면 살패
    if (money < cost) 
    {
        printf("돈이 부족합니다\n");
        return;
    }

    if (Material_Pocket[stoneType].count < requiredStone)
    {    
        printf("재료가 부족합니다\n");
        return;
    }

    money -= cost;  // 돈 차감
    Material_Pocket[stoneType].count -= requiredStone;    // 재료갯수 차감

    // 랜덤하게 강화가능성 조절
    int chance = getRandomPercentage();
    int chance2, chance3;
    if (Inventory[upgradeIndex - 1].upgrade >= 6)
    {
        int a = (rand()%(100 - successRate));
        printf("%d", a);
        int chance2 = a;
        int chance3 = (rand()%(100 - successRate - destroyRate));
    }

    if (chance < successRate) // 성공했을때
    { 
        Inventory[upgradeIndex - 1].upgrade++;  // 업그레이드 ++
        // applyStatBonus(equip, 1);
        printf("%s 강화 성공! 현재 +%d\n", Inventory[upgradeIndex - 1].name, Inventory[upgradeIndex - 1].upgrade);   // 확인
    } 

    else if ((current >= 6) && (chance2 < downgradeRate)) // 실패했을때
    {
        Inventory[upgradeIndex - 1].upgrade--;
        printf("강화 실패! 단계 하락! 현재 +%d\n", Inventory[upgradeIndex - 1].upgrade);
    } 

    else if ((current == 9) && (chance3 < destroyRate)) // 파괴됬을때
    {
        printf("강화 실패! 장비 파괴됨...\n");
        Inventory[upgradeIndex - 1] = EquipmentItems[36];
    } 

    else 
    {
        printf("강화 실패! 변화 없음.\n");
    }
}


// 제련소 메뉴
void repair_shopMenu() 
{
    printf("⬜⬜⬜⬜⬛⬛⬜⬜⬜⬜⬜⬛⬛⬜⬜⬜⬛⬛⬛⬛⬜⬛⬛⬛⬛⬛⬜⬛⬛⬛⬜⬜⬜⬜⬛\n");
    printf("⬜⬛⬛⬛⬜⬛⬜⬛⬛⬛⬛⬛⬜⬛⬛⬛⬜⬛⬛⬜⬛⬜⬛⬛⬛⬛⬛⬛⬛⬛⬜⬛⬛⬛⬜\n");
    printf("⬜⬜⬜⬜⬛⬛⬜⬜⬜⬜⬜⬛⬜⬜⬜⬜⬛⬛⬜⬜⬜⬜⬜⬛⬛⬛⬜⬛⬛⬛⬜⬜⬜⬜⬛\n");
    printf("⬜⬛⬜⬛⬛⬛⬜⬛⬛⬛⬛⬛⬜⬛⬛⬛⬛⬛⬜⬛⬛⬛⬜⬛⬛⬛⬜⬛⬛⬛⬜⬛⬜⬛⬛\n");
    printf("⬜⬛⬛⬜⬜⬛⬜⬜⬜⬜⬜⬛⬜⬛⬛⬛⬛⬛⬜⬛⬛⬛⬜⬛⬛⬛⬜⬛⬛⬛⬜⬛⬛⬜⬜\n");
    printf("/n");
    printf("⬛⬜⬜⬜⬜⬛⬜⬛⬛⬛⬜⬛⬛⬜⬜⬜⬛⬛⬛⬜⬜⬜⬛\n");
    printf("⬜⬛⬛⬛⬛⬛⬜⬛⬛⬛⬜⬛⬜⬛⬛⬛⬜⬛⬜⬛⬛⬛⬜\n");
    printf("⬛⬜⬜⬜⬜⬛⬜⬜⬜⬜⬜⬛⬜⬛⬛⬛⬜⬛⬜⬜⬜⬜⬛\n");
    printf("⬛⬛⬛⬛⬜⬛⬜⬛⬛⬛⬜⬛⬜⬛⬛⬛⬜⬛⬜⬛⬛⬛⬛\n");
    printf("⬜⬜⬜⬜⬛⬛⬜⬛⬛⬛⬜⬛⬛⬜⬜⬜⬛⬛⬜⬛⬛⬛⬛\n");
    repair_a = 1;
    while (repair_a) 
    {
        printf("\n[제련소]\n1. 장비 강화\n2. 나가기\n선택: ");
        scanf("%d", &choice);

        switch (choice) 
        {
            //////////////////////////
            case 1:
            int choice2;
            printf("\n1. 착용중인 장비\n2. 인벤토리 장비\n어디장비를 강화하실건가요??");

            scanf("%d", &choice2);
            switch (choice2)
            {
                case 1:
                printf("\n[강화할 장비 리스트]\n");
                printf("용복이의 장비 \n");
                for (int i = 0; i < 6; i++) 
                {
                    printf("%d번 %d강 %s (공격:%d)\n",
                        i + 1, now_wear[i].upgrade, now_wear[i].name, now_wear[i].attack
                    );
                }
                printf("\n");
        
                printf("보유중인 강화조각 개수\n");
                printf("화염 조각: 작은[%d] 푸른[%d] 강렬한[%d] 미친[%d]\n",
                        Material_Pocket[0].count, Material_Pocket[1].count,
                        Material_Pocket[2].count, Material_Pocket[3].count);
                printf("보유 Money: %d원\n", money);

                printf("강화할 장비 번호 선택: ");
                scanf("%d", &upgradeIndex);

                if(now_wear[upgradeIndex - 1].type == 0)    // 내가 고른 번호에 아무것도 없으면
                {
                    printf("(거기에는 아무것도없어용)잘못된 번호를 고르셨어요\n");
                    continue;
                }
                else if ((0 < upgradeIndex) && (7 > upgradeIndex))
                {
                    upgradeEquipment();
                }
                else
                {
                    printf("(거기에는 아무것도없어용)잘못된 번호를 고르셨어요\n");
                    continue;
                }
                break;

                case 2:
                printf("\n[강화할 장비 리스트]\n");
                printf("인벤토리 장비 \n");
                for (int i = 0; i < 20; i++) 
                {
                        printf("%d번 %d강 %s (공격:%d)\n",
                            i + 1, Inventory[i].upgrade, Inventory[i].name, Inventory[i].attack
                        );
                }
                printf("\n");
        
                printf("보유중인 강화조각 개수\n");
                printf("화염 조각: 작은[%d] 푸른[%d] 강렬한[%d] 미친[%d]\n",
                        Material_Pocket[0].count, Material_Pocket[1].count,
                        Material_Pocket[2].count, Material_Pocket[3].count);
                printf("보유 Money: %d원\n", money);

                printf("강화할 장비 번호 선택: ");
                scanf("%d", &upgradeIndex);

                if(Inventory[upgradeIndex - 1].type == 0)    // 내가 고른 번호에 아무것도 없으면
                {
                    printf("(거기에는 아무것도없어용)잘못된 번호를 고르셨어요\n");
                    continue;
                }
                else if ((0 < upgradeIndex) && (7 > upgradeIndex))
                {
                    // upgradeEquipment(Inventory[upgradeIndex - 1].upgrade);
                    upgradeEquipment2();
                }
                else
                {
                    printf("(거기에는 아무것도없어용)잘못된 번호를 고르셨어요\n");

                }
                break;
            }

            break;

            //////////////////////////
            case 2:
            printf("나가기\n");
            repair_a = 0;
            break;
            //////////////////////////
            default:
            printf("잘못된 입력입니다.\n");
            break;
            //////////////////////////
        }
    }
}
// = repair_shop 이랑 같음


void battle_() // 전투 함수 // 반복문 사용해서 몬스터 불러오기, 데미지 넣기, 만약 내 턴에서 아이템을 사용한다면 바로 적 턴 
{   
    battle_switch = 1;
    while(battle_switch)
    {   
        while (1)/*몬스터의 hp가 0이 되거나, 내 hp가 0이 될 때까지 */
        {
            // system("clear");
            // 내가 만난 몬스터 정보 출력
            printf("%d %d\n", meet[0].minhp, meet[0].maxhp);
            printf("%s %d %d %d %d %d\n", meet[0].name, meet[0].maxhp, meet[0].maxatt, meet[0].maxdf, meet[0].weak, meet[0].strong);
            // 몬스터의 체력을 보여주는 UI
            print_monster_hp();

            printf("\n몬스터를 만났다!\n");
            // 🥚미래에 상태창이될 알들🥚
            printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
            printf("🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚\n");
            printf("🥚   (1) 공격 (2) 아이템 사용 (3) 도망치기                  🥚  [I] 아이템 확인       🥚\n");
            printf("🥚  ");print_hp();
            printf("                              🥚  [J] 인벤토리 확인     🥚\n");
            printf("🥚  ");print_mp();
            printf("                              🥚  [K] 착용장비 확인     🥚\n");
            
            printf("🥚  ");print_exp();
            printf("                              🥚  [M] 재료창 확인       🥚\n");
            printf("🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚🥚\n");
            printf("%d\n", map[z][me[0]][me[1]]);
            int att_fir_choice;

            scanf("%d", &att_fir_choice);/*1 : 공격 2 : 아이템 사용 3 : 도망치기*/
            if (att_fir_choice == 1)
            {
                printf("(1)물리공격  (2)마법공격\n");
                scanf("%d", &att_choice);
            
                if (att_choice == 1)
                {
                    printf("물리공격을 선택했습니다.\n");
                    int my_adamage = a_damage();
                    meet[0].maxhp -= (my_adamage - meet[0].maxdf);
                    printf("%d나의 물리데미지\n", my_adamage);
                }
                else if (att_choice == 2)
                {
                    printf("마법공격을 선택했습니다.\n");
                    
                    for (int i = 0; i <=11; i++)//마법 공력을 출력한다.
                    {
                        if (skills[i].need_level <= LEVEL)
                        {
                            printf("(%d) : %s\n",i, skills[i].skill_name);
                        }
                    }
                    printf("사용하실 마법을 고르세요!\n");
                    int magic_choice;
                    scanf("%d",&magic_choice);
                    if (mp <= skills[magic_choice].minus_mp)    //마나 부족하면 공격 못하게 하기
                    {
                        printf("마나가 부족해서 마법 공격을 실행할 수 없습니다.");
                        break;
                    }
                    else
                    {
                    printf("%s을 사용하셨습니다.",skills[magic_choice].skill_name);
                    mp -= skills[magic_choice].minus_mp;//mp 차감

                    // int soksung = 1;    // 속성값을 뽑아보자
                    // if (type_name[magic_choice] == meet[0].weak)
                    // {
                    //     soksung = 2;
                    // }
                    // if (type_name[magic_choice] == meet[0].strong)
                    // {
                    //     soksung = 0.5;
                    // }                
                    
                    
                    // //총 마법 데미지 
                    // int m_damage = (((magic_power * skills[magic_choice].magic_rate) * atack_all) * soksung);//(((기본 마법 공격력 마법 배율) * 모든 데미지 %) *약점 배율)
                    // meet[0].maxhp -= (m_damage - meet[0].maxdf);
                    // printf("%d\n", m_damage);
                    }   
                }
            }
            else if (att_fir_choice == 2)   //아이템 사용 후 적 턴 
            {
                show_inven();
            }
            else if (att_fir_choice == 3)   //도망치기
            {
                battle_switch = 0;
                battle_end=2;
                break;
            }
            else
            {
                printf("잘못 입력하셨습니다.\n");
                while (getchar() == '\n')
                {
                    continue;
                }
                
                continue;
            }
          

         
              
    
            if (meet[0].maxhp <= 0)
            {
                // system("clear");
                printf("승리 ! %d 경험치를 얻었어요 !", 50);
                exp_= exp_+ 50;
                if(exp_>= max_exp)
                {
                    level_up();
                }
                if(monster_count == 10)
                {
                    int boss_i = rand()%9 + 40;
                    int boss_j = rand()%9 + 40;
                    map[5][boss_i][boss_j] = 11;
                }
                
                if(((map[5][me[0]][me[1]]) == 11) && (hard == 1))
                {
                    system("clear");
                    printf("\n\n보스 처치!! 하드모드 시작합니다~\n");
                    hard = 2;
                    battle_switch = 0;
                    z = 0; // 마을로 바꿈
                    v_me[0] = 25; // 마을 시작좌표 초기화
                    v_me[1] = 25;
                    me[0] = 1; // 내 던전 위치 초기화
                    me[1] = 1;
                    seed ++;    // 랜덤값 ++
                    hp = max_hp;
                    mp = max_mp;
                    monster_count = 20; // 몬스터 마릿수 초기화
                    battle_switch = 0;
                    dungeon_switch = 0;
                    sleep(5);
                    break;
                }
                if(((map[5][me[0]][me[1]]) == 11) && (hard == 2))   // 하드모드에서 보스를 잡으면 동녀크 생성
                {
                    int bossh_i = rand()%9 + 40;
                    int bossh_j = rand()%9 + 40;
                    map[5][bossh_i][bossh_j] = 12;
                }
                if(((map[5][me[0]][me[1]]) == 12))
                {
                    printf("\n\n용복이는 이동녀크를 해치웠다!!");
                    system("clear");
                    battle_switch = 0;
                    dungeon_switch = 0;
                    main_switch = 0;
                    sleep(10);
                    // village();
                    break;
                }


                map[z][me[0]][me[1]] = 0;
                monster_count --;
                battle_switch = 0;
                break;
            }

            //적 턴 (내 공격이 끝나고 바로 시작 )
            printf("적 턴입니다.\n");
            hp -= meet[0].maxatt - my_defense(); // 내 체력 = 몬스터공격 - 내방어력합산
            // printf("%d내방어력\n\n", my_defense());
            printf("%d ", meet[0].maxatt);
            printf("%d를 받아서 체력이 %d 남았어요!\n", (meet[0].maxatt - my_defense()), hp);
            //적 데미지
            //hp = hp - (적 데미지)

            if (hp <= 0)    // 완성
            {
                printf("패배! 마을로 돌아갑니다.\n");
                battle_switch = 0;
                z = 0; // 마을로 바꿈
                v_me[0] = 25; // 마을 시작좌표 초기화
                v_me[1] = 25;
                me[0] = 1; // 내 던전 위치 초기화
                me[1] = 1;
                seed ++;    // 랜덤값 ++
                exp_ = exp_/2;
                hp = max_hp;
                mp = max_mp;
                monster_count = 20; // 몬스터 마릿수 초기화
                battle_switch = 0;
                dungeon_switch = 0;
                // village();
                break;
            
            } 

            getchar();
        }
    }
}   

int a_damage()  // 물리공격 데미지 계산 함수
{
    int weapon; // 내가 착용하고 있는 무기인덱스값 저장
    // 내무기찾기
    for (int i = 0; i < 6; i++)
    {
        if(now_wear[i].type == 1)
        {
            weapon = i;
        }
    }


    int upgrade_bonuse = 1; // 강화도에 따른 보너스수치변수
    switch (now_wear[weapon].upgrade) 
    {  // 내가 고른 무기 강화도 확인
        case 0: upgrade_bonuse = 100;
            break;
        case 1: upgrade_bonuse = 105;
            break;
        case 2: upgrade_bonuse = 110;
            break;
        case 3: upgrade_bonuse = 115;
            break;
        case 4: upgrade_bonuse = 120;
            break;
        case 5: upgrade_bonuse = 130;
            break;
        case 6: upgrade_bonuse = 140;
            break;
        case 7: upgrade_bonuse = 150;
            break;
        case 8: upgrade_bonuse = 170;
            break;
        case 9: upgrade_bonuse = 190;
            break;
        case 10: upgrade_bonuse = 250;
            break;
    }
    
    int critical_ok = rand()%100;   // 난수값 생성
    int critical_no = 1;    // 계산식에 적용할 크리티컬 변수

    if (critical_ok < critical)
    {
        critical_no = 2;
    }
    else
    {
        critical_no = 1;
    }
   
    int soksung = 1;    // 속성값을 뽑아보자
    if (now_wear[weapon].element == meet[0].weak)
    {
        soksung = 2;
    }
    if (now_wear[weapon].element == meet[0].strong)
    {
        soksung = 0.5;
    }
    
    int enchant_bonus = 1;  // 계산식에 적용할 인첸트 %변수
    for(int i = -30; i < 21; i ++)
    {
        if(now_wear[weapon].enchant_bonus == i)
        {
            enchant_bonus = (100 + i) / 100;
        }
    }
    int my_total_damage = (power + (((now_wear[weapon].attack * upgrade_bonuse)/100) * enchant_bonus)) * atack_all;
    int my_a_damage = ((my_total_damage * soksung) * critical_no) - meet[0].maxdf;

    return my_a_damage;
};


int my_defense()
{
    int total_defense = 0;
    for (int i = 0; i < 6; i++)
    {
        if(now_wear[i].type > 1)
        {
            int upgrade_bonuse; // 강화도에 따른 보너스수치변수

            switch (now_wear[i].upgrade) 
            {  // 내가 고른 무기 강화도 확인
                case 0: upgrade_bonuse = 100;
                    break;
                case 1: upgrade_bonuse = 1.5;
                    break;
                case 2: upgrade_bonuse = 110;
                    break;
                case 3: upgrade_bonuse = 115;
                    break;
                case 4: upgrade_bonuse = 120;
                    break;
                case 5: upgrade_bonuse = 130;
                    break;
                case 6: upgrade_bonuse = 140;
                    break;
                case 7: upgrade_bonuse = 150;
                    break;
                case 8: upgrade_bonuse = 170;
                    break;
                case 9: upgrade_bonuse = 190;
                    break;
                case 10: upgrade_bonuse = 250;
                    break;
            }

            total_defense += (now_wear[i].defense * upgrade_bonuse);

        }

    }

    total_defense = total_defense/100;
    return total_defense;
}

void print_monster_hp()
{
    int meet_max_hp = meet[0].minhp;

    printf("H P : ");
    int hp_ten = meet_max_hp / 10; // 경험치의 10프로를 저장

    int hp_print = 0;  // 내가 출력해줄 🟥 갯수 정하기

    if ((0 < meet[0].maxhp) && (hp <= hp_ten))  // 현재 경험치가 0 보다크고 10프로보다 같거나 작을때
    {
        hp_print = 1;  // 출력할 🟥 갯수를 + 1
    }
    else if ((meet[0].maxhp <= hp_ten * 2))
    {
        hp_print = 2;
    }
    else if ((meet[0].maxhp <= hp_ten * 3))
    {
        hp_print = 3;
    }
    else if ((meet[0].maxhp <= hp_ten * 4))
    {
        hp_print = 4;
    }
    else if ((meet[0].maxhp <= hp_ten * 5))
    {
        hp_print = 5;
    }
    else if ((meet[0].maxhp <= hp_ten * 6))
    {
        hp_print = 6;
    }
    else if ((meet[0].maxhp <= hp_ten * 7))
    {
        hp_print = 7;
    }
    else if ((meet[0].maxhp <= hp_ten * 8))
    {
        hp_print = 8;
    }
    else if ((meet[0].maxhp < hp_ten * 10))
    {
        hp_print = 9;
    }
    else if ((meet[0].maxhp == meet[0].minhp))
    {
        hp_print = 10;
    }
    
    for (int i = 0; i < 10; i++)
    {
        if(hp_print > 0)   // 내가 출력해줄 🟥 갯수가 있는지 확인
        {
            printf("🟥");   // 출력해주기
            hp_print --;   // 갯수 차감
        }
        else
        {
            printf("⬜");   // 나머지는 하양색
        }
    }   
}

'C언어' 카테고리의 다른 글

포인터 수업  (0) 2025.03.26
복피지 영상  (0) 2025.03.25
복피지 3/24  (0) 2025.03.24
복피지에 필요한 함수들  (0) 2025.03.24
복피지 코드 > 마을맵,던전맵 추가 ver  (0) 2025.03.22
'C언어' 카테고리의 다른 글
  • 포인터 수업
  • 복피지 영상
  • 복피지 3/24
  • 복피지에 필요한 함수들
joo_coding
joo_coding
2025.02.18~
  • joo_coding
    주코딩일지
    joo_coding
  • 전체
    오늘
    어제
    • 분류 전체보기 (132)
      • 일지 (19)
      • 계획표 (7)
      • C언어 (35)
        • 연습장 (12)
      • 과제 (2)
      • C++ (3)
      • python (28)
        • 연습장 (11)
      • TCP IP (4)
      • DB (2)
      • ubuntu (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    c언어 #vscode #gcc #윈도우 #c언어윈도우 #gcc윈도우 #vscode윈도우 #c #c++
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
joo_coding
복피지 최종
상단으로

티스토리툴바