#include <io.h>
#include <system.h>
#include <stdio.h>
#include <time.h>

#define IOWR_SRAM_DATA(base, offset, data) \
  IOWR_16DIRECT(base, (offset) * 2, data)
#define IORD_SRAM_DATA(base, offset) \
  IORD_16DIRECT(base, (offset) * 2)
#define IOWR_SRAM_SPEED(base, data) \
  IOWR_16DIRECT(base + 32, 0, data)

int main()
{

    int flag = 0;   // use to determine what state are we


    int gameTime = 0;   // time count
    int score = 0;  // score count

    int deadFlag;  //indicates player has been created
    int playerXCoordinate;   //player's leftmost upmost coordinate
    int playerYCoordinate;
    int life;   //indicate how many life still left
    int openMouthTime;

    int bossFlag;    //indicates boss has been created
    int bossXCoordinate; //boss's leftmost upmost coordinate
    int bossYCoordinate;
    int bossLife;

    int enemyCount; // number of enemies in the screen up to 8 enemies

    int enemyFlag[9];
    int enemyXCoordinate[9];  //enemies' leftmost upmost coordinate
    int enemyYCoordinate[9];
    int fireworkTime;

    int bulletFlag; //indicate bullet created
    int bulletXCoordinate;
    int bulletYCoordinate;


    int hitXCoordinate; //where to put on hit effect
    int hitYCoordinate;

    int collisionXCoordinate;   //where to put on collision effect
    int collisionYCoordinate;

    int gameoverXCoordinate;    //where to put on game over picture
    int gameoverYCoordinate;

    int playerXSpeed;	//speed for everything
    int playerYSpeed;
    int enemyXSpeed;
    int enemyYSpeed;
    int bossXSpeed;
    int bossYSpeed;
    int bulletXSpeed;

    int xLowBound = 0;		// bound for the screen pixels
    int xHighBound = 640;
    int yLowBound = 0;
    int yHighBound = 480;
    //int sound = 0;

    long counter;	// raise the clock to make a loop longer
    int counter2;	// counter to make a loop same lenth as real time

    //int counter2 = 100000;
    int counter3 = 10000;
    int shine =0;	// variable for dead effect

    //int silence = 0;
    //int sound = 0;


    //int soundByte = IORD_16DIRECT(audio_BASE, 0);
    //printf(soundByte);

    //flag = GET_FLAG get flag from hardware


    playerXCoordinate = 40;		// init positions
	playerYCoordinate = 360;
	bossXCoordinate = 550;
	bossYCoordinate = 400;
	bulletXCoordinate = 600;
	bulletYCoordinate = 480;

	playerYSpeed = 1;	//init speeds
	enemyXSpeed = 3;
	bossXSpeed = 0;
	bossYSpeed = 0;
	bulletXSpeed = 4;

	deadFlag = 0;	//int flags
	bossFlag = 0;
	bulletFlag = 0;
	life = 3;

	int i = 0;	//init for enemyflags
	int j = 0;
	for(i = 0; i < 10; i++){
		enemyFlag[i] = 0;
		enemyXCoordinate[i] = 800;
		enemyYCoordinate[i] = 800;
	}
	enemyCount = 0;


	counter = 10000;	//init counter and counter2
	counter2 = 40000;

	srand(time(NULL));

	IOWR_SRAM_DATA(VGA_BASE,31, 0);
	IOWR_SRAM_DATA(VGA_BASE,30, 0);
	openMouthTime = 0;
	fireworkTime = 0;


        for (; ; ) {


        	int a = IORD_16DIRECT(AUDIOSLAVE_BASE,0);


        	 if( a < 1500 || a >64035 || (a>32000 && a< 33000))
        	        {
        	        	counter2--;
        	        	//counter3 = 10000;
        	        	if(counter2==0){
        	        		if(flag == 1 || flag == 2|| flag == 3 || flag == 4|| flag ==5){
        	        			flag = 0;

        	            		counter2 = 15000;
        	        		}else{

        	            		flag = 0;
        	            		counter2 = 100000;
        	        		}
        	        	}
        	        }else{
        	        	counter2 = 15000;
        	        	counter3--;

        	        	if(counter3==0){

        	        		counter3 = 2500;
        	        		flag = flag + 1;

        	        	}
        	            //printf("%d\n",a);
        	        }
        	    }
//        	counter--;
//        	counter2--;
//
//        	if(counter2 == 0){
//        		counter2 = 2150000;	//215000 times the clock time
//        		gameTime = gameTime + 1;
//        		if(gameTime%10 == 0){
//
//            		printf("%d seconds since game starts \n", gameTime);
//        		}
//        	}
//
//        	if(counter == 0){
//
//        		counter = 30000;
//        		//printf("_________________________________________________________-");
//
//
//
//        	}
//
//
//        }
}


