short i,j,x,y,handle1,handle2,key,ar[72],move,xpos,ypos,buttons,index, pu,w,xx,yy,player,zw,bp,bz,zu,p1,x1,x2,y1,y2,b2,p2,style,myexit, leer,tmax,tt,fr[9],wr[9],corners[4],xr[10],yr[10],br[10],pr[10], zuege[50]; int dummy,window,work_in[12],work_out[57],datevec[7],time,start, time_player,time_atari,timebuf; char buf[20],buf1[20],datum[50]; main() { appl_init(); for (j=0; j<10; work_in[j++]=1); work_in[10]=2; handle1=graf_handle(&dummy,&dummy,&dummy,&dummy); v_opnvwk(work_in,&handle1,work_out); v_clrwk(handle1); window=g_open(1,640,400,"Dein Zug"," "); g_window(window,0,0,640,400); g_reopen(window); handle2=g_vdihandle(window); dummy=vst_color(handle1,1); dummy=vst_effects(handle1,4); v_gtext(handle1,1,15,"von P.M. & A.Q. (C)1986"); dummy=vst_effects(handle1,0); print_items(); dummy=graf_mouse(3,&dummy); do { init(); do { test(); if (leer==0) { nowinner(); continue; } entry(); if (myexit==0) { if (pu>=100) { playerwins(); continue; } test(); if (leer==0) { nowinner(); continue; } player=1; computer(); player=1; index=bz; depth(); display(); points(); if (pu>=100) { atariwins(); } } } while(myexit==0); } while(myexit==1); dummy=graf_mouse(0,&dummy); g_exit(); v_clsvwk(handle1); appl_exit(); } nowinner() { g_info(window,"Du hast Gl…k. Das Spiel endet unentschieden."); myexit=1; g_title(window,"Spielende, bitte Maustaste dr…ken !"); do { show_date(); vq_mouse(handle2,&buttons,&xpos,&ypos); } while(buttons==0); } playerwins() { g_info(window,"Nanu, du hast ja direkt mal gewonnen !"); myexit=1; g_title(window,"Spielende, bitte Maustaste dr…ken !"); do { show_date(); vq_mouse(handle2,&buttons,&xpos,&ypos); } while(buttons==0); } atariwins() { g_info(window,"Es tut mir fast leid : DU HAST VERLOREN !"); myexit=1; g_title(window,"Spielende, bitte Maustaste dr…ken!"); do { show_date(); vq_mouse(handle2,&buttons,&xpos,&ypos); } while(buttons==0); } init() { myexit=0; time_player=0; time_atari=0; tmax=2; zu=0; g_info(window," "); for (i=0; i<72; ar[i++]=99); for (i=10; i<=55; i+=9) { for (j=0; j<7; ar[i+j++]=0); } dummy=vsf_color(handle2,1); dummy=vsf_interior(handle2,2); vsf_perimeter(handle2,1); dummy=vsf_style(handle2,1); for (y=1; y<7; y++) { for (x=1; x<8; x++) { corners[0]=100+x*45; corners[1]=y*45; corners[2]=corners[0]+40; corners[3]=corners[1]+40; g_rfbox(window,corners); } } dummy=vsf_interior(handle2,2); print_max(); player=1; show_time(); player= -1; show_time(); } entry() { player= -1; move= -1; v_show_c(handle2,0); get_time(); start=time; do { g_title(window,"Dein Zug ?"); do { show_date(); vq_mouse(handle2,&buttons,&xpos,&Ypos); } while(buttons==0); if (xpos>11 && xpos<113) { if (ypos>353 && ypos<375) { abbruch(); continue; } if (ypos>233 && ypos<255) { myexit=1; continue; } if (ypos>293 && ypos<315 && tmax<6) { tmax++; print_max(); continue; } if (ypos>323 && ypos<345 && tmax>2) { tmax--; print_max(); continue; } if (ypos>263 && ypos<285 && zu>0) { dummy=vsf_style(handle2,1); for (i=0; i<2; i++) { zu--; index=zuege[zu]; depth(); if (move<0) move=1; else move++; ar[move*9+index]=0; corners[0]=100+index*45; corners[1]=move*45; corners[2]=corners[0]+40; corners[3]=corners[1]+40; g_rfbox(window,corners); } do { vq_mouse(handle2,&buttons,&xpos,&ypos); } while(buttons!=0); move= -1; } } if (xpos>144 && xpos<460 && ypos>60) { index=(xpos-100)/45; depth(); } } while(move<0 && myexit==0); v_hide_c(handle2); zuege[zu]=index; zu++; get_time(); time_player+=time-start; show_time(); if (myexit==0) { display(); points(); } } depth() { move= -1; for (y=7; y>0; y--) { if (ar[y*9+index]==0) { move=y; break; }} } display() { ar[move*9+index]=player; if (player<0) style=4; else style=8; dummy=vsf_style(handle2,style); y=1; corners[0]=100+index*45; corners[1]=y*45; corners[2]=corners[0]+40; corners[3]=corners[1]+40; g_rfbox(window,corners); while(y=3) { sub1500(); continue; } if (fr[yy+1]==0 && fr[6-yy+1]==0) zw=0; sub1500(); } zw=wr[5]; if (zw<(4-move)) zw=0; sub1500(); } sub1500() { if (zw==1) pu++; if (zw==2) pu+=10; if (zw>=3) pu+=100; } computer() { g_title(window,"Jetzt bin ich an der Reihe !"); get_time(); start=time; tt=0; player= -1; bz=0; br[1]=-999; if (zu<2) { do { date(dummy,&datevec); bz=3+(datevec[6] % 3); } while(ar[45+bz] != 0); } else rekursion(); zuege[zu]=bz; zu++; get_time(); time_atari+=1+(time-start); player=1; show_time(); } rekursion() { tt++; player*= -1; xr[tt]=1; label1: if (ar[xr[tt]+9]!=0) goto label2; index=xr[tt]; depth(); yr[tt]=move; points(); pr[tt]=pu; br[tt+1]=0; pr[tt+1]=0; if (tt+1<=tmax) br[tt+1]= -999; if (tt==1) { if (pu>=100) { bz=xr[1]; return; } } ar[yr[tt]*9+xr[tt]]=player; if (pu>=100) { br[tt]=pu; ar[yr[tt]*9+xr[tt]]=0; xr[tt]=7; goto label2; } if (ttbr[tt]) { br[tt]=pr[tt]-br[tt+1]; if (tt==1) bz=xr[1]; } if (pr[tt]-br[tt+1]==br[tt]) { date(dummy,&datevec); if (datevec[6]%2==0) { br[tt]=pr[tt]-br[tt+1]; if (tt==1) bz=xr[1]; } } ar[yr[tt]*9+xr[tt]]=0; label2: if (xr[tt]<7) { xr[tt]++; goto label1; } tt--; player*= -1; } print_items() { dummy=vsf_color(handle1,1); dummy=vsf_interior(handle1,2); dummy=vsf_style(handle1,4); corners[0]=12; corners[2]=corners[0]+104; for (y=1; y<6; y++) { corners[1]=220+y*30-16; corners[3]=220+y*30+5; v_bar(handle1,corners); } corners[0]=520; corners[2]=corners[0]+71; for (y=0; y<3; y++) { corners[1]=174+y*60; corners[3]=corners[1]+51; v_bar(handle1,corners); } v_gtext(handle1,36,370,"ABBRUCH"); v_gtext(handle1,20,250,"Neues Spiel"); v_gtext(handle1,16,310,"Spielstufe +"); v_gtext(handle1,16,340,"Spielstufe -"); v_gtext(handle1,16,280,"Zur…knahme"); v_gtext(handle1,528,253,"Spieler"); v_gtext(handle1,524,313,"Computer"); v_gtext(handle1,528,207,"Stufe "); } get_time() { date(dummy,&datevec); time=datevec[6]+datevec[5]*60+datevec[4]*3600; } show_time() { if (player<0) { y=274; time=time_player; } else { y=334; time=time_atari; } timebuf=time/3600; time-=timebuf*3600; itoa(timebuf,&buf1); if (timebuf<10) { strcat(&buf1,"0"); reverse(&buf1); } strcpy(&buf,buf1); strcat(&buf,"."); timebuf=time/60; time-=timebuf*60; itoa(timebuf,&buf1); if (timebuf<10) { strcat(&buf1,"0"); reverse(&buf1); } strcat(&buf,&buf1); strcat(&buf,":"); itoa(time,&buf1); if (time<10) { strcat(&buf1,"0"); reverse(&buf1); } strcat(&buf,buf1); v_gtext(handle1,524,y,buf); } print_max() { dummy=tmax-1; itoa(dummy,&buf); v_gtext(handle1,576,207,buf); do { vq_mouse(handle2,&buttons,&xpos,&ypos); } while(buttons!=0); } test() { leer=0; for(index=1; index<8; index++) { depth(); if (move>0) leer++; } } show_date() { date(dummy,&datevec); switch(datevec[3]) { case 0: strcpy(&datum,"Sonntag"); break; case 1: strcpy(&datum,"Montag"); break; case 2: strcpy(&datum,"Dienstag"); break; case 3: strcpy(&datum,"Mittwoch"); break; case 4: strcpy(&datum,"Donnerstag"); break; case 5: strcpy(&datum,"Freitag"); break; case 6: strcpy(&datum,"Samstag"); break; } strcat(&datum,", der "); dummy=datevec[2]; itoa(dummy,&buf); strcat(&datum,buf); strcat(&datum,"."); dummy=datevec[1]; itoa(dummy,&buf); strcat(&datum,buf); strcat(&datum,".19"); dummy=datevec[0]; itoa(dummy,&buf); strcat(&datum,buf); strcat(&datum,", "); dummy=datevec[4]; itoa(dummy,&buf); if (dummy<10) { strcat(&buf,"0"); reverse(&buf); } strcat(&datum,buf); strcat(&datum,":"); dummy=datevec[5]; itoa(dummy,&buf); if (dummy<10) { strcat(&buf,"0"); reverse(&buf); } strcat(&datum,buf); strcat(&datum," Uhr"); while(strlen(datum)<37) { strcat(&datum," "); } v_gtext(handle1,340,15,datum); } abbruch() { v_hide_c(handle2); g_info(window,"Du willst wirklich aufh排en ? (j/n)"); key=evnt_keybd(); key=key&255; if (key==74 || key==106) myexit=2; g_info(window," "); v_show_c(handle2,0); }