// by Robert Strazzarino and Scott Robbins int window_width = 600; int window_height = 450; int i; int numPenguins = 5; //max is 7 int bullet_x_increment = 2; int bullet_y_increment= 5; int numCannonMovements = 9; int increment = 5; int buildingWidth = 176; int penguinWidth = 52; int currentCannon = 0; int animation_speed = 85; int spotArray[8]; int randSnow = 0; int lives = 3; int temp = 0; string window_title = "CTRL-ALT-LINUX"; int shieldOn = 0; int bulletSpeedMAG = 5; int bulletStartX[numCannonMovements]; int bulletStartY[numCannonMovements]; int bulletStartXSpeed[numCannonMovements]; int bulletStartYSpeed[numCannonMovements]; int numBullets = 1;//was 5 int numSnowBalls = 3; int bulletXSpeed[numBullets]; int bulletYSpeed[numBullets]; int snowBallXSpeed[numSnowBalls]; int snowBallYSpeed[numSnowBalls]; int tempValue = 0; rectangle building(x = 424, y = 0, h = 272, w = 179, visible = false); int bulletReady = 1; forward animation slide(pixmap penguin); forward animation bulletAnimate(circle curBullet); forward animation snowBallAnimate(circle curSnowBall); circle gatesBox1(x = 532, y = 337, radius = 20); pixmap background(x = 0, y = 0, filename = "background.bmp"); pixmap txtShield(x = 0, y = 400, filename = "txtShield.bmp"); pixmap txtHitsLeft(x = 397, y = 400, filename = "txtHitsLeftHack.bmp"); pixmap lives1(x = 505, y = 428, filename = "iconLives.bmp"); pixmap lives2(x = 535, y = 428, filename = "iconLives.bmp"); pixmap lives3(x = 565, y = 428, filename = "iconLives.bmp"); pixmap penguins[numPenguins]; pixmap cannon[numCannonMovements]; circle gates(x = 496, y = 264, radius = 63); pixmap billShield(x = 485, y = 257, filename = "billShield.bmp"); circle bullets[numBullets]; rectangle gatesBox2(); circle snowBalls[numSnowBalls]; pixmap finalscreen(x = 0, y = 0, filename = "finalscreen.bmp", visible = false); pixmap bluescreen(x = 0, y = 0, filename = "bluescreen.bmp"); pixmap startscreen(x = 0, y = 0, filename = "startscreen.bmp"); initialization { //finalscreen.visible = false; bluescreen.visible = false; if (currentCannon < 8) { cannon[currentCannon].visible = false; currentCannon = currentCannon + 1; cannon[currentCannon].visible = true; } if (currentCannon > 0) { cannon[currentCannon].visible = false; currentCannon = currentCannon - 1; cannon[currentCannon].visible = true; } shieldOn = 0; billShield.visible = false; txtShield.visible = false; gates.visible = false; gatesBox2.x = 516; gatesBox2.y = 279; gatesBox2.w = 58; gatesBox2.h = 58; gatesBox2.visible = false; for (i = 0; i < numBullets; i += 1) { bullets[i].y = 400; //get the bullets out of there bullets[i].radius = 5; bullets[i].visible = false; bullets[i].user_data = i; bullets[i].red = 0; bullets[i].green = 0; bullets[i].blue = 0; bullets[i].animation_block = bulletAnimate; } for (i = 0; i < numSnowBalls; i += 1) { snowBalls[i].radius = 5; snowBalls[i].visible = false; snowBalls[i].user_data = i; snowBalls[i].animation_block = snowBallAnimate; snowBalls[i].red = 204/255; snowBalls[i].green = 1.0; snowBalls[i].blue = 1.0; } for (i = 0; i < numCannonMovements; i += 1) { cannon[i].x = 405; cannon[i].y = 278; cannon[i].filename = "cannon0" + (i + 1) + ".bmp"; if (i != 0) { cannon[i].visible = false; } } for (i = 0; i < 8; i += 1) { spotArray[i] = i * penguinWidth; } for (i = 0; i < numCannonMovements; i += 1) { if (i == 0) { bulletStartX[i] = 13; bulletStartY[i] = 73; bulletStartXSpeed[i] = 12; //arb bulletStartYSpeed[i] = 0; } else if (i == 1) { bulletStartX[i] = 14; bulletStartY[i] = 64; bulletStartXSpeed[i] = 13;//.9848 * bulletSpeedMAG; //cos 10 degrees ARB bulletStartYSpeed[i] = 3;//.1736 * bulletSpeedMAG; //sin 10 degrees } else if (i == 2) { bulletStartX[i] = 17; bulletStartY[i] = 58; bulletStartXSpeed[i] = 14;//.9396 * bulletSpeedMAG; bulletStartYSpeed[i] = 5;//.3420 * bulletSpeedMAG; } else if (i == 3) { bulletStartX[i] = 19; bulletStartY[i] = 50; bulletStartXSpeed[i] = 11;//.8660 * bulletSpeedMAG; ARB bulletStartYSpeed[i] = 11;//.5000 * bulletSpeedMAG; } else if (i == 4) { bulletStartX[i] = 25; bulletStartY[i] = 44; bulletStartXSpeed[i] = 10;//.7660 * bulletSpeedMAG; bulletStartYSpeed[i] = 9;//.6427 * bulletSpeedMAG; } else if (i == 5) { bulletStartX[i] = 32; bulletStartY[i] = 38; bulletStartXSpeed[i] = 10;//.6427 * bulletSpeedMAG; bulletStartYSpeed[i] = 9;//.7660 * bulletSpeedMAG; } else if (i == 6) { bulletStartX[i] = 37; bulletStartY[i] = 35; bulletStartXSpeed[i] = 8;//.5000 * bulletSpeedMAG; bulletStartYSpeed[i] = 14;//.8660 * bulletSpeedMAG; } else if (i == 7) { bulletStartX[i] = 46; bulletStartY[i] = 32; bulletStartXSpeed[i] = 5;//.3420 * bulletSpeedMAG; bulletStartYSpeed[i] = 15;//.9396 * bulletSpeedMAG; } else if (i == 8) { bulletStartX[i] = 53; bulletStartY[i] = 31; bulletStartXSpeed[i] = 3;//.1736 * bulletSpeedMAG; bulletStartYSpeed[i] = 16;//.9848 * bulletSpeedMAG; } } for(i = 0; i < numSnowBalls; i += 1) { snowBallXSpeed[i] = 11; snowBallYSpeed[i] = 26; } for (i = 0; i < numPenguins; i += 1) { penguins[i].animation_block = slide; penguins[i].x = spotArray[i];//random(window_width - buildingWidth - penguinWidth); penguins[i].y = 0; if ((i % 2) == 1) //i is odd { penguins[i].user_data = 0; penguins[i].filename = "penguinright.bmp"; //right } else { penguins[i].user_data = 1; penguins[i].filename = "penguinleft.bmp"; //left } } } animation slide(pixmap penguin) { if (numPenguins == 0) finalscreen.visible = true; if (penguin.visible == true) { if (penguin touches bullets[0]) { bullets[0].visible = false; penguin.visible = false; penguin.x = 550; penguin.y = 200; numPenguins = numPenguins - 1; } else { randSnow = random(20); if(randSnow == 1 && penguin.filename == "penguinright.bmp" && penguin.visible == true && startscreen.visible == false) { for(i = 0; i < numSnowBalls; i +=1) { if(snowBalls[i].visible == false) { snowBallYSpeed[snowBalls[i].user_data] = 26; snowBalls[i].x = (penguin.x + 5); snowBalls[i].y = (penguin.y + 20); snowBalls[i].visible = true; i = (numSnowBalls + 1); //break out of loop } } } if (penguin.user_data == 0) //going right { penguin.x += increment; if (penguin.x >= (window_width - buildingWidth - penguinWidth)) { penguin.user_data = 1; penguin.filename = "penguinleft.bmp"; penguin.x -= increment; } } else if (penguin.user_data == 1) //going left { penguin.x -= increment; if (penguin.x <= 0) { penguin.user_data = 0; penguin.filename = "penguinright.bmp"; penguin.x += increment; } } } } } animation bulletAnimate(circle curBullet) { //if (curBullet.visible == true) //{ tempValue = curBullet.user_data; bulletYSpeed[tempValue] = bulletYSpeed[tempValue] - 1; curBullet.x += bulletXSpeed[tempValue]; curBullet.y += bulletYSpeed[tempValue]; if (curBullet.y < 0) curBullet.visible = false; // if(curBullet.y < 100) // { // for(i = 0; i < numPenguins; i += 1) // { // if(curBullet touches penguins[i] && penguins[i].visible == true) // { // curBullet.visible = false; // penguins[i].visible = false; // numPenguins = numPenguins - 1; // if (numPenguins == 0) // { // finalscreen.visible = true; // } // } // } // } //} } animation snowBallAnimate(circle curSnowBall) { curSnowBall.x += snowBallXSpeed[curSnowBall.user_data]; curSnowBall.y += snowBallYSpeed[curSnowBall.user_data]; snowBallYSpeed[curSnowBall.user_data] -= 1; if(curSnowBall touches building || curSnowBall.x > 599 || curSnowBall.y < 1 || curSnowBall.visible == false || curSnowBall touches gates) { curSnowBall.visible = false; } else if(curSnowBall touches gatesBox1 || curSnowBall touches gatesBox2) { if (lives == 0) { bluescreen.visible = true; } if (lives == 1) { lives1.visible = false; lives = lives - 1; } if (lives == 2) { lives2.visible = false; lives = lives - 1; } if (lives == 3) { lives3.visible = false; lives = lives - 1; } curSnowBall.visible = false; } } on uparrow { if (currentCannon < 8) { cannon[currentCannon].visible = false; currentCannon = currentCannon + 1; cannon[currentCannon].visible = true; } } on downarrow { if (currentCannon > 0) { cannon[currentCannon].visible = false; currentCannon = currentCannon - 1; cannon[currentCannon].visible = true; } } on space { if (startscreen.visible == true) { startscreen.visible = false; } else { if (shieldOn == 0) { for (i = 0; i < numBullets; i += 1) { if (bullets[i].visible == false) { bullets[i].visible = true; bulletXSpeed[i] = -(bulletStartXSpeed[currentCannon]); bulletYSpeed[i] = bulletStartYSpeed[currentCannon]; bullets[i].x = 405 + bulletStartX[currentCannon]; //lookup later bullets[i].y = 278 + 95 - bulletStartY[currentCannon]; i = (numBullets + 1); // break out of the loop } } } } } on akey { if (shieldOn == 0) { billShield.visible = true; txtShield.visible = true; gates.x = 496; gates.visible = true; shieldOn = 1; } else { billShield.visible = false; txtShield.visible = false; gates.x = 0; gates.visible = false; shieldOn = 0; } }