char * getpass (const char * prompt, char * str) { int maxlength = str[0]; int length = 0; int ch = 0; int x, y; cputs(prompt); __fill_text_info(); x = __text_info.curx; y = __text_info.cury; while (ch != '\r') { ch = getch(); switch (ch) { case '\r' : /* enter */ break; case '\b' : /* backspace */ if (length > 0) putchxy (x + --length, y, ' '); gotoxy (x + length, y); break; default: if (length < maxlength) { putchxy (x + length, y, '*'); str[2 + length++] = ch; } } } str[1] = length; str[2 + length] = '\0'; return &str[2]; }
void DrawStage() { //x, y는 스테이지내의 좌표 int x, y; for (y = 0; y < 18; y++) { for (x = 0; x < 20; x++) { putchxy(x,y,stage[y][x]); } } putchxy(Rx, Ry, '@'); }
void DrawStage(void) { int stagex, stagey; for (stagey = 0; stagey < 18; stagey++) { for (stagex = 0; stagex < 20; stagex++) { putchxy(stagex, stagey, stage[stagey][stagex]); } } putchxy(Roundx,Roundy,'@'); }
void full_refresh(char *screenmap, struct symbol symbols[256]){ for (int y=0; y < info.screenheight-1; y++){ for (int x=0; x < info.screenwidth; x++){ unsigned char out = screenmap[y*(info.screenwidth+1)+x]; if(15 < x && x < info.screenwidth-1 && 0 < y && y < info.screenheight-2){ textcolor(symbols[out].color); putchxy(x+1, y+1, symbols[out].character); } else { textcolor(LIGHTGRAY); putchxy(x+1, y+1, out); } //printf("%s", screenmap[y]); } } gotoxy(0,0); }
void draw_creatures(struct creature* critters){ struct creature * cr = critters; while(NULL!=cr){ textcolor(cr->sym.color); putchxy(cr->x, cr->y, cr->sym.character); cr = cr->next; } }
void erase_creatures(struct creature * critters, char * screenmap, struct symbol symbols[256]) { struct creature * cr = critters; while(NULL!=cr){ unsigned char out = screenmap[(cr->y-1)*(info.screenwidth+1)+cr->x-1]; textcolor(symbols[out].color); putchxy(cr->x, cr->y, symbols[out].character); cr = cr->next; } }
void LoadingStage(void) { int i; for (i = 0; i < 45; i++) { putchxy(10+i,5,'-'); delay(10); } for (i = 0; i < 45; i++) { putchxy(70-i,11,'-'); delay(10); } delay(800); gotoxy(35,7); printf("So"); delay(600); gotoxy(38,7); printf("ko"); delay(600); gotoxy(41,7); printf("ban"); delay(600); putchxy(48,8,'M'); delay(40); putchxy(49,8,'a'); delay(40); putchxy(50,8,'d'); delay(40); putchxy(51,8,'e'); delay(40); putchxy(53,8,'b'); delay(40); putchxy(54,8,'y'); delay(40); gotoxy(56,8); printf("Skout"); delay(200); gotoxy(37,9); printf("Ported & Modified by ikh"); delay(2500); }
void LoadingStage() { //로딩창 int i; for (i = 0; i < 45; i++) { putchxy(10 + i, 5, '-'); delay(10); } for (i = 0; i < 45; i++) { putchxy(70 - i, 10, '-'); delay(10); } delay(800); gotoxy(35, 7); printf("P"); delay(600); gotoxy(37, 7); printf("U"); delay(600); gotoxy(39, 7); printf("S"); delay(600); gotoxy(41, 7); printf("H"); delay(600); putchxy(48, 8, 'M'); delay(40); putchxy(49, 8, 'I'); delay(40); putchxy(50, 8, 'N'); delay(40); putchxy(51, 8, 'I'); delay(40); putchxy(52, 8, 'G'); delay(40); putchxy(53, 8, 'A'); delay(40); putchxy(54, 8, 'M'); delay(40); putchxy(55, 8, 'E'); delay(40); gotoxy(57, 8); printf("프"); delay(60); gotoxy(59, 8); printf("로"); delay(60); gotoxy(61, 8); printf("젝"); delay(60); gotoxy(63, 8); printf("트"); delay(2500); /*gotoxy(59, 8); printf("프로젝트"); delay(2500); */ }
static inline void draw_creature(struct creature * creature) { textcolor(creature->sym.color); putchxy(creature->x, creature->y, creature->sym.character); }
void roguelike() { enum { KEY_ESC = 27, KEY_ENTER = '\r', KEY_BACKSPACE = 8, CTRL_S = 19, CTRL_P = 16, CTRL_Q = 17, CTRL_B = 2, KEY_UP = 72, KEY_DOWN = 80, KEY_LEFT = 75, KEY_RIGHT = 77}; char screenmap[info.screenheight][info.screenwidth+1]; //y then x memset(screenmap, ' ', (info.screenwidth+1)*info.screenheight); struct creature * critters = create_creature("playa", '@', LIGHTGRAY, 16+((info.screenwidth-16)/2), info.screenheight/2); struct creature * head = critters; head->next = create_creature("monsu", 'M', RED, 16+20, 20); /* store player for convenience*/ struct creature * player = critters; //construct terrain // for (int i = 0; i <2; i++){ // terrain[i].character = symbols[i][0]; // terrain[i].color = symbols[i][1]; // } for (int i = 3; i <256; i++){ // zero unused values // terrain[i].name="undefined"; terrain[i].character = 0; terrain[i].color = 0; } int val; // getch value clrscr(); char * title[] = {"Roguelike", "Press Any Key"}; for (int i=0; i!=2; i++){ gotoxy((info.screenwidth-(strchr(title[i], '\0')-title[i]))/2, -3+i+info.screenheight/2); printf("%s", title[i]); } getch(); clrscr(); for (int i = 0; i < info.screenheight-1; i++){ screenmap[i][15] = '|'; screenmap[i][0] = '*'; screenmap[i][info.screenwidth-1] = '*'; screenmap[i][info.screenwidth]='\0'; } for (int i = 0; i < info.screenwidth; i++){ screenmap[0][i] = '*'; screenmap[info.screenheight-2][i] = '*'; } //let's make a lawn for (int y=1; y < info.screenheight-2; y++) { for (int x=16; x < info.screenwidth-1; x++) { screenmap[y][x] = (90 < rand() % 100) ? WATER : GRASS; } } // a wall.... // for (int x=20; x<30;x++){ screenmap[5][x] = WALL; screenmap[15][x] = WALL; } for (int y=5; y<15;y++){ screenmap[y][20] = WALL; screenmap[y][30] = WALL; } textcolor(WHITE); full_refresh(&screenmap[0][0], terrain); draw_creatures(head); gotoxy(0,0); _setcursortype(_NOCURSOR); _setcursortype(0); while((val=getch())!=CTRL_Q) { erase_creatures(head, &screenmap[0][0], terrain); player = handle_input(val, player, (char *)screenmap); head = update_creature_position(head, player->name, player->x, player->y); draw_creatures(head); textcolor(WHITE); putchxy(2, 2, ':'); printf("Test"); _setcursortype(_NOCURSOR); _setcursortype(0); } _setcursortype(_NORMALCURSOR); textcolor(YELLOW); }
/* Explode a ponte dos menus estáticos. Só funciona neles e para eles */ void explodePonte(TGraphs g) { TExplo expl[EXPLO_MAX]; int n_expl = 0; struct char_info info; int i, delay = 0; expl[n_expl].x = 39; expl[n_expl].y = 3; expl[n_expl].nivel = 1; expl[n_expl].tempo = 0; n_expl++; //Processa as explosões while(delay < TEMPO_EXPLO * 20) { Sleep(1); i = 0; while(i < n_expl) { textcolor(g.explocor); putchxy(expl[i].x, expl[i].y, g.explo); if(expl[i].tempo == TEMPO_EXPLO/4) { //Cria novas explosões ao redor //A esquerda gettext(expl[i].x-1, expl[i].y, expl[i].x-1, expl[i].y, &info); if(info.letter != 'T' && info.letter != g.mapa.roadc && info.letter != g.mapa.vegc && info.letter != g.explo) { if(info.letter != g.mapa.aguac) { expl[n_expl] = addExplo(expl[i].x-1, expl[i].y, 1); if(n_expl < EXPLO_MAX) n_expl++; } else if(expl[i].nivel > 0) { expl[n_expl] = addExplo(expl[i].x-1, expl[i].y, 0); if(n_expl < EXPLO_MAX) n_expl++; } } //A direita gettext(expl[i].x+1, expl[i].y, expl[i].x+1, expl[i].y, &info); if(info.letter != 'T' && info.letter != g.mapa.roadc && info.letter != g.mapa.vegc && info.letter != g.explo) { if(info.letter != g.mapa.aguac) { expl[n_expl] = addExplo(expl[i].x+1, expl[i].y, 1); if(n_expl < EXPLO_MAX) n_expl++; } else if(expl[i].nivel > 0) { expl[n_expl] = addExplo(expl[i].x+1, expl[i].y, 0); if(n_expl < EXPLO_MAX) n_expl++; } } //Acima gettext(expl[i].x, expl[i].y-1, expl[i].x, expl[i].y-1, &info); if(info.letter != 'T' && info.letter != g.mapa.roadc && info.letter != g.mapa.vegc && info.letter != g.explo && expl[i].nivel > 0) { expl[n_expl] = addExplo(expl[i].x, expl[i].y-1, 0); if(n_expl < EXPLO_MAX) n_expl++; } //Abaixo gettext(expl[i].x, expl[i].y+1, expl[i].x, expl[i].y+1, &info); if(info.letter != 'T' && info.letter != g.mapa.roadc && info.letter != g.mapa.vegc && info.letter != g.explo && expl[i].nivel > 0) { expl[n_expl] = addExplo(expl[i].x, expl[i].y+1, 0); if(n_expl < EXPLO_MAX) n_expl++; } } expl[i].tempo++; if(expl[i].tempo >= TEMPO_EXPLO) { textcolor(g.mapa.agua); putchxy(expl[i].x, expl[i].y, g.mapa.aguac); n_expl--; expl[i] = expl[n_expl]; i--; } i++; } delay++; } }