Sprite control demo for the Gameduino

Committer:
TheChrisyd
Date:
Fri Dec 21 14:15:01 2012 +0000
Revision:
0:572558ddc4fe
working version

Who changed what in which revision?

UserRevisionLine numberNew contents of line
TheChrisyd 0:572558ddc4fe 1 #include "mbed.h"
TheChrisyd 0:572558ddc4fe 2 #include "GD.h"
TheChrisyd 0:572558ddc4fe 3 #include "arduino.h"
TheChrisyd 0:572558ddc4fe 4
TheChrisyd 0:572558ddc4fe 5
TheChrisyd 0:572558ddc4fe 6 #include "pickups2.h"
TheChrisyd 0:572558ddc4fe 7 #include "sprites256.h"
TheChrisyd 0:572558ddc4fe 8 #include "shield.h"
TheChrisyd 0:572558ddc4fe 9
TheChrisyd 0:572558ddc4fe 10 GDClass GD(ARD_MOSI, ARD_MISO, ARD_SCK, ARD_D9, USBTX, USBRX) ;
TheChrisyd 0:572558ddc4fe 11
TheChrisyd 0:572558ddc4fe 12 struct sprite {
TheChrisyd 0:572558ddc4fe 13 int x;
TheChrisyd 0:572558ddc4fe 14 int y;
TheChrisyd 0:572558ddc4fe 15 int vx, vy;
TheChrisyd 0:572558ddc4fe 16 } sprites[256];
TheChrisyd 0:572558ddc4fe 17
TheChrisyd 0:572558ddc4fe 18 void plot() {
TheChrisyd 0:572558ddc4fe 19 int i;
TheChrisyd 0:572558ddc4fe 20 for (i = 0; i < 256; i++) {
TheChrisyd 0:572558ddc4fe 21 GD.sprite(i, sprites[i].x >> 4, sprites[i].y >> 4, i % 47, 0, 0);
TheChrisyd 0:572558ddc4fe 22 }
TheChrisyd 0:572558ddc4fe 23 }
TheChrisyd 0:572558ddc4fe 24
TheChrisyd 0:572558ddc4fe 25 #define LWALL (0 << 4)
TheChrisyd 0:572558ddc4fe 26 #define RWALL (384 << 4)
TheChrisyd 0:572558ddc4fe 27 #define TWALL (0 << 4)
TheChrisyd 0:572558ddc4fe 28 #define BWALL (284 << 4)
TheChrisyd 0:572558ddc4fe 29
TheChrisyd 0:572558ddc4fe 30 void move() {
TheChrisyd 0:572558ddc4fe 31 int i;
TheChrisyd 0:572558ddc4fe 32 sprite *ps;
TheChrisyd 0:572558ddc4fe 33
TheChrisyd 0:572558ddc4fe 34 for (i = 256, ps = sprites; i--; ps++) {
TheChrisyd 0:572558ddc4fe 35 if ((ps->x <= LWALL)) {
TheChrisyd 0:572558ddc4fe 36 ps->x = LWALL;
TheChrisyd 0:572558ddc4fe 37 ps->vx = -ps->vx;
TheChrisyd 0:572558ddc4fe 38 }
TheChrisyd 0:572558ddc4fe 39 if ((ps->x >= RWALL)) {
TheChrisyd 0:572558ddc4fe 40 ps->x = RWALL;
TheChrisyd 0:572558ddc4fe 41 ps->vx = -ps->vx;
TheChrisyd 0:572558ddc4fe 42 }
TheChrisyd 0:572558ddc4fe 43 if ((ps->y <= TWALL)) {
TheChrisyd 0:572558ddc4fe 44 ps->y = TWALL;
TheChrisyd 0:572558ddc4fe 45 ps->vy = -ps->vy;
TheChrisyd 0:572558ddc4fe 46 }
TheChrisyd 0:572558ddc4fe 47 if ((ps->y >= BWALL)) {
TheChrisyd 0:572558ddc4fe 48 ps->y = BWALL;
TheChrisyd 0:572558ddc4fe 49 ps->vy = -ps->vy;
TheChrisyd 0:572558ddc4fe 50 }
TheChrisyd 0:572558ddc4fe 51 ps->x += ps->vx;
TheChrisyd 0:572558ddc4fe 52 ps->y += ps->vy;
TheChrisyd 0:572558ddc4fe 53 }
TheChrisyd 0:572558ddc4fe 54 }
TheChrisyd 0:572558ddc4fe 55
TheChrisyd 0:572558ddc4fe 56 void setup() {
TheChrisyd 0:572558ddc4fe 57 int i;
TheChrisyd 0:572558ddc4fe 58
TheChrisyd 0:572558ddc4fe 59 GD.begin();
TheChrisyd 0:572558ddc4fe 60
TheChrisyd 0:572558ddc4fe 61 GD.copy(RAM_PIC, sprites256_pic, sizeof(sprites256_pic));
TheChrisyd 0:572558ddc4fe 62 GD.copy(RAM_CHR, sprites256_chr, sizeof(sprites256_chr));
TheChrisyd 0:572558ddc4fe 63 GD.copy(RAM_PAL, sprites256_pal, sizeof(sprites256_pal));
TheChrisyd 0:572558ddc4fe 64
TheChrisyd 0:572558ddc4fe 65 GD.copy(RAM_SPRIMG, pickups2_img, sizeof(pickups2_img));
TheChrisyd 0:572558ddc4fe 66 GD.copy(RAM_SPRPAL, pickups2_pal, sizeof(pickups2_pal));
TheChrisyd 0:572558ddc4fe 67
TheChrisyd 0:572558ddc4fe 68 for (i = 0; i < 256; i++) {
TheChrisyd 0:572558ddc4fe 69 sprites[i].x = random(400 << 4);
TheChrisyd 0:572558ddc4fe 70 sprites[i].y = random(300 << 4);
TheChrisyd 0:572558ddc4fe 71 sprites[i].vx = random(-16,16);
TheChrisyd 0:572558ddc4fe 72 sprites[i].vy = random(-16,16);
TheChrisyd 0:572558ddc4fe 73 }
TheChrisyd 0:572558ddc4fe 74 }
TheChrisyd 0:572558ddc4fe 75
TheChrisyd 0:572558ddc4fe 76 void loop() {
TheChrisyd 0:572558ddc4fe 77 plot();
TheChrisyd 0:572558ddc4fe 78 move();
TheChrisyd 0:572558ddc4fe 79 }
TheChrisyd 0:572558ddc4fe 80
TheChrisyd 0:572558ddc4fe 81 int main() {
TheChrisyd 0:572558ddc4fe 82 setup();
TheChrisyd 0:572558ddc4fe 83 while (1) {
TheChrisyd 0:572558ddc4fe 84 loop();
TheChrisyd 0:572558ddc4fe 85 }
TheChrisyd 0:572558ddc4fe 86 }