alias -l c return @Cannon alias -l h return $hget(cannon,$1) alias -l a hadd -m cannon $1- alias -l k return $iif(!$2,return) $round($calc( [ $iif(!$2,$h(u) *) $1 ] ),2) alias -l t $k(2*$sin($h(a)).deg /9.8) alias -l x $k($!h(s)*$cos($h(a)).deg) alias -l y $k($!h(s)*$sin($h(a)).deg -$h(s)^2*9.8/2) alias -l vx $k($!cos($h(a)).deg) alias -l vy $k($!sin($h(a)).deg -9.8*$h(s)) alias cannon { if ($window($c)) window -c $v1 if ($hget(cannon)) hfree $v1 window -CBdfpz $c -1 -1 520 450 drawline $c 5 2 0 282 520 282 tokenize 58 4 375:3 125:2 300 1 drawtext $c 1 fixedsys 12 10 285 P drawtext -b $c 0 1 fixedsys 12 20 315 [[ Project ][ Pause ][ Reset ]] drawline $c 1 2 20 331 251 331 dsc $* a x 10 a y 280 st 1 } alias -l st { var %t = $calc(300+($h(t)+$iif(!$1,0.02)/$t)*150),%c = drawdot $c, $& %x = $calc(10+12*($x)),%y = $calc(280-12*($y)),%d = drawtext -pn $c 1 fixedsys 1 345 drawrect -fn $c 0 0 340 0 180 115 %d 15 t= $h(s) $+ s %d 35 x= ( $+ $+($x,i + $abs($y),j) $+ )m %d 55 v= ( $+ $+($vx,i $iif($vy < 0,-,+) $abs($vy),j) $+ )m/s %d 75 |x|= $k(($x ^2+$y ^2)^0.5,1) $+ m %d 95 |v|= $k(($vx ^2+$vy ^2)^0.5,1) $+ m/s drawline -n $c 1 2 20 331 251 331 drawdot $c %c 0 3 $h(x) $h(y) if (%t > 450) { h t 0 dsc 2 300 1 1 return } %c 1 3 %x %y a x %x a y %y dsc 2 %t 1 if (!$1) && (($h(c) != 2) || (!$inrect($mouse.x,$mouse.y,300,311,150,18)) || $& ($mouse.key !& 1)) .timerst -mh 1 20 st } alias -l drawsc { var %c = drawtext -n $c 1 fixedsys 1,%d = drawline -n $c 1,%y = $2 - 8 drawrect -fn $c 0 1 $calc($1 -2) $calc(%y -2) 204 40 %d 3 $1-2 $calc(150+$1) $2 %c $calc($1 -$width($3.,fixedsys,)) %y $3 %c $calc(161+$1) %y $4 %c $calc((152-$width($6-,fixedsys,))/2+$1) $calc($2 +15) $6- %d 3 $5 %y $5 $calc(8+$2) drawdot $c } alias -l dsc { var %x = $iif(2 \\ $1,$iif($2 < 50,50,$iif($2 > 200,200,$2)),$iif($2 < $& 300,300,$iif($2 > 450,450,$2))),%a if ($1 = 3) { %a = $k(( %x -50)*0.6,1) a a %a drawsc 50 370 0 90 %x ß = %a $+ ° } if ($1 = 4) { %a = $k(1+19*( %x -300)/150,1) a u %a drawsc 300 370 1 20 %x u = %a m/s } if ($3) { var %x = $iif($1 = 2,%x,$calc(300+150*$h(s)/$t)),%b = $calc(%x /150-2), $& %b = $iif(%b < 0,0,$iif(%b > 1,1,%b)),%a = $iif($1 = 2,$k($!t * %b,1),$h(s)) if ($1 = 2) a s %a a t %b drawsc 300 320 0 $t $calc(300+150*%b) t = %a $+ s if ($4) st 1 } } menu @Cannon { mouse:if ($mouse.key & 1) && ($h(c)) dsc $v1 $mouse.x 1 $iif($v1 = 2,1) sclick { var %x = $mouse.x,%y = $mouse.y,%s if (!$getdot($menu,%x,%y)) { if ($inrect(%x,%y,300,311,152,19)) %s = 2 elseif ($inrect(%x,%y,50,361,150,18)) %s = 3 elseif ($inrect(%x,%y,300,361,150,18)) %s = 4 dsc $$(%s) %x 1 $iif(%s = 2,1) a c %s } } uclick { var %x = $mouse.x,%y = $mouse.y a c 0 if ($inrect(%x,%y,25,315,75,15)) st elseif ($inrect(%x,%y,110,315,65,15)) .timerst off elseif ($inrect(%x,%y,180,315,70,15)) { h t 0 dsc 2 300 1 1 } } }