你的电脑要预装MATLAB 和COGENT
% This code test your ability of timing.When a bird flies to you,you need
% to time and then trigger to shoot it.
function shooting_birdmouse_Timing( trials, velocity )
trials=6;
velocity=4;
cgloadlib
cgopen(1,0,0,1)
%cgscale(30)
%cgfont('Arial',4)
%fprintf('Shooting Bird is Funny.\n\n')
for i=1:trials
a=rand(1,1);
if a<=.5
y=(80+160*rand(1,1));
else
y=( -80-160*rand(1,1));
end
b=rand(1,1);
if b<=.5
x=(100+220*rand(1,1));
else
x=( -100-220*rand(1,1));
end
%x=ceil((320-640*rand(1,1))+.1);
%if abs(x)<100
%end
%y=ceil((240-480*rand(1,1))+.1);
%if abs(y)<100
%end
cgpencol(0,0,1)
cgellipse(x,y,30,30,'f')
mouse_pressed=0;
cgpencol(1,0,0)
cgellipse(0,-225,30,30,'f')
cgflip(0,0,0)
wait(2500);
if abs(x)>=abs(y)
% move the bird 1
for i=0:abs(x)
% gun (red circle) movements...
cgpencol(1,0,0)
if mouse_pressed==1
% move red circle (shoot)
cgellipse(0,-255+velocity*(i-click),30,30,'f')
else
% fixed red circle (no shot)
cgellipse(0,-225,30,30,'f')
end
cgpencol(1,1,0)
% quadrant bird display
if x>0 & y>0
cgellipse(x-i,y-i*y/x,30,30,'f')
elseif x>0 & y<0
cgellipse(x-i,y-i*y/x,30,30,'f')
elseif x<0 & y>0
cgellipse(x+i,y+i*y/x,30,30,'f')
elseif x<0 & y<0
cgellipse(x+i,y+i*y/x,30,30,'f')
end
% time=cgflip(0,0,0);
% waituntil(time+10);
[mx,my,bs,bp]=cgmouse;
if bs>=1
mouse_pressed=1;
click=i;
bs=0;
end
cgflip(0,0,0)
end
mouse_pressed=0;
end
if abs(x)
for i=0:abs(y)
% gun (red circle) movements...
cgpencol(1,0,0)
if mouse_pressed==1
% move red circle (shoot)
cgellipse(0,-255+velocity*(i-click),30,30,'f')
else
% fixed red circle (no shot)
cgellipse(0,-225,30,30,'f')
end
cgpencol(1,1,0)
% quadrant bird display
if x>0 & y>0
cgellipse(x-i*x/y,y-i,30,30,'f')
elseif x>0 & y<0
cgellipse(x+i*x/y,y+i,30,30,'f')
elseif x<0 & y>0
cgellipse(x-i*x/y,y-i,30,30,'f')
else x<0 & y<0
cgellipse(x+i*x/y,y+i,30,30,'f')
end
%time=cgflip(0,0,0);
%waituntil(time+10);
% cgmouse(0,-225)
% mouse shooting check
[mx,my,bs,bp]=cgmouse;
if bs>=1
mouse_pressed=1;
click=i;
bs=0;
end
cgflip(0,0,0)
end
mouse_pressed=0;
end
wait(1000);
cgflip(0,0,0)
wait(3000);
end
%cgflip(0,0,0)
wait(500);
cgshut