// Reduit de n pixels la hauteurs de l'image void reduce(unsigned char **im1, int n, int &sizeX, int &sizeY) { for (int i=0; i<n; i++) { unsigned char * ime = new unsigned char [sizeX*sizeY]; unsigned char * im2 = new unsigned char [sizeX*(sizeY-1)]; IMgradient(*im1,ime,sizeX,sizeY); int seam[sizeX]; min_path(ime, seam, sizeX, sizeY); del_seam(*im1,im2,seam,sizeX,sizeY); sizeY--; delete[] *im1; delete[] ime; *im1 = im2; } }
// Reduit de n pixels la hauteurs de l'image avec un masque void reduceS(unsigned char *im1, unsigned char *mask, int n, int sizeX, int &sizeY) { int seam[sizeX]; unsigned char tmp[sizeX*sizeY]; unsigned char tmp_mask[sizeX*sizeY]; unsigned char ime[sizeX*sizeY]; for (int i=0; i<n; i++) { IMgradient(im1,ime,sizeX,sizeY); min_path(ime, mask, seam, sizeX, sizeY); del_seam(im1,tmp,seam,sizeX,sizeY); del_seam(mask,tmp_mask,seam,sizeX,sizeY); sizeY--; for (int i=0; i<sizeY*sizeX; i++) { im1[i] = tmp[i]; mask[i] = tmp_mask[i]; } } }
void go_computer() { int i; int oldx = computer.x; int oldy = computer.y; Location buf[6]; if(is_boundary(computer)) who_win(COMPUTER); if(is_inCircle(computer)) { i = max_cost(computer); inCircle = 1; } else i = min_path(computer); switch(i) { case 0: computer.y--; break; case 1: if((computer.x % 2) == 0) { computer.x--; computer.y--; } else { computer.x--; } break; case 2: if((computer.x % 2) == 0) { computer.x--; } else { computer.x--; computer.y++; } break; case 3: computer.y++; break; case 4: if((computer.x % 2) == 0) { computer.x++; } else { computer.x++; computer.y++; } break; case 5: if((computer.x % 2) == 0) { computer.x++; computer.y--; } else { computer.x++; } break; } //end switch if((oldx % 2) == 0) move(oldx, oldy*2); else move(oldx, oldy*2+1); draw_one(WAY); map[oldx][oldy].type = WAY; if((computer.x % 2) == 0) move(computer.x, computer.y*2); else move(computer.x, computer.y*2+1); draw_one(CAT); map[computer.x][computer.y].type = CAT; }