void playGame() { lives = MAX_LIVES; score = 0; startLevel(); resetLevel(); int resetPressed = FALSE; // game loop while (lives > 0) { //test select button release if (KEY_DOWN_NOW(BUTTON_SELECT)) { resetPressed = TRUE; } if (resetPressed && !KEY_DOWN_NOW(BUTTON_SELECT)) { titleScreen(); } waitForVBlank(); erase(); updateVars(); checkOutsideScreen(); generateObjs(); draw(); } gameOverScreen(); }
int main() { REG_DISPCTL = MODE3 | BG2_ENABLE; while(1) { died = 0; drawImage3(0,0,TITLESCREEN_WIDTH,TITLESCREEN_HEIGHT,titleScreen); if (KEY_DOWN_NOW(BUTTON_START)) { CHARACTER character = mario; mario.col = 50; QUESTIONBLOCK questionBlocks[] = {questionBlock1,questionBlock2}; int numBlocks = 2; ENEMY enemies[] = {goomba1,goomba2,goomba3,goomba4}; int numEnemies = 4; int jumpHeight = 0; levelColLeft = 0; levelColRight = 240; backgroundCol = 0; backgroundCount = 0; lives = 3; coins = 0; flag.col = 500; drawMenuIcons(); while(1) { character.atBoundary = 0; if (KEY_DOWN_NOW(BUTTON_SELECT)) { break; } if (KEY_DOWN_NOW(BUTTON_LEFT)) { moveLeft(&character,questionBlocks,numBlocks,enemies,numEnemies); } if (KEY_DOWN_NOW(BUTTON_RIGHT)) { moveRight(&character,questionBlocks,numBlocks,enemies,numEnemies); } if (KEY_DOWN_NOW(BUTTON_A) && !character.jumpingUp && !character.fallingDown) { character.jumpingUp = 1; character.fallingDown = 0; int *rowPtr; rowPtr = (int *) malloc(sizeof(int)); *rowPtr = character.row; jumpHeight = *rowPtr - 2 * character.height[character.mode] + 7; } if (character.jumpingUp) { jump(&character,jumpHeight,questionBlocks,numBlocks); } else if (character.fallingDown) { fall(&character,enemies,numEnemies); } WaitForVblank(); if (character.atBoundary && character.direction == 0) { scrollBackgroundRight(); int b; for (b = 0; b < numBlocks; b++) { questionBlocks[b].col -= 1; int screenCol = questionBlocks[b].col - levelColLeft; if (questionBlocks[b].col > levelColLeft && questionBlocks[b].col + questionBlocks[b].width < levelColRight) { drawImage3(questionBlocks[b].row,screenCol,questionBlocks[b].width, questionBlocks[b].height,questionBlocks[b].images[questionBlocks[b].mode]); } } int e; for (e = 0; e < numEnemies; e++) { enemies[e].col -= 1; int screenCol = enemies[e].col - levelColLeft; if (enemies[e].isDead == 0 && enemies[e].col > levelColLeft && enemies[e].col + enemies[e].width < levelColRight) { drawImage3(enemies[e].row,screenCol,enemies[e].width, enemies[e].height, enemies[e].images[enemies[e].mode]); } } flag.col -= 1; int screenCol = flag.col - levelColLeft; if (flag.col > levelColLeft && flag.col + flag.width < levelColRight) { drawImage3(flag.row,screenCol,flag.width,flag.height,flagpole); } } else if (character.atBoundary && character.direction == 1) { scrollBackgroundLeft(); int b; for (b = 0; b < numBlocks; b++) { questionBlocks[b].col += 1; int screenCol = questionBlocks[b].col - levelColLeft; if (questionBlocks[b].col > levelColLeft && questionBlocks[b].col + questionBlocks[b].width < levelColRight) { drawImage3(questionBlocks[b].row,screenCol,questionBlocks[b].width, questionBlocks[b].height,questionBlocks[b].images[questionBlocks[b].mode]); } } int e; for (e = 0; e < numEnemies; e++) { enemies[e].col += 1; int screenCol = enemies[e].col - levelColLeft; if (enemies[e].isDead == 0 && enemies[e].col > levelColLeft && enemies[e].col + enemies[e].width < levelColRight) { drawImage3(enemies[e].row,screenCol,enemies[e].width, enemies[e].height, enemies[e].images[enemies[e].mode]); } } flag.col += 1; int screenCol = flag.col - levelColLeft; if (flag.col > levelColLeft && flag.col + flag.width < levelColRight) { drawImage3(flag.row,screenCol,flag.width,flag.height,flagpole); } } else { drawBackground(); int b; for (b = 0; b < numBlocks; b++) { int screenCol = questionBlocks[b].col - levelColLeft; if (questionBlocks[b].col > levelColLeft && questionBlocks[b].col + questionBlocks[b].width < levelColRight) { drawImage3(questionBlocks[b].row,screenCol,questionBlocks[b].width, questionBlocks[b].height,questionBlocks[b].images[questionBlocks[b].mode]); } } int e; for (e = 0; e < numEnemies; e++) { int screenCol = enemies[e].col - levelColLeft; if (enemies[e].isDead == 0 && enemies[e].col > levelColLeft && enemies[e].col + enemies[e].width < levelColRight) { drawImage3(enemies[e].row,screenCol,enemies[e].width, enemies[e].height, enemies[e].images[enemies[e].mode]); } } int screenCol = flag.col - levelColLeft; if (flag.col > levelColLeft && flag.col + flag.width < levelColRight) { drawImage3(flag.row,screenCol,flag.width,flag.height,flagpole); } } drawImage3(character.row,character.col,character.width[character.mode], character.height[character.mode],character.images[character.mode]); if (lives < 0) { died = 1; break; } if (character.col > flag.col - levelColLeft) { died = 0; break; } updateVars(); } if (died == 1) { while (1) { drawImage3(0,0,GAMEOVER_WIDTH,GAMEOVER_HEIGHT,gameOver); if (KEY_DOWN_NOW(BUTTON_START) || KEY_DOWN_NOW(BUTTON_SELECT)) { break; } } } else if (died == 0) { drawRect(0,0,20,240,BLACK); char levelComplete[50] = "Level Complete!\0"; drawString(5,78,levelComplete,RED); while (1) { if (KEY_DOWN_NOW(BUTTON_START) || KEY_DOWN_NOW(BUTTON_SELECT)) { break; } } } } } }