Created
April 12, 2018 14:46
-
-
Save polonez/4064d09ff7397fa22640d06f82036e8b to your computer and use it in GitHub Desktop.
puyopuyo (game)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #include <stdio.h> | |
| #include <stdlib.h> | |
| #include <malloc.h> | |
| #include <conio.h> | |
| #include <windows.h> | |
| #define LOG_TAB -12 | |
| #define LEFT_KEY 17 | |
| #define UP_KEY 18 | |
| #define RIGHT_KEY 19 | |
| #define DOWN_KEY 20 | |
| int level[2]; | |
| int map[2][20][20]; | |
| int mapx[2]={2,40}; | |
| int mapy[2]={1,1}; | |
| int H=12,W=6; | |
| int pung = -123; | |
| int bhp = 83; | |
| int pung_len = 4; /// ∏¿Ã∏È ≈Õ¡ˆ∞‘µ«¥¬ ∞≥ºˆ. default = 4∞≥ | |
| int colorset[9] = {208, 224, 160, 144, 176, 192}; | |
| int color_cnt[5]={0,3,4,5,6}; | |
| int badak[2][10]= {{12,12,12,12,12,12,12},{12,12,12,12,12,12,12}}; | |
| int stack_size = 2; | |
| int score_y[20] = {0,8,16,32,64,96,128,160,192,224,256,288,320,352,388,416,448,480,512}; | |
| int score_p[10] = {0,2,3,4,5,6,7,10}; | |
| int score_c[10] = {0,3,6,12,24}; | |
| int banha[2]; | |
| int nowrensa[2] = {0,0}; | |
| int maxrensa[2] = {0,0}; | |
| int dx[4] = {-1,0,1,0}; | |
| int dy[4] = {0,1,0,-1}; | |
| bool islog = false; | |
| char log[1000010]; | |
| int loglen=0; | |
| struct Puyo{ | |
| int x; | |
| int y; | |
| int color[2]; | |
| int dir; | |
| } p[2][5], now[2], pre[2]; | |
| void gotoxy(int x, int y); | |
| void setcolor(int color); | |
| void replace_puyo(int user); | |
| void dosomething(char dd); | |
| int* is_combo(int user); | |
| int combo_count(int user); | |
| void rewrite_map(int user); | |
| void make_map() | |
| { | |
| int i, j; | |
| for(int player=0; player<2; player++) | |
| { | |
| for(i=0; i<=H+1; i++) | |
| { | |
| map[player][i][0] = -1; | |
| map[player][i][W+1] = -1; | |
| } | |
| for(j=0; j<=W+1; j++) | |
| { | |
| map[player][0][j] = -1; | |
| map[player][H+1][j] = -1; | |
| } | |
| for(i=1; i<=H; i++) | |
| for(j=1; j<=W; j++) | |
| map[player][i][j] = -19291; | |
| } | |
| } | |
| void inil() | |
| { | |
| static const char *const init_message = | |
| "ª—ø‰ª—ø‰ ººªÛø° ø¿Ω≈ ∞Õ¿ª »Øøµ«’¥œ¥Ÿ!\n" | |
| "≥≠¿Ãµµ∏¶ º±≈√«— »ƒ Enter ≈∞∏¶ ¥≠∑Ø¡÷ººø‰\n" | |
| "≥≠¿Ãµµ (1~4) : "; | |
| fputs(init_message, stdout); | |
| scanf("%d",&level[0]); | |
| while(level[0]<1 || level[0] > 4) | |
| { | |
| system("cls"); | |
| printf("«Ê§ª ¥ŸΩ√ ¿‘∑¬«ÿ¡÷ººøÎ§ª\n"); | |
| printf("≥≠¿Ãµµ (1~4) : "); | |
| scanf("%d",&level[0]); | |
| } | |
| level[1]= level[0]; | |
| system("cls"); | |
| printf("ª—ø‰ ∏Ó∞≥∞° ∏¿Ã∏È ≈Õ¡ˆ∞‘ «“±Óø‰??\n"); | |
| printf("∞≥ºˆ (2~7) : "); | |
| scanf("%d",&pung_len); | |
| while(pung_len<2 || pung_len > 7) | |
| { | |
| system("cls"); | |
| printf("«Ê§ª ¥ŸΩ√ ¿‘∑¬«ÿ¡÷ººøÎ§ª\n"); | |
| printf("∞≥ºˆ (2~10) : "); | |
| scanf("%d",&pung_len); | |
| } | |
| system("cls"); | |
| srand(0); | |
| make_map(); | |
| if(islog) | |
| { | |
| log[0] = level[0]; | |
| log[1] = LOG_TAB; | |
| loglen = 2; | |
| } | |
| for(int player=0; player<2; player++) | |
| for(int i=0; i<5; i++) | |
| { | |
| replace_puyo(player); | |
| } | |
| } | |
| void shadow_change(int user) | |
| { | |
| gotoxy(mapx[user] + pre[user].y*2,mapy[user] + pre[user].x); | |
| printf(" "); | |
| gotoxy(mapx[user] + (pre[user].y+dy[pre[user].dir])*2,mapy[user]+pre[user].x + dx[pre[user].dir]); | |
| printf(" "); | |
| now[user].x = badak[user][now[user].y]; | |
| if(now[user].dir %2 && now[user].x > badak[user][now[user].y + dy[now[user].dir]]) | |
| now[user].x = badak[user][now[user].y + dy[now[user].dir]]; | |
| if(now[user].x + dx[now[user].dir] > badak[user][now[user].y]) | |
| { | |
| now[user].x = badak[user][now[user].y] -1; | |
| } | |
| } | |
| void paint_color(int user) | |
| { | |
| int i, j; | |
| pre[user] = now[user]; | |
| if(pre[user].dir == 2) | |
| { | |
| map[user][badak[user][pre[user].y]][pre[user].y] = pre[user].color[1]; | |
| gotoxy(mapx[user]+pre[user].y*2,mapy[user]+badak[user][pre[user].y]); | |
| if(pre[user].color[1] == bhp) | |
| { | |
| setcolor(15); | |
| printf("£¿"); | |
| } | |
| else | |
| { | |
| setcolor(colorset[pre[user].color[1]]); | |
| printf(" "); | |
| } | |
| map[user][badak[user][pre[user].y]-1][pre[user].y] = pre[user].color[0]; | |
| gotoxy(mapx[user]+pre[user].y*2,mapy[user]+badak[user][pre[user].y]-1); | |
| if(pre[user].color[0] == bhp) | |
| { | |
| setcolor(15); | |
| printf("£¿"); | |
| } | |
| else | |
| { | |
| setcolor(colorset[pre[user].color[0]]); | |
| printf(" "); | |
| } | |
| badak[user][pre[user].y] -=2; | |
| } | |
| else | |
| { | |
| map[user][badak[user][pre[user].y]][pre[user].y] = pre[user].color[0]; | |
| gotoxy(mapx[user]+pre[user].y*2,mapy[user]+badak[user][pre[user].y]); | |
| if(pre[user].color[0] == bhp) | |
| { | |
| setcolor(15); | |
| printf("£¿"); | |
| } | |
| else{ | |
| setcolor(colorset[pre[user].color[0]]); | |
| printf(" ");} | |
| badak[user][pre[user].y]--; | |
| map[user][badak[user][pre[user].y+dy[pre[user].dir]]][pre[user].y+dy[pre[user].dir]]=pre[user].color[1]; | |
| gotoxy(mapx[user]+(pre[user].y+dy[pre[user].dir])*2,mapy[user]+badak[user][pre[user].y+dy[pre[user].dir]]); | |
| if(pre[user].color[1] == bhp) | |
| { | |
| setcolor(15); | |
| printf("£¿"); | |
| } | |
| else{ | |
| setcolor(colorset[pre[user].color[1]]); | |
| printf(" ");} | |
| badak[user][pre[user].y+dy[pre[user].dir]]--; | |
| } | |
| } | |
| void dosomething(char dd) | |
| { | |
| int user = 0; | |
| if(dd == 'd' || dd==LEFT_KEY) // left | |
| { | |
| if(dd == LEFT_KEY) | |
| user = 1; | |
| pre[user] = now[user]; | |
| if(now[user].y > 1) | |
| { | |
| if(now[user].dir == 3) | |
| { | |
| if(now[user].y > 2 && badak[user][now[user].y-2]>=0) | |
| now[user].y --; | |
| } | |
| else if(badak[user][now[user].y-1]>=0) | |
| { | |
| now[user].y--; | |
| } | |
| } | |
| shadow_change(user); | |
| } | |
| if(dd == 'g' || dd==RIGHT_KEY) // right | |
| { | |
| if(dd == RIGHT_KEY) | |
| user = 1; | |
| pre[user] = now[user]; | |
| if(now[user].y < W) | |
| { | |
| if(now[user].dir == 1) | |
| { | |
| if( now[user].y <W-1 && badak[user][now[user].y+2]>=0) | |
| now[user].y ++; | |
| } | |
| else if(badak[user][now[user].y+1]>=0) | |
| { | |
| now[user].y++; | |
| } | |
| } | |
| shadow_change(user); | |
| } | |
| if(dd == 'z' || dd == 'r' || dd=='.' || dd==UP_KEY) // turn left | |
| { | |
| if(dd == '.' || dd == UP_KEY) | |
| user = 1; | |
| pre[user] = now[user]; | |
| if(now[user].dir%2 == 0) | |
| if(badak[user][now[user].y-1]<0 &&badak[user][now[user].y+1]<0) | |
| now[user].dir = (now[user].dir+3)%4; | |
| now[user].dir = (now[user].dir+3)%4; | |
| if(now[user].dir == 3 && (now[user].y == 1 || badak[user][now[user].y-1]<0)) | |
| { | |
| now[user].y ++; | |
| } | |
| if(now[user].dir == 1 && (now[user].y == W || badak[user][now[user].y+1]<0)) | |
| { | |
| now[user].y --; | |
| } | |
| shadow_change(user); | |
| } | |
| if(dd == 'x' || dd == '/') //turn right | |
| { | |
| if(dd == '/') | |
| user = 1; | |
| pre[user] = now[user]; | |
| if(now[user].dir%2 == 0) | |
| if(badak[user][now[user].y-1]<0 &&badak[user][now[user].y+1]<0) | |
| now[user].dir = (now[user].dir+1)%4; | |
| now[user].dir = (now[user].dir+1)%4; | |
| if(now[user].dir == 3 && (now[user].y == 1 || badak[user][now[user].y-1]<0)) | |
| { | |
| now[user].y ++; | |
| } | |
| if(now[user].dir == 1 && (now[user].y == W || badak[user][now[user].y+1]<0)) | |
| { | |
| now[user].y --; | |
| } | |
| shadow_change(user); | |
| } | |
| if(dd == 'v' || dd=='f'|| dd==DOWN_KEY) // down | |
| { | |
| if(dd == DOWN_KEY) | |
| user = 1; | |
| pre[user] = now[user]; | |
| setcolor(15); | |
| gotoxy(mapx[user]+pre[user].y*2,mapy[user]+pre[user].x); | |
| printf(" "); | |
| gotoxy(mapx[user]+2*(pre[user].y+dy[pre[user].dir]),mapy[user]+pre[user].x+dx[pre[user].dir]); | |
| printf(" "); | |
| if(now[user].dir == 2) | |
| { | |
| map[user][badak[user][now[user].y]][now[user].y] = now[user].color[1]; | |
| gotoxy(mapx[user]+pre[user].y*2,mapy[user]+badak[user][pre[user].y]); | |
| if(pre[user].color[1] == bhp) | |
| { | |
| setcolor(15); | |
| printf("£¿"); | |
| } | |
| else{ | |
| setcolor(colorset[pre[user].color[1]]); | |
| printf(" ");} | |
| if(islog) | |
| { | |
| log[loglen++] = now[0].y/10; | |
| log[loglen++] = now[0].y%10; | |
| log[loglen++] = LOG_TAB; | |
| log[loglen++] = badak[0][now[0].y]/10; | |
| log[loglen++] = badak[0][now[0].y]%10; | |
| log[loglen++] = LOG_TAB; | |
| log[loglen++] = now[0].color[1]/10; | |
| log[loglen++] = now[0].color[1]%10; | |
| log[loglen++] = LOG_TAB; | |
| } | |
| badak[user][now[user].y] --; | |
| map[user][badak[user][now[user].y]][now[user].y+dy[now[user].dir]] = now[user].color[0]; | |
| gotoxy(mapx[user]+pre[user].y*2,mapy[user]+badak[user][pre[user].y]); | |
| if(pre[user].color[0] == bhp) | |
| { | |
| setcolor(15); | |
| printf("£¿"); | |
| } | |
| else{ | |
| setcolor(colorset[pre[user].color[0]]); | |
| printf(" ");} | |
| if(islog) | |
| { | |
| log[loglen++] = (now[0].y+dy[now[0].dir])/10; | |
| log[loglen++] = (now[0].y+dy[now[0].dir])%10; | |
| log[loglen++] = LOG_TAB; | |
| log[loglen++] = badak[0][now[0].y]/10; | |
| log[loglen++] = badak[0][now[0].y]%10; | |
| log[loglen++] = LOG_TAB; | |
| log[loglen++] = now[0].color[0]/10; | |
| log[loglen++] = now[0].color[0]%10; | |
| log[loglen++] = LOG_TAB; | |
| } | |
| badak[user][now[user].y] --; | |
| } | |
| else | |
| { | |
| map[user][badak[user][now[user].y]][now[user].y] = now[user].color[0]; | |
| gotoxy(mapx[user]+pre[user].y*2,mapy[user]+badak[user][pre[user].y]); | |
| if(pre[user].color[0] == bhp) | |
| { | |
| setcolor(15); | |
| printf("£¿"); | |
| } | |
| else{ | |
| setcolor(colorset[pre[user].color[0]]); | |
| printf(" ");} | |
| if(islog) | |
| { | |
| log[loglen++] = now[0].y/10; | |
| log[loglen++] = now[0].y%10; | |
| log[loglen++] = LOG_TAB; | |
| log[loglen++] = badak[0][now[0].y]/10; | |
| log[loglen++] = badak[0][now[0].y]%10; | |
| log[loglen++] = LOG_TAB; | |
| log[loglen++] = now[0].color[0]/10; | |
| log[loglen++] = now[0].color[0]%10; | |
| log[loglen++] = LOG_TAB; | |
| } | |
| badak[user][now[user].y]--; | |
| map[user][badak[user][now[user].y+dy[now[user].dir]]][now[user].y+dy[now[user].dir]] = now[user].color[1]; | |
| gotoxy(mapx[user]+(pre[user].y+dy[pre[user].dir])*2,mapy[user]+badak[user][pre[user].y+dy[pre[user].dir]]); | |
| if(pre[user].color[1] == bhp) | |
| { | |
| setcolor(15); | |
| printf("£¿"); | |
| } | |
| else{ | |
| setcolor(colorset[pre[user].color[1]]); | |
| printf(" ");} | |
| if(islog) | |
| { | |
| log[loglen++] = (now[0].y+dy[now[0].dir])/10; | |
| log[loglen++] = (now[0].y+dy[now[0].dir])%10; | |
| log[loglen++] = LOG_TAB; | |
| log[loglen++] = badak[0][now[0].y+dy[now[0].dir]]/10; | |
| log[loglen++] = badak[0][now[0].y+dy[now[0].dir]]%10; | |
| log[loglen++] = LOG_TAB; | |
| log[loglen++] = now[0].color[1]/10; | |
| log[loglen++] = now[0].color[1]%10; | |
| log[loglen++] = LOG_TAB; | |
| } | |
| badak[user][now[user].y+dy[now[user].dir]] -- ; | |
| } | |
| nowrensa[user] = combo_count(user); | |
| if(nowrensa[user] > maxrensa[user]) | |
| maxrensa[user] = nowrensa[user]; | |
| setcolor(15); | |
| gotoxy(mapx[user]+12,mapy[user]+3+H); | |
| printf("%3d",nowrensa[user]); | |
| gotoxy(mapx[user]+12,mapy[user]+4+H); | |
| printf("%3d",maxrensa[user]); | |
| /* | |
| * gotoxy(0,15); | |
| * setcolor(15); | |
| * printf("\n\n«ˆ¿Á ƒfi∫∏ : %d",nowrensa[user]); | |
| * printf("\n√÷¥Î ƒfi∫∏ : %d",maxrensa[user]); | |
| * printf("\nπÊ«ÿª—ø‰ ºˆ : %d ",banha[user]);*/ | |
| replace_puyo(user); | |
| } | |
| if(dd == 'q' || loglen > 1000000) | |
| { | |
| badak[0][3] = -1; | |
| badak[1][3] = -1; | |
| } | |
| } | |
| void replace_puyo(int user) | |
| { | |
| int i; | |
| now[user] = p[user][0]; | |
| now[user].y = 3; | |
| now[user].x = badak[user][3]; | |
| for(i=0; i<stack_size-1; i++) | |
| { | |
| p[user][i] = p[user][i+1]; | |
| } | |
| if(banha[(user+1)%2]>0 && (rand()%10>3)){banha[(user+1)%2]--; p[user][stack_size-1].color[0] = bhp;} | |
| else{p[user][stack_size-1].color[0] = rand()%color_cnt[level[user]];} | |
| if(banha[(user+1)%2]>0 && (rand()%10>3)){banha[(user+1)%2]--; p[user][stack_size-1].color[1] = bhp;} | |
| else{p[user][stack_size-1].color[1] = rand()%color_cnt[level[user]];} | |
| p[user][stack_size-1].dir = 0; | |
| } | |
| void queue_clear(int user) | |
| { | |
| setcolor(15); | |
| gotoxy(20+16*user,1); | |
| printf(" "); | |
| gotoxy(20+16*user,3); | |
| printf(" "); | |
| gotoxy(22+16*user,2); | |
| printf(" "); | |
| gotoxy(18+16*user,2); | |
| printf(" "); | |
| } | |
| void print_queue(int user) | |
| { | |
| int i=0; | |
| queue_clear(user); | |
| gotoxy(20+16*user,2); | |
| if(now[user].color[0] == bhp) | |
| { | |
| setcolor(15); | |
| printf("£¿"); | |
| } | |
| else{ | |
| setcolor(colorset[now[user].color[0]]); | |
| printf(" "); | |
| } | |
| gotoxy(20+16*user+2*dy[now[user].dir],2+dx[now[user].dir]); | |
| if(now[user].color[1] == bhp){ | |
| setcolor(15); | |
| printf("£¿"); | |
| } | |
| else | |
| { | |
| setcolor(colorset[now[user].color[1]]); | |
| printf(" "); | |
| } | |
| for(i=0; i<stack_size; i++) | |
| { | |
| gotoxy(25+6*user,i*4+4); | |
| if(p[user][i].color[0] == bhp) | |
| { | |
| setcolor(15); | |
| printf("£¿"); | |
| } | |
| else{ | |
| setcolor(colorset[p[user][i].color[0]]); | |
| printf(" ");} | |
| gotoxy(25+6*user,i*4+3); | |
| if(p[user][i].color[1] == bhp) | |
| { | |
| setcolor(15); | |
| printf("£¿"); | |
| } | |
| else{ | |
| setcolor(colorset[p[user][i].color[1]]); | |
| printf(" ");} | |
| } | |
| } | |
| void process() | |
| { | |
| int i, j; | |
| char dd; | |
| setcolor(15); | |
| for(int player=0; player<2; player++) | |
| { | |
| setcolor(15); | |
| for(i=0; i<=H+1; i++) | |
| { | |
| gotoxy(mapx[player],mapy[player]+i); | |
| for(j=0; j<=W+1; j++) | |
| { | |
| if(map[player][i][j]==-1) | |
| { | |
| printf("¢æ"); | |
| } | |
| else if(map[player][i][j] == bhp) | |
| { | |
| printf("£¿"); | |
| } | |
| else | |
| { | |
| printf(" "); | |
| } | |
| } | |
| } | |
| gotoxy(mapx[player],mapy[player]+2+H); | |
| printf("≥≤¿∫ πÊ«ÿª—ø‰ : %3d",banha[player]); | |
| gotoxy(mapx[player],mapy[player]+3+H); | |
| printf("«ˆ¿Á ƒfi∫∏ : %3d",nowrensa[player]); | |
| gotoxy(mapx[player],mapy[player]+4+H); | |
| printf("√÷¥Î ƒfi∫∏ : %3d",maxrensa[player]); | |
| } | |
| while(1) | |
| { | |
| setcolor(15); | |
| gotoxy(mapx[0]+16,mapy[0]+2+H); | |
| printf("%3d",banha[1]); | |
| gotoxy(mapx[1]+16,mapy[1]+2+H); | |
| printf("%3d",banha[0]); | |
| for(int player=0; player<2; player++) | |
| { | |
| gotoxy(mapx[player]+now[player].y*2,mapy[player]+now[player].x); | |
| if(now[player].color[0] == bhp) | |
| { | |
| setcolor(15); | |
| printf("£¿"); | |
| } | |
| else{ | |
| setcolor(colorset[now[player].color[0]]/16); | |
| printf("°‡");} | |
| gotoxy(mapx[player]+(now[player].y+dy[now[player].dir])*2,mapy[player]+now[player].x + dx[now[player].dir]); | |
| if(now[player].color[1] == bhp) | |
| { | |
| setcolor(15); | |
| printf("£¿"); | |
| } | |
| else{ | |
| setcolor(colorset[now[player].color[1]]/16); | |
| printf("°‡");} | |
| print_queue(player); | |
| } | |
| setcolor(15); | |
| dd = getch(); | |
| if(dd<0){ | |
| dd = getch(); | |
| switch(dd) | |
| { | |
| case 80: // down | |
| dd = DOWN_KEY; | |
| break; | |
| case 77: // right key | |
| dd = RIGHT_KEY; | |
| break; | |
| case 72: // up | |
| dd = UP_KEY; | |
| break; | |
| case 75: // left | |
| dd = LEFT_KEY; | |
| break; | |
| } | |
| } | |
| dosomething(dd); | |
| if(badak[0][3] < 0 || badak[1][3] < 0) | |
| { | |
| system("cls"); | |
| break; | |
| } | |
| } | |
| printf("≤ ¥Á≈•~\n\n"); | |
| } | |
| void dds() | |
| { | |
| int i=0; | |
| for(i=0; i<16; i++) | |
| { | |
| setcolor(i*16); | |
| printf(" "); | |
| } | |
| getchar(); | |
| } | |
| void makelog() | |
| { | |
| int i; | |
| char k; | |
| k = log[0]; | |
| for(i=1; i<loglen; i++) | |
| { | |
| log[i] = log[i-1] ^ log[i]; | |
| } | |
| } | |
| void output() | |
| { | |
| char y; | |
| printf("¿Ã¿¸ ∑Œ±◊∆ƒ¿œ¿ª ¡ˆøÏ∞Ì ªı∑Œ µ§æÓæ≤Ω√∞⁄Ω¿¥œ±Ó??\n(y/n)"); | |
| fflush(stdin); | |
| scanf("%c",&y); | |
| if(!islog){ printf("æ∆¡˜ ∑Œ±◊∆ƒ¿œ ±‚∑œ 滫œ∞‘«ÿ≥˘¿Ω§ª \nfake∂ı¥Ÿ!! «÷«÷«œ(;;)\n\n");} | |
| else if(y == 'y' || y == 'Y') | |
| { | |
| printf("∑Œ±◊∆ƒ¿œ¿ª ¿˙¿Â¡fl¿‘¥œ¥Ÿ. ¿·Ω√∏∏ ±‚¥Ÿ∑¡¡÷Ω Ω√ø¿"); | |
| FILE *fp; | |
| fp = fopen("loging.txt","wt"); | |
| printf("."); | |
| makelog(); | |
| printf("."); | |
| for(int i=0; i<loglen; i++) | |
| { | |
| fprintf(fp,"%c",log[i]); | |
| } | |
| printf("."); | |
| printf("\n\n∑Œ±◊∆ƒ¿œ ¿˙¿Â øœ∑·!\n¿Ã¡¶ loging.txt ∆ƒ¿œ¿ª \n\n"); | |
| setcolor(12); | |
| printf("[email protected]"); | |
| setcolor(15); | |
| printf("∑Œ ∫∏≥ª¡÷ººøµ~\n\n"); | |
| } | |
| printf("contact\nP.H. = "); | |
| setcolor(12); | |
| printf("010-5l26-34l9\n"); | |
| setcolor(15); | |
| printf("Blog = "); | |
| setcolor(12); | |
| printf("http://hinohie.tistory.com »˜≥Û¿« ¿‚«–¥ŸΩƒ\n"); | |
| setcolor(15); | |
| printf("Email = "); | |
| setcolor(12); | |
| printf("[email protected]\n [email protected]\n [email protected]\n\n"); | |
| setcolor(15); | |
| printf("¡¶¿€¿⁄ : »˜≥λ˜ø°\n\n"); | |
| system("pause"); | |
| } | |
| int main() | |
| { | |
| int i, j; | |
| inil(); | |
| process(); | |
| output(); | |
| return 0; | |
| } | |
| void gotoxy(int x, int y) | |
| { | |
| COORD pos = {x,y}; | |
| SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos); | |
| } | |
| void setcolor(int color) | |
| { | |
| SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), color); | |
| } | |
| void bfs(int sx, int sy,int user) | |
| { | |
| int i, j; | |
| int queue[100][2]; | |
| int mark[20][20]; | |
| int q, r; | |
| int tx, ty; | |
| int t[2]; | |
| for(i=0; i<=H; i++) | |
| for(j=1; j<=W; j++) | |
| mark[i][j] = 0; | |
| q=0; | |
| r=1; | |
| queue[0][0] = sx; | |
| queue[0][1] =sy; | |
| mark[sx][sy] = 1; | |
| while(q<r) | |
| { | |
| t[0] = queue[q][0]; | |
| t[1] = queue[q][1]; | |
| for(i=0; i<4; i++) | |
| { | |
| tx = t[0] + dx[i]; | |
| ty = t[1] + dy[i]; | |
| if(tx>0 && tx<=H) | |
| { | |
| if(ty>0 && ty<=W) | |
| { | |
| if(mark[tx][ty] == 0) | |
| { | |
| if(map[user][tx][ty] == map[user][t[0]][t[1]]) | |
| { | |
| queue[r][0] = tx; | |
| queue[r][1] = ty; | |
| mark[tx][ty] = 1; | |
| r++; | |
| } | |
| } | |
| } | |
| } | |
| } | |
| q++; | |
| } | |
| if(r >= pung_len) | |
| { | |
| for(i=0; i<r; i++) | |
| { | |
| map[user][queue[i][0]][queue[i][1]] = pung + map[user][queue[i][0]][queue[i][1]]; | |
| for(j=0; j<4; j++) | |
| { | |
| if(map[user][queue[i][0]+dx[j]][queue[i][1]+dy[j]] == bhp) | |
| { | |
| map[user][queue[i][0]+dx[j]][queue[i][1]+dy[j]] +=pung; | |
| } | |
| } | |
| } | |
| } | |
| } | |
| int* is_combo(int user) | |
| { | |
| int i, j, k; | |
| for(i=1; i<=H; i++) | |
| { | |
| for(j=1; j<=W; j++) | |
| { | |
| if(map[user][i][j] >=0 && map[user][i][j]!=bhp) | |
| { | |
| bfs(i,j,user); | |
| } | |
| } | |
| } | |
| int* pp; | |
| pp = (int*)malloc(sizeof(int)*color_cnt[level[user]]); | |
| for(i=0; i<color_cnt[level[user]]; i++) | |
| { | |
| *(pp+i) = 0; | |
| } | |
| for(i=1; i<=W; i++) | |
| { | |
| k=H; | |
| for(j=H; j>=0; j--) | |
| { | |
| if(map[user][j][i] >= 0) | |
| { | |
| map[user][k][i] = map[user][j][i]; | |
| k--; | |
| } | |
| else | |
| { | |
| if((map[user][j][i] >= pung )&& (map[user][j][i] <=(pung + color_cnt[level[user]]))) | |
| { | |
| (*(pp+(map[user][j][i] - pung)) )++; | |
| continue; | |
| } | |
| else if(map[user][j][i] == pung+bhp) | |
| continue; | |
| break; | |
| } | |
| } | |
| badak[user][i] = k; | |
| for(j=k; j>0; j--) | |
| { | |
| map[user][j][i] = -19291; | |
| } | |
| if(k>0) | |
| { | |
| map[user][j][i] = -1; | |
| } | |
| } | |
| return pp; | |
| } | |
| void rewrite_map(int user) | |
| { | |
| int i, j; | |
| for(i=1; i<=W; i++) | |
| { | |
| for(j=0; j<=H; j++) | |
| { | |
| gotoxy(mapx[user]+i*2,mapy[user]+j); | |
| setcolor(15); | |
| if(map[user][j][i] == -1) | |
| printf("¢æ"); | |
| else if(map[user][j][i] == bhp) | |
| printf("£¿"); | |
| else | |
| { | |
| if(map[user][j][i] >= 0) | |
| { | |
| setcolor(colorset[map[user][j][i]]); | |
| } | |
| printf(" "); | |
| } | |
| } | |
| } | |
| } | |
| int score(int* pp, int cnt,int user) | |
| { | |
| int yonsei; | |
| int many=0; | |
| int collor; | |
| yonsei = score_y[cnt>18?18:cnt]; | |
| int i, j, k; | |
| j=0; | |
| for(i=0; i<color_cnt[level[user]]; i++) | |
| { | |
| if(*(pp+i) > 0) | |
| { | |
| j++; | |
| many += score_p[*(pp+i)>11?7:*(pp+i)>4?*(pp+i) -4:0]; | |
| } | |
| } | |
| collor = score_c[j>4?4:j-1]; | |
| return (yonsei + many + collor); | |
| } | |
| int combo_count(int user) | |
| { | |
| int cnt = 0; | |
| int tp=0; | |
| int* pp; | |
| int i, j; | |
| banha[user] = 0; | |
| while(1) | |
| { | |
| pp = is_combo(user); | |
| tp=0; | |
| j=0; | |
| for(i=0; i<color_cnt[level[user]]; i++) | |
| { | |
| if(*(pp+i) > 0) | |
| { | |
| j++; | |
| tp+=(*(pp+i)); | |
| } | |
| } | |
| if(j==0) | |
| break; | |
| banha[user] += tp*score(pp,cnt,user)/7; | |
| cnt++; | |
| } | |
| if(cnt >0) | |
| { | |
| rewrite_map(user); | |
| } | |
| return cnt; | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment