Game entry for the Game Programming Contest sponsored by OutrageousCircuits.com (RETRO Game Console)
Fork of Official_RETRO by
Diff: Level.cpp
- Revision:
- 4:2d41b942a823
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Level.cpp Sun Mar 01 09:34:29 2015 +0000 @@ -0,0 +1,359 @@ +#include "Game.h" + +void Game::initTable() +{ + if( oldLevel == L_INTRO ) { + if( level == L_INTRO ) return; + + disp.clear(); + disp.drawString(133, TITY, "NOKO", MAGENT, BLACK); + disp.drawString(134, TITY+10, "BAM!", RED, BLACK); + disp.drawString(130, LEVY, "LEVEL", YELLOW, BLACK); + disp.drawString(133, BESY, "BEST", YELLOW, BLACK); + disp.drawString(136, YOUY, "YOU", YELLOW, BLACK); + disp.drawString(130, MOVY, "MOVES", YELLOW, BLACK); + } + oldLevel = level; + + levelCompleted = false; + moves = 0; + + disp.fillRect( 0, 112, 160, 16, 0 ); + fillTable( 0, 0, TABH, TABW, WALL ); + + switch( level ) { + case L_INTRO: + disp.clear(); + + disp.drawString( 28, 9, "NOKO", MAGENT, BLACK, 2 ); + disp.drawString( 88, 9, "BAM!", RED, BLACK, 2 ); + + disp.drawString( 24, 32, "MOVE THE BALLS >", YELLOW, BLACK ); + disp.drawString( 24, 42, "TO THEIR PLACES >", YELLOW, BLACK ); + + disp.drawString( 36, 58, "TRY LESS MOVES", GREEN, BLACK ); + + //disp.drawString( 30, 61, "ARROWS = MOVE", YELLOW, BLACK ); + disp.drawString( 30, 74, "SQUARE = LEVEL ++", YELLOW, BLACK ); + disp.drawString( 30, 84, "CIRCLE = LEVEL --", YELLOW, BLACK ); + disp.drawString( 30, 94, "LEFT + UP = CLEAR", YELLOW, BLACK ); + + disp.drawString( 30, 111, "HAVE A GOOD TIME!", RED, BLACK ); + + showImage( 132, 32, BLACK, BLUE, 0x1051,0x0175, 0x1651, 0 ); + showImage( 132, 42, GRAY, WHITE, 0x3311, 0 ); + break; + + case L_START: // 1 (1.0) + fillTableV( FREE, 0x4566, 0 ); + fillTableV( MARK, 0x4912, 0 ); + fillTableV( BALL, 0x9511, 0x9811, 0 ); + best = 9; + break; + + case L_FIRSTBAM: // 2 (1.0) + fillTableV( BONG, 0x4468, 0 ); + fillTableV( FREE, 0x4566, 0 ); + fillTableV( WALL, 0x6411, 0 ); + fillTableV( MARK, 0x9512, 0 ); + fillTableV( BALL, 0x4811, 0x4A11,0 ); + best = 9; + break; + + case L_ZIGZAG: // 3 (1.0) + fillTableV( FREE, 0x4631, 0x4741, 0x5841, 0x6941, 0x7A41, 0x8B41, 0x9C31, 0 ); + fillTableV( MARK, 0x9C11, 0xBC11, 0 ); + fillTableV( BALL, 0x4611, 0x6611,0 ); + best = 11; + break; + + case L_FIRSTPOS: // 4 (1.0) + fillTableV( FREE, 0x4566, 0 ); + fillTableV( WALL, 0x9711, 0 ); + fillTableV( MAR1, 0x5A11, 0x4A11, 0 ); + fillTableV( BAL1, 0x9911, 0x9A11, 0 ); + best = 13; + break; + + case L_MANYBOX: // 41 (1.0) + fillTableV( FREE, 0x1133, 0x1513, 0x1931, 0x1B31, 0x2611, 0x2913, 0x3513, 0 ); + fillTableV( FREE, 0x5232, 0x5532, 0x6923, 0 ); + fillTableV( FREE, 0x9133, 0x9533, 0x9933, 0 ); + fillTableV( WALL, 0x9711, 0xA211, 0xA611, 0xAA11, 0xB911, 0 ); + fillTableV( MARK, 0x3311, 0x3711, 0x3B11, 0x7311, 0x7711, 0x7B11, 0xB311, 0xB711, 0xBB11, 0 ); + fillTableV( BALL, 0x1111, 0x1511, 0x1911, 0x5211, 0x5511, 0x6911, 0x9111, 0x9511, 0x9911, 0 ); + best = 9; + break; + + /* + case L_NOBACK: // 470 (1.8) + fillTableV( FREE, 0x03DD, 0 ); + fillTableV( WALL, 0x0321, 0xA411, 0xAE11, 0xB511, 0xCD11, 0 ); + fillTableV( BONG, 0x0111, 0x041C, 0x152B, 0x3011, 0x366A, 0xB617, 0 ); + fillTableV( MARK, 0x1111, 0x3111, 0 ); + fillTableV( BALL, 0x1111, 0x3111, 0 ); + fillTableV( MAR1, 0xCF11, 0xBF11, 0xCC11, 0 ); + fillTableV( BAL1, 0x1411, 0x3511, 0x2311, 0 ); + best = 26; + break; + */ + + case L_FEWMOVES: // 44 2.1 + fillTableV( FREE, 0x23AA, 0 ); + fillTableV( WALL, 0x3712, 0x6518, 0x8831, 0 ); + fillTableV( MARK, 0x9611, 0x9A11, 0 ); + fillTableV( BALL, 0x5611, 0x5A11, 0 ); + best = 18; + break; + + case L_LABYRINTH: // 59 2.5 + fillTableV( FREE, 0x0511, 0x1016, 0x1A16, 0x2311, 0x2F11, 0x3014, 0x3917, 0x4011, 0x4614, 0 ); + fillTableV( FREE, 0x5012, 0x5611, 0x5B15, 0x6111, 0x6612, 0x6913, 0x6F41, 0x7012, 0x7313, 0 ); + fillTableV( FREE, 0x7731, 0x7931, 0x7D13, 0x8011, 0x8311, 0x8541, 0x8B41, 0x8D11, 0x9014, 0 ); + fillTableV( FREE, 0x9713, 0x9B13, 0xB016, 0xB723, 0xBB15, 0xC011, 0xCF11, 0xD010, 0 ); + fillTableV( MAR1, 0x0011, 0x0B11, 0x0F11, 0x411, 0 ); + fillTableV( BAL1, 0xD614, 0 ); + best = 98; + break; + + case L_FACEFOUR: // 69 3.1 + fillTableV( FREE, 0x23AA, 0 ); + fillTableV( WALL, 0x4511, 0x4A11, 0x9712, 0 ); + fillTableV( MAR1, 0x5611, 0x5911, 0x8712, 0 ); + fillTableV( BAL1, 0x9A11, 0x9511, 0x5811, 0x5711, 0 ); + best = 50; + break; + + case L_MANYBAM: // 101 (3.2) + fillTableV( FREE, 0x23AA, 0 ); + fillTableV( WALL, 0x6611, 0x6911, 0xB411, 0 ); + fillTableV( BONG, 0x2516, 0x2CA1, 0x3391, 0x4611, 0x4813, 0x6511, 0x7641, 0x7941, 0 ); + fillTableV( BONG, 0x8431, 0x8B41, 0 ); + fillTableV( MAR1, 0x6712, 0 ); + fillTableV( BAL1, 0x5911, 0x5511, 0 ); + best = 28; + break; + + case L_CHANGEPOS: // 8 (3.7) + fillTableV( FREE, 0x2691, 0x2891, 0 ); + fillTableV( MAR1, 0x3711, 0x5711, 0x7711, 0x9711, 0 ); + fillTableV( BAL1, 0x9711, 0x7711, 0x5711, 0x3711, 0 ); + best = 22; + break; + + case L_ONLYTWO: // 73 (3.9) + fillTableV( FREE, 0x117E, 0x831B, 0x913F, 0xC11C, 0xCE12, 0 ); + fillTableV( BONG, 0x9F11, 0xA111, 0 ); + fillTableV( MARK, 0x8011, 0 ); + fillTableV( BALL, 0x8F11, 0 ); + fillTableV( MAR1, 0x1111, 0x8E11, 0 ); + fillTableV( BAL1, 0x9011, 0x8011, 0 ); + best = 50; + break; + + case L_NUMBLOCKS: // 94 (4.0) + fillTableV( FREE, 0x0211, 0x03E4, 0x09E4, 0x2F11, 0x3083, 0x3D83, 0xB011, 0xDD11, 0 ); + fillTableV( MAR1, 0x1E11, 0xCE11, 0x1F11, 0xDE11, 0x2522, 0 ); + fillTableV( BAL1, 0xA922, 0x1111, 0x0111, 0xC012, 0 ); + best = 54; + break; + + case L_SEPARATED: // 14 10 (4.6) + fillTableV( FREE, 0x4166, 0x4966, 0 ); + fillTableV( WALL, 0x5311, 0 ); + fillTableV( BONG, 0x4211, 0x4A11, 0x5611, 0x5E11, 0x6411, 0x7911, 0x7B11, 0x8111, 0x8E11, 0x9611, 0 ); + fillTableV( MARK, 0x7511, 0x8A11, 0 ); + fillTableV( BALL, 0x8311, 0x8B11, 0 ); + best = 17; + break; + + case L_NUMBERMIX: // 15 79 (4.7) + fillTableV( FREE, 0x11CE, 0 ); + fillTableV( WALL, 0x5321, 0x5C21, 0 ); + fillTableV( MAR1, 0x8D11, 0x7D11, 0x2D11, 0x5D11, 0x4D11, 0x1D11, 0x6D11, 0x3D11, 0 ); + fillTableV( BAL1, 0xCE11, 0xCD11, 0xCC11, 0xCB11, 0xCA11, 0xC911, 0xC811, 0xC711, 0 ); + best = 47; + break; + + case L_STEPS: // 16 381 (5.0) + fillTableV( FREE, 0x2361, 0x2561, 0x2761, 0x2961, 0x2B61, 0x834A, 0 ); + fillTableV( WALL, 0x541C, 0 ); + fillTableV( MAR1, 0x2411, 0x2611, 0x2811, 0x2A11, 0x2C11, 0 ); + fillTableV( BAL1, 0x6311, 0x6511, 0x6711, 0x6911, 0x6B11, 0 ); + best = 48; + break; + + case L_BAMPOS: // 17 6 (5.7) + fillTableV( BONG, 0x3488, 0 ); + fillTableV( FREE, 0x4566, 0 ); + fillTableV( WALL, 0x5911, 0 ); + fillTableV( MAR1, 0x6811, 0x4A11, 0 ); + fillTableV( BAL1, 0x4A11, 0x6811, 0 ); + best = 15; + break; + + case L_CHESS: // 18 25 (5.7) + fillTableV( FREE, 0x24A1, 0x26A1, 0x28A1, 0x2AA1, 0x2CA1, 0 ); + fillTableV( FREE, 0x3711, 0x3B11, 0x4511, 0x4911, 0x5711, 0x5B11, 0 ); + fillTableV( FREE, 0x8511, 0x8911, 0x9711, 0x9B11, 0xA511, 0xA911, 0 ); + fillTableV( BONG, 0x2511, 0x2911, 0x6511, 0x6911, 0x7711, 0x7B11, 0xB711, 0xBB11, 0 ); + fillTableV( MAR1, 0x2D11, 0x4D11, 0x6D11, 0x8D11, 0xAD11, 0 ); + fillTableV( BAL1, 0xB311, 0x9311, 0x7311, 0x5311, 0x3311, 0 ); + best = 46; + break; + + case L_HAMMER: // 19 464 (6.3) + fillTableV( FREE, 0x0015, 0x0913, 0x0D13, 0x1041, 0x1616, 0x1F31, 0x222C, 0x422B, 0 ); + fillTableV( FREE, 0x612E, 0x824C, 0x9051, 0x9F51, 0xC612, 0xD015, 0xD917, 0 ); + fillTableV( MARK, 0x4F11, 0x5623, 0x7721, 0 ); + fillTableV( BALL, 0x0612, 0x4F11, 0x6021, 0x6F21, 0xD612, 0 ); + best = 50; // (Possible 37) + break; + + case L_CAREMOVES: // 20 128 (6.5) + fillTableV( FREE, 0x11CE, 0xB031, 0 ); + fillTableV( WALL, 0x1A51, 0x3521, 0x3B12, 0x711A, 0x8631, 0x9841, 0xA231, 0xC711, 0 ); + fillTableV( BONG, 0x1911, 0x1B24, 0x3411, 0x4611, 0x5911, 0x5B11, 0x6111, 0x7B11, 0 ); + fillTableV( BONG, 0x8441, 0x9211, 0x9B11, 0xBD22, 0xC611, 0xC911, 0 ); + fillTableV( MAR1, 0x1122, 0 ); + fillTableV( BAL1, 0xC021, 0xD111, 0xC111, 0 ); + best = 248; + break; + + case L_FLUTE: // 21 126 (6.9) + fillTableV( FREE, 0x00E0, 0 ); + fillTableV( WALL, 0x0021, 0x0231, 0x0441, 0x0651, 0x0861, 0x0A71, 0x0C81, 0x0E91, 0xA311, 0 ); + fillTableV( BONG, 0x3111, 0x4311, 0x5511, 0x6711, 0x7911, 0x8B11, 0x9D11, 0 ); + fillTableV( MAR1, 0x0F71, 0 ); + fillTableV( BAL1, 0x0111, 0x0311, 0x0511, 0x0711, 0x0911, 0x0B11, 0x0D11, 0 ); + best = 118; + break; + + case L_CROSS: // 22 136 (7.0) + fillTableV( FREE, 0x12CC, 0 ); + fillTableV( WALL, 0x1712, 0x6221, 0x6D21, 0xC712, 0 ); + fillTableV( BONG, 0x6722, 0 ); + fillTableV( MAR1, 0x5611, 0x5911, 0x8911, 0x8611, 0 ); + fillTableV( BAL1, 0x9A11, 0x9511, 0x4511, 0x4A11, 0 ); + best = 70; + break; + + case L_DIAGONAL: // 23 445 (7.1) + fillTableV( FREE, 0x00E0, 0 ); + fillTableV( WALL, 0x0111, 0x2113, 0x4313, 0x6513, 0x8713, 0xA913, 0xCB13, 0x2A21, 0 ); + fillTableV( BONG, 0x2411, 0x5711, 0x8A11, 0xBD11, 0 ); + fillTableV( MARK, 0x0B25, 0x2E22, 0 ); + fillTableV( BALL, 0x0011, 0x1111, 0x2211, 0x3311, 0x4411, 0x5511, 0x6611, 0 ); + fillTableV( BALL, 0x7711, 0x8811, 0x9911, 0xAA11, 0xBB11, 0xCC11, 0xDD11, 0 ); + best = 78; + break; + + case L_LASTSIX: // 24 239 (7.2) + fillTableV( FREE, 0x00E0, 0 ); + fillTableV( WALL, 0x501D, 0 ); + fillTableV( MARK, 0x0020, 0 ); + fillTableV( BALL, 0x6012, 0x6813, 0x7211, 0x7711, 0x8311, 0x8611, 0x9412, 0 ); + fillTableV( BALL, 0x8F11, 0x9E12, 0xAD13, 0xBC14, 0xCB15, 0xDA16, 0 ); + best = 119; + break; + + case L_FORTYTWO: // 24 106 (4.2) + fillTableV( BONG, 0x00E0, 0 ); + fillTableV( FREE, 0x11CE, 0 ); + fillTableV( WALL, 0x2234, 0x5521, 0x2914, 0x3C11, 0x4914, 0x5911, 0x6914, 0 ); + fillTableV( MARK, 0xA323, 0xC312, 0 ); + fillTableV( BALL, 0x2322, 0x3A12, 0x5A12, 0 ); + best = 42; + break; + + case L_ALEXAND: // 25 7 (7.4) + fillTableV( FREE, 0x23AA, 0 ); + fillTableV( WALL, 0x3411, 0x6611, 0xAB11, 0 ); + fillTableV( MAR1, 0x2311, 0x4511, 0x4811, 0x8611, 0 ); + fillTableV( BAL1, 0x5911, 0x8711, 0x2C11, 0x7311, 0 ); + best = 23; + break; + + case L_CALCULATE: // 26 123 (7.5) + fillTableV( FREE, 0x3574, 0x6114, 0x7311, 0 ); + fillTableV( WALL, 0x3711, 0x9611, 0 ); + fillTableV( MAR1, 0x5633, 0 ); + fillTableV( BAL1, 0x8111, 0x4211, 0x5111, 0x9111, 0x8311, 0x9211, 0x4311, 0x9311, 0x4111, 0 ); + best = 76; + break; + + case L_MANYBALLS: // 27 9 (8.0) + fillTable( 0, 0, TABH, TABW, FREE ); + fillTable( 0, 0, 2, TABW, MARK ); + fillTable( TABH-2, 0, 2, TABW, BALL ); + fillTable( TABH/2-1, TABW/2-1, 2, 2, WALL ); + best = 26; + break; + + case L_SPIDERBAM: // 28 110 8.1 + fillTableV( FREE, 0x00E8, 0x0841, 0x0931, 0x0A21, 0x0B11, 0x0D21, 0x1C21, 0x2B21, 0 ); + fillTableV( FREE, 0x3A21, 0x4921, 0x5841, 0x8921, 0x9A21, 0xAB21, 0xBC21, 0xCD21, 0 ); + fillTableV( FREE, 0xA841, 0xB931, 0xCA21, 0xDB11, 0 ); + fillTableV( BONG, 0x0821, 0x1511, 0x2611, 0x3122, 0x3711, 0x6111, 0x6311, 0x6511, 0x6711, 0 ); + fillTableV( BONG, 0x0821, 0x1511, 0x2611, 0x3122, 0x3711, 0x6111, 0x6311, 0x6511, 0x6711, 0 ); + fillTableV( BONG, 0x7011, 0x7211, 0x7411, 0x7611, 0x7811, 0x9122, 0xA711, 0xB611, 0xC511, 0xC821, 0 ); + fillTableV( MARK, 0x1011, 0xC011, 0 ); + fillTableV( BALL, 0x0E11, 0xDE11, 0 ); + best = 65; + break; + + case L_CONFUSE: // 29 135 (8.5) + fillTableV( FREE, 0x11CE, 0 ); + fillTableV( WALL, 0x2212, 0x4B11, 0x5C11, 0x6D11, 0xA611, 0xCB11, 0 ); + fillTableV( BONG, 0x1511, 0x1A11, 0x3311, 0x4711, 0x5211, 0x5911, 0x7121, 0x7A21, 0 ); + fillTableV( BONG, 0x8611, 0x9C11, 0xA121, 0xC611, 0xC911, 0xCD11, 0 ); + fillTableV( MARK, 0xBE11, 0 ); + fillTableV( MAR1, 0xCE11, 0xBD11, 0xAC11, 0 ); + fillTableV( BALL, 0x1611, 0 ); + fillTableV( BAL1, 0x4411, 0x6611, 0x5511, 0 ); + best = 37; + break; + + case L_PRECISE: // 30 142 (8.8) + fillTableV( FREE, 0x0614, 0x1631, 0x4687, 0 ); + fillTableV( WALL, 0x8842, 0 ); + fillTableV( BONG, 0x1812 ,0x4581, 0x4714, 0x5C71, 0x7811, 0x9731, 0x9A31, 0 ); + fillTableV( MAR1, 0xB611, 0xBB11, 0 ); + fillTableV( BAL1, 0x5911, 0x5811, 0 ); + best = 61; + break; + + case L_ORDER: // 31 113 (9.8) + fillTableV( FREE, 0x4715, 0x5711, 0x5B41, 0x8A11, 0 ); + fillTableV( BONG, 0x5A11, 0 ); + fillTableV( MAR1, 0x6713, 0x7713, 0x8713, 0 ); + fillTableV( BAL1, 0x8911, 0x8711, 0x7711, 0x6711, 0x6911, 0x7811, 0x7911, 0x6811, 0x8811, 0 ); + best = 50; + break; + + case L_GRANDMAST: // 32 143 (10.0) + fillTableV( FREE, 0x00E0, 0 ); + fillTableV( WALL, 0x0541, 0x1742, 0x2043, 0x3D33, 0x5314, 0x5814, 0x6911, 0x6C11, 0 ); + fillTableV( WALL, 0x7211, 0x7611, 0x7A11, 0x8411, 0x8811, 0x8E11, 0x9713, 0 ); + fillTableV( WALL, 0xA013, 0xA41C, 0xB313, 0xC611, 0xC814, 0xD014, 0xD914, 0 ); + fillTableV( BONG, 0x1911, 0x1B11, 0x1D11, 0x1F11, 0x2831, 0x3231, 0x3B21, 0 ); + fillTableV( BONG, 0x4111, 0x5C11, 0x6611, 0x9A11, 0xA714, 0xB411, 0xB611, 0 ); + fillTableV( BONG, 0xC511, 0xCC11, 0 ); + fillTableV( MARK, 0xDB11, 0 ); + fillTableV( MAR1, 0xDD11, 0xDF11, 0xDE11, 0x2021, 0x2111, 0x8C11, 0x9611, 0x9E11, 0 ); + fillTableV( BALL, 0xDA11, 0 ); + fillTableV( BAL1, 0xC211, 0xC012, 0x4E12, 0x3F11, 0x5011, 0x8311, 0x6B11, 0 ); + best = 299; + break; + } + + if( level != L_INTRO ) { + showNumber( LEVY, level ); + showNumber( BESY, best ); + showNumber( YOUY, your[level] ); + showNumber( MOVY, moves ); + } + + led1 = 0; led2 = 0; + pwm = 0; pwm.period_ms(1); +} \ No newline at end of file