Difference between revisions of "Thing2"
From CodeStuff
(setcolor) |
|||
| Line 1: | Line 1: | ||
<edcode> | <edcode> | ||
| + | var gunFireRate=8; | ||
| + | var gunTemperature=0; | ||
| − | var | + | |
| − | + | var player = {x:320,y:450}; | |
var speed=5; | var speed=5; | ||
| Line 20: | Line 22: | ||
| − | function makeAlien(initialX,initialY) { | + | function makeAlien(initialX,initialY,kind) { |
| − | return {x:initialX, y:initialY,dx:0,dy: 0}; | + | return {x:initialX, y:initialY,dx:0,dy: 0, dead:false, behaviour:kind}; |
} | } | ||
function drawAlien(alien) { | function drawAlien(alien) { | ||
setColour("Green"); | setColour("Green"); | ||
| + | if (alien.dead) setColour("brown"); | ||
fillCircle(alien.x,alien.y,20); | fillCircle(alien.x,alien.y,20); | ||
| + | |||
} | } | ||
| Line 38: | Line 42: | ||
if (alien.x >590) alien.dx*=0.5; | if (alien.x >590) alien.dx*=0.5; | ||
| + | if ( Math.random() < 0.01) alien.behaviour=attackAlien; | ||
} | } | ||
| + | function attackAlien(alien) { | ||
| + | alien.x+=alien.dx; | ||
| + | alien.y+=alien.dy; | ||
| + | alien.dy+=0.05; | ||
| + | alien.dx+=(0.5-Math.random()); | ||
| + | |||
| + | if (alien.x <50) alien.dx*=0.5; | ||
| + | if (alien.x >590) alien.dx*=0.5; | ||
| + | |||
| + | if (alien.y> 500) { | ||
| + | alien.dy=0; | ||
| + | alien.x=320; | ||
| + | alien.y=80; | ||
| + | alien.behaviour=moveAlien; | ||
| + | } | ||
| + | } | ||
| − | aliens.push( makeAlien(300,50) ); | + | |
| + | function isAlienOK(alien) { | ||
| + | return (alien.dead==false) | ||
| + | } | ||
| + | |||
| + | |||
| + | aliens.push( makeAlien(300,50,attackAlien) ); | ||
| + | |||
| + | var i = 0; | ||
| + | while (i < 10) { | ||
| + | aliens.push( makeAlien(30 + i*30,20+i*10, moveAlien) ); | ||
| + | i=i+1; | ||
| + | } | ||
function makeBullet(initialX,initialY) { | function makeBullet(initialX,initialY) { | ||
| − | return {x:initialX, y:initialY,dx:0,dy: -bulletSpeed}; | + | return {x:initialX, y:initialY,dx:0,dy: -bulletSpeed, dead:false}; |
} | } | ||
| Line 51: | Line 84: | ||
fillCircle(bullet.x,bullet.y,6); | fillCircle(bullet.x,bullet.y,6); | ||
| + | } | ||
| + | |||
| + | function distance (a,b) { | ||
| + | var dx=a.x-b.x; | ||
| + | var dy=a.y-b.y; | ||
| + | |||
| + | return Math.sqrt(dx*dx+dy*dy); | ||
} | } | ||
| Line 56: | Line 96: | ||
bullet.x+=bullet.dx; | bullet.x+=bullet.dx; | ||
bullet.y+=bullet.dy; | bullet.y+=bullet.dy; | ||
| + | |||
| + | var b=0; | ||
| + | while (b<aliens.length) { | ||
| + | var alien = aliens[b]; | ||
| + | b=b+1; | ||
| + | var d = distance(bullet,alien); | ||
| + | |||
| + | if (d < 10) { | ||
| + | bullet.dead=true; | ||
| + | alien.dead=true; | ||
| + | } | ||
| + | } | ||
| + | |||
} | } | ||
| − | + | function isBulletOK(bullet) { | |
| + | return (bullet.y>0) & (bullet.dead==false) | ||
| + | } | ||
function move() { | function move() { | ||
| Line 72: | Line 127: | ||
while (b<aliens.length) { | while (b<aliens.length) { | ||
var alien = aliens[b]; | var alien = aliens[b]; | ||
| − | + | alien.behaviour(alien) | |
b=b+1; | b=b+1; | ||
| + | |||
| + | if ( distance(player,alien) < 20) { | ||
| + | player.y=-5000; | ||
| + | } | ||
} | } | ||
| Line 80: | Line 139: | ||
//if (keyIsDown(38)) cy-=speed; | //if (keyIsDown(38)) cy-=speed; | ||
//if (keyIsDown(40)) cy+=speed; | //if (keyIsDown(40)) cy+=speed; | ||
| − | if (keyIsDown(37)) | + | if (keyIsDown(37)) player.x-=speed; |
| − | if (keyIsDown(39)) | + | if (keyIsDown(39)) player.x+=speed; |
| + | if (gunTemperature >0) gunTemperature -=1; | ||
if (keyIsDown(32)) { | if (keyIsDown(32)) { | ||
| − | bullets.push(makeBullet( | + | if (gunTemperature==0) { |
| + | bullets.push(makeBullet(player.x,player.y)); | ||
| + | gunTemperature=gunFireRate; | ||
| + | } | ||
} | } | ||
| + | |||
| + | |||
| + | |||
| + | bullets = bullets.filter(isBulletOK); | ||
| + | |||
| + | aliens = aliens.filter(isAlienOK); | ||
| + | |||
| + | |||
| + | |||
} | } | ||
| Line 106: | Line 178: | ||
| − | drawImage(ship, | + | drawImage(ship,player.x,player.y); |
| − | fillCircle( | + | fillCircle(player.x,player.y,6); |
setColour("white"); | setColour("white"); | ||
| − | print( | + | print(aliens.length,20,20); |
} | } | ||
run(move,draw); | run(move,draw); | ||
| + | |||
| + | |||
</edcode> | </edcode> | ||