int AddIn_main(int isAppli, unsigned short OptionNum) { unsigned int key; Bdisp_AllClr_DDVRAM(); Map(1); while(1){ GetKey(&key); } return 1; }
int Input_Regcode() { unsigned int key ; BYTE pos = 0 ; BYTE str_flag = FALSE ; int x = 58 ; int y = 26 ; int ptr = -1 ; PopUpWin(3) ; locatestr(15,22); printf("机器码%s",(unsigned char*)m_id) ; GetKey(&key) ; Bdisp_AllClr_DDVRAM() ; PopUpWin(3) ; printf("注册码 ") ; DrawRect(56,23,12,53) ; while(str_flag != TRUE) { GetKey(&key) ; switch (key) { case KEY_CTRL_EXE: regstr[pos] = '\0' ; str_flag =TRUE ; break ; case KEY_CTRL_ALPHA: break ; case KEY_CTRL_DEL: if (pos) regstr[--pos] = '\0' ; PrintXY(x, y, (unsigned char *)" ", 0) ; break ; default: break ; } /* Numbers and characters */ if ( (pos < 8) && ((key >= KEY_CHAR_0 && key <= KEY_CHAR_9) || (key >= KEY_CHAR_A && key <= KEY_CHAR_Z)) ) { regstr[pos] = (char)key ; ++pos ; } PrintXY(x, y, (unsigned char *)regstr, 0) ; } return ; }
int AddIn_main(int isAppli, unsigned short OptionNum) { int collided = 0; unsigned char answer; Bdisp_AllClr_DDVRAM(); Init_SerialPort(); Start_SerialPort(); if(connect() == 0) { isHost = 1; } while(1) { startScreen(); memset(videoBuffer, 0, 1024); DrawBox(0, 0, 127, 63, videoBuffer, BLACK); DrawBox(48, 27, 79, 37, videoBuffer, BLACK); CoolText(51, 29, FONT_FIVE, "Ready?", videoBuffer); DrawAll(videoBuffer); Sleep(1000); SerialTransmit(READY); while(SerialReceive() != READY) { ; } reset(); while(1) { answer = SerialReceive(); if(answer == CRASH) { score++; wonLast = ME; break; } if(answer == EXIT) { Reset_Calc(); } if(answer == COORDS) { receivedX = SerialReceive(); receivedY = SerialReceive(); setBit(videoBuffer, 128, receivedX, receivedY, 1); } checkKeys(); move(); collided = getBit(videoBuffer, 128, playerX, playerY); if(collided) { otherScore++; wonLast = OTHER; SerialTransmit(CRASH); break; } setBit(videoBuffer, 128, playerX, playerY, 1); SerialTransmit(COORDS); SerialTransmit(playerX); SerialTransmit(playerY); DrawAll(videoBuffer); Sleep(delays[speed]); } } return 1; }
int Suidao_DM(void) { int display = 0; double sd_pj = 0.0 ; /* 测点与中线的距离 */ double sd_gc = 0.0 ; /* 测点与设计线的高差 */ unsigned int key = 0 ; unsigned int back_key ; BYTE exit_flag = FALSE; BYTE xyrow = 0 ; int shuaxin = TRUE; /* 刷新 */ while (exit_flag != TRUE) { switch(key) { case KEY_CTRL_F1: default: if (key == KEY_CTRL_F1) shuaxin == TRUE; if (shuaxin){ Bdisp_AllClr_DDVRAM() ; Print_zh("隧道断面 ", 0, 1, VERT_REV) ; PrintIcon (0,"Home",0); PrintIcon (1,"Set",0); PrintIcon (2,"SQX",0); PrintIcon (3,"DM",0); (R_L > 0) ? PrintIcon (4,"YOU",0) : PrintIcon (4,"ZUO",1); PrintIcon (5,"Help",0); shuaxin = FALSE; } back_key = key ; Bdisp_AreaClr_DDVRAM(&clear_area) ; Print_zh("X坐标 ", 20, 6, 0) ; Print_zh("Y坐标 ", 20, 22, 0) ; Print_zh("Z坐标 ", 20, 38, 0) ; if (xyrow > 2) { if (!sd_flag) { Warning("未载入断面 ",2); //exit_flag = TRUE ; //强制退出以解决卡在载入数据界面的问题 fix by 龙之冰点 xyrow = 0; /* 把焦点设置在TOP */ key = KEY_CTRL_F4; break ; } xyrow = 0 ; x = sd_x ; y = sd_y ; SaveDisp(SAVEDISP_PAGE2) ; if (InputStake(FS_NOPOPUP) == FSOK){ number = fs_zh ; if (!GC_JS(number)) break ; RestoreDisp(SAVEDISP_PAGE2) ; Bdisp_AreaClr_DDVRAM(&clear_area) ; sd_gc = sd_z - DesignGC; if (!yanxin(fs_pj, sd_gc)){ Warning("断面计算失败 ",2); key == KEY_CTRL_F1; break ; } Print_zh("桩号K ", 20, 0, 0) ; Print_zh("偏距D ", 20, 13, 0) ; Print_zh("高差H ", 20, 26, 0) ; if (sd_cqw < 0) Print_zh("欠挖W ", 20, 39, 0) ; else Print_zh("超挖T ", 20, 39, 0) ; Print_C(120, 4, CA = fs_zh, 3) ; Print_C(120, 17, CA = fs_pj, 3) ; Print_C(120, 30, CA = sd_gc, 3) ; Print_C(120, 43, CA = sd_cqw, 3) ; key = 0 ; while(key != KEY_CTRL_EXE && key != KEY_CTRL_EXIT) GetKey(&key) ; key = KEY_CTRL_F1 ; break ; } RestoreDisp(SAVEDISP_PAGE2) ; } Print_C(112, 10, CA = sd_x, 3) ; Print_C(112, 26, CA = sd_y, 3) ; Print_C(112, 42, CA = sd_z, 3) ; key = InputVal(59, 8+xyrow*16) ; switch (xyrow) { case 0: sd_x = number ? number : sd_x ; break ; case 1: sd_y = number ? number : sd_y; break ; case 2: sd_z = number ? number : sd_z; break ; default: break ; } if (key >= KEY_CTRL_F1 && key <= KEY_CTRL_F6) xyrow = 0 ; break ; case KEY_CTRL_F2: back_key = key ; Bdisp_AreaClr_DDVRAM(&clear_area) ; Print_zh("修正H ", 20, 6, 0) ; Print_zh("修正D ", 20, 22, 0) ; Print_zh("修正R ", 20, 38, 0) ; if (xyrow > 2) { /* 返回上一个菜单 */ key = KEY_CTRL_F1 ; xyrow = 0 ; break ; } Print_C(112, 10, CA = sd_h, 3) ; Print_C(112, 26, CA = sd_d, 3) ; Print_C(112, 42, CA = sd_r, 3) ; key = InputValP(59, 8+xyrow*16) ; switch (xyrow) { case 0: sd_h = number ? number : sd_h ; break ; case 1: sd_d = number ? number : sd_d ;break ; case 2: sd_r = number ? number : sd_r ; break ; default: break ; } if (key >= KEY_CTRL_F1 && key <= KEY_CTRL_F6) xyrow = 0 ; break ; case KEY_CTRL_F3: SaveDisp(SAVEDISP_PAGE2) ; if (sqx_flag == TRUE) { if ( InputSQstake() == TRUE) { if (InputSQpj() == TRUE) { /* 输入偏距 */ DesignGC = Cut_3(DesignGC) ; PopUpWin(3); locatestr(12,22) ; printf("高程:%.3f",DesignGC ) ; GetKey(&key); } } } else DebugS("未载入竖曲线 ") ; key = back_key ; RestoreDisp(SAVEDISP_PAGE2) ; break ; case KEY_CTRL_F4: sd_flag = load_SD_data(sd_flag) ; key = KEY_CTRL_F1 ; shuaxin = TRUE; break ; case KEY_CTRL_F5: if (R_L == -1){ R_L = 1; Warning("应用在右幅 ",2); } else{ R_L = -1; Warning("应用在左幅 ",2); } key = KEY_CTRL_F1 ; shuaxin = TRUE; break ; case KEY_CTRL_F6: Bdisp_AllClr_DDVRAM() ; Print_zh("Home=刷新页面 ", 1, 2, 0) ; Print_zh("Set =断面数据修正 ", 1, 16, 0) ; Print_zh("SQX =竖曲线高程 ", 1, 30, 0) ; Print_zh("DM =选择断面文件 ", 1, 44, 0) ; GetKey(&key); Bdisp_AllClr_DDVRAM() ; Print_zh("ZUO =应用在左幅 ", 1, 2, 0) ; Print_zh("YOU =应用在右幅 ", 1, 16, 0) ; Print_zh("修正H=改变圆心高差 ", 1, 30, 0) ; Print_zh(" (+上移 -下移)", 1, 44, 0) ; GetKey(&key); Bdisp_AllClr_DDVRAM() ; Print_zh("修正D=改变圆心偏距 ", 1, 2, 0) ; Print_zh(" (+右移 -左移) ", 1, 16, 0) ; Print_zh("修正R=改变设计半径 ", 1, 30, 0) ; Print_zh(" (+变长 -变短)", 1, 44, 0) ; GetKey(&key); key = KEY_CTRL_F1 ; shuaxin = TRUE; break ; case KEY_CTRL_UP: if (xyrow > 0) --xyrow ; key = back_key ; break ; case KEY_CTRL_DOWN: case KEY_CTRL_EXE: ++xyrow ; key = back_key ; break ; case KEY_CTRL_DEL: key = back_key ; break ; case KEY_CTRL_EXIT : exit_flag = TRUE ; break ; } } return ; }
int ProjSet() { unsigned int key = 0 ; unsigned int back_key = 0 ; BYTE row = 0 ; BYTE exit_flag = FALSE ; Bdisp_AllClr_DDVRAM() ; /* clear screen */ Print_zh(" 设置 ", 2, 0, VERT_REV) ; PrintMini(2, 58, (unsigned char*)" F1 ", MINI_REV) ; PrintMini(21, 58, (unsigned char*)" F2 ", MINI_REV) ; //PrintMini(40, 58, (unsigned char*)" F3 ", MINI_REV) ; PrintMini(105, 58, (unsigned char*)" EXIT ", MINI_REV) ; while (exit_flag != TRUE) { switch (key) { case KEY_CTRL_F1: default: back_key = key ; Bdisp_AreaClr_DDVRAM(&clear_area) ; locatestr(27,2) ;printf("放样:增减桩距 ") ; locatestr(67,16) ;printf("%.3f", allset.stake_d) ; locatestr(27,29) ;printf("反算:最大路宽 ") ; locatestr(67,43) ;printf("%.3f", allset.width_max) ; PrintXY(120, 6, (unsigned char*)"\xE6\x9C ", 0) ; PrintXY(120, 49, (unsigned char*)"\xE6\x9D ", 0) ; if (row > 1) { /* 判断是否进入下一个菜单 */ key = KEY_CTRL_F2 ; row = 0 ; break ; } key = InputVal(53, 17+row*27) ; switch (row) { case 0: allset.stake_d = number ? number : allset.stake_d ;break ; case 1: allset.width_max = number ? number : allset.width_max ;break ; default: break ; } break ; case KEY_CTRL_F2: back_key = key ; Bdisp_AreaClr_DDVRAM(&clear_area) ; locatestr(27,2) ;printf("1=交点 2=线元 ") ; locatestr(77,16) ;printf("%.3f", allset.xl_type) ; locatestr(27,29) ;printf("1=正交 2=任意 ") ; locatestr(77,43) ;printf("%.3f", allset.pj_mode) ; PrintXY(120, 6, (unsigned char*)"\xE6\x9C ", 0) ; PrintXY(120, 46, (unsigned char*)"\xE6\x9D ", 0) ; if (row > 1) { /* 判断是否进入下一个菜单 */ if ( SaveProj() != -1 ) Warning("设置成功 ", 2) ; else Warning("设置失败 ", 2) ; exit_flag = TRUE ; break; } key = InputVal(53, 17+row*27) ; switch (row) { case 0: allset.xl_type = (number==1 || number==2) ? number : allset.xl_type ;break ; case 1: allset.pj_mode = (number==1 || number==2) ? number : allset.pj_mode ;break ; default: break ; } break ; case KEY_CTRL_UP: if (row > 0) --row ; key = back_key ; break ; case KEY_CTRL_DOWN: case KEY_CTRL_EXE: ++row ; key = back_key ; break ; case KEY_CTRL_DEL: key = back_key ; break ; case KEY_CTRL_EXIT : exit_flag = TRUE ; break ; } } }
void calcul_mole() { char *str = NULL, *p=str; char characts[20]={'\0'}; char i=0; float result=0, masse; const char buffer[50]={0}; char cap; while(1) { Bdisp_AllClr_DDVRAM(); PrintMini(1,1,"Entrez votre formule : ",0); Mini("A a",0); EI_init(); EI_manage_config(EI_SET_COLUMN, 1); EI_manage_config(EI_SET_ROW, 2); EI_manage_config(EI_SET_START_MODE, EI_NORMAL); str=EI_input_string(25,(const char*)"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"); Bdisp_AllClr_DDVRAM(); sprintf(buffer,"%s",str); PrintXY(64-3*strlen(str),10,buffer,36); while(*str) // on va jusqu'a la fin de la chaine { i=0; while(isalpha(*str)) // on prends seulement les lettres { characts[i]=tolower(*str); // on copie la lettre en minuscule directement dans characts ++i; ++str; } characts[0]=toupper(characts[0]); // on met le 1er caractère en majuscule for(i=0;i<118;i++) // on se déplace dans les éléments de la structure { if(!strcmp(characts,elements[i].symbol)) { masse=elements[i].masse_mol; // on a la masse molaire break; } } for(i=0;i<20;++i) // on remet tout à zéro : évite les erreurs characts[i]='\0'; i=0; while(isdigit(*str)) // on prends seulement les chiffres { characts[i]=*str; // on copie la lettre dans characts ++i; ++str; } result += atoi(characts)*masse; for(i=0;i<4;++i) // on remet tout à zéro : évite les erreurs characts[i]='\0'; } free(p); PrintMini(1,30,"la masse molaire est de",0); sprintf(buffer,"%.3f g/mol",result); PrintMini(1,40,buffer,0); Mini("calc",0); Mini("ret",5); GetKey(&key); switch(key) { case 29 : return; } } }
int find(chang) { char *numero=NULL; char i=0,j; const char buffer[50]; Bdisp_AllClr_DDVRAM(); PrintXY(10,1,"Vous cherchez :",0); PrintMini(10,15,"1. numero de l'element",0); PrintMini(10,25,"2. masse molaire",0); PrintMini(10,35,"3. Symbole de l'element",0); PrintMini(10,45,"4. Nom de l'element",0); while (1) { EI_init(); EI_manage_config(EI_SET_COLUMN, 1); EI_manage_config(EI_SET_ROW, 3); EI_manage_config(EI_SET_START_MODE, EI_NORMAL); GetKey(&key); switch(key) { case 72 : { while(1) { Bdisp_AllClr_DDVRAM(); PrintMini(1,1,"Vous cherchez l'element n :",0); numero=EI_input_string(3,(const char*)"0123456789"); // ça coupe ici if (atoi(numero)>0 && atoi(numero)<119) // ça arrête le curseur { return atoi(numero)-1; } } } case 62 : { while(1) { Bdisp_AllClr_DDVRAM(); PrintMini(1,1,"Vous cherchez une masse",0); PrintMini(1,7,"molaire de :",0); numero=EI_input_string(3,(const char*)"0123456789"); for (i=0;i<118;i++) { if (atoi(numero)==floor(elements[i].masse_mol+0.5)) { return i; } } } } case 52 : { while(1) { Bdisp_AllClr_DDVRAM(); PrintMini(1,1,"Vous cherchez le symbole ?",0); EI_manage_config(EI_SET_START_MODE, EI_ALPHA_LOCKED); numero=EI_input_string(3,(const char*)"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"); numero[0]=toupper (numero[0]); // on met le 1er caractère en majuscule for (i=0;i<118;i++) { for (j = 1 ; numero[j] != '\0' ; j++) { numero[j] = tolower(numero[j]); // on met certains caractères en minuscule pour la recherche } if (!strcmp(numero,elements[i].symbol)) { return i; } } } } case 73 : { while(1) { Bdisp_AllClr_DDVRAM(); PrintMini(1,1,"Vous cherchez le nom ?",0); EI_manage_config(EI_SET_START_MODE, EI_ALPHA_LOCKED); numero=EI_input_string(13,(const char*)"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"); numero[0]=toupper(numero[0]); // on met le 1er caractère en majuscule for (i=0;i<118;i++) { for (j = 1 ; numero[j] != '\0' ; j++) { numero[j] = tolower(numero[j]);// on met certains caractères en minuscule pour la recherche } if (!strcmp(numero,elements[i].nom)) { return i; } } } } case 47 : return chang; } } }
int detailsElement(a) { const char buffer[50]; char descente=-9; while (1) { Bdisp_AllClr_DDVRAM(); PrintXY(20,descente+13,elements[a].symbol,0); sprintf(buffer,"%s",elements[a].nom); PrintMini(40,descente+13,buffer,0); sprintf(buffer,"%d",a+1); // détail des éléments PrintMini((10-a/25),descente+15,buffer,0); sprintf(buffer,"masse molaire %.3f g/mol",elements[a].masse_mol); PrintMini(1,descente+23,buffer,0); PrintMini(20,descente+40,"propriete de base :",0); // if (elements[a].groupe>=1) { sprintf(buffer,"groupe : %d ",elements[a].groupe); PrintMini(1,descente+50,buffer,0); } if ((a>55 && a<71) || (a>87 && a<103)) PrintMini(1,descente+50,"pas de groupe",0); sprintf(buffer,"periode : %d ",elements[a].periode); PrintMini(1,descente+60,buffer,0); sprintf(buffer,"couch electro %s",elements[a].config_electro); PrintMini(1,descente+70,buffer,0); sprintf(buffer,"famille %s",family[ajout[a].famille]); PrintMini(1,descente+80,buffer,0); sprintf(buffer,"decouvert en %d",ajout[a].annee); PrintMini(1,descente+90,buffer,0); sprintf(buffer,"etat a 293.15 K : %s",etat[ajout[a].etat]); PrintMini(1,descente+100,buffer,0); PrintMini(20,descente+120,"reactivite :",0); // if (elements[a].electro_neg==0) { PrintMini(1,descente+130,"electro neg inconnue",0); } else { sprintf(buffer,"electro neg : %f ",elements[a].electro_neg); PrintMini(1,descente+130,buffer,0); } if (elements[a].valence>=0) { sprintf(buffer,"valence : %d ",elements[a].valence); PrintMini(1,descente+140,buffer,0); } else { PrintMini(1,descente+140,"valence inconnue",0); } Mini("ret",5); GetKey(&key); switch (key) { case 38 : a-=1,descente=-9; break; case 27 : a+=1,descente=-9; break; case 37 : descente-=4; break; case 28 : descente+=4; break; case 29 : case 31 : case 47 : return a; } a=(a<0 ? 117 : a>117 ? 0 : a); descente=(descente>-9 ? -9 : descente<-85 ? -85 : descente); // on fixe les limites de la page } }
int tableauEleMini(chang) { char buffer[50]; char y; char menu=0; char choix=-1; while(1) { Bdisp_AllClr_DDVRAM(); ML_bmp_or(TABLEAU_MINI,0,0,91,48); choix_famille(choix); // on met en place le choix sur les familles chang=(chang>=118 ? 0 : chang<=-1 ? 117 : chang); y=(chang>55 && chang<71 ? 9 : chang>87 && chang<103 ? 10 : elements[chang].periode); if (chang>55 && chang<71 || chang>87 && chang<103) { ML_rectangle(5*elements[chang].groupe-4,5*y-7,5*elements[chang].groupe-1,5*y-4,0,1,2); } else { ML_rectangle(5*elements[chang].groupe-4,5*y-4,5*elements[chang].groupe-1,5*y-1,0,1,2); } PrintXY(110-3*strlen(elements[chang].symbol),13,elements[chang].symbol,0); sprintf(buffer,"%d",chang+1); // détail des éléments sur la droite PrintMini(110-2*strlen(buffer),5,buffer,0); sprintf(buffer,"%.3f",elements[chang].masse_mol); PrintMini(110-2*strlen(buffer),23,buffer,0); if(menu==0) { Mini("maxi",0); Mini("find",1); Mini("mol",2); Mini("fami",4); Mini("det",5); GetKey(&key); switch(key) { case 79 : case 47 : return chang; case 69 : chang=find(chang); break; case 59 : calcul_mole(); break; case 39 : menu=1; break; case 29 : chang=detailsElement(chang); break; } } else if (menu==1) { Mini("n-me",0); Mini("halo",1); Mini("g-ra",2); Mini("m-ti",3); Mini("m-al",4); Mini(" -->",5); GetKey(&key); switch(key) { case 47 : menu=0; choix=-1; break; case 79 : choix=0; break; case 69 : choix=1; break; case 59 : choix=2; break; case 49 : choix=3; break; case 39 : choix=4; break; case 29 : menu=2; break; // on change dans les 2 menus } } else if (menu==2) { Mini("m-at",0); Mini("lant",1); Mini("acta",2); Mini("m-tr",3); Mini("p-tr",4); Mini(" -->",5); GetKey(&key); switch(key) { case 47 : menu=0; choix=-1;break; case 79 : choix=5; break; case 69 : choix=6; break; case 59 : choix=7; break; case 49 : choix=8; break; case 39 : choix=9; break; case 29 : menu=1; break; // on change dans les 2 menus } } switch(key) // pour les touches principales à chaque fois { case 27 : chang+=1; break; case 38 : chang-=1; break; case 37 : chang=elements[chang].dessous; break; case 28 : chang=elements[chang].dessus; break; case 31 : case 78 : chang=detailsElement(chang); break; } } }
int tableauElement(chang) { short decalx=0,decaly=0; short x,y; short i; while(1) { Bdisp_AllClr_DDVRAM(); chang=(chang>=118 ? 0 : chang<=-1 ? 117 : chang); decalx=-(((12*elements[chang].groupe)-13)*108)/240; // on fait un decalage lorsque l'on bouge decaly=(elements[chang].periode==5 ? -7 : elements[chang].periode>5 ? -14 : 0); for(i=0;i<118;i++) { x=elements[i].groupe; y=(i>55 && i<71 ? 9 : i>87 && i<103 ? 10 : elements[i].periode); PrintMini(12*x+decalx-12,7*y+decaly-6,elements[i].symbol,0); PrintMini(12*3-11+decalx,7*6-7+decaly,"1",0); PrintMini(12*3-11+decalx,7*7-7+decaly,"2",0); PrintMini(12*3-11+decalx,7*9+decaly-5,"1",0); PrintMini(12*3-11+decalx,7*10+decaly-5,"2",0); } if (chang>55 && chang<71) { ML_rectangle(12*elements[chang].groupe-13+decalx,7*9-7+decaly,12*elements[chang].groupe-1+decalx,7*9+decaly,1,1,2); } else if (chang>87 && chang<103) { ML_rectangle(12*elements[chang].groupe-13+decalx,7*10-7+decaly,12*elements[chang].groupe-1+decalx,7*10+decaly,1,1,2); } else { ML_rectangle(12*elements[chang].groupe-13+decalx,7*elements[chang].periode-7+decaly,12*elements[chang].groupe+decalx,7*elements[chang].periode+decaly,1,1,2); } ML_rectangle(0,56,128,64,0,0,0); // on fait un rectangle blanc pour qu'il n'y ait rien Mini("mini",0); Mini("find",1); Mini("mol",2); Mini("sign",3); Mini("det",5); GetKey(&key); switch(key) { case 27 : chang+=1; break; case 38 : chang-=1; break; case 37 : chang=elements[chang].dessous; break; case 28 : chang=elements[chang].dessus; break; case 79 : chang=tableauEleMini(chang); break; case 69 : chang=find(chang); break; case 59 : calcul_mole(); break; case KEY_CTRL_F4 : nb_sign(); break; case 29 : case 31 : case 78 : chang=detailsElement(chang); break; case 47 : return; } } }
int AddIn_main(int isAppli, unsigned short OptionNum) { int xMap, yMap, newXMap, newYMap; unsigned char *light_buffer, *dark_buffer, *light_swap, *dark_swap, *tmp_swap; Map mapTest; //On initialise les buffer par calloc (plus propre que par allocation automatique!) : light_buffer = calloc(1024, sizeof(unsigned char)); dark_buffer = calloc(1024, sizeof(unsigned char)); //Les deux buffers ci-dessous sont les "sawp" qui permettent de faire du double buffering // afin d'obtenir une meilleure fluiditée. light_swap = calloc(1024, sizeof(unsigned char)); dark_swap = calloc(1024, sizeof(unsigned char)); tmp_swap = 0; Bdisp_AllClr_DDVRAM(); Change_Contrast (166); //On initialise le grayscale de revolution-fx : GrayLinkBuffers(light_buffer, dark_buffer); GrayInit(6987, 3269); //Allocation de la map : mapTest = aMap(m_votre_map); //Boucle principale d'execution : while(IsKeyUp (KEY_CTRL_EXIT)){ if (IsKeyDown (KEY_CTRL_LEFT)) xMap-=2; if (IsKeyDown (KEY_CTRL_RIGHT)) xMap+=2; if (IsKeyDown (KEY_CTRL_UP)) yMap-=2; if (IsKeyDown (KEY_CTRL_DOWN)) yMap+=2; //On vérifie si on ne sort pas de la map : if (xMap<0) xMap=0; else if (xMap > (mapTest.width-128/mapTest.tileset.tileWidth)*mapTest.tileset.tileWidth) xMap = (mapTest.width-128/mapTest.tileset.tileWidth)*mapTest.tileset.tileWidth; if (yMap<0) yMap=0; else if (yMap > (mapTest.height-64/mapTest.tileset.tileHeight)*mapTest.tileset.tileHeight) yMap = (mapTest.height-64/mapTest.tileset.tileHeight)*mapTest.tileset.tileHeight; //On dessine la map sur les buffer de swap : drawMap (mapTest, xMap/mapTest.tileset.tileWidth, yMap/mapTest.tileset.tileHeight, 128/mapTest.tileset.tileWidth +1, 64/mapTest.tileset.tileWidth +1, -(xMap % mapTest.tileset.tileWidth), -(yMap % mapTest.tileset.tileHeight), light_swap, dark_swap); //On inverse les buffer de swap avec les buffer principaux : GrayLinkBuffers(light_swap, dark_swap); tmp_swap = light_swap; light_swap = light_buffer; light_buffer = tmp_swap; tmp_swap = dark_swap; dark_swap = dark_buffer; dark_buffer = tmp_swap; //On efface les nouveaux buffer de swap : memset(light_swap, 0, 1024); memset(dark_swap, 0, 1024); } CPUSpeedNormal(); Reset_Calc(); return 1; }