Terminar um jogo estilo Brick Breaker no Flash CC

1 resposta
programaçãojava
W

Olá pessoal preciso de ajudar para terminar um jogo estilo Brick Breaker no Flash CC.
O professor pediu que alem de criar o jogo, ele tivesse as seguintes funções em seu código (os nomes das funções devem ser os mesmos que os contidos neste documento):

insertMoreBalls: inseri no palco aleatoriamente duas ou três bolas.

speedUpBall: acelera a velocidade em relação ao eixo x e y da bola que colidiu com o tijolo.

slowDownBall: desacelera a velocidade em relação ao eixo x e y da bola que colidiu com o tijolo.

getBiggerBalls: aumenta o tamanho da bola que colidiu com o tijolo.

getMoreLifes: aumenta em um o número de vidas do jogador.

increaseBrickResistance: aumenta a resistência do tijolo, isto é, quando ele for acertado por uma bola a sua resistência é diminuída em um. Quando for igual a zero, então o tijolo desaparece da tela.

O jogo está completo, só preciso fazer essas funções mas não estou conseguindo. O professor deu uma dica de como sortear o tijolo que vai possuir esses “powerups”. Segue o código dele abaixo:

Brick.as (PROFESSOR)

package  {

import flash.display.MovieClip;

import flash.display.<em>;

import flash.events.</em>;

public class Brick extends MovieClip {

private var _root:MovieClip;

private var _item:int;

public function Brick(){

//Code that will be run when the brick is added to the stage

addEventListener(Event.ADDED, beginClass);

//Enter frame code

addEventListener(Event.ENTER_FRAME, enterFrameEvents);

}

private function beginClass(event:Event):void{

_root = MovieClip(root);

_item = int(Math.random()*2);

}

private function enterFrameEvents(event:Event):void{

//hit testing with the ball

for(var i:int = 0;i<_root.ballsList.length;i++){

if(hitTestObject(_root.ballsList[i])){

//making the ball bounce off vertically

_root.ballsList[i].ballYSpeed *= -1;

//destroying this brick

_root.bricksCount;

_root.removeChild(this);

//stop running this code

this.removeEventListener(Event.ENTER_FRAME, enterFrameEvents);

if(_item == 0){ // speed up the ball

speedUpBall(_root.ballsList[i]);
}

if(_item == 1 ){ // slow down the ball

slowDownBall(_root.ballsList[i]);

}

}

}

}

function speedUpBall(ball:MovieClip):void{

if(ball.ballXSpeed < 0){

ball.ballXSpeed -= 5;

}else{

ball.ballXSpeed += 5;

}

}

function slowDownBall(ball:MovieClip){

if(ball.ballXSpeed < 0){

ball.ballXSpeed += 5;

}else{

ball.ballXSpeed -= 5;

}

}

}

}

O meu código já é diferente, e eu tentei substituir o meu _root.mcball pelo _root.ballsList[i] dele e apliquei as funções de speedUpBall e slowDownBall mas aparece este erro quando faço isso:
…Brick.as, linha 1, coluna 1 5006: Um arquivo ActionScript não pode ter mais de uma definição externamente visível: Brick, speedUpBall

Brick.as (MEU CODIGO)

package {

import flash.display.<em>;

import flash.events.</em>;

//extende a classe para que ela possua as mesmas

//propriedades do MovieClip

public class Brick extends MovieClip {

//a timeline principal

private var _root:MovieClip;

public function Brick(){

//o codigo vai rodar quando um tijolo e adicionado na tela

addEventListener(Event.ADDED, beginClass);

addEventListener(Event.ENTER_FRAME, enterFrameEvents);

}

private function beginClass(event:Event):void{

_root = MovieClip(root);

//incrementa a quantidade de tijolos na tela

_root.brickAmt ++;

}

private function enterFrameEvents(event:Event):void{

//verifica se o jogador perdeu

if(_root.gameOver){

//destroi this brick

this.parent.removeChild(this);

//o codigo para de rodar

removeEventListener(Event.ENTER_FRAME, enterFrameEvents);

}

//teste de batida da bola

if(this.hitTestObject(_root.mcBall)){

//faz a bola bater verticalmente

_root.ballYSpeed *= -1;

//destroi this brick

this.parent.removeChild(this);

//o codigo para de rodar

removeEventListener(Event.ENTER_FRAME, enterFrameEvents);

//decrementa a quantidade de tijolos na tela

_root.brickAmt --;

//aumenta a pontuacao do jogador a cada tijolo quebrado

_root.score += 10;

}

}

}

}

Então pessoal, queria ter o código das funções pois não estou conseguindo pensar na logica e como sou leigo em java e actionscript ta difícil pra mim.
Outra duvida que tenho é como fazer as bolas extras aparecerem no palco quando a bola principal bate no tijolo que “esconde” essas bolas.

1 Resposta

W

E caso precisem, essa é minha Main

stop();

var ballXSpeed:Number = 8; //velocidade no eixo X

var ballYSpeed:Number = 8; //velocidade no eixo Y

//quantos tijolos tem na tela

var brickAmt:int = 0;

//quantas vidas o jogador tem

var lives:int = 3;

//quando o jogo acabar

var gameOver:Boolean = false;

//a score do jogo

var score:int = 0;

//codigos para iniciar o jogo

function beginCode(event:MouseEvent):void{

//remove o listener com um click do mouse

stage.removeEventListener(MouseEvent.CLICK, beginCode);

mcPaddle.addEventListener(Event.ENTER_FRAME, movePaddle);

mcBall.addEventListener(Event.ENTER_FRAME, moveBall);

//adicionar um listener para ver se o level terminou

addEventListener(Event.ENTER_FRAME, checkLevel);

//remover o "Click to Start"

txtStart.text = ‘’;

addEventListener(Event.ENTER_FRAME, finishGame);

}

