俄罗斯方块「难点在于任意个方块」「一般应用练习按键」

//这个俄罗斯方块游戏,唯一的难点就是:任意个方块能组成多少个可旋转可移动的不同图形//一般应用练习按键【多开】。(lib,"")defineerr{printf("%s(%i):\n",__FILE__,__LINE__),::ExitProcess(0);}definecall(fun)if(fun){printf("%s(%i):\n",__FILE__,__LINE__),::ExitProcess(0);}i,i,i)s,s)definecmpb(i,n)(unsigned(i)unsigned(n))definecmpa(i,n)(unsigned(i)unsigned(n))#defineget_time::GetTickCountintmain();intWINAPIWinMain(HINSTANCE,HINSTANCE,LPSTR,int){returnmain();}LRESULT(CALLBACKwindow_proc)(HWND,UINT,WPARAM,LPARAM){return1;}structxy{intx;inty;xy(){}xy(intm){x=m;y=m;}xy(intx,inty){this-x=x;this-y=y;}xyoperator*(xym){returnxy(x*,y*);}xyoperator/(xym){returnxy(x/,y/);}xyoperator%(xym){returnxy(x%,y%);}xyoperator+(xym){returnxy(x+,y+);}xyoperator-(xym){returnxy(,);}xyoperator(xym){returnxy(,);}xyoperator(xym){returnxy(,);}xyoperator(xym){returnxy(,);}xyoperator|(xym){returnxy(x|,y|);}xyoperator^(xym){returnxy(x^,y^);}xyoperator*=(xym){x*=;y*=;return*this;}xyoperator/=(xym){x/=;y/=;return*this;}xyoperator%=(xym){x%=;y%=;return*this;}xyoperator+=(xym){x+=;y+=;return*this;}xyoperator-=(xym){x-=;y-=;return*this;}xyoperator=(xym){x=;y=;return*this;}xyoperator=(xym){x=;y=;return*this;}xyoperator=(xym){x=;y=;return*this;}xyoperator|=(xym){x|=;y|=;return*this;}xyoperator^=(xym){x^=;y^=;return*this;}xyoperator*(intm){returnxy(x*m,y*m);}xyoperator/(intm){returnxy(x/m,y/m);}xyoperator%(intm){returnxy(x%m,y%m);}xyoperator+(intm){returnxy(x+m,y+m);}xyoperator-(intm){returnxy(x-m,y-m);}xyoperator(intm){returnxy(xm,ym);}xyoperator(intm){returnxy(xm,ym);}xyoperator(intm){returnxy(xm,ym);}xyoperator|(intm){returnxy(x|m,y|m);}xyoperator^(intm){returnxy(x^m,y^m);}xyoperator*=(intm){x*=m;y*=m;return*this;}xyoperator/=(intm){x/=m;y/=m;return*this;}xyoperator%=(intm){x%=m;y%=m;return*this;}xyoperator+=(intm){x+=m;y+=m;return*this;}xyoperator-=(intm){x-=m;y-=m;return*this;}xyoperator=(intm){x=m;y=m;return*this;}xyoperator=(intm){x=m;y=m;return*this;}xyoperator=(intm){x=m;y=m;return*this;}xyoperator|=(intm){x|=m;y|=m;return*this;}xyoperator^=(intm){x^=m;y^=m;return*this;}booloperator(xym){return((unsigned(x)unsigned())(unsigned(y)unsigned()));}booloperator(xym){return((unsigned(x)unsigned())(unsigned(y)unsigned()));}booloperator=(xym){return((unsigned(x)=unsigned())(unsigned(y)=unsigned()));}booloperator=(xym){return((unsigned(x)=unsigned())(unsigned(y)=unsigned()));}booloperator==(xym){return((unsigned(x)==unsigned())(unsigned(y)==unsigned()));}booloperator(intm){return((unsigned(x)unsigned(m))(unsigned(y)unsigned(m)));}booloperator(intm){return((unsigned(x)unsigned(m))(unsigned(y)unsigned(m)));}booloperator=(intm){return((unsigned(x)=unsigned(m))(unsigned(y)=unsigned(m)));}booloperator=(intm){return((unsigned(x)=unsigned(m))(unsigned(y)=unsigned(m)));}booloperator==(intm){return((unsigned(x)==unsigned(m))(unsigned(y)==unsigned(m)));}xyoperator!(){returnxy(!x,!y);}xyoperator~(){returnxy(~x,~y);}xyoperator+(){returnxy(+x,+y);}xyoperator-(){returnxy(-x,-y);}xyget_number(){xym=0;if(x0)=+x;if(x0)=-x;if(y0)=+y;if(y0)=-y;returnm;}xyget_flag(){xym=0;if(x0)=+1;if(x0)=-1;if(y0)=+1;if(y0)=-1;returnm;}voidx_y(){intv=x;x=y;y=v;}intxx(){returnx*x;}intyy(){returny*y;}intxx_yy(){return(x*x+y*y);}xyoperator=(xym){x=;y=;return*this;}xyoperator=(intm){x=m;y=m;return*this;}xyoperator++(int){xytemp=*this;++x;++y;returntemp;}xyoperator++(){x++;y++;return*this;}xyoperator--(int){xytemp=*this;--x;--y;returntemp;}xyoperator--(){x--;y--;return*this;}};//妄想扣篮的男人//俄罗斯方块//任意个方块能组成多少个可旋转可移动的不同图形constintdm=4;xyda[0x1000][dm];intdn=0;voidda_get(xy*sa,intsn){if(sndm){for(intsi=0;sisn;si++){staticxya4[]={xy(0,+1),xy(-1,0),xy(+1,0),xy(0,-1),};for(inti=0;inof(a4);i++){xys=sa[si]+a4[i];for(intn=0;1;n++){if(nsn){if(s==sa[n])break;}else{sa[sn]=s;da_get(sa,sn+1);break;}}}}}else{xyta[dm];for(inti=0;idm;i++)ta[i]=sa[i];inthave=0;for(intindex=0;index4;index++){for(inti=0;idm;i++){//rotateintx=ta[i].x;inty=ta[i].y;ta[i].x=y;ta[i].y=-x;}{xym=xy(12341234,12341234);for(inti=0;idm;i++){//moveif([i].x)=ta[i].x;if([i].y)=ta[i].y;}for(inti=0;idm;i++)ta[i]-=m;}for(inti=0;idm;i++){//min_maxfor(intn=i+1;ndm;n++){if((ta[i].y*dm+ta[i].x)(ta[n].y*dm+ta[n].x)){xyv=ta[i];ta[i]=ta[n];ta[n]=v;}}}for(intdi=0;didn;di++){//findintn=0;for(;ndm;n++)if(da[di][n]==ta[n]){}elsebreak;if(n==dm){have=1;break;}}if(have)break;}if(have==0){for(inti=0;idm;i++)da[dn][i]=ta[i];if(dnnof(da)){dn++;}else{err;}}}}voidget_da(){xysa[dm];intsn=0;sa[sn++]=xy(0);da_get(sa,sn);for(intdi=0;didn;di++){printf("___________%i_______________\n",di+1);chara[dm][dm]={};for(inti=0;idm;i++){intx=da[di][i].x;inty=da[di][i].y;if(0=xxdm){}elseerr;if(0=yydm){}elseerr;a[y][x]=1;}for(inty=0;ydm;y++){for(intx=0;xdm;x++){if(a[y][x]){printf("口");}elseprintf("");}printf("\n");}}}structxyr_t{intx;inty;intr;}xyr[4]={{0,0,1},{-1},{0,-1,},{+1},};constintem=dm;structet{intr;xyo;xya[em];xyb[em];voidget_b(){for(inti=0;iem;i++)b[i]=a[i]+o;}voidchange(xyr_tm){o+=xy(,);if(){for(inti=0;iem;i++){xym=a[i];a[i]=xy(,-);}}get_b();}}ea[nof(da)];inten=0;voidget_ea(){struct{intlen;inti;}la[em],l;for(intdi=0;didn;di++){for(intli=0;liem;li++){la[li].len=0;la[li].i=li;for(intni=0;niem;ni++){xym=da[di][li]-da[di][ni];if(==0||==0){la[li].len+=_yy();}else{la[li].len+=_yy()*em;}}}for(intj=0;jnof(la);j++){for(intk=j+1;knof(la);k++){if(la[j].lenla[k].len){l=la[j];la[j]=la[k];la[k]=l;}}}ea[di].o=da[di][la[0].i];if(em2la[0].len==la[2].len){ea[di].r=0;}else{ea[di].r=1;}for(inti=0;iem;i++)ea[di].a[i]=da[di][i]-ea[di].o;}en=dn;////////////////for(intei=0;eien;ei++){printf("___________%i_______________\n",ei+1);chara[em][em]={};for(inti=0;iem;i++){xym=ea[ei].a[i]+ea[ei].o;intx=;inty=;if(0=xxem){}elseerr;if(0=yyem){}elseerr;if(ea[ei].rea[ei].a[i]==xy(0)){a[y][x]=2;}else{a[y][x]=1;}}for(inty=0;yem;y++){for(intx=0;xem;x++){if(a[y][x]){if(a[y][x]1){printf("中");}else{printf("口");}}elseprintf("");}printf("\n");}}///////////////}constintfx=em*3;constintfy=fx*2;structft{ete;inta[fy][fx];intn;DWORDauto_time;struct{intv;intpre;intnow;}key[nof(xyr)];voidset_auto(){auto_time=::GetTickCount()+1000;}voidget_e(){staticintei=-1;e=ea[ei=(ei+1)%en];set_auto();for(inti=0;inof(xyr);i++)key[i].pre=::GetAsyncKeyState(key[i].v)0;}voidinit(){get_e();for(intx=0;xfx;x++)for(inty=0;yfy;y++)a[y][x]=0;n=0;//for(intx=0;xfx;x++)a[0][x]=1;}voidchange(xyr_tm,intis_auto=0){set_auto();ett=e;(m);intcan=1;for(inti=0;iem;i++){intx=[i].x;inty=[i].y;if(0=xxfx0=y){if(yfy){if(a[y][x]){can=0;break;}}else{}}else{{can=0;break;}}}if(can){e=t;}elseif(is_auto){;intout=0;for(inti=0;iem;i++){intx=[i].x;inty=[i].y;if(0=xxfx0=yyfy){a[y][x]=1;}else{{out=1;break;}}}if(out){init();}else{intfull_n=0;intd=0;for(ints=0;sfy;s++){intfull=1;for(intx=0;xfx;x++)if(a[s][x]==0){full=0;break;};if(full){full_n++;}else{for(intx=0;xfx;x++)a[d][x]=a[s][x];d++;}}for(;dfy;d++)for(intx=0;xfx;x++)a[d][x]=0;if(full_n)n+=1(full_n);get_e();}}}voidrun(DWORDtime){for(inti=0;inof(xyr);i++){key[i].now=::GetAsyncKeyState(key[i].v)0;intcan=0;if(i==2){if(key[i].now)can=1;}else{if(key[i].pre!key[i].now)can=1;}if(can){change(xyr[i]);}key[i].pre=key[i].now;}if(auto_timetime){change(xyr[2],1);}}}fa[2];constintfn=nof(fa);struct__init{__init(){get_da();get_ea();for(intei=0;eien;ei++){ea[ei].+=fx/2-em/4;ea[ei].+=fy;ea[ei].get_b();}for(intei=0;eien;ei++){for(inti=0;iem;i++){intx=ea[ei].b[i].x;inty=ea[ei].b[i].y;if(0=xxfx0=y){}else{err;}}}for(intfi=0;fifn;fi++)fa[fi].init();staticintkey[][nof(xyr)]={{{'W'},{'A'},{'S'},{'D'},},{{'I'},{'J'},{'K'},{'L'},},{{VK_UP},{VK_LEFT},{VK_DOWN},{VK_RIGHT},},};if(nof(key)nof(fa))err;///////for(intfi=0;fifn;fi++){for(inti=0;inof(xyr);i++)fa[fi].key[i].v=key[fi][i];}//////////////////////////////}}__init;HDCdc;HBRUSHbrush_all=::CreateSolidBrush(RGB(-1,-1,-1));HBRUSHbrush_back=::CreateSolidBrush(RGB(0,0,0));HBRUSHbrush_o=::CreateSolidBrush(RGB(0,0xc0,0));HBRUSHbrush_e=::CreateSolidBrush(RGB(0,0x80,0));HBRUSHbrush_a=::CreateSolidBrush(RGB(0x80,0x80,0x80));voidset(intx,inty,intw,inth,HBRUSHbrush){::SelectObject(dc,brush);::BitBlt(dc,x,y,w,h,0,0,0,PATCOPY);}intmain(){HWNDwindow;{WNDCLASSEXAwc={sizeof(wc)};="wc";=::LoadCursor(0,IDC_ARROW);=::CreateSolidBrush(RGB(-1,-1,-1));=window_proc;::RegisterClassExA(wc);window=::CreateWindowExA(0,,"",WS_POPUP|WS_VISIBLE,0,0,1,1,0,0,0,0);::SetCursor(::LoadCursor(0,IDC_ARROW));}IDirectDraw*draw;{::DirectDrawCreate((GUID*)DDCREATE_HARDWAREONLY,draw,0);draw-SetCooperativeLevel(window,DDSCL_FULLSCREEN|DDSCL_EXCLUSIVE);}IDirectDrawSurface*surface;{DDSURFACEDESCdesc={sizeof(desc)};=DDSD_CAPS;=DDSCAPS_PRIMARYSURFACE|DDSCAPS_3DDEVICE;draw-CreateSurface(desc,surface,0);}DDSURFACEDESCdesc={sizeof(desc)};{surface-GetSurfaceDesc(desc);}constintwx=;constintwy=;constintwx_fn=wx/fn;intux;intuy;intu;{intx=(wx_fn-2)/fx;inty=wy/(fy+1);if(xy)u=x;elseu=y;ux=u*fx;uy=u*fy;}constintfont_h=u;constHFONTfont=::CreateFontA(-font_h,0,0,0,0,0,0,0,0,0,0,CLEARTYPE_QUALITY,0,"simsun");constintfont_w=font_h/2;while(1){DWORDtime=::GetTickCount();surface-GetDC(dc);set(0,0,wx,wy,brush_all);for(intfi=0;fifn;fi++){xyp;=(wx_fn-ux)/2+fi*wx_fn;=(wy-uy-u)/2;::SelectObject(dc,font);::SetTextColor(dc,RGB(0,0,0));::SetBkMode(dc,TRANSPARENT);chara[100];intn=sprintf(a,"%i",fa[fi].n);::TextOutA(dc,,,a,n);+=u;set(,,ux,uy,brush_back);fa[fi].run(time);for(inti=0;iem;i++){xym=fa[fi].[i];if(){=;set(+*u,+*u,u-1,u-1,(fa[fi].[fi].[i]==xy(0,0)?brush_o:brush_e));}}for(intx=0;xfx;x++)for(inty=0;yfy;y++)if(fa[fi].a[y][x]){set(+x*u,+(fy-1-y)*u,u-1,u-1,brush_a);}}surface-ReleaseDC(dc);if(::GetAsyncKeyState(VK_ESCAPE)0)exit(0);}return0;}

上一篇:骁龙836要来了 Pixel 2和三星Note8首发
下一篇:《古剑奇谭》疯批美人欧阳少恭,冷静的疯子,迎接他的只能是灭亡