+=j!=I&&i!=J&&i!=I&&j!=J&&*c(I,J)&&q(p(i),p(j),p(I),p(J));return f;}main(){int i ,I,j,J,f,F,a,b,s=-1,X,Y,H,h;BITMAP*B;SAMPLE*S;allegro_init();*c(0,1)=*c(0,2)=*c( 0,3)=1;set_gfx_mode(GFX_AUTODETECT_WINDOWED,w,w,0,0);install_sound(DIGI_DIRECTX( 0),MIDI_NONE,0);B=create_bitmap(w,w);install_keyboard();install_mouse();*c(2,3)= *c(1,2)=*c(1,3)=1;text_mode(-1);S=create_sample(8,0,9999,9999);for(i=0;i<9999;i ++){((unsigned char*)S->data)[i]=(((i+(fixsin(i<<13)>>13))%100+(i)%152)*i)/9000; }for(l=4;l<99;l++){play_sample(S,255,55,1600,0);play_sample(S,255,200,1604,0); for(i=0;i<l;i++){x[i]=((fixcos((i<<24)/l)*w/3)>>16)+w/2;y[i]=((fixsin((i<<24)/l) *w/3)>>16)+w/2;}do{F=0;key[KEY_ESC]?exit(0):0;clear_to_color(B,15);for(i=0;i<l;i ++){for(j=0;j<l;j++){f=0;if(*c(j,i)){f=M(i,j);for(a=-1;a<2;a++)for(b=-1;b<2;b++) line(B,a+p(i)+b,a+p(j)+b,f?12:10);}F|=f;}}for(i=0;i<l;i++){circlefill(B,p(i),8,0 );circlefill(B,p(i),6,s==i?7:8);s=mouse_b?s:-1;if(mouse_b&&s<0&&_(mouse_x-x[i],- 7,7)&&_(mouse_y-y[i],-7,7))s=i;}if(s>=0){x[s]=mouse_x;y[s]=mouse_y;}textprintf(B ,font,10,10,0,"Level %d",l-3);draw_sprite(B,mouse_sprite,mouse_x,mouse_y);blit(B ,screen,0,0,0,0,w,w);}while(F||mouse_b);H=0;for(j=0;j<2000;j++){h=0;x[l]=rand()% w*2-w/2;y[l]=rand()%w*2-w/2;for(i=0;i<l;i++){h+=M(i,l)==0;}if(h>H){H=h;X=x[l];Y= y[l];}}x[l]=X;y[l]=Y;for(i=0;i<l;i++){*c(i,l)=M(i,l)==0;*c(rand()%l,rand()%l)=0; }}}END_OF_MAIN();///////////////////////////////////////////////////////////////
// handler for Settings dialog LRESULT CALLBACK callback_settings(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { char tbuf[200]; int idx = 1; //sprintf(tbuf,"event %d wp %d lp %d",message,wParam,lParam); switch (message) { case WM_INITDIALOG: InitializeDialog(hDlg); return TRUE; case WM_COMMAND: if (LOWORD(wParam) == IDC_ADVANCED) { // Reveal the advanced bit of the window RECT winsize; GetWindowRect (hDlg, &winsize); ShowWindow (GetDlgItem(hDlg, IDC_ADVANCED), SW_HIDE); ShowWindow (GetDlgItem(hDlg, IDC_STATICADV), SW_SHOW); ShowWindow (GetDlgItem(hDlg, IDC_STATICADV2), SW_SHOW); ShowWindow (GetDlgItem(hDlg, IDC_STATICADV3), SW_SHOW); ShowWindow (GetDlgItem(hDlg, IDC_COMBO4), SW_SHOW); MoveWindow (hDlg, winsize.left, winsize.top, wwidth, wheight, TRUE); //SetActiveWindow (GetDlgItem(hDlg, IDOK)); SetFocus (GetDlgItem(hDlg, IDOK)); } else if ((LOWORD(wParam) == IDC_LETTERBOX) || (LOWORD(wParam) == IDC_GFXFILTER)) { update_resolution_texts(hDlg); } if (LOWORD(wParam) == IDC_GFXDRIVER) { update_gfx_filter_box_enabled(hDlg); } else if (LOWORD(wParam) == IDC_GFXFILTER) { int curSel = SendDlgItemMessage(hDlg, IDC_GFXFILTER, CB_GETCURSEL, 0, 0); strcpy(curFilter, filterList[curSel]->GetFilterID()); } if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL || LOWORD(wParam) == IDOKRUN) { if ((LOWORD(wParam) == IDOK) || (LOWORD(wParam) == IDOKRUN)) { csendto = 0; if (defaultRes > 2) { csendto = 1; } sprintf(tbuf,"%d",csendto); if (!WritePrivateProfileString("misc","screenres",tbuf,ac_config_file)) { DWORD errCode = GetLastError(); sprintf(tbuf, "Unable to write to the configuration file (error code 0x%08X). If you are using Windows Vista, you may need to right-click and Run as Administrator on the Setup application.", errCode); MessageBox(hDlg, tbuf, "Save error", MB_OK | MB_ICONEXCLAMATION); return TRUE; } sprintf(tbuf,"-1"); WritePrivateProfileString("sound","digiid",tbuf,ac_config_file); WritePrivateProfileString("sound","midiid",tbuf,ac_config_file); sprintf(tbuf,"0"); WritePrivateProfileString("sound","digiindx",tbuf,ac_config_file); WritePrivateProfileString("sound","midiindx",tbuf,ac_config_file); int idx=SendDlgItemMessage(hDlg,IDC_COMBO1,CB_GETCURSEL,0,0); sprintf(tbuf,"%d",idx); WritePrivateProfileString("sound","digiwinindx",tbuf,ac_config_file); if (idx == 0) idx = DIGI_DIRECTAMX(0); else if (idx == 1) idx = DIGI_WAVOUTID(0); else if (idx == 3) idx = DIGI_DIRECTX(0); else idx = DIGI_NONE; sprintf(tbuf,"%d",idx); WritePrivateProfileString("sound","digiwin",tbuf,ac_config_file); idx=SendDlgItemMessage(hDlg,IDC_COMBO2,CB_GETCURSEL,0,0); sprintf(tbuf,"%d",idx); WritePrivateProfileString("sound","midiwinindx",tbuf,ac_config_file); if (idx == 0) idx = MIDI_AUTODETECT; else if (idx == 1) idx = MIDI_NONE; else idx = MIDI_WIN32MAPPER; sprintf(tbuf,"%d",idx); WritePrivateProfileString("sound","midiwin",tbuf,ac_config_file); idx = SendDlgItemMessage(hDlg,IDC_COMBO3,CB_GETCURSEL,0,0); if (idx > 0) { SendDlgItemMessage(hDlg,IDC_COMBO3,CB_GETLBTEXT,idx,(LPARAM)curtranslation); // cut the end off strstr (curtranslation, " translation")[0] = 0; } else curreplay[0] = 0; WritePrivateProfileString ("language", "translation", (idx == 0) ? NULL : curtranslation, ac_config_file); idx = SendDlgItemMessage(hDlg,IDC_REPLAYBOX,CB_GETCURSEL,0,0); if (idx > 0) { SendDlgItemMessage(hDlg,IDC_REPLAYBOX,CB_GETLBTEXT,idx,(LPARAM)curreplay); // cut the end bracket off curreplay[strlen(curreplay)-1] = 0; // get the filename char *fnptr = &strstr (curreplay, "File: ")[6]; memmove (curreplay, fnptr, strlen (fnptr) + 1); } else curtranslation[0] = 0; WritePrivateProfileString ("misc", "replay", (idx == 0) ? NULL : curreplay, ac_config_file); idx = SendDlgItemMessage(hDlg,IDC_COMBO4,CB_GETCURSEL,0,0); SendDlgItemMessage(hDlg,IDC_COMBO4,CB_GETLBTEXT,idx,(LPARAM)tbuf); idx = atoi (tbuf); sprintf (tbuf, "%d", idx*1024); char *toWrite = &tbuf[0]; // if it's the default, erase from config file if (idx == 20) toWrite = NULL; WritePrivateProfileString("misc","cachemax", toWrite,ac_config_file); if (SendDlgItemMessage(hDlg,IDC_SPEECHPACK,BM_GETCHECK,0,0) == BST_CHECKED) WritePrivateProfileString ("sound", "usespeech", NULL, ac_config_file); else WritePrivateProfileString ("sound", "usespeech", "0", ac_config_file); if (SendDlgItemMessage(hDlg,IDC_WINDOWED,BM_GETCHECK,0,0) == BST_CHECKED) WritePrivateProfileString("misc","windowed","1",ac_config_file); else WritePrivateProfileString("misc","windowed","0",ac_config_file); if (SendDlgItemMessage(hDlg,IDC_ANTIALIAS,BM_GETCHECK,0,0) == BST_CHECKED) WritePrivateProfileString("misc","antialias","1",ac_config_file); else WritePrivateProfileString("misc","antialias",NULL,ac_config_file); if (SendDlgItemMessage(hDlg, IDC_SIDEBORDERS, BM_GETCHECK,0,0) == BST_CHECKED) WritePrivateProfileString("misc","sideborders",NULL,ac_config_file); else WritePrivateProfileString("misc","sideborders","0",ac_config_file); if (SendDlgItemMessage(hDlg,IDC_REFRESH,BM_GETCHECK,0,0) == BST_CHECKED) WritePrivateProfileString("misc","refresh","85",ac_config_file); else WritePrivateProfileString("misc","refresh","0",ac_config_file); if (mustBeLetterbox) ; // don't modify the Force Letterbox setting while it doesn't apply else if (SendDlgItemMessage(hDlg,IDC_LETTERBOX,BM_GETCHECK,0,0) == BST_CHECKED) WritePrivateProfileString ("misc", "forceletterbox", "1", ac_config_file); else WritePrivateProfileString ("misc", "forceletterbox", NULL, ac_config_file); if (SendDlgItemMessage(hDlg, IDC_REDUCESPR, BM_GETCHECK,0,0) == BST_CHECKED) WritePrivateProfileString ("misc", "notruecolor", "1", ac_config_file); else WritePrivateProfileString ("misc", "notruecolor", NULL, ac_config_file); if (SendDlgItemMessage(hDlg, IDC_GFXDRIVER, CB_GETCURSEL,0,0) == 0) WritePrivateProfileString ("misc", "gfxdriver", "DX5", ac_config_file); else WritePrivateProfileString ("misc", "gfxdriver", "D3D9", ac_config_file); idx = SendDlgItemMessage(hDlg, IDC_GFXFILTER, CB_GETCURSEL, 0, 0); WritePrivateProfileString("misc", "gfxfilter", filterList[idx]->GetFilterID(), ac_config_file); } EndDialog(hDlg, LOWORD(wParam)); return TRUE; } return FALSE; default: return FALSE; } return TRUE; }