ECE 2035 final project
Dependencies: mbed wave_player 4DGL-uLCD-SE MMA8452
Revision 2:22d36e7740f1, committed 2019-04-15
- Comitter:
- npatel387
- Date:
- Mon Apr 15 12:25:08 2019 +0000
- Parent:
- 1:399033d39feb
- Commit message:
- final;
Changed in this revision
--- a/globals.h Wed Apr 04 21:11:07 2018 +0000 +++ b/globals.h Mon Apr 15 12:25:08 2019 +0000 @@ -5,6 +5,9 @@ #ifndef GLOBAL_H #define GLOBAL_H +#define NUM_BUCKETS1 40 +#define NUM_BUCKETS2 20 +#define NUM_MAPS 2 // Include all the hardware libraries #include "mbed.h" #include "wave_player.h"
--- a/graphics.cpp Wed Apr 04 21:11:07 2018 +0000 +++ b/graphics.cpp Mon Apr 15 12:25:08 2019 +0000 @@ -1,12 +1,213 @@ #include "graphics.h" - +#include "hardware.h" #include "globals.h" +static int player[121] = {0x00000000, 0xff5a0c45, 0x00000000, 0xff3e2113, 0xff3e2113, 0xff3e2113, 0xff3e2113, 0x00000000, 0x00000000, 0x00000000, 0x00000000, +0xff5a0c45, 0xff5a0c45, 0xff3e2113, 0xff434345, 0xff434345, 0xff434345, 0xff434345, 0xff3e2113, 0x00000000, 0x00000000, 0x00000000, +0xff5a0c45, 0xff3e2113, 0xff434345, 0xff000000, 0xff434345, 0xff000000, 0xff434345, 0xff000000, 0xff3e2113, 0x00000000, 0x00000000, +0x00000000, 0xff3e2113, 0xff434345, 0xff000000, 0xff434345, 0xff000000, 0xff434345, 0xff000000, 0xff3e2113, 0x00000000, 0x00000000, +0x00000000, 0xff3e2113, 0xff434345, 0xff000000, 0xff434345, 0xff000000, 0xff434345, 0xff000000, 0xff3e2113, 0x00000000, 0x00000000, +0x00000000, 0x00000000, 0xff3e2113, 0xff3e2113, 0xff434345, 0xff434345, 0xff3e2113, 0xff3e2113, 0x00000000, 0x00000000, 0x00000000, +0xff3e2113, 0xff3e2113, 0xff277a28, 0xff277a28, 0xff3e2113, 0xff3e2113, 0xff277a28, 0xff277a28, 0xff3e2113, 0xff3e2113, 0x00000000, +0x00ffe0bd, 0x00000000, 0xff497a4a, 0xff277a28, 0xff497a4a, 0xff277a28, 0xff497a4a, 0xff277a28, 0x00000000, 0x00ffe0bd, 0x00000000, +0x00000000, 0x00000000, 0xff277a28, 0xff497a4a, 0xff277a28, 0xff497a4a, 0xff277a28, 0xff497a4a, 0x00000000, 0x00000000, 0x00000000, +0x00000000, 0x00000000, 0xff3e2113, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff3e2113, 0x00000000, 0x00000000, 0x00000000, +0x00000000, 0xff3e2113, 0xff3e2113, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff3e2113, 0xff3e2113, 0x00000000, 0x00000000 +}; + +static int player_shield[121] = {0x00000000, 0xff5a0c45, 0x00000000, 0xff3e2113, 0xff3e2113, 0xff3e2113, 0xff3e2113, 0x00000000, 0x00000000, 0x00000000, 0x00000000, +0xff5a0c45, 0xff5a0c45, 0xff3e2113, 0xff434345, 0xff434345, 0xff434345, 0xff434345, 0xff3e2113, 0x00000000, 0x00000000, 0x00000000, +0xff5a0c45, 0xff3e2113, 0xff434345, 0xff000000, 0xff434345, 0xff000000, 0xff434345, 0xff000000, 0xff3e2113, 0x00000000, 0x00000000, +0x00000000, 0xff3e2113, 0xff434345, 0xff000000, 0xff434345, 0xff000000, 0xff434345, 0xff000000, 0xff3e2113, 0x00000000, 0x00000000, +0x00000000, 0xff3e2113, 0xff434345, 0xff000000, 0xff434345, 0xff000000, 0xff434345, 0xff000000, 0xff3e2113, 0x00000000, 0x00000000, +0x00000000, 0x00000000, 0xff3e2113, 0xff3e2113, 0xff434345, 0xff434345, 0xff3e2113, 0xff3e2113, 0x00000000, 0x00000000, 0x00000000, +0x00c66a00, 0x00ff8d09, 0x00c66a00, 0xff277a28, 0xff3e2113, 0xff3e2113, 0xff277a28, 0xff277a28, 0xff3e2113, 0xff3e2113, 0x00000000, +0x00ff8d09, 0x00ff8d09, 0x00ff8d09, 0xff277a28, 0xff497a4a, 0xff277a28, 0xff497a4a, 0xff277a28, 0x00000000, 0xffbde0ff, 0x00000000, +0x00c66a00, 0x00ff8d09, 0x00c66a00, 0xff497a4a, 0xff277a28, 0xff497a4a, 0xff277a28, 0xff497a4a, 0x00000000, 0x00000000, 0x00000000, +0x00000000, 0x00000000, 0xff3e2113, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff3e2113, 0x00000000, 0x00000000, 0x00000000, +0x00000000, 0xff3e2113, 0xff3e2113, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff3e2113, 0xff3e2113, 0x00000000, 0x00000000}; + +static int player_sword[121] = {0x00000000, 0xff5a0c45, 0x00000000, 0xff3e2113, 0xff3e2113, 0xff3e2113, 0xff3e2113, 0x00000000, 0x00000000, 0x00000000, 0x00000000, +0xff5a0c45, 0xff5a0c45, 0xff3e2113, 0xff434345, 0xff434345, 0xff434345, 0xff434345, 0xff3e2113, 0x00000000, 0x00ffd700, 0x00000000, +0xff5a0c45, 0xff3e2113, 0xff434345, 0xff000000, 0xff434345, 0xff000000, 0xff434345, 0xff000000, 0xff3e2113, 0x00ffd700, 0x00000000, +0x00000000, 0xff3e2113, 0xff434345, 0xff000000, 0xff434345, 0xff000000, 0xff434345, 0xff000000, 0xff3e2113, 0x00ffd700, 0x00000000, +0x00000000, 0xff3e2113, 0xff434345, 0xff000000, 0xff434345, 0xff000000, 0xff434345, 0xff000000, 0xff3e2113, 0x00ffd700, 0x00000000, +0x00000000, 0x00000000, 0xff3e2113, 0xff3e2113, 0xff434345, 0xff434345, 0xff3e2113, 0xff3e2113, 0x00000000, 0x00ffd700, 0x00000000, +0x00c66a00, 0x00ff8d09, 0x00c66a00, 0xff277a28, 0xff3e2113, 0xff3e2113, 0xff277a28, 0xff277a28, 0x00ffd700, 0x00ffd700, 0x00ffd700, +0x00ff8d09, 0x00ff8d09, 0x00ff8d09, 0xff277a28, 0xff497a4a, 0xff277a28, 0xff497a4a, 0xff277a28, 0x00000000, 0x00ffd700, 0x00000000, +0x00c66a00, 0x00ff8d09, 0x00c66a00, 0xff497a4a, 0xff277a28, 0xff497a4a, 0xff277a28, 0xff497a4a, 0x00000000, 0x00000000, 0x00000000, +0x00000000, 0x00000000, 0xff3e2113, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff3e2113, 0x00000000, 0x00000000, 0x00000000, +0x00000000, 0xff3e2113, 0xff3e2113, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff3e2113, 0xff3e2113, 0x00000000, 0x00000000}; + +static int player_plate[121] = {0x00000000, 0xff5a0c45, 0x00000000, 0xff3e2113, 0xff3e2113, 0xff3e2113, 0xff3e2113, 0x00000000, 0x00000000, 0x00000000, 0x00000000, +0xff5a0c45, 0xff5a0c45, 0xff3e2113, 0xff434345, 0xff434345, 0xff434345, 0xff434345, 0xff3e2113, 0x00000000, 0x00ffd700, 0x00000000, +0xff5a0c45, 0xff3e2113, 0xff434345, 0xff000000, 0xff434345, 0xff000000, 0xff434345, 0xff000000, 0xff3e2113, 0x00ffd700, 0x00000000, +0x00000000, 0xff3e2113, 0xff434345, 0xff000000, 0xff434345, 0xff000000, 0xff434345, 0xff000000, 0xff3e2113, 0x00ffd700, 0x00000000, +0x00000000, 0xff3e2113, 0xff434345, 0xff000000, 0xff434345, 0xff000000, 0xff434345, 0xff000000, 0xff3e2113, 0x00ffd700, 0x00000000, +0x00000000, 0x00000000, 0xff3e2113, 0xff3e2113, 0xff434345, 0xff434345, 0xff3e2113, 0xff3e2113, 0x00000000, 0x00ffd700, 0x00000000, +0x00c66a00, 0x00ff8d09, 0x00c66a00, 0x000ba1d9, 0xff3e2113, 0xff3e2113, 0x000ba1d9, 0x000ba1d9, 0x00ffd700, 0x00ffd700, 0x00ffd700, +0x00ff8d09, 0x00ff8d09, 0x00ff8d09, 0x000ba1d9, 0x000ba1d9, 0x000ba1d9, 0x000ba1d9, 0x000ba1d9, 0x00000000, 0x00ffd700, 0x00000000, +0x00c66a00, 0x00ff8d09, 0x00c66a00, 0x000ba1d9, 0x000ba1d9, 0x000ba1d9, 0x000ba1d9, 0x000ba1d9, 0x00000000, 0x00000000, 0x00000000, +0x00000000, 0x00000000, 0xff3e2113, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff3e2113, 0x00000000, 0x00000000, 0x00000000, +0x00000000, 0xff3e2113, 0xff3e2113, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff3e2113, 0xff3e2113, 0x00000000, 0x00000000}; + +static int player_running[121] = {0x00000000, 0x00000000, 0x00000000, 0xff5a0c45, 0x00000000, 0xff3e2113, 0xff3e2113, 0xff3e2113, 0xff3e2113, 0x00000000, 0x00000000, +0x00000000, 0x00000000, 0xff5a0c45, 0xff5a0c45, 0xff3e2113, 0xff434345, 0xff434345, 0xff434345, 0xff434345, 0xff3e2113, 0x00000000, +0x00000000, 0x00000000, 0xff5a0c45, 0xff3e2113, 0xff434345, 0xff000000, 0xff434345, 0xff000000, 0xff434345, 0xff000000, 0xff3e2113, +0x00000000, 0x00000000, 0x00000000, 0xff3e2113, 0xff434345, 0xff000000, 0xff434345, 0xff000000, 0xff434345, 0xff000000, 0xff3e2113, +0x00000000, 0x00000000, 0x00000000, 0xff3e2113, 0xff434345, 0xff000000, 0xff434345, 0xff000000, 0xff434345, 0xff000000, 0xff3e2113, +0xffb4b4b4, 0xffb4b4b4, 0x00000000, 0x00000000, 0xff3e2113, 0xff3e2113, 0xff434345, 0xff434345, 0xff3e2113, 0xff3e2113, 0x00000000, +0x00000000, 0x00000000, 0xff3e2113, 0xff3e2113, 0xff277a28, 0xff277a28, 0xff3e2113, 0xff3e2113, 0xff277a28, 0xff3e2113, 0xff3e2113, +0xffb4b4b4, 0xffb4b4b4, 0xffbde0ff, 0x00000000, 0xff497a4a, 0xff277a28, 0xff497a4a, 0xff277a28, 0xff497a4a, 0xffbde0ff, 0x00000000, +0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff277a28, 0xff497a4a, 0xff277a28, 0xff497a4a, 0xff277a28, 0xff497a4a, 0x00000000, +0xffb4b4b4, 0xffb4b4b4, 0x00000000, 0x00000000, 0xff3e2113, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff3e2113, 0x00000000, +0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff3e2113, 0xff3e2113, 0x00000000, 0x00000000, 0x00000000, 0xff3e2113, 0xff3e2113}; + +static int walls[121] = {0xff202020, 0xff202020, 0xff202020, 0xff202020, 0xff202020, 0xff202020, 0xff202020, 0xff202020, 0xff202020, 0xff202020, 0xff202020, +0xff202020, 0xff6d6d6e, 0xff6d6d6e, 0xff08320a, 0xff6d6d6e, 0xff6d6d6e, 0xff6d6d6e, 0xff6d6d6e, 0xff08320a, 0xff6d6d6e, 0xff202020, +0xff202020, 0xff6d6d6e, 0xff08320a, 0xff6d6d6e, 0xff6d6d6e, 0xff6d6d6e, 0xff6d6d6e, 0xff08320a, 0xff6d6d6e, 0xff6d6d6e, 0xff202020, +0xff202020, 0xff6d6d6e, 0xff6d6d6e, 0xff08320a, 0xff6d6d6e, 0xff6d6d6e, 0xff6d6d6e, 0xff6d6d6e, 0xff08320a, 0xff6d6d6e, 0xff202020, +0xff202020, 0xff6d6d6e, 0xff08320a, 0xff6d6d6e, 0xff6d6d6e, 0xff6d6d6e, 0xff6d6d6e, 0xff6d6d6e, 0xff6d6d6e, 0xff08320a, 0xff202020, +0xff202020, 0xff202020, 0xff202020, 0xff202020, 0xff202020, 0xff202020, 0xff202020, 0xff202020, 0xff202020, 0xff202020, 0xff202020, +0xff202020, 0xff474747, 0xff474747, 0xff474747, 0xff474747, 0xff474747, 0xff474747, 0xff08320a, 0xff474747, 0xff474747, 0xff202020, +0xff202020, 0xff474747, 0xff474747, 0xff474747, 0xff08320a, 0xff474747, 0xff08320a, 0xff474747, 0xff474747, 0xff474747, 0xff202020, +0xff202020, 0xff474747, 0xff474747, 0xff474747, 0xff474747, 0xff08320a, 0xff474747, 0xff474747, 0xff474747, 0xff474747, 0xff202020, +0xff202020, 0xff474747, 0xff474747, 0xff474747, 0xff474747, 0xff474747, 0xff08320a, 0xff474747, 0xff474747, 0xff474747, 0xff202020, +0xff202020, 0xff202020, 0xff202020, 0xff202020, 0xff202020, 0xff202020, 0xff202020, 0xff202020, 0xff202020, 0xff202020, 0xff202020}; + +static int plant[121] = {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, +0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, +0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, +0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, +0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, +0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, +0x00000000, 0x00000000, 0x00000000, 0xff999999, 0xff999999, 0xff999999, 0xff999999, 0x00000000, 0x00000000, 0x00000000, 0x00000000, +0x00000000, 0x00000000, 0xff999999, 0xff999999, 0xff747474, 0xff747474, 0xff999999, 0xff999999, 0x00000000, 0x00000000, 0x00000000, +0x00000000, 0xff999999, 0xff999999, 0xff747474, 0xff747474, 0xff747474, 0xff747474, 0xff999999, 0xff999999, 0x00000000, 0x00000000, +0x00000000, 0xff999999, 0xff747474, 0xff747474, 0xff747474, 0xff747474, 0xff747474, 0xff747474, 0xff747474, 0xff999999, 0x00000000, +0x00000000, 0xff999999, 0xff999999, 0xff999999, 0xff999999, 0xff999999, 0xff999999, 0xff999999, 0xff999999, 0xff999999, 0x00000000}; + +static int startNPC[121] = {0x00000000, 0x00ff2525, 0x00ff2525, 0x00ff2525, 0x00ff2525, 0x00ff2525, 0x00ff2525, 0x00000000, 0x00000000, 0x00000000, 0x00000000, +0x00ff2525, 0x00ff2525, 0x00ff2525, 0x00ff2525, 0x00ff2525, 0x00ff2525, 0x00ff2525, 0x00ff2525, 0x00000000, 0x00000000, 0x00000000, +0x00ff2525, 0x00ff2525, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, +0xffffffff, 0x00000000, 0x00ffc58f, 0x00ffc58f, 0x00ffc58f, 0x00ffc58f, 0x00ffc58f, 0x00ffc58f, 0x00000000, 0x00000000, 0x00000000, +0x00000000, 0x00000000, 0x00ffc58f, 0xffddd058, 0xffffffff, 0x00ffc58f, 0xffddd058, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, +0x00000000, 0x00000000, 0x00ffc58f, 0x00ffc58f, 0x00ffc58f, 0x00ffc58f, 0x00ffc58f, 0x00ffc58f, 0x00000000, 0x00000000, 0x00000000, +0x00000000, 0x00000000, 0xffff8fe1, 0x00ffc58f, 0x00d44b4b, 0x00d44b4b, 0x00ffc58f, 0xffff8fe1, 0x00000000, 0x00000000, 0x00000000, +0xffff8fe1, 0xffff8fe1, 0xffff8fe1, 0xffff8fe1, 0x00ffc58f, 0x00ffc58f, 0xffff8fe1, 0xffff8fe1, 0xffff8fe1, 0xffff8fe1, 0x00000000, +0x00ffc58f, 0x00000000, 0xffff8fe1, 0xffff6dd8, 0xffff8fe1, 0xffff8fe1, 0xffff6dd8, 0xffff8fe1, 0x00000000, 0x00ffc58f, 0x00000000, +0x00000000, 0x00000000, 0xffff8fe1, 0xffff8fe1, 0xffff6dd8, 0xffff6dd8, 0xffff8fe1, 0xffff8fe1, 0x00000000, 0x00000000, 0x00000000, +0x00000000, 0xffff8fe1, 0xffff8fe1, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffff8fe1, 0xffff8fe1, 0x00000000, 0x00000000}; + +static int cave[121] = {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, +0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, +0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff838383, 0xff838383, 0xff838383, 0x00000000, 0x00000000, 0x00000000, 0x00000000, +0x00000000, 0x00000000, 0x00000000, 0xff838383, 0xff252525, 0xff252525, 0xff252525, 0xff838383, 0x00000000, 0x00000000, 0x00000000, +0x00000000, 0x00000000, 0xff838383, 0xff838383, 0xff252525, 0xff252525, 0xff252525, 0xff838383, 0xff838383, 0x00000000, 0x00000000, +0x00000000, 0xff838383, 0xff838383, 0xff252525, 0xff252525, 0xff252525, 0xff252525, 0xff252525, 0xff838383, 0xff838383, 0x00000000, +0x00000000, 0xff838383, 0xff323232, 0xff252525, 0xff252525, 0xff252525, 0xff252525, 0xff252525, 0xff323232, 0xff838383, 0x00000000, +0xff838383, 0xff838383, 0xff323232, 0xff323232, 0xff323232, 0xff323232, 0xff323232, 0xff323232, 0xff323232, 0xff838383, 0xff838383, +0xff838383, 0xff585858, 0xff585858, 0xff585858, 0xff585858, 0xff585858, 0xff585858, 0xff585858, 0xff585858, 0xff585858, 0xff838383, +0xff838383, 0xff585858, 0xff585858, 0xff585858, 0xff585858, 0xff585858, 0xff585858, 0xff585858, 0xff585858, 0xff585858, 0xff838383, +0xff838383, 0xff838383, 0xff838383, 0xff838383, 0xff838383, 0xff838383, 0xff838383, 0xff838383, 0xff838383, 0xff838383, 0xff838383}; + +static int swordInStone[121] = {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, +0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, +0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00ffd700, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, +0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00ffd700, 0x00ffd700, 0x00ffd700, 0x00000000, 0x00000000, 0x00000000, 0x00000000, +0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00ffd700, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, +0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00ffd700, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, +0x00000000, 0x00000000, 0x00000000, 0xff999999, 0xff999999, 0x00ffd700, 0xff999999, 0x00000000, 0x00000000, 0x00000000, 0x00000000, +0x00000000, 0x00000000, 0xff999999, 0xff999999, 0xff747474, 0x00ffd700, 0xff999999, 0xff999999, 0x00000000, 0x00000000, 0x00000000, +0x00000000, 0xff999999, 0xff999999, 0xff747474, 0xff747474, 0xff747474, 0xff747474, 0xff999999, 0xff999999, 0x00000000, 0x00000000, +0x00000000, 0xff999999, 0xff747474, 0xff747474, 0xff747474, 0xff747474, 0xff747474, 0xff747474, 0xff747474, 0xff999999, 0x00000000, +0x00000000, 0xff999999, 0xff999999, 0xff999999, 0xff999999, 0xff999999, 0xff999999, 0xff999999, 0xff999999, 0xff999999, 0x00000000}; + +static int elvarg[121] = {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, +0x00000000, 0x00fff6f6, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, +0x00808000, 0x00808000, 0x00000000, 0x00fff6f6, 0x00000000, 0x00000000, 0x00000000, 0x00808000, 0x00808000, 0x00808000, 0x00000000, +0x00808000, 0x00d20303, 0x00808000, 0x00fff6f6, 0x00000000, 0x00000000, 0x00808000, 0x00808000, 0x00808000, 0x00808000, 0x00000000, +0x00808000, 0x00808000, 0x00808000, 0x00000000, 0x00000000, 0x00808000, 0x00808000, 0x00808000, 0x00808000, 0x00000000, 0x00000000, +0x00000000, 0x00808000, 0x00808000, 0x00808000, 0x00000000, 0x00808000, 0x00808000, 0x00808000, 0x00808000, 0x00000000, 0x00000000, +0x00000000, 0x00000000, 0x00808000, 0x00808000, 0x00808000, 0x00808000, 0x00808000, 0x00808000, 0x00000000, 0x00000000, 0x00000000, +0x00000000, 0x00000000, 0x00808000, 0x00808000, 0x00808000, 0x00808000, 0x00808000, 0x00808000, 0x00808000, 0x00000000, 0x00000000, +0x00000000, 0x00808000, 0x00808000, 0x00808000, 0x00808000, 0x00808000, 0x00808000, 0x00808000, 0x00808000, 0x00808000, 0x00808000, +0x00000000, 0x00000000, 0x00808000, 0x005a5a00, 0x00000000, 0x00000000, 0x005a5a00, 0x00808000, 0x00000000, 0x00000000, 0x00000000, +0x00000000, 0x00fff6f6, 0x00808000, 0x005a5a00, 0x00000000, 0x00fff6f6, 0x005a5a00, 0x00808000, 0x00000000, 0x00000000, 0x00000000}; + +static int gate[121] = {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, +0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, +0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, +0x00959826, 0x00959826, 0x00959826, 0x00959826, 0x00959826, 0x00959826, 0x00959826, 0x00959826, 0x00959826, 0x00959826, 0x00959826, +0x00e5ea00, 0x00e5ea00, 0x00e5ea00, 0x00e5ea00, 0x00e5ea00, 0x00e5ea00, 0x00e5ea00, 0x00e5ea00, 0x00e5ea00, 0x00e5ea00, 0x00e5ea00, +0x00e5ea00, 0x00e5ea00, 0x00e5ea00, 0x00e5ea00, 0x00e5ea00, 0x00e5ea00, 0x00e5ea00, 0x00e5ea00, 0x00e5ea00, 0x00e5ea00, 0x00e5ea00, +0x00e5ea00, 0x00e5ea00, 0x00e5ea00, 0x00e5ea00, 0x00e5ea00, 0x00e5ea00, 0x00e5ea00, 0x00e5ea00, 0x00e5ea00, 0x00e5ea00, 0x00e5ea00, +0x00959826, 0x00959826, 0x00959826, 0x00959826, 0x00959826, 0x00959826, 0x00959826, 0x00959826, 0x00959826, 0x00959826, 0x00959826, +0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, +0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, +0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}; + +static int treasure[121] = {0x004d3402, 0x004d3402, 0x004d3402, 0x004d3402, 0x004d3402, 0x004d3402, 0x004d3402, 0x004d3402, 0x004d3402, 0x004d3402, 0x004d3402, +0x004d3402, 0x002d1e01, 0x002d1e01, 0x002d1e01, 0x002d1e01, 0x002d1e01, 0x002d1e01, 0x002d1e01, 0x002d1e01, 0x002d1e01, 0x004d3402, +0x004d3402, 0x002d1e01, 0x002d1e01, 0x002d1e01, 0x002d1e01, 0x002d1e01, 0x002d1e01, 0x002d1e01, 0x002d1e01, 0x002d1e01, 0x004d3402, +0x004d3402, 0x002d1e01, 0x002d1e01, 0x002d1e01, 0x002d1e01, 0x002d1e01, 0x002d1e01, 0x002d1e01, 0x002d1e01, 0x002d1e01, 0x004d3402, +0x004d3402, 0x00d93b3b, 0x0050c878, 0x00ffd700, 0x00ffd700, 0x00ffd700, 0x00d93b3b, 0x00ffd700, 0x00ffd700, 0x0050c878, 0x004d3402, +0x004d3402, 0x00ffd700, 0x00ffd700, 0x00d93b3b, 0x0050c878, 0x00ffd700, 0x00d93b3b, 0x00ffd700, 0x00d93b3b, 0x00ffd700, 0x004d3402, +0x00d1d50b, 0x004d3402, 0x004d3402, 0x004d3402, 0x004d3402, 0x004d3402, 0x004d3402, 0x004d3402, 0x004d3402, 0x004d3402, 0x00d1d50b, +0x00d1d50b, 0x004d3402, 0x004d3402, 0x004d3402, 0x004d3402, 0x004d3402, 0x004d3402, 0x004d3402, 0x004d3402, 0x004d3402, 0x00d1d50b, +0x00d1d50b, 0x004d3402, 0x00d1d50b, 0x00d1d50b, 0x00d1d50b, 0x00d1d50b, 0x00d1d50b, 0x00d1d50b, 0x00d1d50b, 0x004d3402, 0x00d1d50b, +0x00d1d50b, 0x004d3402, 0x004d3402, 0x004d3402, 0x004d3402, 0x004d3402, 0x004d3402, 0x004d3402, 0x004d3402, 0x004d3402, 0x00d1d50b, +0x00d1d50b, 0x004d3402, 0x004d3402, 0x004d3402, 0x004d3402, 0x004d3402, 0x004d3402, 0x004d3402, 0x004d3402, 0x004d3402, 0x00d1d50b}; + +static int boulder[121] = {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff898989, 0xff898989, 0xff898989, 0xff898989, 0xff898989, 0x00000000, 0x00000000, +0x00000000, 0x00000000, 0xff898989, 0xff898989, 0xff898989, 0xff898989, 0xff898989, 0xff656565, 0xff898989, 0x00000000, 0x00000000, +0x00000000, 0xff898989, 0xff898989, 0xff898989, 0xff656565, 0xff898989, 0xff898989, 0xff656565, 0xff898989, 0xff898989, 0x00000000, +0x00000000, 0xff898989, 0xff898989, 0xff898989, 0xff898989, 0xff898989, 0xff898989, 0xff898989, 0xff898989, 0xff898989, 0x00000000, +0x00000000, 0xff898989, 0xff898989, 0xff898989, 0xff898989, 0xff898989, 0xff898989, 0xff898989, 0xff656565, 0xff898989, 0x00000000, +0xff898989, 0xff898989, 0xff898989, 0xff898989, 0xff656565, 0xff898989, 0xff898989, 0xff898989, 0xff898989, 0xff898989, 0x00000000, +0xff898989, 0xff898989, 0xff898989, 0xff656565, 0xff898989, 0xff898989, 0xff898989, 0xff898989, 0xff898989, 0xff898989, 0xff898989, +0xff656565, 0xff898989, 0xff656565, 0xff898989, 0xff898989, 0xff898989, 0xff656565, 0xff898989, 0xff898989, 0xff898989, 0xff898989, +0xff898989, 0xff898989, 0xff898989, 0xff898989, 0xff898989, 0xff898989, 0xff898989, 0xff656565, 0xff898989, 0xff656565, 0xff898989, +0xff898989, 0xff898989, 0xff898989, 0xff898989, 0xff898989, 0xff898989, 0xff898989, 0xff898989, 0xff898989, 0xff898989, 0xff898989, +0xff898989, 0xff898989, 0xff898989, 0xff898989, 0xff656565, 0xff898989, 0xff898989, 0xff898989, 0xff898989, 0xff898989, 0xff898989}; + +static int phat[121] = {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, +0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, +0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, +0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, +0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, +0x00000000, 0xffa3111a, 0x00000000, 0xffa3111a, 0x00000000, 0xffa3111a, 0x00000000, 0xffa3111a, 0x00000000, 0xffa3111a, 0x00000000, +0x00000000, 0xffa3111a, 0x00000000, 0xffa3111a, 0x00000000, 0xffa3111a, 0x00000000, 0xffa3111a, 0x00000000, 0xffa3111a, 0x00000000, +0x00000000, 0xffa3111a, 0xffa3111a, 0xffa3111a, 0xffa3111a, 0xffa3111a, 0xffa3111a, 0xffa3111a, 0xffa3111a, 0xffa3111a, 0x00000000, +0x00000000, 0xffa3111a, 0xffa3111a, 0xffa3111a, 0xffa3111a, 0xffa3111a, 0xffa3111a, 0xffa3111a, 0xffa3111a, 0xffa3111a, 0x00000000, +0x00000000, 0xffa3111a, 0xffa3111a, 0xffa3111a, 0xffa3111a, 0xffa3111a, 0xffa3111a, 0xffa3111a, 0xffa3111a, 0xffa3111a, 0x00000000, +0x00000000, 0xffa3111a, 0xffa3111a, 0xffa3111a, 0xffa3111a, 0xffa3111a, 0xffa3111a, 0xffa3111a, 0xffa3111a, 0xffa3111a, 0x00000000}; + +static int rolling[121] = {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, +0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, +0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffc5c5c5, 0xffc5c5c5, 0xffc5c5c5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, +0x00000000, 0x00000000, 0x00000000, 0xffc5c5c5, 0xffc5c5c5, 0xffc5c5c5, 0xffc5c5c5, 0xffc5c5c5, 0x00000000, 0x00000000, 0x00000000, +0x00000000, 0x00000000, 0xffc5c5c5, 0xffc5c5c5, 0xffc5c5c5, 0xffc5c5c5, 0xffc5c5c5, 0xffc5c5c5, 0xffc5c5c5, 0x00000000, 0x00000000, +0x00000000, 0x00000000, 0xffc5c5c5, 0xffc5c5c5, 0xffc5c5c5, 0xffc5c5c5, 0xffc5c5c5, 0xffc5c5c5, 0xffc5c5c5, 0x00000000, 0x00000000, +0x00000000, 0x00000000, 0xffc5c5c5, 0xffc5c5c5, 0xffc5c5c5, 0xffc5c5c5, 0xffc5c5c5, 0xffc5c5c5, 0xffc5c5c5, 0x00000000, 0x00000000, +0x00000000, 0x00000000, 0x00000000, 0xffc5c5c5, 0xffc5c5c5, 0xffc5c5c5, 0xffc5c5c5, 0xffc5c5c5, 0x00000000, 0x00000000, 0x00000000, +0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffc5c5c5, 0xffc5c5c5, 0xffc5c5c5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, +0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, +0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}; void draw_player(int u, int v, int key) { - uLCD.filled_rectangle(u, v, u+11, v+11, RED); + if(key == 0) + uLCD.BLIT(u, v, 11, 11, player); + else if(key == 1) + uLCD.BLIT(u, v, 11, 11, player_shield); + else if(key == 2) + uLCD.BLIT(u, v, 11, 11, player_sword); + else if(key == 3) + uLCD.BLIT(u, v, 11, 11, player_plate); + else if(key == 4) + uLCD.BLIT(u, v, 11, 11, player_running); } #define YELLOW 0xFFFF00 @@ -37,30 +238,113 @@ void draw_wall(int u, int v) { - uLCD.filled_rectangle(u, v, u+10, v+10, BROWN); + uLCD.BLIT(u, v, 11, 11, walls); } void draw_plant(int u, int v) { - uLCD.filled_rectangle(u, v, u+10, v+10, GREEN); + uLCD.BLIT(u, v, 11, 11, plant); +} + +void draw_startNPC(int u, int v) +{ + uLCD.BLIT(u, v, 11, 11, startNPC); +} + +void draw_cave(int u, int v) +{ + uLCD.BLIT(u, v, 11, 11, cave); +} + +void draw_swordInStone(int u, int v) +{ + uLCD.BLIT(u, v, 11, 11, swordInStone); +} + +void draw_elvarg(int u, int v) +{ + uLCD.BLIT(u, v, 11, 11, elvarg); } -void draw_upper_status() +void draw_gate(int u, int v) +{ + uLCD.BLIT(u, v, 11, 11, gate); +} + +void draw_treasure(int u, int v) +{ + uLCD.BLIT(u, v, 11, 11, treasure); +} + +void draw_boulder(int u, int v) +{ + uLCD.BLIT(u, v, 11, 11, boulder); +} + +void draw_phat(int u, int v) +{ + uLCD.BLIT(u, v, 11, 11, phat); +} + +void draw_rolling(int u, int v) +{ + uLCD.BLIT(u, v, 11, 11, rolling); +} + +void draw_upper_status(int x_pos, int y_pos) { // Draw bottom border of status bar uLCD.line(0, 9, 127, 9, GREEN); - // Add other status info drawing code here + uLCD.locate(0,0); + uLCD.printf("X:%-3iY:%-2i", x_pos, y_pos); } -void draw_lower_status() + +void draw_lower_status(int health, int phats) { // Draw top border of status bar uLCD.line(0, 118, 127, 118, GREEN); - // Add other status info drawing code here + uLCD.locate(0,15); + uLCD.printf("HP:%-3iPHats:%-2i/5", health, phats); } +void draw_menu(int omnipotent, int sword, int shield, int platebody, int key) +{ + uLCD.filled_rectangle(0, 10, 127, 117, 0xD3D3D3); + uLCD.textbackground_color(0xD3D3D3); + uLCD.color(0x000000); + uLCD.locate(0,2); + uLCD.printf("Menu: Exit w/ B3\n"); + uLCD.printf("----------------\n"); + uLCD.printf("Omnipotent:%i\n", omnipotent); + if(shield) + uLCD.printf("Goal:Defeat Elvarg"); + else if(platebody) + uLCD.printf("Goal:Return to NPC"); + uLCD.printf("Shield: %i\n", shield); + if(shield == 0) + uLCD.printf(" Talk to NPC\n"); + uLCD.printf("Sword: %i\n", sword); + if(sword == 0) + uLCD.printf(" Find Excalibur\n"); + uLCD.printf("Key: %i\n", key); + if(key == 0) + uLCD.printf(" Defeat Elvarg\n"); + uLCD.printf("Platebody: %i\n", platebody); + if(platebody == 0) + uLCD.printf(" Unlock Treasure\n"); + uLCD.textbackground_color(0x000000); + uLCD.color(GREEN); + GameInputs inputs = read_inputs(); + while(inputs.b3) + { + wait_ms(200); + inputs = read_inputs(); + } +} + void draw_border() { uLCD.filled_rectangle(0, 9, 127, 14, WHITE); // Top @@ -69,4 +353,52 @@ uLCD.filled_rectangle(124, 14, 127, 117, WHITE); // Right } +void draw_bad() +{ + uLCD.filled_rectangle(0, 0, 127, 127, 0xBB0A1E); + uLCD.textbackground_color(0xBB0A1E); + uLCD.color(0xFFFFFF); + uLCD.text_width(2); + uLCD.text_height(2); + uLCD.locate(0,2); + uLCD.printf("YOU DIED!"); + uLCD.text_width(1); + uLCD.text_height(1); + uLCD.locate(2,10); + uLCD.printf("Reset Mbed"); +} +void draw_good() +{ + uLCD.filled_rectangle(0, 0, 127, 127, 0x40E0D0); + uLCD.textbackground_color(0x40E0D0); + uLCD.color(0xFFFFFF); + uLCD.text_width(2); + uLCD.text_height(2); + uLCD.locate(0,2); + uLCD.printf("Quest\nCompleted\n!!!!!!!!!!!"); +} + +void draw_start() +{ + uLCD.filled_rectangle(0, 0, 127, 127, 0x808000); + uLCD.textbackground_color(0x808000); + uLCD.color(0xBB0A1E); + uLCD.text_width(3); + uLCD.text_height(3); + uLCD.locate(0,0); + uLCD.printf("Dragon\nSlayer"); + uLCD.text_width(1); + uLCD.text_height(1); + uLCD.locate(1,14); + uLCD.printf("Press any button"); + uLCD.textbackground_color(0x000000); + uLCD.color(GREEN); + GameInputs inputs = read_inputs(); + while(inputs.b1 && inputs.b2 && inputs.b3) + { + wait_ms(200); + inputs = read_inputs(); + } +} +
--- a/graphics.h Wed Apr 04 21:11:07 2018 +0000 +++ b/graphics.h Mon Apr 15 12:25:08 2019 +0000 @@ -29,17 +29,29 @@ void draw_nothing(int u, int v); void draw_wall(int u, int v); void draw_plant(int u, int v); - +void draw_startNPC(int u, int v); +void draw_cave(int u, int v); +void draw_swordInStone(int u, int v); +void draw_elvarg(int u, int v); +void draw_gate(int u, int v); +void draw_treasure(int u, int v); +void draw_boulder(int u, int v); +void draw_phat(int u, int v); +void draw_rolling(int u, int v); /** * Draw the upper status bar. */ -void draw_upper_status(); +void draw_upper_status(int x_pos, int y_pos); /** * Draw the lower status bar. */ -void draw_lower_status(); +void draw_lower_status(int health, int phats); +void draw_bad(); +void draw_good(); +void draw_start(); +void draw_menu(int omnipotent, int sword, int shield, int platebody, int key); /** * Draw the border for the map. */
--- a/hardware.cpp Wed Apr 04 21:11:07 2018 +0000 +++ b/hardware.cpp Mon Apr 15 12:25:08 2019 +0000 @@ -10,7 +10,7 @@ // Hardware initialization: Instantiate all the things! uLCD_4DGL uLCD(p9,p10,p11); // LCD Screen (tx, rx, reset) -//SDFileSystem sd(p5, p6, p7, p8, "sd"); // SD Card(mosi, miso, sck, cs) +SDFileSystem sd(p5, p6, p7, p8, "sd"); // SD Card(mosi, miso, sck, cs) Serial pc(USBTX,USBRX); // USB Console (tx, rx) MMA8452 acc(p28, p27, 100000); // Accelerometer (sda, sdc, rate) DigitalIn button1(p21); // Pushbuttons (pin) @@ -39,5 +39,13 @@ GameInputs read_inputs() { GameInputs in; + in.b1 = button1; + in.b2 = button2; + in.b3 = button3; + if(!acc.isXYZReady()) + { + wait(0.01); + } + acc.readXYZGravity(&in.ax, &in.ay, &in.az); return in; }
--- a/hash_table.cpp Wed Apr 04 21:11:07 2018 +0000 +++ b/hash_table.cpp Mon Apr 15 12:25:08 2019 +0000 @@ -1,6 +1,6 @@ /* - Student Name: - Date: + Student Name: Nikhil Patel + Date: 11-8-18 ======================= ECE 2035 Project 2-1: @@ -30,7 +30,7 @@ - "HashTableEntry myNewHashTableEntry;" The preceding underscore "_" simply provides a distinction between the names - of the actual struct defition and the "nicknames" that we use to initialize + of the actual struct definition and the "nicknames" that we use to initialize new structs. [See Hidden Definitions section for more information.] @@ -126,7 +126,11 @@ * @return The pointer to the hash table entry */ static HashTableEntry* createHashTableEntry(unsigned int key, void* value) { - + HashTableEntry* node = (HashTableEntry*)malloc(sizeof(HashTableEntry)); + node->value = value; + node->key = key; + node->next = NULL; + return node; } /** @@ -140,7 +144,15 @@ * @return The pointer to the hash table entry, or NULL if key does not exist */ static HashTableEntry* findItem(HashTable* hashTable, unsigned int key) { - + int bucketNum = hashTable->hash(key); + HashTableEntry* this_entry = hashTable->buckets[bucketNum]; + while(this_entry) { + if(this_entry->key == key) { + return this_entry; + } + this_entry = this_entry->next; + } + return NULL; } /**************************************************************************** @@ -167,7 +179,7 @@ newTable->num_buckets = numBuckets; newTable->buckets = (HashTableEntry**)malloc(numBuckets*sizeof(HashTableEntry*)); - // As the new buckets are empty, init each bucket as NULL. + // As the new buckets contain indeterminant values, init each bucket as NULL. unsigned int i; for (i=0; i<numBuckets; ++i) { newTable->buckets[i] = NULL; @@ -178,21 +190,109 @@ } void destroyHashTable(HashTable* hashTable) { - + unsigned int i = 0; //init counter + for(i=0; i<hashTable->num_buckets; ++i){ //loop through each bucket + HashTableEntry* iterator = hashTable->buckets[i]; //start at head of bucket + while(iterator){ //until reach end of linked list at bucket + HashTableEntry* tmp = iterator->next; //store the next node + free(iterator->value); //free the node's value + free(iterator); //free the node itself + iterator = tmp; //restore the next node + } + } + free(hashTable->buckets); //free the buckets + free(hashTable); //free the hash table itself } void* insertItem(HashTable* hashTable, unsigned int key, void* value) { - + HashTableEntry* this_entry = findItem(hashTable,key); //will return a non-NULL value if the key exists + if(this_entry){ //if key already exists + void* replacedVal = this_entry->value; //get the value being replaces + this_entry->value = value; //replace the original value + return replacedVal; //return the value that was replaced + } + else{ //if key doesn't already exist + HashTableEntry* newNode = createHashTableEntry(key,value); //create a new node + int bucketNum = hashTable->hash(key); //get the bucket num where it will be added + if(hashTable->buckets[bucketNum] == NULL){ //if the bucket is empty + hashTable->buckets[bucketNum] = newNode; //the head of the bucket is the new node + return NULL; //return NULL to show nothing was replaced + } + else{ //if the bucket already has a linked list started + HashTableEntry* iterator = hashTable->buckets[bucketNum]; //first node + while(iterator){ //until the end of the linked list + if(iterator->next == NULL){ //reached tail of list + iterator->next = newNode; //place new node at tail + return NULL; //return NULL to show nothing was replaced + } + iterator = iterator->next; //go on to the next node + } + } + } + return NULL; } void* getItem(HashTable* hashTable, unsigned int key) { - + int bucketNum = hashTable->hash(key); //get the bucket number of the item + HashTableEntry* this_entry = hashTable->buckets[bucketNum]; //get the head of the bucket + while(this_entry) { //loop through the bucket's linked list + if(this_entry->key == key) { //if the node's key matches to input + return this_entry->value; //return the matching value + } + this_entry = this_entry->next; //go on to next node + } + return NULL; //No node with such a key } void* removeItem(HashTable* hashTable, unsigned int key) { - + int bucketNum = hashTable->hash(key); //bucket number where item is + HashTableEntry* iterator = hashTable->buckets[bucketNum]; //head of bucket + HashTableEntry* this_entry = findItem(hashTable,key); //get address/NULL of item + if(this_entry == NULL) //key doesnt exist + return NULL; + else{ //key exists + void* val = this_entry->value; //store key's value address + if(iterator == this_entry) { //item is first in linked list + hashTable->buckets[bucketNum] = this_entry->next; //unlink first node from list + free(this_entry); //free the first node + return val; //return the value of node removed + } + else{ //item isn't the first in the linked list + while(iterator){ //iterate through the linked list + if(iterator->next->key == key){ //if next node has key + iterator->next = this_entry->next; //unlink it from the list + free(this_entry); //free it + return val; //return the value of node removed + } + iterator = iterator->next; //go on to next node + } + } + } + return NULL; } void deleteItem(HashTable* hashTable, unsigned int key) { - -} \ No newline at end of file + int bucketNum = hashTable->hash(key); //bucket where item is + HashTableEntry* iterator = hashTable->buckets[bucketNum]; //head of bucket + HashTableEntry* this_entry = findItem(hashTable,key); //get address/NULL of item + if(this_entry == NULL) //key doesnt exist + return; //do nothing + else{ //key exists + if(iterator == this_entry) { // item is first node of linked list + hashTable->buckets[bucketNum] = this_entry->next; //unlink first node from list + free(this_entry->value); //free the node's value + free(this_entry); //free the node + } + else{ //item isn't first node in list + while(iterator){ //iterate through list + if(iterator->next->key == key){ //if next node has key + iterator->next = this_entry->next; //unlink node from list + free(this_entry->value); //free node's value + free(this_entry); //free node + return; + } + iterator = iterator->next; //go to next node + } + } + } +}
--- a/hash_table.h Wed Apr 04 21:11:07 2018 +0000 +++ b/hash_table.h Mon Apr 15 12:25:08 2019 +0000 @@ -124,4 +124,4 @@ */ void deleteItem(HashTable* myHashTable, unsigned int key); -#endif \ No newline at end of file +#endif
--- a/main.cpp Wed Apr 04 21:11:07 2018 +0000 +++ b/main.cpp Mon Apr 15 12:25:08 2019 +0000 @@ -5,11 +5,23 @@ #include "graphics.h" #include "speech.h" +int omnipotent = 0; +int mapToggle = 0; +int finished = 0; +int walk = 0; + // Functions in this file int get_action (GameInputs inputs); int update_game (int action); void draw_game (int init); void init_main_map (); +void init_second_map(); +int go_up(int x, int y, int i); +int go_down(int x, int y, int i); +int go_right(int x, int y, int i); +int go_left(int x, int y, int i); +int interact(int x, int y); +int NPC_move(int x, int y); int main (); /** @@ -20,6 +32,12 @@ int x,y; // Current locations int px, py; // Previous locations int has_key; + int omnipotent; + int has_sword; + int has_shield; + int has_platebody; + int health; + int num_phats; } Player; /** @@ -29,13 +47,124 @@ #define NO_ACTION 0 #define ACTION_BUTTON 1 #define MENU_BUTTON 2 +#define OMNIPOTENT 7 #define GO_LEFT 3 +#define GO_LEFT2 10 #define GO_RIGHT 4 +#define GO_RIGHT2 11 #define GO_UP 5 +#define GO_UP2 12 #define GO_DOWN 6 +#define GO_DOWN2 13 +#define BAD_END 8 +#define GOOD_END 9 + +char *questStartLine1 = "Wow a knight!what"; +char *questStartLine2 = "perfect timing!"; +char *questStartLine3 = "I beg you,please"; +char *questStartLine4 = "defeat the evil"; +char *questStartLine5 = "dragon Elvarg!"; +char *questStartLine6 = "He resides in a"; +char *questStartLine7 = "cave to the NEast"; +char *questStartLine8 = "You'll need an"; +char *questStartLine9 = "antifire shield"; +char *questStartLine10 = "and Excalibur!"; +char *questStartLine11 = "I hear Excalibur"; +char *questStartLine12 = "can be found in"; +char *questStartLine13 = "the same cave."; +char *questStartLine14 = "It'll be embedded"; +char *questStartLine15 = "in a stone there."; +char *questStartLine16 = "Take my antifire"; +char *questStartLine17 = "shield, man."; +char *questStartLine18 = "If you do defeat"; +char *questStartLine19 = "Elvarg, take"; +char *questStartLine20 = "the key he drops."; +char *questStartLine21 = "It unlocks his"; +char *questStartLine22 = "treasure room"; +char *questStartLine23 = "to the south."; +char *questStartLine24 = "Good luck!"; +char *questStartLine25 = "Come back when"; +char *questStartLine26 = "you're done!"; + +char *questHasShield1 = "Go to the cave,"; +char *questHasShield2 = "find Excalibur,"; +char *questHasShield3 = "and defeat Elvarg"; + +char *questHasSword1 = "Go fight Evlarg!"; + +char *questHasPlatebody1 = "Thank you!!!!"; +char *questHasPlatebody2 = "You have helped"; +char *questHasPlatebody3 = "me out.I am"; +char *questHasPlatebody4 = "very grateful!"; + +char *findSword1 = "You pull and"; +char *findSword2 = "wield Excalibur."; + +char *elvarg1 = "You approach"; +char *elvarg2 = "Elvarg attacks..."; +char *elvarg3a1 = "With no shield,"; +char *elvarg3a2 = "you are burnt to"; +char *elvarg3a3 = "a crisp.(-10 HP)"; +char *elvarg3b1 = "You have no sword"; +char *elvarg3b2 = "Your punches have"; +char *elvarg3b3 = "no effect so you"; +char *elvarg3b4 = "are badly wounded"; +char *elvarg3b5 = "(-9 HP)"; +char *elvarg3c1 = "Using Excalibur &"; +char *elvarg3c2 = "the shield you"; +char *elvarg3c3 = "defeat Elvarg w/"; +char *elvarg3c4 = "only minor wounds"; +char *elvarg3c5 = "(-3 HP).He drops"; +char *elvarg3c6 = "the key to his"; +char *elvarg3c7 = "treasure room!"; + + int get_action(GameInputs inputs) { - return NO_ACTION; + if(Player.health <= 0) + { + return BAD_END; + } + else if(finished) + { + return GOOD_END; + } + else if(!inputs.b1){ + return ACTION_BUTTON; + } + else if(!inputs.b2){ + return OMNIPOTENT; + } + else if(!inputs.b3){ + return MENU_BUTTON; + } + else if(inputs.ax >= .2){ + if(inputs.ax >= .4) + return GO_LEFT2; + else + return GO_LEFT; + } + else if(inputs.ax <= -.3){ + if(inputs.ax <= -.5) + return GO_RIGHT2; + else + return GO_RIGHT; + } + else if(inputs.ay >= .3){ + if(inputs.ay >= .5) + return GO_DOWN2; + else + return GO_DOWN; + } + else if(inputs.ay <= -.2){ + if(inputs.ay <= -.4) + return GO_UP2; + else + return GO_UP; + } + else{ + return NO_ACTION; + } } /** @@ -50,6 +179,7 @@ #define NO_RESULT 0 #define GAME_OVER 1 #define FULL_DRAW 2 +#define RUN 3 int update_game(int action) { // Save player previous location before updating @@ -60,17 +190,356 @@ // You can define functions like "go_up()" that get called for each case. switch(action) { - case GO_UP: break; - case GO_LEFT: break; - case GO_DOWN: break; - case GO_RIGHT: break; - case ACTION_BUTTON: break; - case MENU_BUTTON: break; - default: break; + case GO_UP: + if(go_up(Player.x, Player.y, 0)) + return FULL_DRAW; + break; + case GO_UP2: + if(go_up(Player.x, Player.y,1)) + return RUN; + break; + case GO_LEFT: + if(go_left(Player.x, Player.y, 0)) + return FULL_DRAW; + break; + case GO_LEFT2: + if(go_left(Player.x, Player.y, 1)) + return RUN; + break; + case GO_DOWN: + if(go_down(Player.x, Player.y, 0)) + return FULL_DRAW; + break; + case GO_DOWN2: + if(go_down(Player.x, Player.y, 1)) + return RUN; + break; + case GO_RIGHT: + if(go_right(Player.x, Player.y, 0)) + return FULL_DRAW; + break; + case GO_RIGHT2: + if(go_right(Player.x, Player.y, 1)) + return RUN; + break; + case ACTION_BUTTON: + if(interact(Player.x, Player.y)) + return FULL_DRAW; + break; + case OMNIPOTENT: //toggle omnipotent mode + Player.omnipotent = !omnipotent; + omnipotent = !omnipotent; + break; + case MENU_BUTTON: //open menu + draw_menu(Player.omnipotent, Player.has_sword, Player.has_shield, Player.has_platebody, Player.has_key); + return FULL_DRAW; + case BAD_END: + return BAD_END; + case GOOD_END: + return GOOD_END; + default: + return NPC_move(Player.x, Player.y); } return NO_RESULT; } +//Functions to move player +int go_up(int x, int y, int i) +{ + MapItem *item = get_north(x, y); + MapItem *item2 = get_north(x,y-1); + if((item->walkable && item->type != PLANT2) || Player.omnipotent) + { + if((i && item2->walkable && item2->type != PLANT2) || Player.omnipotent) + { + Player.y = Player.y - 2; + return RUN; + } + Player.y--; + return 1; + } + else if(item->type == PLANT2) + { + Player.health--; + speaker.period(1.0/150.0); // 500hz period + speaker =0.25; //25% duty cycle - mid range volume + wait(.02); + speaker=0.0; // turn off audio + wait(0.5); + return 1; + } + else if(item->type == ROLLING && item2 == NULL) + { + map_erase(x,y-1); + add_rolling(x,y-2); + Player.y--; + return 1; + } + return 0; +} + +int go_down(int x, int y, int i) +{ + MapItem *item = get_south(x, y); + MapItem *item2 = get_south(x, y+1); + if((item->walkable && item->type != PLANT2) || Player.omnipotent) + { + if((i && item2->walkable && item2->type != PLANT2) || Player.omnipotent) + { + Player.y = Player.y + 2; + return RUN; + } + Player.y++; + return 1; + } + else if(item->type == PLANT2) + { + Player.health--; + speaker.period(1.0/150.0); // 500hz period + speaker =0.25; //25% duty cycle - mid range volume + wait(.02); + speaker=0.0; // turn off audio + wait(0.5); + return 1; + } + else if(item->type == ROLLING && item2 == NULL) + { + map_erase(x,y+1); + add_rolling(x,y+2); + Player.y++; + return 1; + } + return 0; +} + +int go_left(int x, int y, int i) +{ + MapItem *item = get_west(x, y); + MapItem *item2 = get_west(x-1,y); + if((item->walkable && item->type != PLANT2) || Player.omnipotent) + { + if((i && item2->walkable && item2->type != PLANT2) || Player.omnipotent) + { + Player.x = Player.x - 2; + return RUN; + } + Player.x--; + return 1; + } + else if(item->type == PLANT2) + { + Player.health--; + speaker.period(1.0/150.0); // 500hz period + speaker =0.25; //25% duty cycle - mid range volume + wait(.02); + speaker=0.0; // turn off audio + wait(0.5); + return 1; + } + else if(item->type == ROLLING && item2 == NULL) + { + map_erase(x-1,y); + add_rolling(x-2,y); + Player.x--; + return 1; + } + return 0; +} + +int go_right(int x, int y, int i) +{ + MapItem *item = get_east(x, y); + MapItem *item2 = get_east(x+1, y); + if((item->walkable && item->type != PLANT2) || Player.omnipotent) + { + if((i && item2->walkable && item2->type != PLANT2) || Player.omnipotent) + { + Player.x = Player.x + 2; + return RUN; + } + Player.x++; + return 1; + } + else if(item->type == PLANT2) + { + Player.health--; + speaker.period(1.0/150.0); // 500hz period + speaker =0.25; //25% duty cycle - mid range volume + wait(.02); + speaker=0.0; // turn off audio + wait(0.5); + return 1; + } + else if(item->type == ROLLING && item2 == NULL) + { + map_erase(x+1,y); + add_rolling(x+2,y); + Player.x++; + return 1; + } + return 0; +} + +int interact(int x, int y) +{ + MapItem *north = get_north(x,y); + MapItem *south = get_south(x,y); + MapItem *east = get_east(x,y); + MapItem *west = get_west(x,y); + if(north->type == STARTNPC || south->type == STARTNPC || east->type == STARTNPC || west->type == STARTNPC) + { + if(Player.has_platebody) + { + speech(questHasPlatebody1, questHasPlatebody2, questHasPlatebody3, questHasPlatebody4); + finished = 1; + return 1; + } + else if(!Player.has_platebody && Player.has_key) + { + speech("Search the", "treasure room", "first! Then", "come talk"); + return 1; + } + else if(Player.has_sword) + { + speech(questHasSword1, "", "", ""); + return 1; + } + else if(Player.has_shield ) + { + speech(questHasShield1, questHasShield2, questHasShield3, ""); + return 1; + } + else + { + speech(questStartLine1, questStartLine2, questStartLine3, questStartLine4); + speech(questStartLine5, questStartLine6, questStartLine7, questStartLine8); + speech(questStartLine9, questStartLine10, questStartLine11, questStartLine12); + speech(questStartLine13, questStartLine14, questStartLine15, questStartLine16); + speech(questStartLine17, questStartLine18, questStartLine19, questStartLine20); + speech(questStartLine21, questStartLine22, questStartLine23, questStartLine24); + speech(questStartLine25, questStartLine26,"",""); + Player.has_shield = 1; + return 1; + } + } + else if(north->type == CAVE || south->type == CAVE || east->type == CAVE || west->type == CAVE) + { + if(mapToggle == 0) + { + mapToggle = !mapToggle; + set_active_map(1); + Player.x = 5; + Player.y = 5; + } + else + { + mapToggle = !mapToggle; + set_active_map(0); + Player.x = 39; + Player.y = 4; + } + return 1; + } + else if(north->type == SWORDINSTONE || south->type == SWORDINSTONE || east->type == SWORDINSTONE || west->type == SWORDINSTONE) + { + if(Player.has_shield) + { + Player.has_sword = 1; + speech(findSword1, findSword2, "", ""); + map_erase(15,15); + draw_plant(15,15); + } + else + { + speech("You should", "talk to the man", "where you started", "first"); + } + return 1; + } + else if(north->type == ELVARG || south->type == ELVARG || east->type == ELVARG || west->type == ELVARG) + { + speech(elvarg1, elvarg2, "", ""); + if(!Player.has_shield) + { + speech(elvarg3a1, elvarg3a2, elvarg3a3, ""); + Player.health = Player.health - 10; + return 1; + } + else if(!Player.has_sword) + { + speech(elvarg3b1, elvarg3b2, elvarg3b3, elvarg3b4); + speech(elvarg3b5, "", "", ""); + Player.health = Player.health - 9; + return 1; + } + else + { + Player.has_key = 1; + speech(elvarg3c1, elvarg3c2, elvarg3c3, elvarg3c4); + speech(elvarg3c5, elvarg3c6, elvarg3c7, ""); + map_erase(10,10); + Player.health = Player.health - 3; + return 1; + } + } + else if(north->type == GATE || south->type == GATE || east->type == GATE || west->type == GATE) + { + if(Player.has_key) + { + speech("You unlock the", "gate with the key", "", ""); + map_erase(10,45); + return 1; + } + else + { + speech("Requires Elvarg's", "key to open", "", ""); + return 1; + } + } + else if(north->type == TREASURE || south->type == TREASURE || east->type == TREASURE || west->type == TREASURE) + { + Player.has_platebody = 1; + speech("You are amazed", "to find a", "legendary rune", "platebody."); + speech("you equip the", "legendary armor.", "Time to return", "to that weird"); + speech("guy. His request", "has been", "fulfilled.", ""); + return 1; + } + else if(north->type == PHAT || south->type == PHAT || east->type == PHAT || west->type == PHAT) + { + if(Player.num_phats == 0) + speech("find all 5", "hidden party", "hats!", ""); + Player.num_phats++; + if(Player.num_phats == 5) + { + speech("you found all", "5 party hats!", "You are very", "special!"); + } + if(north->type == PHAT) + map_erase(x, y-1); + if(south->type == PHAT) + map_erase(x, y+1); + if(east->type == PHAT) + map_erase(x+1, y); + if(west->type == PHAT) + map_erase(x-1, y); + return 1; + } + + return 0; +} + +int NPC_move(int x, int y) +{ + if(!((Player.x == (7+!walk)) && (Player.y == 7)) && (map_width() == 50)) + { + wait_ms(200); + map_erase(7+walk, 7); + walk = !walk; + add_startNPC(7+walk,7); + wait_ms(200); + return FULL_DRAW; + } + return 0; +} + /** * Entry point for frame drawing. This should be called once per iteration of * the game loop. This draws all tiles on the screen, followed by the status @@ -78,7 +547,24 @@ * drawing tiles that have changed from the previous frame. */ void draw_game(int init) -{ +{ + if(init == BAD_END) + { + speaker.period(1.0/150.0); // 500hz period + speaker =0.25; //25% duty cycle - mid range volume + wait(.5); + speaker=0.0; // turn off audio + wait(0.5); + draw_bad(); + wait(10000); + } + if(init == GOOD_END) + { + draw_good(); + wait(10000); + } + + // Draw game border first if(init) draw_border(); @@ -103,9 +589,21 @@ // Figure out what to draw DrawFunc draw = NULL; - if (init && i == 0 && j == 0) // Only draw the player on init + if (init && i == 0 && j == 0 && get_here(Player.x, Player.y)->walkable != 2) // Only draw the player on init { - draw_player(u, v, Player.has_key); + if(init == RUN) + { + draw_player(u,v,4); + wait_ms(100); + } + if(Player.has_platebody) + draw_player(u, v, 3); + else if(Player.has_sword) + draw_player(u, v, 2); + else if(Player.has_shield) + draw_player(u ,v, 1); + else + draw_player(u ,v, 0); continue; } else if (x >= 0 && y >= 0 && x < map_width() && y < map_height()) // Current (i,j) in the map @@ -135,8 +633,8 @@ } // Draw status bars - draw_upper_status(); - draw_lower_status(); + draw_upper_status(Player.x,Player.y); + draw_lower_status(Player.health, Player.num_phats); } @@ -161,6 +659,59 @@ add_wall(map_width()-1, 0, VERTICAL, map_height()); pc.printf("Walls done!\r\n"); + //draw in treasure room + add_wall(6, 45, VERTICAL, 4); + add_wall(7, 45, HORIZONTAL, 3); + add_gate(10,45); + add_wall(11, 45, HORIZONTAL, 3); + add_wall(14, 45, VERTICAL, 4); + + + add_startNPC(7,7); + pc.printf("NPCs!\r\n"); + + add_boulder(3,3); + + add_cave(40,4); + pc.printf("Cave!\r\n"); + add_rolling(39,4); + add_rolling(41,4); + add_rolling(40,5); + add_rolling(40,3); + + add_treasure(10,47); + pc.printf("Treasure!\r\n"); + + add_phat(45,45); + add_phat(25,25); + add_phat(10,48); + + print_map(); +} + +void init_second_map() +{ + // "Random" plants + Map* map = set_active_map(1); + for(int i = map_width() + 3; i < map_area(); i += 39) + { + add_plant2(i % map_width(), i / map_width()); + } + pc.printf("plants\r\n"); + + pc.printf("Adding walls!\r\n"); + add_wall(0, 0, HORIZONTAL, map_width()); + add_wall(0, map_height()-1, HORIZONTAL, map_width()); + add_wall(0, 0, VERTICAL, map_height()); + add_wall(map_width()-1, 0, VERTICAL, map_height()); + pc.printf("Walls done!\r\n"); + + //add sprites + add_cave(4,5); + add_elvarg(10,10); + add_swordInStone(15,15); + add_phat(3,10); + add_phat(10,17); print_map(); } @@ -175,17 +726,31 @@ // First things first: initialize hardware ASSERT_P(hardware_init() == ERROR_NONE, "Hardware init failed!"); + draw_start(); + // Initialize the maps maps_init(); + init_second_map(); init_main_map(); // Initialize game state set_active_map(0); Player.x = Player.y = 5; + Player.has_key = 0; + Player.has_sword = 0; + Player.has_shield = 0; + Player.has_platebody = 0; + Player.health = 10; // Initial drawing + uLCD.filled_rectangle(0, 0, 127, 8, BLACK); + uLCD.filled_rectangle(0, 119, 127, 127, BLACK); draw_game(true); - + + // Variables + GameInputs in; + int action; + int draw; // Main game loop while(1) { @@ -193,11 +758,15 @@ Timer t; t.start(); // Actuall do the game update: - // 1. Read inputs - // 2. Determine action (get_action) + // 1. Read inputs + in = read_inputs(); + // 2. Determine action (get_action) + action = get_action(in); // 3. Update game (update_game) + draw = update_game(action); // 3b. Check for game over // 4. Draw frame (draw_game) + draw_game(draw); // 5. Frame delay t.stop();
--- a/map.cpp Wed Apr 04 21:11:07 2018 +0000 +++ b/map.cpp Mon Apr 15 12:25:08 2019 +0000 @@ -17,7 +17,7 @@ * This is a global variable, but can only be access from this file because it * is static. */ -static Map map; +static Map map[NUM_MAPS]; static int active_map; /** @@ -25,8 +25,8 @@ * key information (x, y) into a one-dimensional unsigned integer. * This function should uniquely map (x,y) onto the space of unsigned integers. */ -static unsigned XY_KEY(int X, int Y) { - // TODO: Fix me! +static unsigned XY_KEY(int X, int Y, int size) { + return (X+size*Y); //linearize a 2d index } /** @@ -34,34 +34,43 @@ * unsigned key (the output of XY_KEY) and turns it into a hash value (some * small non-negative integer). */ -unsigned map_hash(unsigned key) +unsigned map_hash1(unsigned key) { - // TODO: Fix me! + return key%NUM_BUCKETS1; +} + +unsigned map_hash2(unsigned key) +{ + return key%NUM_BUCKETS2; } void maps_init() { - // TODO: Implement! - // Initialize hash table - // Set width & height + map[0].items = createHashTable(map_hash1, NUM_BUCKETS1); + map[0].h = 50; + map[0].w = 50; + map[1].items = createHashTable(map_hash2, NUM_BUCKETS2); + map[1].h = 20; + map[1].w = 20; } Map* get_active_map() { // There's only one map - return ↦ + return &map[active_map]; } Map* set_active_map(int m) { active_map = m; - return ↦ + return &map[active_map]; } + void print_map() { // As you add more types, you'll need to add more items to this array. - char lookup[] = {'W', 'P'}; + char lookup[] = {'W', 'P', 'N'}; for(int y = 0; y < map_height(); y++) { for (int x = 0; x < map_width(); x++) @@ -76,39 +85,48 @@ int map_width() { + return map[active_map].w; } int map_height() { + return map[active_map].h; } int map_area() { + return map[active_map].h * map[active_map].w; } MapItem* get_north(int x, int y) { + return (MapItem*)getItem(map[active_map].items, XY_KEY(x,y-1,map_height())); } MapItem* get_south(int x, int y) { + return (MapItem*)getItem(map[active_map].items, XY_KEY(x,y+1,map_height())); } MapItem* get_east(int x, int y) { + return (MapItem*)getItem(map[active_map].items, XY_KEY(x+1,y,map_height())); } MapItem* get_west(int x, int y) { + return (MapItem*)getItem(map[active_map].items, XY_KEY(x-1,y,map_height())); } MapItem* get_here(int x, int y) { + return (MapItem*)getItem(map[active_map].items, XY_KEY(x,y, map_height())); } void map_erase(int x, int y) { + deleteItem(map[active_map].items, XY_KEY(x,y,map_height())); } void add_wall(int x, int y, int dir, int len) @@ -120,7 +138,7 @@ w1->draw = draw_wall; w1->walkable = false; w1->data = NULL; - unsigned key = (dir == HORIZONTAL) ? XY_KEY(x+i, y) : XY_KEY(x, y+i); + unsigned key = (dir == HORIZONTAL) ? XY_KEY(x+i, y, map_height()) : XY_KEY(x, y+i, map_height()); void* val = insertItem(get_active_map()->items, key, w1); if (val) free(val); // If something is already there, free it } @@ -133,6 +151,116 @@ w1->draw = draw_plant; w1->walkable = true; w1->data = NULL; - void* val = insertItem(get_active_map()->items, XY_KEY(x, y), w1); + void* val = insertItem(get_active_map()->items, XY_KEY(x, y, map_height()), w1); + if (val) free(val); // If something is already there, free it +} + +void add_plant2(int x, int y) +{ + MapItem* w1 = (MapItem*) malloc(sizeof(MapItem)); + w1->type = PLANT2; + w1->draw = draw_plant; + w1->walkable = true; + w1->data = NULL; + void* val = insertItem(get_active_map()->items, XY_KEY(x, y, map_height()), w1); + if (val) free(val); // If something is already there, free it +} + +void add_startNPC(int x, int y) +{ + MapItem* w1 = (MapItem*) malloc(sizeof(MapItem)); + w1->type = STARTNPC; + w1->draw = draw_startNPC; + w1->walkable = false; + w1->data = NULL; + void* val = insertItem(get_active_map()->items, XY_KEY(x, y,map_height()), w1); + if (val) free(val); // If something is already there, free it +} + +void add_swordInStone(int x, int y) +{ + MapItem* w1 = (MapItem*) malloc(sizeof(MapItem)); + w1->type = SWORDINSTONE; + w1->draw = draw_swordInStone; + w1->walkable = false; + w1->data = NULL; + void* val = insertItem(get_active_map()->items, XY_KEY(x, y, map_height()), w1); + if (val) free(val); // If something is already there, free it +} + +void add_elvarg(int x, int y) +{ + MapItem* w1 = (MapItem*) malloc(sizeof(MapItem)); + w1->type = ELVARG; + w1->draw = draw_elvarg; + w1->walkable = false; + w1->data = NULL; + void* val = insertItem(get_active_map()->items, XY_KEY(x, y, map_height()), w1); + if (val) free(val); // If something is already there, free it +} + +void add_cave(int x, int y) +{ + MapItem* w1 = (MapItem*) malloc(sizeof(MapItem)); + w1->type = CAVE; + w1->draw = draw_cave; + w1->walkable = false; + w1->data = NULL; + void* val = insertItem(get_active_map()->items, XY_KEY(x, y, map_height()), w1); + if (val) free(val); // If something is already there, free it +} + +void add_gate(int x, int y) +{ + MapItem* w1 = (MapItem*) malloc(sizeof(MapItem)); + w1->type = GATE; + w1->draw = draw_gate; + w1->walkable = false; + w1->data = NULL; + void* val = insertItem(get_active_map()->items, XY_KEY(x, y, map_height()), w1); + if (val) free(val); // If something is already there, free it +} + +void add_treasure(int x, int y) +{ + MapItem* w1 = (MapItem*) malloc(sizeof(MapItem)); + w1->type = TREASURE; + w1->draw = draw_treasure; + w1->walkable = false; + w1->data = NULL; + void* val = insertItem(get_active_map()->items, XY_KEY(x, y, map_height()), w1); + if (val) free(val); // If something is already there, free it +} + +void add_boulder(int x, int y) +{ + MapItem* w1 = (MapItem*) malloc(sizeof(MapItem)); + w1->type = BOULDER; + w1->draw = draw_boulder; + w1->walkable = 2; + w1->data = NULL; + void* val = insertItem(get_active_map()->items, XY_KEY(x, y, map_height()), w1); + if (val) free(val); // If something is already there, free it +} + +void add_phat(int x, int y) +{ + MapItem* w1 = (MapItem*) malloc(sizeof(MapItem)); + w1->type = PHAT; + w1->draw = draw_phat; + w1->walkable = false; + w1->data = NULL; + void* val = insertItem(get_active_map()->items, XY_KEY(x, y, map_height()), w1); + if (val) free(val); // If something is already there, free it +} + +void add_rolling(int x, int y) +{ + MapItem* w1 = (MapItem*) malloc(sizeof(MapItem)); + w1->type = ROLLING; + w1->draw = draw_rolling; + w1->walkable = false; + w1->data = NULL; + void* val = insertItem(get_active_map()->items, XY_KEY(x, y, map_height()), w1); if (val) free(val); // If something is already there, free it } \ No newline at end of file
--- a/map.h Wed Apr 04 21:11:07 2018 +0000 +++ b/map.h Mon Apr 15 12:25:08 2019 +0000 @@ -53,8 +53,18 @@ // MapItem types // Define more of these! -#define WALL 0 -#define PLANT 1 +#define WALL 0 +#define PLANT 1 +#define STARTNPC 2 +#define SWORDINSTONE 3 +#define ELVARG 4 +#define CAVE 5 +#define PLANT2 6 +#define GATE 7 +#define TREASURE 8 +#define BOULDER 9 +#define PHAT 10 +#define ROLLING 11 /** * Initializes the internal structures for all maps. This does not populate @@ -150,5 +160,15 @@ * before adding the plant. */ void add_plant(int x, int y); +void add_plant2(int x, int y); //trap plant +void add_startNPC(int x, int y); +void add_swordInStone(int x, int y); +void add_elvarg(int x, int y); +void add_cave(int x, int y); +void add_gate(int x, int y); +void add_treasure(int x, int y); +void add_boulder(int x, int y); +void add_phat(int x, int y); +void add_rolling(int x, int y); #endif //MAP_H \ No newline at end of file
--- a/speech.cpp Wed Apr 04 21:11:07 2018 +0000 +++ b/speech.cpp Mon Apr 15 12:25:08 2019 +0000 @@ -29,25 +29,78 @@ void draw_speech_bubble() { + //draw speech bubble borders + uLCD.line(0, 114, 127, 114, GREEN); // Bottom + uLCD.line(0, 70, 127, 70, GREEN); // Top + uLCD.line(0, 71, 0, 113, GREEN); // Left + uLCD.line(127, 71, 127, 113, GREEN); // Right + + //fill speech bubble borders + uLCD.filled_rectangle(1, 71, 126, 113, 5); } void erase_speech_bubble() { + //restore original color at speech bubble borders + uLCD.line(0, 114, 127, 114, WHITE); // Bottom + uLCD.line(0, 94, 127, 94, BLACK); // Top + uLCD.line(0, 95, 0, 113, WHITE); // Left + uLCD.line(127, 95, 127, 113, WHITE); // Right + + uLCD.filled_rectangle(1, 95, 126, 113, BLACK); + } void draw_speech_line(const char* line, int which) { + if(which == TOP) + { + uLCD.locate(1,9); + uLCD.printf(line); + } + else if(which == BOTTOM) + { + uLCD.locate(1,10); + uLCD.printf(line); + } + else if(which == 3) + { + uLCD.locate(1,11); + uLCD.printf(line); + } + else + { + uLCD.locate(1,12); + uLCD.printf(line); + } + } void speech_bubble_wait() { + GameInputs inputs; + inputs = read_inputs(); + int blink = 1; + while(inputs.b1) + { + blink = !blink; + wait_ms(200); + if(blink) + uLCD.filled_circle(123, 114, 3, GREEN); + else + uLCD.filled_circle(123, 114, 3, BLACK); + inputs = read_inputs(); + + } } -void speech(const char* line1, const char* line2) +void speech(const char* line1, const char* line2, const char* line3, const char* line4) { draw_speech_bubble(); draw_speech_line(line1, TOP); draw_speech_line(line2, BOTTOM); + draw_speech_line(line3, 3); + draw_speech_line(line4, 4); speech_bubble_wait(); erase_speech_bubble(); }
--- a/speech.h Wed Apr 04 21:11:07 2018 +0000 +++ b/speech.h Mon Apr 15 12:25:08 2019 +0000 @@ -4,7 +4,7 @@ /** * Display a speech bubble. */ -void speech(const char* line1, const char* line2); +void speech(const char* line1, const char* line2, const char* line3, const char* line4); /** * Display a long speech bubble (more than 2 lines).