Difference between revisions of "Thing2"
From CodeStuff
| (2 intermediate revisions by 2 users not shown) | |||
| Line 2: | Line 2: | ||
| − | var | + | var gunFireRate=8; |
| − | var | + | var gunTemperature=0; |
| + | |||
| + | |||
| + | var player = {x:320,y:450}; | ||
var speed=5; | var speed=5; | ||
| Line 11: | Line 14: | ||
var aliens=[]; | var aliens=[]; | ||
| − | var ship=loadImage("Purzen_rocket. | + | var ship=loadImage("Purzen_rocket.png"); |
ship.handleY=22; | ship.handleY=22; | ||
ship.handleX=14; | ship.handleX=14; | ||
| + | |||
| + | var alienShip=loadImage("Spaceship Skorpio.png"); | ||
| + | alienShip.handleX=20; | ||
| + | alienShip.handleY=20; | ||
| + | |||
| + | var explosionImage=loadImage("Explosion1.png",10); | ||
| + | explosionImage.handleX=46; | ||
| + | explosionImage.handleY=46; | ||
| + | |||
| + | |||
| + | |||
| + | var explosion = {image:explosionImage, frame : 10}; | ||
setColour("black"); | setColour("black"); | ||
fillRectangle(0,0,640,480); | fillRectangle(0,0,640,480); | ||
| + | |||
| + | var ty=0; | ||
| + | while (ty < 480) { | ||
| + | var shade = (255/480) * ty; | ||
| + | |||
| + | setColour("rgb(0,0,"+shade+")"); | ||
| + | |||
| + | |||
| + | fillRectangle(0,ty, 640,1); | ||
| + | ty+=1; | ||
| + | } | ||
| + | |||
makeBackground(); | makeBackground(); | ||
| − | 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"); | ||
| − | + | ||
| + | drawImage(alienShip,alien.x,alien.y); | ||
| + | |||
} | } | ||
| Line 38: | Line 67: | ||
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 109: | ||
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 121: | ||
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 < 15) { | ||
| + | bullet.dead=true; | ||
| + | alien.dead=true; | ||
| + | explosion.x=alien.x; | ||
| + | explosion.y=alien.y; | ||
| + | explosion.frame=0; | ||
| + | } | ||
| + | } | ||
| + | |||
} | } | ||
| − | + | function isBulletOK(bullet) { | |
| + | return (bullet.y>0) & (bullet.dead==false) | ||
| + | } | ||
function move() { | function move() { | ||
| − | + | ||
| + | explosion.frame+=1; | ||
| + | |||
var b=0; | var b=0; | ||
while (b<bullets.length) { | while (b<bullets.length) { | ||
| Line 72: | Line 157: | ||
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) { | ||
| + | explosion.x=player.x; | ||
| + | explosion.y=player.y; | ||
| + | explosion.frame=0; | ||
| + | player.y=-5000; | ||
| + | } | ||
} | } | ||
| Line 80: | Line 172: | ||
//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 ( | + | if (gunTemperature >0) gunTemperature -=1; |
| − | bullets.push(makeBullet( | + | if (keyIsDown(32)) { |
| + | if (gunTemperature==0) { | ||
| + | bullets.push(makeBullet(player.x,player.y)); | ||
| + | gunTemperature=gunFireRate; | ||
| + | } | ||
} | } | ||
| + | |||
| + | |||
| + | |||
| + | bullets = bullets.filter(isBulletOK); | ||
| + | |||
| + | aliens = aliens.filter(isAlienOK); | ||
| + | |||
| + | |||
| + | |||
} | } | ||
| Line 106: | Line 211: | ||
| − | drawImage(ship, | + | drawImage(ship,player.x,player.y); |
| − | fillCircle( | + | fillCircle(player.x,player.y,6); |
| + | |||
| + | setColour("white"); | ||
| + | print(aliens.length,20,20); | ||
| + | if (explosion.frame < 10) { | ||
| + | drawImage(explosionImage,explosion.x,explosion.y,explosion.frame); | ||
| + | } | ||
} | } | ||
run(move,draw); | run(move,draw); | ||
| + | |||
| + | |||
| + | |||
</edcode> | </edcode> | ||