Esempio n. 1
0
void render()
{    
    // Clears the buffer with this colour attribute
    clearBuffer(0x00);

    // Set up sample colours, and output shadings
    const WORD colors[] =   {
	                        0x1A, 0x2B, 0x3C, 0x4D, 0x5E, 0x6F,
	                        0xA1, 0xB2, 0xC3, 0xD4, 0xE5, 0xF6
	                        };
	
    COORD c;

    // displays the framerate
    std::ostringstream ss;
    ss << std::fixed << std::setprecision(3);
    ss << 1.0 / deltaTime << "fps";
    c.X = ConsoleSize.X-9;
    c.Y = 0;
    writeToBuffer(c, ss.str());

    // displays the elapsed time
    ss.str("");
    ss << elapsedTime << "secs";
    c.X = 0;
	c.Y = ConsoleSize.Y - 1;
    writeToBuffer(c, ss.str(), 0x59);

	if (!levelStart)
		levelStart = initLevel();

	renderShip();
	moveBullets();
	checkBulletCollision(enemyArr, levelInfo.number);
	renderBullets();
	if (!spawnBufferCount && enemiesSpawned < levelInfo.number)
	{
		if (spawnEnemy(enemyArr, levelInfo.number))
		{
			spawnBufferCount += levelInfo.spawnBuffer;
			enemiesSpawned++;
		}
	}
	else if (spawnBufferCount) spawnBufferCount--;
	moveEnemy(enemyArr, levelInfo.number);
	checkBulletCollision(enemyArr, levelInfo.number);
	checkEnemyCollision(enemyArr, levelInfo.number);
	renderEnemy(enemyArr, levelInfo.number);
	if (levelInfo.bullets)
	{
		if (spawnEnemyBullet(enemyArr))
		{
				spawnBufferCount += bulletInfo.spawnBuffer;
		}
		moveEnemy(enemyBulletArr, bulletInfo.number);
		checkEnemyCollision(enemyBulletArr, bulletInfo.number);
		renderEnemy(enemyBulletArr, bulletInfo.number);
	}
	
	// Writes the buffer to the console, hence you will see what you have written
    flushBufferToConsole();

	if (enemiesSpawned == levelInfo.number) 
	{
		if (checkClear(enemyArr, levelInfo.number)) 
		{
			levelStart = false;
			enemiesSpawned = 0;
			spawnBufferCount = 0;
			delete[] enemyArr;
			delete[] enemyBulletArr;
			levelInfo.level = levelInfo.nextLevel;
		}
	}
}
Esempio n. 2
0
void run(){
	Display gDisplay;
	Assets gAssets;
	ControlState gControlState;

	SDL_Event e;
	bool quit = false;

	srand(time(NULL));

	if (!initDisplay(&gDisplay)) {
		fprintf(stderr, "ERROR: failed to initialize\n");
		exit(1);
	}

	if (!loadAssets(&gAssets, &gDisplay)) {
		fprintf(stderr, "ERROR: failed to load game assets\n");
		exit(1);
	}

	Player p = P_createPlayer();
	AI *ai = AI_createAI();

	LinkedList playerBulletList = LL_createLinkedList();
	LinkedList enemyBulletList = LL_createLinkedList();
	LinkedList enemyList = LL_createLinkedList();

	Timer fpsCapTimer = T_createTimer();
	Timer gameTimer = T_createTimer();

	unsigned int lastShooting = 0;
	unsigned int lastEnemenySpawn = 0;
	unsigned int check = 0;
	T_start(&gameTimer);
	
	int controlarray[4] = {0};
	SDL_Rect healthbar;
	initialisehealthbar(&healthbar);
	quit = staticscreen(gDisplay.renderer, "Assets/startmenu.bmp");
	
	SDL_Surface* temp;
	SDL_Texture* background;
	temp = SDL_LoadBMP("Assets/background.bmp");
	background = SDL_CreateTextureFromSurface(gDisplay.renderer, temp);
	SDL_FreeSurface(temp);
	temp = NULL;

	/*Event loop*/
	do{
		// start frame timer
		T_start(&fpsCapTimer);
		
		// check for exit event
		SDL_PollEvent(&e);
		quit = (e.type == SDL_QUIT);
		
		// check to open ai interface
		if(e.type == SDL_KEYDOWN){
			if(e.key.keysym.sym == SDLK_ESCAPE){
				quit = openaiscreen(gDisplay.renderer, controlarray);
				e.key.keysym.sym = SDLK_0;
				SDL_PushEvent(&e);
			}
		}

		// move player
		getKeyState(&gControlState);
		getMouseState(&gControlState);

		movePlayer(&p, &gControlState, &gAssets);
		AI_move(ai, P_getPosition(&p));

		if ((check = T_getTicks(&gameTimer)) - lastEnemenySpawn > DEFAULT_SPAWN_INTERVAL) {
			spawnEnemy(&enemyList);
			lastEnemenySpawn = check;
		}
		
		aiaction(ai, &playerBulletList, &enemyList, T_getTicks(&gameTimer), controlarray, &p);

		moveEnemies(&enemyList, P_getPosition(&p));
		enemiesShoot(&enemyList, &enemyBulletList, &p, T_getTicks(&gameTimer));


		if (leftMouseIsDown() && ((check = T_getTicks(&gameTimer)) - lastShooting) > SHOOT_DELAY) {
			double mx = (double)gControlState.mouseX / SCREEN_WIDTH;
    		double my = (double)gControlState.mouseY / SCREEN_HEIGHT;
    		Point origin = P_getPosition(&p);
    		Point destination = {mx, my};
			shootBullet(&playerBulletList, origin, getShotDirection(origin, destination), PLAYER);
			lastShooting = check;
		}

		moveBullets(&playerBulletList);
		moveBullets(&enemyBulletList);

		detectCollision(&playerBulletList, &enemyList, &gAssets);
		detectCollisionPlayer(&enemyBulletList, &p, &gAssets);
		
		/* Update Screen */
		SDL_RenderCopy(gDisplay.renderer, background, NULL, NULL);
		displayhealth(gDisplay.renderer, healthbar, p.health);
		renderBullets(&playerBulletList, &gDisplay, &gAssets, PLAYER);
		renderBullets(&enemyBulletList, &gDisplay, &gAssets, ENEMY);
		renderEnemies(&enemyList, &gDisplay, &gAssets);
		renderPlayer(&gDisplay, &gAssets, &gControlState);
		renderAI(ai, &gDisplay, &gAssets);
		
		// draw screen
		SDL_RenderPresent(gDisplay.renderer);
        delayNextFrame(T_getTicks(&fpsCapTimer));

        if (gameOver(&p)) {
        	printf("GAME OVER\n");
        	quit = staticscreen(gDisplay.renderer, "Assets/gameover.bmp");
			p.health = 100;
        }

	} while (!quit);
	
	/* Memory Cleanup */
	LL_destroyLinkedList(&playerBulletList);
	LL_destroyLinkedList(&enemyBulletList);
	AI_destroyAI(ai);
	SDL_DestroyTexture(background);
	freeAssets(&gAssets);
	closeDisplay(&gDisplay);
}