DECLARE MOUSE.MEM#,__cf1&,__cf2&,__cf3&,__cf4&,__cf5&,__cf6&,__cf7&,__cf8&,__cf9&,__cf10&,__cf11&,__cf12&,__cf13&,__cf14& STRUCT SCROLLINFO=CBSIZE&, FMASK&, NMIN&, NMAX&, NPAGE&, NPOS&, NTRACKPOS& Def __cf1(2) !"KERNEL32","GetProcAddress" Def __cf2(1) !"KERNEL32","GetModuleHandleA" __cf1&=__cf1(__cf2("KERNEL32"),"GlobalAlloc") __cf2&=__cf1(__cf2("user32.dll"),"SetWindowLongA") __cf3&=__cf1(__cf2("user32.dll"),"SetClassLongA") __cf4&=__cf1(__cf2("user32.dll"),"GetWindowLongA") __cf5&=__cf1(__cf2("KERNEL32"),"GlobalFree") __cf6&=__cf1(__cf2("user32.dll"),"GetSysColor") STRUCT POINT=X&, Y& __cf7&=__cf1(__cf2("user32.dll"),"GetAsyncKeyState") __cf8&=__cf1(__cf2("user32.dll"),"GetCursorPos") __cf9&=__cf1(__cf2("user32.dll"),"ClientToScreen") __cf10&=__cf1(__cf2("user32.dll"),"SetCursorPos") STRUCT RECT=LEFT&,TOP&,RIGHT&,BOTTOM& __cf11&=__cf1(__cf2("user32.dll"),"ClipCursor") __cf12&=__cf1(__cf2("gdi32.dll"),"Polygon") __cf13&=__cf1(__cf2("user32.dll"),"SetTimer") __cf14&=__cf1(__cf2("user32.dll"),"KillTimer") RANDOMIZE $U DLGMENU.PCU=MENU. proc SCROLLBAR.SETINFO PARAMETERS H&,NMIN&,NMAX&,NPAGE&,NPOS& DECLARE SI# DIM SI#,SCROLLINFO WITH SI# .FMASK&=$17 .NMIN&=NMIN& .NMAX&=NMAX& .NPAGE&=NPAGE& .NPOS&=NPOS& .NTRACKPOS&=0 ENDWITH SENDMESSAGE(H&,233,1,SI#) DISPOSE SI# endproc proc SC.CREATECONTROL PARAMETERS PARENT&,TITLE$,X&,Y&,XX&,YY&,IXX&,IYY&,TYP&,WNDSTYLE& SELECT TYP& CASEOF 1 IFNOT %HWND WINDOWSTYLE 80 | 512 | 1024 WINDOW %MAXX,%MAXY - 0,0 SHOWWINDOW(%HWND,0) ENDIF WINDOWSTYLE WNDSTYLE& var WND&=(CREATE("WINDOW",(PARENT&),TITLE$,(%MAXX),(%MAXY),(0),(0))) var HHS&=CREATE("HScroll",WND&,"",0,0,0,0) var HVS&=CREATE("VScroll",WND&,"",0,0,0,0) var DSK&=CREATE("text",WND&,"",0,0,0,0) var PPL&=CREATE("text",WND&,"",0,0,0,0) CASEOF 2 var WND&=(CONTROL("STATIC",TITLE$,$50000000,(%MAXX),(%MAXY),(0),(0),(PARENT&),0,%HINSTANCE)) var HHS&=CREATE("HScroll",PARENT&,"",0,0,0,0) var HVS&=CREATE("VScroll",PARENT&,"",0,0,0,0) var DSK&=CREATE("text",WND&,"",0,0,0,0) var PPL&=0 CASEOF 3 var WND&=(CONTROL("STATIC",TITLE$,$50000000,(%MAXX),(%MAXY),(0),(0),(PARENT&),0,%HINSTANCE)) var HHS&=CREATE("HScroll",PARENT&,"",0,0,0,0) var HVS&=CREATE("VScroll",PARENT&,"",0,0,0,0) var DSK&=CREATE("text",WND&,"",0,0,0,0) var PPL&=CREATE("text",PARENT&,"",0,0,0,0) ENDSELECT var M&=call(__cf1&,0 | $40,52) LONG M&,0=TYP& LONG M&,4=WND& LONG M&,8=HHS& LONG M&,12=HVS& LONG M&,16=DSK& LONG M&,20=PPL& LONG M&,24=IXX& LONG M&,28=IYY& LONG M&,32=PARENT& LONG M&,36=X& LONG M&,40=Y& LONG M&,44=XX& LONG M&,48=YY& call(__cf2&,DSK&,-21,M&) SC.SETUP(DSK&,X&,Y&,XX&,YY&,IXX&,IYY&,1) SUBCLASS PARENT&,1 SUBCLASS WND&,1 SUBCLASS HHS&,1 SUBCLASS HVS&,1 SUBCLASS DSK&,1 SELECT TYP& CASEOF 1 call(__cf3&,WND&,-12,65553) ENDSELECT RETURN DSK& endproc proc SC.CREATEWINDOW PARAMETERS PARENT&,TITLE$,X&,Y&,XX&,YY&,IXX&,IYY&,WNDSTYLE& IF %PCOUNT<9 WNDSTYLE&=1 | 2 | 4 | 8 | 16 | 512 ENDIF RETURN SC.CREATECONTROL(PARENT&,TITLE$,X&,Y&,XX&,YY&,IXX&,IYY&,1,WNDSTYLE&) endproc proc SC.CREATE PARAMETERS PARENT&,X&,Y&,XX&,YY&,IXX&,IYY& RETURN SC.CREATECONTROL(PARENT&,"",X&,Y&,XX&,YY&,IXX&,IYY&,3) endproc proc SC.SETUP PARAMETERS DSK&,X&,Y&,XX&,YY&,NX&,NY&,SCALE% var M&=call(__cf4&,DSK&,-21) var TYP&=LONG(M&,0) var WND&=LONG(M&,4) var HHS&=LONG(M&,8) var HVS&=LONG(M&,12) var PPL&=LONG(M&,20) var IXX&=LONG(M&,24) var IYY&=LONG(M&,28) var PARENT&=LONG(M&,32) SELECT %PCOUNT CASEOF 1 X&=LONG(M&,36) Y&=LONG(M&,40) XX&=LONG(M&,44) YY&=LONG(M&,48) OTHERWISE IF SCALE% SELECT TYP& CASEOF 1 SETWINDOWPOS WND&=X&,Y& - XX&,YY& ENDSELECT LONG M&,24=NX& LONG M&,28=NY& LONG M&,36=X& LONG M&,40=Y& LONG M&,44=XX& LONG M&,48=YY& IXX&=NX& IYY&=NY& ENDIF ENDSELECT var SBX&=0 var SBY&=0 SELECT TYP& CASEOF 1 XX&=WIDTH(WND&) YY&=HEIGHT(WND&) CASEOF 2,3 SBX&=X& SBY&=Y& ENDSELECT var HNEED%=IF(XX&100 _POS&=100 ENDIF LONG M&,04=_POS& PROGRESS.PAINT(H&) endproc proc PROGRESS.GETPOS PARAMETERS H& IFNOT PROGRESS.IS(H&) RETURN 0 ENDIF var M&=call(__cf4&,H&,-21) RETURN LONG(M&,4) endproc proc PROGRESS.SETCOL PARAMETERS H&,_COL& IFNOT PROGRESS.IS(H&) RETURN 0 ENDIF var M&=call(__cf4&,H&,-21) LONG M&,12=_COL& PROGRESS.PAINT(H&) endproc proc PROGRESS.SUBCLASS PARAMETERS H&,WND_&,MSG_&,WP_&,LP_& IFNOT PROGRESS.IS(H&) RETURN 0 ENDIF SELECT %PCOUNT CASEOF 1 WND_&=&SWND MSG_&=%SMESSAGE WP_&=&SWPARAM LP_&=&SLPARAM ENDSELECT SELECT WND_& CASEOF H& SELECT MSG_& CASEOF 14 PROGRESS.PAINT(H&) CASEOF $0201,$0204,$0203,$0206 var M&=call(__cf4&,H&,-21) LONG M&,08=MSG_& SENDMESSAGE(%HWND,PROGRESS.NOTIFYMESSAGE&,H&,MSG_&) CASEOF $0002 call(__cf5&,call(__cf4&,H&,-21)) ENDSELECT ENDSELECT endproc proc PROGRESS.RGB.DARK PARAMETERS COL& RETURN RGB(GETRVALUE(COL&)*0.9,GETGVALUE(COL&)*0.9,GETBVALUE(COL&)*0.9) endproc proc PROGRESS.PAINT PARAMETERS H& IFNOT PROGRESS.IS(H&) RETURN 0 ENDIF var M&=call(__cf4&,H&,-21) var TYP&=LONG(M&,0) var _POS&=LONG(M&,4) var XX&=WIDTH(H&) var YY&=HEIGHT(H&) var _COL&=LONG(M&,12) var COL&=call(__cf6&,15) var HPIC&=CREATE("hNewPic",XX&,YY&,0) var XXH&=XX&*0.5 var YYH&=YY&*0.5 var P&=0 STARTPAINT HPIC& CLS $DEDEDE USEPEN 5,0,0 USEBRUSH 1,$CBCBCB SELECT TYP& CASEOF 1,2 RECTANGLE 0,YYH& - XX&,YY& CASEOF 3,4 RECTANGLE XXH&,0 - XX&,YY& ENDSELECT USEPEN 0,1,$ADB2B2 USEBRUSH 0,0 RECTANGLE 0,0 - XX&,YY& USEPEN 0,1,$FFFFFF RECTANGLE 1,1 - (XX&-1),(YY&-1) SETPIXEL 0,0,COL& SETPIXEL 0,YY&-1,COL& SETPIXEL XX&-1,0,COL& SETPIXEL XX&-1,YY&-1,COL& SELECT TYP& CASEOF 1,2 P&=(XX&-4)*0.01*_POS& IF P&>0 USEPEN 5,0,0 USEBRUSH 1,_COL& RECTANGLE 2,2 - (P&+3),(YY&-1) USEBRUSH 1,PROGRESS.RGB.DARK(_COL&) RECTANGLE 2,YYH& - (P&+3),(YY&-1) SETPIXEL 2,2,$FFCCCC SETPIXEL 2,YY&-3,$FFCCCC SETPIXEL P&+1,2,$FFCCCC SETPIXEL P&+1,YY&-3,$FFCCCC ENDIF SELECT TYP& CASEOF 2 IF YY&>16 USEFONT "MS Sans Serif",10,0,0,0,0 TEXTCOLOR $666666,-1 var S$=STR$(_POS&)+"%" var TXP&=XXH&-LEN(S$)*3 DRAWTEXT TXP&,YYH&-7,S$ TEXTCOLOR $FFFFFF,-1 DRAWTEXT TXP&-1,YYH&-6,S$ ENDIF ENDSELECT CASEOF 3,4 P&=(YY&-4)*0.01*_POS& IF P&>0 USEPEN 5,0,0 USEBRUSH 1,_COL& RECTANGLE 2,(YY&-1) - (XX&-1),(YY&-2-P&) USEBRUSH 1,PROGRESS.RGB.DARK(_COL&) RECTANGLE XXH&,(YY&-1) - (XX&-1),(YY&-2-P&) SETPIXEL 2,YY&-P&-2,$FFCCCC SETPIXEL XX&-3,YY&-P&-2,$FFCCCC SETPIXEL 2,YY&-3,$FFCCCC SETPIXEL XX&-3,YY&-3,$FFCCCC ENDIF ENDSELECT ENDPAINT STARTPAINT H& DRAWPIC HPIC&,0,0;0 ENDPAINT DELETEOBJECT HPIC& endproc var HBUNTANKPIC&=0 var MOUSE.X&=0 var MOUSE.Y&=0 DIM MOUSE.MEM#,POINT proc LM_ RETURN IF(call(__cf7&,1) & $8000=0,0,1) endproc proc RM_ RETURN IF(call(__cf7&,2) & $8000=0,0,1) endproc proc GETMOUSEPOS PARAMETERS H& SELECT %PCOUNT CASEOF 0 call(__cf8&,MOUSE.MEM#) MOUSE.X&=MOUSE.MEM#.X& MOUSE.Y&=MOUSE.MEM#.Y& CASEOF 1 DECLARE GMP# DIM GMP#,8 CLEAR GMP# call(__cf9&,H&,GMP#) var GMX%=LONG(GMP#,0) var GMY%=LONG(GMP#,4) call(__cf8&,GMP#) GMX%=LONG(GMP#,0)-GMX% GMY%=LONG(GMP#,4)-GMY% MOUSE.X&=GMX% MOUSE.Y&=GMY% DISPOSE GMP# ENDSELECT endproc proc SETMOUSEPOS PARAMETERS X&,Y& call(__cf10&,X&,Y&) endproc proc CLIPMOUSE PARAMETERS X&,Y&,XX&,YY& DECLARE MEM# DIM MEM#,RECT MEM#.LEFT&=X& MEM#.TOP&=Y& MEM#.RIGHT&=XX& MEM#.BOTTOM&=YY& call(__cf11&,MEM#) DISPOSE MEM# endproc proc MOUSE.CLOSE DISPOSE MOUSE.MEM# endproc var GETCIRCP.X&=0 var GETCIRCP.Y&=0 proc WNK PARAMETERS X1!,Y1!,X2!,Y2!,MODE% var DX!=X2!-X1! var DY!=Y2!-Y1! IF (DX!<0) AND (DY!<0) RETURN WNK(X2!,Y2!,X1!,Y1!,3) ENDIF IF DX!<0 RETURN WNK(X2!,Y1!,X1!,Y2!,1) ENDIF IF DY!<0 RETURN WNK(X1!,Y2!,X2!,Y1!,2) ENDIF IFNOT DX! DX!=0.0000001 ENDIF IFNOT DY! DY!=0.0000001 ENDIF var W!=ARCTAN(DY!/DX!)*57.295779513082320876798154814105 SELECT %PCOUNT CASEOF 5 SELECT MODE% CASEOF 1 W!=90+(90-W!) CASEOF 2 W!=360-W! CASEOF 3 W!=180+W! ENDSELECT ENDSELECT RETURN W! endproc proc GETCIRCP PARAMETERS XP%,YP%,R!,W! GETCIRCP.X&=SIN(-1*W!*PI()/180)*R!*-1+XP% GETCIRCP.Y&=COS(-1*W!*PI()/180)*R!*-1+YP% endproc var TANK.NOTIFYMESSAGE&=$0400+1113 var TANK.MOUSEX&=0 var TANK.MOUSEY&=0 subproc CREATE.TANK PARAMETERS TYP&,PARENT&,X&,Y&,XX&,YY& RETURN TANK.CREATE(TYP&,PARENT&,X&,Y&,XX&,YY&) endproc proc TANK.IS PARAMETERS H& var T&=0 SELECT UPPER$(CLASSOF(H&)) CASEOF "STATIC" T&=1 ENDSELECT RETURN T& endproc proc TANK.DESTROY PARAMETERS H& IFNOT TANK.IS(H&) RETURN ENDIF call(__cf5&,call(__cf4&,H&,-21)) DESTROYWINDOW(H&) endproc proc TANK.CREATE PARAMETERS TYP&,PARENT&,X&,Y&,XX&,YY& SELECT TYP& CASEOF 1 var H&=CREATE("text",PARENT&,"",%MAXX,%MAXY,0,0) SETSTYLE H&,GETSTYLE(H&) | $2000000 | $100 SETWINDOWPOS H&=X&,Y& - XX&,YY& OTHERWISE RETURN 0 ENDSELECT var M&=call(__cf1&,0 | $40,16) call(__cf2&,H&,-21,M&) LONG M&,00=TYP& LONG M&,04=0 LONG M&,08=0 LONG M&,12=call(__cf6&,15) TANK.PAINT(H&) SUBCLASS H&,1 RETURN H& endproc proc TANK.CLICKED PARAMETERS H& IFNOT TANK.IS(H&) RETURN ENDIF var M&=call(__cf4&,H&,-21) var T&=LONG(M&,8) LONG M&,8=0 RETURN T& endproc proc TANK.SETCOL PARAMETERS H&,_COL& IFNOT TANK.IS(H&) RETURN ENDIF var M&=call(__cf4&,H&,-21) LONG M&,12=_COL& TANK.PAINT(H&) endproc proc TANK.SETPOS PARAMETERS H&,_POS& IFNOT TANK.IS(H&) RETURN ENDIF var M&=call(__cf4&,H&,-21) _POS&=_POS& MOD 360 LONG M&,4=_POS& TANK.PAINT(H&) endproc proc TANK.GETPOS PARAMETERS H& IFNOT TANK.IS(H&) RETURN ENDIF var M&=call(__cf4&,H&,-21) RETURN LONG(M&,4) endproc proc TANK.SUBCLASS PARAMETERS H&,WND_&,MSG_&,WP_&,LP_& SELECT %PCOUNT CASEOF 1 WND_&=&SWND MSG_&=%SMESSAGE WP_&=&SWPARAM LP_&=&SLPARAM ENDSELECT SELECT WND_& CASEOF H& IF TANK.IS(H&) SELECT MSG_& CASEOF 14 TANK.PAINT(H&) CASEOF $0201,$0204,$0203,$0206 TANK.CHANGEBYMOUSE(H&) var M&=call(__cf4&,H&,-21) LONG M&,08=MSG_& SENDMESSAGE(%HWND,TANK.NOTIFYMESSAGE&,H&,MSG_&) CASEOF $0002 call(__cf5&,call(__cf4&,H&,-21)) ENDSELECT ENDIF ENDSELECT endproc proc TANK.CHANGEBYMOUSE PARAMETERS H& var XX&=WIDTH(H&)-4 var YY&=XX& var X&=0 var Y&=0 var XXH&=XX&*0.5 var YYH&=YY&*0.5 var _POS&=TANK.GETPOS(H&) var P&=_POS& var OW&=0 GETMOUSEPOS(H&) SUB MOUSE.X&,2 SUB MOUSE.Y&,2 OW&=WNK(MOUSE.X&,MOUSE.Y&,XXH&,YYH&) WHILE 1 GETMOUSEPOS(H&) SUB MOUSE.X&,2 SUB MOUSE.Y&,2 P&=WNK(MOUSE.X&,MOUSE.Y&,XXH&,YYH&)-OW& TANK.SETPOS(H&,P&+_POS&) IFNOT LM_() OR RM_() BREAK ENDIF GAMEFRAME() WAITINPUT 10 ENDWHILE endproc proc TANK.PAINT PARAMETERS H& IFNOT TANK.IS(H&) RETURN ENDIF var M&=call(__cf4&,H&,-21) var TYP&=LONG(M&,0) var _POS&=LONG(M&,4) var XX&=WIDTH(H&) var YYR&=HEIGHT(H&) var YY&=XX& var _COL&=LONG(M&,12) var COL&=call(__cf6&,15) var HPIC&=CREATE("hNewPic",XX&,YYR&,0) var P&=0 IF HPIC& STARTPAINT HPIC& CLS $FFCCCC USEPEN 0,3,0 var EX&=_POS& var EY&=0 var EXO&=0 var OXP&=0 var OYP&=0 GETCIRCP(XX&*0.5,YY&*0.5,XX&*0.4,EX&) var PEX&=GETCIRCP.X& var PEY&=GETCIRCP.Y& GETCIRCP(XX&*0.5,YY&*0.5,XX&*0.05,EX&-90-45) var PEEX&=GETCIRCP.X& var PEEY&=GETCIRCP.Y& GETCIRCP(XX&*0.5,YY&*0.5,XX&*0.05,EX&+90+45) var PEEEX&=GETCIRCP.X& var PEEEY&=GETCIRCP.Y& USEPEN 0,5,0 LINE PEEX&,PEEY& - PEX&,PEY& LINE PEEEX&,PEEEY& - PEX&,PEY& LINE PEEEX&,PEEEY& - PEEX&,PEEY& DRAWPIC HBUNTANKPIC&,0,26;-1 ENDPAINT STARTPAINT H& DRAWPIC HPIC&,0,0;0 ENDPAINT DELETEOBJECT HPIC& ENDIF endproc proc PIC.DRAWPIE PARAMETERS X&,Y&,XX&,YY&,_SA!,_EA! var CENX&=(XX&-X&)/2 var CENY&=(YY&-Y&)/2 PIE X&, Y&, XX&, YY&,INT(X& + CENX& + (CENX& * COS(MATH.DEG2RAD(-_SA!)))),INT(Y& + CENY& + (CENY& * SIN(MATH.DEG2RAD(-_SA!)))),INT(X& + CENX& + (CENX& * COS(MATH.DEG2RAD(-_EA!)))),INT(Y& + CENY& + (CENY& * SIN(MATH.DEG2RAD(-_EA!)))) endproc proc PIC.DRAWPOLY PARAMETERS X&,Y&,XX&,YY&,XXX&,YYY& DECLARE MEM# DIM MEM#,24 LONG MEM#,0=X& LONG MEM#,4=Y& LONG MEM#,8=XX& LONG MEM#,12=YY& LONG MEM#,16=XXX& LONG MEM#,20=YYY& call(__cf12&,%HDC,MEM#,3) DISPOSE MEM# endproc proc MATH.DEG2RAD PARAMETERS F! RETURN (PI()*F!)/180 endproc proc RGB.MIX PARAMETERS COL1&,COL2&,TRANSL! RETURN RGB(GETRVALUE(COL1&)*(1-TRANSL!)+GETRVALUE(COL2&)*(TRANSL!),GETGVALUE(COL1&)*(1-TRANSL!)+GETGVALUE(COL2&)*(TRANSL!),GETBVALUE(COL1&)*(1-TRANSL!)+GETBVALUE(COL2&)*(TRANSL!)) endproc var GAMEFRAMETME&=&GETTICKCOUNT var SANDREPAIR_LAINPHOP&=10 DECLARE WAPONX![19],WAPONY![19],WAPONXS![19],WAPONYS![19] ,WAPONH&[19],WAPONTANK%[19],WAPONALIVE%[19],WAPONTYP%[19] var SANDREPAIR_LAINP&=0 var SANDREPAIR_PROCHOP&=0 var SANDREPAIR_LAINPHOPC&=0 var HBMP&=0 var HPIC&=0 var TANK1&=0 var TANK2&=0 var TANK1X&=0 var TANK1Y&=0 var TANK2X&=0 var TANK2Y&=0 var TANK1FALLS!=0 var TANK2FALLS!=0 var HBOMB1PIC&=0 WINDOWSTYLE 80 | 512 | 1024 WINDOW %MAXX*0.3,%MAXY*0.3 - 0,0 SHOWWINDOW(%HWND,0) USEICON "a" WINDOWSTYLE 1 | 2 | 4 | 8 | 16 | 512 var HMYWND&=(CREATE("WINDOW",(0),"Buntank XP-Tank V941.5b - [DreiEinDrittel]",(%MAXX),(%MAXY),(500),(500))) var HMYSC&=SC.CREATE(HMYWND&,0,0,0,0,0,0) var HSTATBAR&=CREATE("statusWindow",HMYWND&,"Laden...") var HMYPROGRR&=0 var HMYPROGRD&=0 var MYSCVX&=0 var MYSCVY&=0 CREATEHPICS() CREATENEWGAMEVARS() MYSC.CREATECONTROLS() MYWND.CREATEPOPUPMENU() MYWND.CENTERPOS() USERMESSAGES $0010,$0014,$0201,$0204,TANK.NOTIFYMESSAGE&,PROGRESS.NOTIFYMESSAGE& call(__cf3&,HMYWND&,-12,65553) PROGRESS.SETCOL(HMYPROGRR&,$0000FF) PROGRESS.SETPOS(HMYPROGRR&,25) PROGRESS.SETCOL(HMYPROGRR&,RGB(PROGRESS.GETPOS(HMYPROGRR&)*2.5,0,0)) PROGRESS.SETCOL(HMYPROGRD&,$0000FF) PROGRESS.SETPOS(HMYPROGRD&,25) PROGRESS.SETCOL(HMYPROGRD&,RGB(PROGRESS.GETPOS(HMYPROGRD&)*2.5,0,0)) STATUS "Bereit." call(__cf13&,HMYWND&,55155,15,0) call(__cf13&,HMYWND&,55156,1000,0) call(__cf13&,HMYWND&,55157,20,0) WHILE 1 WAITINPUT SELECT %UMESSAGE CASEOF $0010 SELECT %MWND CASEOF HMYWND& BREAK ENDSELECT CASEOF $0201 CASEOF $0204 CASEOF PROGRESS.NOTIFYMESSAGE& SELECT &UWPARAM CASEOF HMYPROGRR& SELECT &ULPARAM CASEOF $0201 POWERBYMOUSE(HMYPROGRR&) ENDSELECT CASEOF HMYPROGRD& SELECT &ULPARAM CASEOF $0201 POWERBYMOUSE(HMYPROGRD&) ENDSELECT ENDSELECT CASEOF TANK.NOTIFYMESSAGE& SELECT &UWPARAM CASEOF TANK1& SELECT &ULPARAM CASEOF $0204,$0206 TANK1SHOT() CASEOF $0201 ENDSELECT CASEOF TANK2& SELECT &ULPARAM CASEOF $0204,$0206 TANK2SHOT() CASEOF $0201 ENDSELECT ENDSELECT ENDSELECT SELECT ABS(%MENUITEM) CASEOF 100 BREAK CASEOF 200 NEWGAME() CASEOF 700 APP.ABOUT() ENDSELECT ENDWHILE end proc NEWGAME CREATENEWGAMEVARS() CREATEHPICS() endproc proc LAY.MESSAGEBOX PARAMETERS TXT$,STYLE% ENABLEWINDOW HMYWND&,0 call(__cf14&,0,call(__cf13&,0,0,15,PROCADDR(GAMEFRAME,0))+(MESSAGEBOX(TXT$,"Buntank XP-Tank V941.5b - [DreiEinDrittel]",STYLE% | 4096)*0)) ENABLEWINDOW HMYWND&,1 RETURN %BUTTON endproc proc PUSHWAPON PARAMETERS TANK!,TYP!,X!,Y!,XS!,YS! var ID&=-1 WHILELOOP 0,19 IF WAPONALIVE%[&LOOP] CONTINUE ENDIF ID&=&LOOP BREAK ENDWHILE IF ID&=-1 RETURN -1 ENDIF WAPONALIVE%[ID&]=1 WAPONX![ID&]=X! WAPONY![ID&]=Y! WAPONXS![ID&]=XS! WAPONYS![ID&]=YS! WAPONTANK%[ID&]=TANK! WAPONTYP%[ID&]=TYP! endproc proc TANK1SHOT var L&=TANK.GETPOS(TANK1&) GETCIRCP(TANK1X&+29,TANK1Y&+30,30,L&) var XS&=GETCIRCP.X&-(TANK1X&+29) var YS&=GETCIRCP.Y&-(TANK1Y&+30) PUSHWAPON(TANK1&,1,GETCIRCP.X&,GETCIRCP.Y&,XS&*PROGRESS.GETPOS(HMYPROGRR&)*0.004,YS&*PROGRESS.GETPOS(HMYPROGRR&)*0.004) endproc proc TANK2SHOT var L&=TANK.GETPOS(TANK2&) GETCIRCP(TANK2X&+29,TANK2Y&+30,30,L&) var XS&=GETCIRCP.X&-(TANK2X&+29) var YS&=GETCIRCP.Y&-(TANK2Y&+30) PUSHWAPON(TANK2&,1,GETCIRCP.X&,GETCIRCP.Y&,XS&*PROGRESS.GETPOS(HMYPROGRD&)*0.004,YS&*PROGRESS.GETPOS(HMYPROGRD&)*0.004) endproc proc APP.ABOUT LAY.MESSAGEBOX("Buntank XP-Tank V941.5b - [DreiEinDrittel]"+" (C) 2008 by XProfan.Com (David Strutz)\n\nhttp://xprofan.com/buntank/",0) endproc proc APP.GFINISHED MESSAGEBOX("Gewonnen!","Buntank XP-Tank V941.5b - [DreiEinDrittel]",4096) STATUS("Gewonnen.") endproc proc CREATEHPICS STATUS "GenHill..." IF HPIC& DELETEOBJECT HPIC& ENDIF MCLS 800,600 STARTPAINT -1 CLS $FFCCCC var Y!=150+RND(300) USEPEN 0,0,$339944 var GTC&=&GETTICKCOUNT var SF!=(1+RND(10))*0.1 var HILLHEIGHT!=RND(10) WHILELOOP 0,799 Y!=Y!+SIN(GTC&*0.03)*(RND(10)*SF!) Y!=Y!+COS(GTC&*0.05)*(RND(10)*SF!) Y!=Y!+TAN(GTC&*RND(5)*0.1)*(RND(10)*0.02) IF Y!>550 Y!=550 ENDIF IF Y!<100 Y!=100 ENDIF SANDPAINT(&LOOP,Y!) INC GTC& IFNOT GTC& MOD 20 SF!=(1+RND(HILLHEIGHT!))*0.1 ENDIF ENDWHILE USEPEN 0,0,0 USEBRUSH 0,0 RECTANGLE 0,0 - 800,600 HPIC&=CREATE("hPic",0,"&MEMBMP") ENDPAINT IFNOT HBUNTANKPIC& HBUNTANKPIC&=CREATE("HPic",-1,"buntank.png") ENDIF IFNOT HBOMB1PIC& HBOMB1PIC&=CREATE("HPic",-1,"wapon.png") ENDIF SENDMESSAGE(HBMP&,370,0,HPIC&) IFNOT WAPONH&[0] WHILELOOP 0,19 WAPONH&[&LOOP]=CREATE("Bitmap",HMYSC&,HBOMB1PIC&,-100,-100) ENDWHILE ENDIF TANK.PAINT(TANK1&) TANK.PAINT(TANK2&) STATUS "Bereit." endproc proc MYWND.GETMOUSEPOS DECLARE GMP# DIM GMP#,8 CLEAR GMP# call(__cf9&,HMYWND&,GMP#) var GMX%=LONG(GMP#,0) var GMY%=LONG(GMP#,4) call(__cf8&,GMP#) GMX%=LONG(GMP#,0)-GMX% GMY%=LONG(GMP#,4)-GMY% MOUSE.X&=GMX% MOUSE.Y&=GMY% DISPOSE GMP# endproc proc MYSC.CREATECONTROLS SETTEXT HSTATBAR&,"Rechne..." HBMP&=CREATE("bitmap",HMYSC&,HPIC&,0,0) TANK1&=CREATE("tank",1,HMYSC&,TANK1X&,TANK1Y&,58,45) TANK2&=CREATE("tank",1,HMYSC&,TANK2X&,TANK2Y&,58,45) HMYPROGRR&=CREATE("progressControl",1,HMYSC&,0,0,0,0) HMYPROGRD&=CREATE("progressControl",1,HMYSC&,0,0,0,0) MYWND.RESIZING() SETTEXT HSTATBAR&,"Bereit." endproc proc STATUS PARAMETERS S$ SETTEXT HSTATBAR&,S$ endproc proc CREATENEWGAMEVARS STATUS "Laden..." TANK1X&=100 TANK1Y&=10 TANK2X&=640 TANK2Y&=10 TANK1FALLS!=0 TANK2FALLS!=0 WHILELOOP 0,19 SETWINDOWPOS WAPONH&[&LOOP]=(-100),(-100) - 0,0 WAPONALIVE%[&LOOP]=0 ENDWHILE STATUS "Bereit." endproc SUBCLASSPROC SELECT &SWND CASEOF HMYWND& SELECT %SMESSAGE CASEOF 532,$0005 MYWND.RESIZING() CASEOF $0113 SELECT &SWPARAM CASEOF 55155 GAMEFRAME() CASEOF 55156 TANKS.PAINT() CASEOF 55157 SANDREPAIRPROC() ENDSELECT ENDSELECT ENDSELECT SC.SUBCLASS(HMYSC&) TANK.SUBCLASS(TANK1&) TANK.SUBCLASS(TANK2&) PROGRESS.SUBCLASS(HMYPROGRR&) PROGRESS.SUBCLASS(HMYPROGRD&) endproc proc GAMEFRAME var TME&=&GETTICKCOUNT IF TME&>GAMEFRAMETME&+14 GAMEFRAMETME&=TME& WAPONSPROC() TANKTRYFALL() ENDIF endproc proc TANKS.PAINT TANK.PAINT(TANK1&) TANK.PAINT(TANK2&) PROGRESS.PAINT(HMYPROGRR&) PROGRESS.PAINT(HMYPROGRD&) endproc proc HBMP.REDRAWRECT PARAMETERS X&,Y&,XX&,YY& var H&=(CONTROL("STATIC","",$50000000,(X&),(Y&),(XX&),(YY&),(HBMP&),0,%HINSTANCE)) DESTROYWINDOW(H&) endproc proc SANDPAINT PARAMETERS X&,Y& USEPEN 0,0,$339944 LINE X&,Y& - X&,599 USEPEN 0,0,$FFCCCC LINE X&,1 - X&,Y& IF Y&>450 USEPEN 0,0,$FF3344 LINE X&,450 - X&,Y& USEPEN 0,0,$339944 SETPIXEL X&,RND(Y&-450)+450,$FF6688 ENDIF endproc proc SANDREPAIRPROC ADD SANDREPAIR_LAINP&,SANDREPAIR_LAINPHOP& IF SANDREPAIR_LAINP&>799 SUB SANDREPAIR_LAINP&,799 ENDIF var SANDC&=0 var C&=0 STARTPAINT HPIC& var B%=0 var E%=0 var R%=0 WHILELOOP 0,600,3 SELECT GETPIXEL(SANDREPAIR_LAINP&,&LOOP) CASEOF $FFCCCC IF B% E%=1 ENDIF IF &LOOP>450 R%=1 ENDIF CASEOF $339944,$FF3344 INC SANDC& B%=1 ENDSELECT ENDWHILE IF E% IF (SANDREPAIR_LAINPHOP&=10) SANDREPAIR_LAINP&=SANDREPAIR_LAINP&-10 SANDREPAIR_LAINPHOP&=1 ELSE SANDPAINT(SANDREPAIR_LAINP&,602-SANDC&*3+RND(2)) HBMP.REDRAWRECT(SANDREPAIR_LAINP&,0,1,600) ENDIF SANDREPAIR_LAINPHOPC&=0 ELSE IF R% IF (SANDREPAIR_LAINPHOP&=10) SANDREPAIR_LAINP&=SANDREPAIR_LAINP&-10 SANDREPAIR_LAINPHOP&=1 ELSE SANDPAINT(SANDREPAIR_LAINP&,595) HBMP.REDRAWRECT(SANDREPAIR_LAINP&,0,1,600) SANDREPAIR_LAINPHOPC&=0 ENDIF ELSE INC SANDREPAIR_LAINPHOPC& IF SANDREPAIR_LAINPHOPC&>19 SANDREPAIR_LAINPHOP&=10 ENDIF ENDIF ENDIF ENDPAINT endproc proc PUSHREPAIRSAND PARAMETERS X&,XX& IF X&<0 RETURN ENDIF IF X&>799 RETURN ENDIF SANDREPAIR_LAINP&=X&-1 SANDREPAIR_LAINPHOP&=1 endproc proc WAPONEXPLODEPROC PARAMETERS WAPON% var A&=WAPONALIVE%[WAPON%] IF A&=2 SETWINDOWPOS WAPONH&[WAPON%]=(-100),(-100) - 0,0 ENDIF INC A& WAPONALIVE%[WAPON%]=A& SELECT WAPONTYP%[WAPON%] CASEOF 1 IF A&<40 var SZ&=A& STARTPAINT HPIC& USEBRUSH 0,0 USEPEN 0,5,RGB.MIX($0099FF,$00FFFF,SZ&*0.025) ELLIPSE (WAPONX![WAPON%]-SZ&),(WAPONY![WAPON%]-SZ&) - (WAPONX![WAPON%]+SZ&),(WAPONY![WAPON%]+SZ&) ENDPAINT HBMP.REDRAWRECT(WAPONX![WAPON%]-SZ&,WAPONY![WAPON%]-SZ&,SZ&*2,SZ&*2) ELSE var SZ&=A&-40 STARTPAINT HPIC& USEPEN 5,0,0 USEBRUSH 1,$FFCCCC ELLIPSE (WAPONX![WAPON%]-SZ&),(WAPONY![WAPON%]-SZ&) - (WAPONX![WAPON%]+SZ&),(WAPONY![WAPON%]+SZ&) ENDPAINT HBMP.REDRAWRECT(WAPONX![WAPON%]-SZ&,WAPONY![WAPON%]-SZ&,SZ&*2,SZ&*2) IF SZ&>45 WAPONALIVE%[WAPON%]=0 PUSHREPAIRSAND(WAPONX![WAPON%]-SZ&,WAPONX![WAPON%]+SZ&) ENDIF ENDIF ENDSELECT endproc proc WAPONPROC PARAMETERS WAPON% IFNOT WAPONALIVE%[WAPON%] RETURN ENDIF var X!=WAPONX![WAPON%] var Y!=WAPONY![WAPON%] var XS!=WAPONXS![WAPON%] var YS!=WAPONYS![WAPON%] IF WAPONALIVE%[WAPON%]>1 WAPONEXPLODEPROC(WAPON%) ELSE X!=X!+XS! Y!=Y!+YS! YS!=YS!+0.1 XS!=XS!*0.995 WAPONX![WAPON%]=X! WAPONY![WAPON%]=Y! WAPONXS![WAPON%]=XS! WAPONYS![WAPON%]=YS! STARTPAINT HPIC& var T1L%=IF(GETPIXEL(X!+3,Y!+3)=$FFCCCC,0,1) ENDPAINT IF NOT(BETWEEN(X!,0,800,Y!,0,600)) OR (T1L%) WAPONALIVE%[WAPON%]=2 ELSE SETWINDOWPOS WAPONH&[WAPON%]=(MYSCVX&+X!-3),(MYSCVY&+Y!-3) - 7,7 SENDMESSAGE(WAPONH&[WAPON%],370,0,HBOMB1PIC&) ENDIF ENDIF endproc proc WAPONSPROC WHILELOOP 0,19 WAPONPROC(&LOOP) ENDWHILE endproc proc TANK1DIE PARAMETERS S$ MESSAGEBOX(S$,"Buntank XP-Tank V941.5b - [DreiEinDrittel]",4096) NEWGAME() endproc proc TANK2DIE PARAMETERS S$ MESSAGEBOX(S$,"Buntank XP-Tank V941.5b - [DreiEinDrittel]",4096) NEWGAME() endproc proc TANKTRYFALL STARTPAINT HPIC& var T1L%=IF(GETPIXEL(TANK1X&,TANK1Y&+45)=$FFCCCC,1,0) var T1R%=IF(GETPIXEL(TANK1X&+58,TANK1Y&+45)=$FFCCCC,1,0) var T2L%=IF(GETPIXEL(TANK2X&,TANK2Y&+45)=$FFCCCC,1,0) var T2R%=IF(GETPIXEL(TANK2X&+58,TANK2Y&+45)=$FFCCCC,1,0) ENDPAINT IF (T1L%) OR (T1R%) TANK1Y&=TANK1Y&+TANK1FALLS! IFNOT T1L% TANK1X&=TANK1X&+RND(4) ENDIF IFNOT T1R% TANK1X&=TANK1X&-RND(4) ENDIF IF (T1L%+T1R%)=1 TANK1FALLS!=2 ELSE TANK1FALLS!=TANK1FALLS!+0.5 ENDIF IF TANK1FALLS!>40 TANK1FALLS!=40 ENDIF SETWINDOWPOS HMYPROGRR&=(MYSCVX&+TANK1X&),(MYSCVY&+TANK1Y&+45) - 58,10 PROGRESS.PAINT(HMYPROGRR&) SETWINDOWPOS TANK1&=MYSCVX&+TANK1X&,MYSCVY&+TANK1Y& - 58,45 IF TANK1Y&>420 TANK1DIE("Tank 1 landet im Wasser und hat verloren.") ENDIF ENDIF IF (T2L%) OR (T2R%) TANK2Y&=TANK2Y&+TANK2FALLS! IFNOT T2L% TANK2X&=TANK2X&+RND(4) ENDIF IFNOT T2R% TANK2X&=TANK2X&-RND(4) ENDIF IF (T2L%+T2R%)=1 TANK2FALLS!=2 ELSE TANK2FALLS!=TANK2FALLS!+0.5 ENDIF IF TANK2FALLS!>40 TANK2FALLS!=40 ENDIF SETWINDOWPOS HMYPROGRD&=(MYSCVX&+TANK2X&),(MYSCVY&+TANK2Y&+45) - 58,10 PROGRESS.PAINT(HMYPROGRD&) SETWINDOWPOS TANK2&=MYSCVX&+TANK2X&,MYSCVY&+TANK2Y& - 58,45 IF TANK2Y&>420 TANK2DIE("Tank 2 landet im Wasser und hat verloren.") ENDIF ENDIF STARTPAINT HPIC& USEPEN 5,0,0 USEBRUSH 1,$FFCCCC RECTANGLE TANK1X&,TANK1Y& - TANK1X&+58,TANK1Y&+45 RECTANGLE TANK2X&,TANK2Y& - TANK2X&+58,TANK2Y&+45 ENDPAINT endproc proc MYWND.CREATEPOPUPMENU MENU.NEW(HMYWND&) MENU.POPUP "Spiel" MENU.APPENDMENU 200,"Neues Spiel\tN" MENU.SEPARATOR MENU.APPENDMENU 100,"Beenden\tAlt+F4" MENU.POPUP "?" MENU.APPENDMENU 700,"Info" MENU.CHECKMENU 500,1 MENU.ENABLEMENU 600,0 MENU.SETNICEBACKGROUND ADDHOTKEY 200,78,0 ADDHOTKEY 300,71,0 ADDHOTKEY 400,66,0 endproc proc MYWND.RESIZING var SY&=HEIGHT(HSTATBAR&) var SX&=WIDTH(HMYWND&) SC.SETUP(HMYSC&,0,0,SX&,HEIGHT(HMYWND&)-SY&,800,600,1) var TX&=WIDTH(SC.GETWINDOW(HMYSC&)) var TY&=HEIGHT(SC.GETWINDOW(HMYSC&)) TX&=(TX&-800)*0.5 TY&=(TY&-600)*0.5 IF TX&<0 TX&=0 ENDIF IF TY&<0 TY&=0 ENDIF MYSCVX&=TX& MYSCVY&=TY& SETWINDOWPOS HBMP&=TX&,TY& - 800,600 SETWINDOWPOS HSTATBAR&=0,0 - 0,0 SETWINDOWPOS HMYPROGRD&=(MYSCVX&+TANK2X&),(MYSCVY&+TANK2Y&+45) - 58,10 SETWINDOWPOS TANK2&=MYSCVX&+TANK2X&,MYSCVY&+TANK2Y& - 58,45 SETWINDOWPOS HMYPROGRR&=(MYSCVX&+TANK1X&),(MYSCVY&+TANK1Y&+45) - 58,10 SETWINDOWPOS TANK1&=MYSCVX&+TANK1X&,MYSCVY&+TANK1Y& - 58,45 TANK.PAINT(TANK1&) TANK.PAINT(TANK2&) PROGRESS.PAINT(HMYPROGRR&) PROGRESS.PAINT(HMYPROGRD&) GAMEFRAME() endproc proc POWERBYMOUSE PARAMETERS H& GETMOUSEPOS(HMYWND&) var OX&=MOUSE.X& var CP&=PROGRESS.GETPOS(H&) WHILE 1 IFNOT LM_() BREAK ENDIF GETMOUSEPOS(HMYWND&) PROGRESS.SETPOS(H&,CP&-(OX&-MOUSE.X&)*2) PROGRESS.SETCOL(H&,RGB(PROGRESS.GETPOS(H&)*2.5,0,0)) PROGRESS.PAINT(H&) WAITINPUT 10 ENDWHILE endproc proc MYWND.CENTERPOS var W&=500-WIDTH(HMYWND&) var H&=500-HEIGHT(HMYWND&) var X&=(%MAXX*0.5-400-W&*0.5) var Y&=(%MAXY*0.5-300-H&*0.5) var XX&=800+W& var YY&=600+H&+HEIGHT(HSTATBAR&) IF X&<10 X&=10 ENDIF IF Y&<10 Y&=10 ENDIF IF XX&>%MAXX-20 XX&=%MAXX-20 ENDIF IF YY&>%MAXY-50 YY&=%MAXY-50 ENDIF SETWINDOWPOS HMYWND&=X&,Y& - XX&,YY& MYWND.RESIZING() endproc end