function movePaddle(event:Event):void{

//para o paddle seguir o mouse

mcPaddle.x = mouseX - mcPaddle.width / 2;

//caso o mouse  demais para a esquerda

if(mouseX < mcPaddle.width / 2){

mcPaddle.x = 0;

}

//caso o mouse  demais para a direita

if(mouseX > stage.stageWidth - mcPaddle.width / 2){

mcPaddle.x = stage.stageWidth - mcPaddle.width;

}

}
function moveBall(event:Event):void{

mcBall.x += ballXSpeed; //move a bola horizontalmente

mcBall.y += ballYSpeed; //move a bola verticalmente

//para bater a bolinha na parede

if(mcBall.x >= stage.stageWidth-mcBall.width){

//se bater no lado direito

ballXSpeed *= -1;

}

if(mcBall.x <= 0){

//se bater no lado esquerdo

ballXSpeed *= -1;

}

if(mcBall.y >= stage.stageHeight-mcBall.height){

//aqui a bolinha vai perder uma vida

//quando ela bater no chao

ballYSpeed *= -1;

lives --;

//se acabar as vidas

if(lives <= 0){

//jogo acaba

gameOver = true;

//remover listeners desnecessarios

mcPaddle.removeEventListener(Event.ENTER_FRAME, movePaddle);

mcBall.removeEventListener(Event.ENTER_FRAME, moveBall);

removeEventListener(Event.ENTER_FRAME, checkLevel);

removeEventListener(Event.ENTER_FRAME, finishGame);

//acabar o jogo e ir para "You Lose!"

gotoAndStop(‘lose’);

}

}

if(mcBall.y <= 0){

//quando a bolinha bater no topo

//ela vai cair

ballYSpeed *= -1;

}

//Bater no paddle

if(mcBall.hitTestObject(mcPaddle)){

calcBallAngle();

}

}
function calcBallAngle():void{

//a posicao da bola vai mudar de acordo com a

//batida dela no paddle

var ballPosition:Number = mcBall.x - mcPaddle.x;

//vai converter a posicao da bola em uma porcentagem

//caminho pela esquerda -.5

//caminho pela direita .5

//o centro é 0

var hitPercent:Number = (ballPosition / (mcPaddle.width - mcBall.width)) - .5;

//vai calcular a porcentagem para que

//a bolinha aumente ou diminua a velocidade com a batida

ballXSpeed = hitPercent * 10;

ballYSpeed *= -1;

}
function makeLvl():void{

//ver se tem algum level sobrando

if(currentLvl > lvlArray.length){

//o jogo acaba

gameOver = true;

//remover os listeners desnecessarios

mcPaddle.removeEventListener(Event.ENTER_FRAME, movePaddle);

mcBall.removeEventListener(Event.ENTER_FRAME, moveBall);

removeEventListener(Event.ENTER_FRAME, checkLevel);

removeEventListener(Event.ENTER_FRAME, finishGame);

//ir para "You win!"

gotoAndStop(win);

}

//achar o comprimento da array no codigo de level

//comeca no 0 e o primeiro level e 1

//o level "sempre estara 1 a frente"

var arrayLength:int = lvlArray[currentLvl-1].length;

//quantidade atual de tijolos

var brickRow:int = 0;

//cria um loop para colocar os tijolos em seus lugares

for(var i:int = 0;i<arrayLength;i++){

//verifica se deve colocar um tijolo

if(lvlArray[currentLvl-1][i] == 1){

var brick:Brick = new Brick();

//coloca as coordenadas dos tijolos pela variavel i e brickRow

brick.x = 15+(i-brickRow<em>7)<em>75;

brick.y = 10+brickRow</em>20;

//verifica uma se um os tijolos vao para uma nova linha

for(var c:int = 1;c<=10;c++){

if(i == c</em>7-1){

brickRow ++;

}

}

//adiciona os tijolos na tela

addChild(brick);

}

}

}
function checkLevel(event:Event):void{

//verifica se os tijolos acabaram

if(brickAmt == 0){

//reseta o level incrementando ele

currentLvl ++;

//roda a funcao makeLvl

//reseta o "Click to Begin"

txtStart.text = “Click To Begin”;

makeLvl();

//reseta a posicao da bola e do paddle

mcBall.x = 150;

mcBall.y = 265;

mcPaddle.x = 230;

//remove listeners desnecessarios

mcPaddle.removeEventListener(Event.ENTER_FRAME, movePaddle);

mcBall.removeEventListener(Event.ENTER_FRAME, moveBall);

removeEventListener(Event.ENTER_FRAME, checkLevel);

//ativa o listener do click do mouse para comecar o jogo

stage.addEventListener(MouseEvent.CLICK, beginCode);

}

}
function finishGame(event:Event):void{

txtStats.text = "Level: +currentLvl+ Lives: +lives+ Score: "+score;

}

//se o jogador clicar, o jogo comeca

stage.addEventListener(MouseEvent.CLICK, beginCode);

//aparece o texto "Click to Begin"

txtStart.text = Click To Begin;
//chama a funcao para atualizar os textos de vida, score e level

addEventListener(Event.ENTER_FRAME, finishGame);

//constroi o level

makeLvl();
Criado 1 de abril de 2017
Ultima resposta 1 de abr. de 2017
Respostas 1
Participantes 1