2015-12-08 6 views
1

Итак, я делаю 2D-шутер для видеоигр в разделе Обработка, и я хочу, чтобы оценка была причиной того, как вы переходите на следующий уровень. У меня есть уровни в массиве, и у меня есть пара элементов Int для определения уровней. Однако, как только оценка достигает 200 (нужный результат для перехода на следующий уровень), он идет прямо к WIN, и он не проходит ни один из уровней. Не могли бы вы дать мне решение проблемы?Я не могу перейти на следующий уровень

Вот основной код:

import ddf.minim.spi.*; 
 
import ddf.minim.signals.*; 
 
import ddf.minim.*; 
 

 
final int LEVEL_ONE=0; 
 
final int LEVEL_TWO=1; 
 
final int LEVEL_THREE=2; 
 
final int WON=3; 
 
final int LOST=4; 
 

 
final String WIN="You Beat the System!"; 
 
final String LOSE="Totes, Awkes..."; 
 

 
int gameState; 
 

 

 
Level l; 
 

 
ArrayList <Level> levels = new ArrayList<Level>(); 
 

 
void setup() { 
 
    size(1000, 500); 
 
    textAlign(CENTER); 
 
    loadAssets(); 
 

 

 

 
    Level l1 = new Level("LEVEL 1", 5, 0, 3); 
 
    Level l2 = new Level("LEVEL 2", 3, 3, 1); 
 
    Level l3 = new Level("LEVEL 3", 5, 7, 0); 
 

 
    levels.add(l1); 
 
    levels.add(l2); 
 
    levels.add(l3); 
 

 

 
    l = levels.get(0); 
 
} 
 

 

 
void winCurrentLevel() { 
 
    levels.remove(l); 
 

 

 

 
    if (levels.size() > 0) l=levels.get(0); 
 
    else winGame(); 
 
} 
 

 

 

 
void draw() { 
 
    switch(gameState) { 
 
    case WON: 
 
    showScreen(WIN); 
 
    break; 
 
    case LOST: 
 
    showScreen(LOSE); 
 
    break; 
 
    default: 
 
    l.playLevel(); 
 
    } 
 
}

И это код уровня:

class Level { 
 

 

 
    final int GAMEPLAY=0; 
 
    final int INTRO=-1; 
 

 
    int lvlState; 
 
    Background bg; 
 

 
    ArrayList<PowerUps> powerups; 
 
    ArrayList<Enemy> enemies; 
 
    ArrayList<Bomb> bombs; 
 

 
    //Score 
 
    int score; 
 
    //Intro 
 
    int introTimer; 
 
    String intro; 
 

 
    //Enemies and PowerUps 
 
    int numEnem; 
 
    int enemySpawn; 
 
    int numCoffees; 
 

 

 
    // Bomb Enemies and Large Powerups 
 
    int numBomb; 
 
    int numLargeCoffees; 
 

 

 

 
    //scrollforce 
 
    int scrollrate; 
 
    int scroll; 
 
    PVector scrollForce; 
 

 
    Level(String intromessage, int numenemies, int numbombs, int numcol) { 
 

 
    powerups= new ArrayList<PowerUps>(); 
 
    enemies= new ArrayList<Enemy>(); 
 
    bombs= new ArrayList<Bomb>(); 
 

 

 
    introTimer=60; 
 
    lvlState=INTRO; 
 

 

 
    intro=intromessage; 
 

 
    numEnem=numenemies; 
 
    numBomb=numbombs; 
 

 
    numCoffees=numcol; 
 
    scrollrate=1; 
 
    scrollForce=new PVector(-4, 0); 
 
    enemySpawn=100; 
 

 

 
    initializePowerUps(); 
 
    spawnEnemies(); 
 
    spawnBombs(); 
 
    } 
 

 

 
    void playLevel() { 
 
    if (score==200) nextLevel(); 
 
    switch(lvlState) { 
 
    case INTRO: 
 
     if (introTimer>0) 
 
     { 
 
     introTimer--; 
 
     showScreen(intro); 
 
     } else if (introTimer==0) lvlState=GAMEPLAY; 
 
     break; 
 
    case GAMEPLAY: 
 
     gamePlay(); 
 
     break; 
 
    } 
 
    } 
 

 

 

 
    void gamePlay() { 
 
    background(255); 
 

 
    if (scroll<8) scroll=scrollrate; 
 
    if (frameCount%120==0) scrollrate*=1.5; 
 

 
    p.update(); 
 

 

 

 
    for (int i=0; i<enemies.size(); i++) { 
 
     Enemy e=enemies.get(i); 
 
     e.update(); 
 
     if (e.pos.x<100) { 
 
     enemies.remove(this); 
 
     p.takeDamage(1); 
 
     } 
 
    } 
 

 
    for (int i=0; i<bombs.size(); i++) { 
 
     Bomb b=bombs.get(i); 
 
     b.update(); 
 
     if (b.pos.x<100) { 
 
     bombs.remove(this); 
 
     b.takeDamage(1); 
 
     } 
 
    } 
 

 

 
    if (frameCount%enemySpawn==60) spawnEnemies(); 
 
    if (frameCount%enemySpawn==60) spawnBombs(); 
 

 

 
    //Trying to change to level two 
 
    
 

 

 
    for (int i=0; i<powerups.size(); i++) { 
 
     PowerUps pu=powerups.get(i); 
 
     pu.update(); 
 
    } 
 

 
    drawHealthBar(); 
 
    drawScore(); 
 
    drawRayBar(); 
 
    } 
 

 

 
    void spawnBombs() { 
 
    while (bombs.size()<numBomb) { 
 
     bombs.add(new Bomb(new PVector(random(800, 1000), random(50, 450)), new PVector (-random(7, 12), 0), Bomb)); 
 
    } 
 
    } 
 

 

 
    void spawnEnemies() { 
 
    while (enemies.size()<numEnem) { 
 
     enemies.add(new Enemy(new PVector(random(800, 1000), random(50, 450)), new PVector (-random(5, 10), 0), Grenade)); 
 
    } 
 
    } 
 

 
    void initializePowerUps() { 
 
    spawnCoffee(numCoffees); 
 
    } 
 

 
    void spawnCoffee(int spawn) { 
 
    for (int i=0; i<2; i++) { 
 
     powerups.add(new Coffee(new PVector(-width, random(height-SmallCoffee.height)), new PVector (-random(5, 10), 0), SmallCoffee)); 
 
    } 
 
    } 
 
    void nextLevel() { 
 
    if (gameState == LEVEL_ONE) 
 
    { 
 
    enemies.clear(); 
 
    bombs.clear(); 
 
    powerups.clear(); 
 
    
 
    p.health=p.MAX_HEALTH; 
 
    gameState = LEVEL_TWO; 
 
    } else if (gameState==LEVEL_TWO) { 
 
    gameState=WON; 
 
    } 
 
    } 
 
}

ответ

0

Уведомление эта линия:

if (score==200) nextLevel(); 

Эта проверка выполняется каждый уровня. Итак, как только вы достигнете 200, вы переходите на следующий уровень, где вы выполняете эту проверку, а затем переходите на следующий уровень, где вы выполняете эту проверку ...

Вместо этого вам необходимо иметь разные Значение для каждого уровня. Вы можете либо сделать чек, как это:

if(level == 1 && score == 200){ 
    nextLevel(); 
} 
else if(level == 2 && score == 500){ 
    nextLevel(); 
} 
//... 

Или еще лучше, вы должны передать значение в ваш Level класса, который говорит вам значение, необходимое для перехода на следующий уровень.