int ft_keypress2(int keycode, t_env *e) { if (keycode == 124) move_map(e, (double)WIN_W * 0.05, 0); if (keycode == 123) move_map(e, (double)WIN_W * -0.05, 0); if (keycode == 125) { if (e->title[0] == 'J' || e->title[0] == 'M') move_map(e, 0, (double)WIN_H * 0.05); if (e->title[0] == 'S') move_map(e, 0, (double)WIN_H * -0.05); } if (keycode == 126) { if (e->title[0] == 'J' || e->title[0] == 'M') move_map(e, 0, (double)WIN_H * -0.05); if (e->title[0] == 'S') move_map(e, 0, (double)WIN_H * 0.05); } clear_map(e); choose_fractal(e); mlx_put_image_to_window(e->mlx, e->win, e->img, 0, 0); return (0); }
int grab_key3(int keycode, t_img *img) { if (keycode == 123 || keycode == 124) { if (keycode == 123) move_map(img, (double)WIDTH * 0.05, 0); else move_map(img, (double)WIDTH * -0.05, 0); clear_map(img); draw_map(img); mlx_put_image_to_window(img->mlx_ptr, img->win_ptr, img->img_ptr, 0, 0); } if (keycode == 126 || keycode == 125) { if (keycode == 126) move_map(img, 0, (double)HEIGHT * 0.05); else move_map(img, 0, (double)HEIGHT * -0.05); clear_map(img); draw_map(img); mlx_put_image_to_window(img->mlx_ptr, img->win_ptr, img->img_ptr, 0, 0); } return (0); }
static int key_hook(unsigned int key, t_env *e) { if (key == 53) leave(e); if (key == 82) change_pers(e); if (key == 69) depth_change(e, 0); if (key == 78) depth_change(e, 1); if (key == 89) const_modif(e, 0); if (key == 91) const_modif(e, 1); if (key >= 123 && key <= 126) move_map(e, key); if (key == 83) on_screen_ctrl(e); return (0); }
void algo(t_tetri tetris) { char *map; char *new_map; int i; map = tetris.tetrimi[0]; move_tetri(map); i = 1; while (i < tetris.nbr_tetri) { new_map = tetris.tetrimi[i]; if (found_best(new_map, map) != 1) { map = add_new_space(map); map = move_map(map); } else i++; } display(map); ft_putstr("--Map--\n"); ft_putstr(map); }
int move_ground(struct sctstr *start, struct sctstr *end, double weight, char *path, int (*map)(coord, coord, char *, char *), int exploring, int *dam) { struct sctstr sect; struct sctstr next; coord curx, cury, oldx, oldy; coord tmpx, tmpy; coord dx, dy; char *movstr; double sect_mcost; double total_mcost; double mv_cost; size_t len; double mobility = start->sct_mobil; int dir; char scanspace[1024]; char *argp[128]; int takedam = *dam; int out = 0; char prompt[128]; char buf[1024]; *end = *start; if (mobility <= 0.0) return -1; *dam = 0; if (path && sarg_xy(path, &dx, &dy)) { if (dx == start->sct_x && dy == start->sct_y) { pr("Start sector is ending sector!\n"); return -1; } pr("Looking for best path to %s\n", path); total_mcost = path_find(start->sct_x, start->sct_y, dx, dy, player->cnum, MOB_MOVE); path = NULL; if (total_mcost < 0) pr("No owned path exists!\n"); else { len = path_find_route(buf, sizeof(buf), start->sct_x, start->sct_y, dx, dy); if (!exploring) { if (len < sizeof(buf)) strcpy(buf + len, "h"); len++; } if (len >= sizeof(buf)) pr("Can't handle path to %s, it's too long, sorry.\n", xyas(dx, dy, player->cnum)); else { path = buf; pr("Using best path '%s', movement cost %1.3f\n", path, total_mcost); if (total_mcost * weight > mobility) { pr("Not enough mobility to go all the way." " Nothing moved.\n"); return -1; } } } } movstr = path; curx = start->sct_x; cury = start->sct_y; total_mcost = 0.0; if (getsect(curx, cury, §) < 0) { logerror("move_path: getsect %d,%d", curx, cury); return -1; } for (;;) { oldx = curx; oldy = cury; if (!movstr || *movstr == 0) { if (exploring) { map(curx, cury, NULL, NULL); } else { move_map(curx, cury, NULL); } sprintf(prompt, "<%.1f: %c %s> ", mobility, dchr[sect.sct_type].d_mnem, xyas(sect.sct_x, sect.sct_y, player->cnum)); movstr = getstring(prompt, buf); } if (movstr && sarg_xy(movstr, &dx, &dy)) { mv_cost = path_find(sect.sct_x, sect.sct_y, dx, dy, player->cnum, MOB_MOVE); if (mv_cost < 0) { pr("Can't get to %s from here!\n", xyas(dx, dy, player->cnum)); movstr = NULL; } else { len = path_find_route(buf, sizeof(buf), sect.sct_x, sect.sct_y, dx, dy); if (len < sizeof(buf)) strcpy(buf + len, "h"); len++; if (len >= sizeof(buf)) { pr("Can't handle path to %s, it's too long, sorry.\n", xyas(dx, dy, player->cnum)); movstr = NULL; } else { if ((mv_cost * weight) > mobility) { pr("Not enough mobility to go all the way. Nothing moved.\n"); movstr = NULL; } else { movstr = buf; pr("Using best path '%s', movement cost %1.3f\n", movstr, mv_cost); } } } } if (!movstr || *movstr == 0) { buf[0] = dirch[DIR_STOP]; buf[1] = 0; movstr = buf; } if ((dir = chkdir(*movstr, DIR_STOP, DIR_MAP)) < 0) { pr("\"%c\" is not legal...", *movstr); direrr("'%c' to stop ", "'%c' to view ", "& '%c' to map\n"); *movstr = 0; continue; } if (dir == DIR_MAP) { parse(movstr, scanspace, argp, NULL, NULL, NULL); if (argp[0][1]) { pr("Use of '%c' without a space before its argument is deprecated.\n" "Support for it will go away in a future release\n", *movstr); argp[2] = argp[1]; argp[1] = argp[0] + 1; } if (!exploring) map(curx, cury, argp[1], argp[2]); *movstr = 0; continue; } movstr++; if (dir == DIR_STOP) break; if (dir == DIR_VIEW) { pr("%d%% %s with %d civilians.\n", sect.sct_effic, dchr[sect.sct_type].d_name, sect.sct_item[I_CIVIL]); continue; } /* * now see if we can move into the * next sector. Mobility, terrain, * or ownership may prevent us. */ tmpx = curx + diroff[dir][0]; tmpy = cury + diroff[dir][1]; if (getsect(tmpx, tmpy, &next) < 0) { pr("You can't go there...\n"); *movstr = 0; continue; } if (!player->god) { if ((next.sct_type == SCT_SANCT) && (next.sct_own != player->cnum)) { pr("Converts, huh?\n"); *movstr = 0; continue; } sect_mcost = sector_mcost(&next, MOB_MOVE); if ((!player->owner && (!exploring || next.sct_item[I_MILIT] || next.sct_item[I_CIVIL])) || sect_mcost == -1.0) { /* already-owned, or prohibited terrain */ pr("You can't go there...\n"); *movstr = 0; continue; } sect_mcost *= weight; if (sect_mcost > mobility) { pr("Not enough mobility. "); pr("You can't go there...\n"); *movstr = 0; continue; } mobility -= sect_mcost; total_mcost += sect_mcost; } curx = next.sct_x; cury = next.sct_y; if (cury != start->sct_y) out = 1; if (curx != start->sct_x) out = 1; sect = next; if (takedam) *dam += check_lmines(sect.sct_x, sect.sct_y, weight); if (*dam >= 100) break; /* * Check and see if anyone will interdict us */ if (takedam && chance(weight / 100.0) && ((curx != oldx) || (cury != oldy))) *dam += ground_interdict(curx, cury, player->cnum, "commodities"); if (*dam >= 100) break; } *end = sect; if ((start->sct_x == end->sct_x) && (start->sct_y == end->sct_y) && !out) return -1; return roundavg(total_mcost); }
int map (struct DIVERSsysteme *systeme,struct typeFORthreads *online,struct PACKbouton *bouton ,struct PACKobjet *objet, struct PERSO *perso,struct DIVERSinventaire *inventaire,struct DIVERSdeplacement *deplacement, struct DIVERStemps *temps,struct DIVERSui *ui,struct DIVERSchat *chat,struct DIVERScraft *craft, struct PACKrecompense *recompense,struct typeFORevent *FORevent,struct TIR *TIR) { int index; chargement(systeme); #if CHEAT == 1 for (index = 0 ; index < TAILLESAC ; index++) { videemplacement(&FORevent->objet->sac1[index]); } for (index = 0 ; index < 10 ; index++) { insertionsac(objet, 0); insertionsac(objet, 2); insertionsac(objet, 7); } insertionsac(objet, 3); insertionsac(objet, 1); insertionsac(objet, 4); insertionsac(objet, 5); insertionsac(objet, 6); insertionsac(objet, 8); insertionsac(objet, 9); #endif struct DONJON dj0; initdonjon(&dj0, systeme); LoadDonjon(&dj0, "dj0"); systeme->djisloaded = true; online->jeuxACTIF = 1; for(index = 0 ; index < MAX_JOUEURS ; index++) { online->joueurs[index].ppseudo.x = 20000; online->joueurs[index].ppseudo.y = 20000; online->joueurs[index].position.w = 0; online->joueurs[index].position.h = 0; } checkandrefreshstuff(perso, objet, systeme, ui); checkinventaire(objet, inventaire); glMatrixMode( GL_PROJECTION ); glLoadIdentity(); gluOrtho2D(0,screenw,0,screenh); glMatrixMode( GL_MODELVIEW ); glLoadIdentity(); /*############################################################################################################################################################# ##################### Boucle De Jeu ##################### # ######################################################################################################################################################################*/ systeme->continuer = 1; while (systeme->continuer == 1) { temps->tpact = SDL_GetTicks(); if (temps->tpact - temps->tpapr >= 15) /*15 ms*/ { temps->tpapr = temps->tpact; temps->i++; /*sichronisation des données*/ sinchronisation(craft, systeme, online, perso, &dj0); SyncMob(&dj0, perso); /*calcul direction joueur client*/ deplacement->direction.direction = directionperso(&deplacement->direction); /*deplacement*/ checkPixel(&dj0.map, perso, systeme); move_map(perso, &deplacement->direction, &dj0.origin); /*gestion des dégats*/ hitboxplayer (&dj0, perso, systeme); /*recupération coordonées souris*/ SDL_GetMouseState(&systeme->pointeur.pos.x, &systeme->pointeur.pos.y); systeme->pointeur.pos.y = (systeme->pointeur.pos.y - screenh + systeme->pointeur.pos.h) * -1; /*gestion de l'ui*/ gestionui(systeme, ui, craft, bouton, chat, inventaire, objet, perso); /*detection des combats*/ // detectioncombat(monstre, inventaire, ui, deplacement, objet, perso, systeme, recompense, false); /*gestion des evenement*/ boucleevent(&online->chat.lancermessage, FORevent, TIR); /*gestion du chat*/ gestionchat(chat, systeme, online); if (TIR->letirdemander == true) { gestiontir(TIR, systeme, perso, &dj0); } COMBATgestionprojectile (TIR, &dj0); /*################################################################################################################################################################################## ##################### AFFICHAGE ##################### # ##################################################################################################################################################################################*/ /*effacage de l'écran*/ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) ; /*affichage de la carte*/ draw_pict(&dj0.map.pict); for (index=0 ; index<dj0.nombremonstre ; index++) { if(dj0.mob[index].BarreDeVie->life > 0) { turn_draw_hookpict(dj0.mob[index].angle, &dj0.mob[index].hookpict, &dj0.map.pict.pos); CalculerBarreDeVie(dj0.mob[index].BarreDeVie->baselife , dj0.mob[index].BarreDeVie->life, 68); setPos2rect(&dj0.mob[index].BarreDeVie->pBG, dj0.mob[index].hookpict.pict.pos.x-1 + ((dj0.mob[index].hookpict.pict.pos.w-68)/2), dj0.mob[index].hookpict.pict.pos.y + dj0.mob[index].hookpict.pict.pos.h+4); setPos4(&dj0.mob[index].BarreDeVie->pbarre, dj0.mob[index].hookpict.pict.pos.x + ((dj0.mob[index].hookpict.pict.pos.w-68)/2), dj0.mob[index].hookpict.pict.pos.y + dj0.mob[index].hookpict.pict.pos.h+5, CalculerBarreDeVie(dj0.mob[index].BarreDeVie->baselife , dj0.mob[index].BarreDeVie->life, 68), 5); draw(systeme->BGnoir, &dj0.mob[index].BarreDeVie->pBG); draw(systeme->BGblanc, &dj0.mob[index].BarreDeVie->pbarre); } } /*affichage des joueurs*/ afficherJOUEURS(perso, deplacement, systeme, online, temps); BattleDraw_Projectile(TIR, &dj0); /*affichage du chat*/ if (ui->chat_open == true) { afficherCHAT(chat, ui, online->chat.lenbuffer, systeme); } /*affichage de l'inventaire*/ else if (ui->inventaire_open == true) { afficherINVENTAIRE(inventaire, ui, objet, systeme); } /*affichage de l'interface utilisateur*/ afficherUI(online->isonline, ui, bouton, temps, perso, inventaire, systeme, recompense, objet); /*affichage de l'interface de crafting*/ if (ui->craft_open == true) { afficherCRAFT(craft, ui, bouton, objet, inventaire, systeme); } /*affichage du pointeur*/ afficherPOINTEUR(systeme, objet); /*rendu éran*/ glFlush(); glFinish(); SDL_GL_SwapWindow(systeme->screen); } else { SDL_Delay(5); } /*########################################################################################################################### ##################### Frame Par Secondes ##################### # ###########################################################################################################################*/ if (temps->tpact - temps->tpap >= 1000) { temps->temptotal++; /*if it's the first second of this player*/ if (temps->temptotal == 5) { char texte[2548] = "\nprisonnier : \n salut ... \n ça tombe bien,\n j'avais besoin d'un coup de main !\n tiens ! prend ce lance pierre et vas nous chercher\nquelques rat !\n\n\n\n\n\n\n\n\n\n\n\n\n\n APPUIE SUR ENTRÉE POUR CONTINUER"; ui->dialogue_text.texture = fenetredialogue(screenw*0.4, screenh*0.8, &ui->dialogue_back.pos, &ui->dialogue_text.pos, texte, BLANC, systeme); ui->dialogueactif = 1; insertionsac(objet, 3); } if (temps->temptotal - temps->oldipourregen >= 3) { if (perso->life < perso->lifemax) { perso->life += REGEN; perso->life += perso->regenlife; if (perso->life > perso->lifemax) { perso->life = perso->lifemax; } temps->oldipourregen = temps->temptotal; } } else { if (perso->life < perso->lifemax) { perso->life += perso->regenlife; if (perso->life > perso->lifemax) { perso->life = perso->lifemax; } } } if (temps->temptotal - temps->tpspoursave >= 30) { sauvegardetout(systeme->sauvegarde, dj0.map.pict.pos, perso, temps->temptotal, 0, objet->sac1, TAILLESAC, ui); temps->tpspoursave = temps->temptotal; } sprintf(temps->StringI, "IPS => %d", temps->i); sprintf(perso->slife, "vie : %0.0f/%d", perso->life, perso->lifemax); sprintf(temps->stringtempstotal, "age du personnage : %dj %dh %dmin %dsec", calcultempsjours(temps->temptotal), calcultempsheures(temps->temptotal), calcultempsminutes(temps->temptotal), calcultempssecondes(temps->temptotal)); temps->fps.texture = imprime (temps->StringI, screenw, BLANC, systeme, NULL, NULL); perso->tlife.texture = imprime (perso->slife, screenw, BLANC, systeme, NULL, NULL); temps->temps.texture = imprime (temps->stringtempstotal, screenw, BLANC, systeme, NULL, NULL); for(index = 0; index < 10 ; index++) { if(online->chat.schat[index][0] != '\0') { chat->pstringchat[index].y = (screenh*0.5)+(online->chat.poschat[index]*(screenh*0.047)); SDL_DestroyTexture(chat->tstringchat[index]); // chat->tstringchat[index] = imprime(online->chat.schat[index], screenw, BLANC, systeme, NULL, NULL); } } temps->i = 0; temps->tpap = temps->tpact; } } /*########################################################################################################################### # ##################### Fin de Fonction ##################### # # ###########################################################################################################################*/ sauvegardetout(systeme->sauvegarde, dj0.map.pict.pos, perso, temps->temptotal, 0, objet->sac1, TAILLESAC, ui); return 1; }