Exemplo n.º 1
0
int main(){
	//game map is 224 x 288
	//28 x 36 tiles, 8 pixels square
	int gameWidth = 224;
	int gameHeight = 288;
	sf::RenderWindow window(sf::VideoMode(gameWidth, gameHeight), "SFML Application");
	int rows = 36;
	int cols = 28;
	Tile tileArray[36][28];

	//background stuff
	//main sprite sheet, textures from this
	sf::Texture spriteSheet;
	spriteSheet.loadFromFile("ARC_Pacman_everything.png");

	//dot sprite
	sf::Sprite dot;
	dot.setTexture(spriteSheet);
	dot.setTextureRect(sf::IntRect(8, 8, 8, 8));
	dot.setOrigin(4, 4);

	//powerup sprite
	sf::Sprite powerup;
	powerup.setTexture(spriteSheet);
	powerup.setTextureRect(sf::IntRect(8, 8 * 3, 8, 8));
	powerup.setOrigin(4, 4);

	//wall sprite for testing
	sf::Sprite wall;
	wall.setTexture(spriteSheet);
	wall.setTextureRect(sf::IntRect(8, 8, 8, 8));
	wall.setColor(sf::Color(0, 255, 0)); // green
	wall.setOrigin(4, 4);

	//set up the map, tiles wall by default
	for (int i = 0; i < rows; i++){
		for (int j = 0; j < cols; j++){
			tileArray[i][j].resetMap(i, j);
			if (tileArray[i][j].getType() == 'd'){
				tileArray[i][j].setSprite(dot);
			}
			if (tileArray[i][j].getType() == 'u'){
				tileArray[i][j].setSprite(powerup);
			}
			if (tileArray[i][j].getType() == 'e'){
				tileArray[i][j].setSprite(wall);
			}

		}
	}


	//cosmetic background
	sf::Sprite background;
	sf::Texture mazeBackground;
	if (!mazeBackground.loadFromFile("Pac Man Map.png", sf::IntRect(0, 0, 224, 288))) //map section of spritesheet
	{
		printf("unable to load background texture");
	}
	background.setTexture(mazeBackground);
	//background.setPosition(0, (8 * 3)); //leave space for score and lives	
	background.setPosition(-4, 8 * 2.5);

	//player
	sf::Sprite playerSprite;
	playerSprite.setTexture(spriteSheet);
	playerSprite.setTextureRect(sf::IntRect(470, 0, 16, 16));
	playerSprite.setOrigin(sf::Vector2f(8, 8));
	playerSprite.setPosition(14 * 8, 20 * 8); //(gameWidth/2,gameHeight/2+20); //just under ghost house
	Player player(20, 14, playerSprite);


//score display and other text
	//score display 
	sf::Font font;
	if (!font.loadFromFile("arial.ttf")) printf("unable to load font");

	sf::Text scoreDisplay;
	scoreDisplay.setFont(font);
	scoreDisplay.setCharacterSize(11);
	scoreDisplay.setPosition(8, gameHeight - 16);
	scoreDisplay.setColor(sf::Color::White);
	int score = 0;
	scoreDisplay.setString("Score: "+ (std::to_string(score)) );

//ghosts	
	//ghost sprites
	sf::Texture ghostTex;
	ghostTex.loadFromFile("Pac Man Map.png");

	//blinky
	sf::Sprite blinkySpr;
	blinkySpr.setTexture(ghostTex);
	sf::IntRect blink (228, 64, 16, 16);
	blinkySpr.setTextureRect(blink);
	blinkySpr.setOrigin(8, 8);
	
	Ghosts blinky('c', 'b', blinkySpr, 14, 14);
	blinkySpr.setPosition(14 * 8, 14 * 8); 

	//inky
	sf::Sprite inkySpr;
	inkySpr.setTexture(ghostTex);
	inkySpr.setTextureRect(sf::IntRect(228, 96, 16, 16));
	inkySpr.setOrigin(8, 8);

	Ghosts inky('h', 'i', inkySpr, 14, 14); //movement will start outside house
	inkySpr.setPosition(11.5 * 8, 16.5* 8);

	//pinky
	sf::Sprite pinkySpr;
	pinkySpr.setTexture(ghostTex);
	pinkySpr.setTextureRect(sf::IntRect(228, 80, 16, 16));
	pinkySpr.setOrigin(8, 8);

	Ghosts pinky('h', 'p', pinkySpr, 14, 14);
	pinkySpr.setPosition(13.5 * 8, 17 * 8);

	//clyde
	sf::Sprite clydeSpr;
	clydeSpr.setTexture(ghostTex);
	clydeSpr.setTextureRect(sf::IntRect(228, 112, 16, 16));
	clydeSpr.setOrigin(8, 8);

	Ghosts clyde('h', 'c', clydeSpr, 14, 14);
	clydeSpr.setPosition(15.5 * 8, 16.5 * 8);

	//fright sprite
	//sf::Sprite frightSpr;
	//frightSpr.setTexture(ghostTex);
	sf::IntRect fright (356, 64, 16, 16);
	//frightSpr.setTextureRect(fright);
	//frightSpr.setOrigin(8, 8);

	//timer
	sf::Clock clock;
	sf::Time elapsed1;
	int waveCount = 1;
	int dotCounter = 0;
	
	////////--------window loop--------------/////////////
	while (window.isOpen()){

		
		elapsed1 = clock.getElapsedTime();
		if (clock.getElapsedTime() >= sf::seconds(4)){
			/*
			blinky.frightenGhost(fright);
			blinkySpr.setTextureRect(fright); //fright blinky
			inky.frightenGhost(fright);
			inkySpr.setTextureRect(fright); //fright inky
			pinky.frightenGhost(fright);
			pinkySpr.setTextureRect(fright); //fright pinky
			clyde.frightenGhost(fright);
			clydeSpr.setTextureRect(fright); //fright clyde
			*/
		}
		
			
		int pRow = player.xpos;
		int pCol = player.ypos;
		char toTileType;

		sf::Event event;
		while (window.pollEvent(event)){

			if (event.type == sf::Event::Closed){
				window.close();
			}

// can't get continuous movement to work to save my life

			//move player up
			if (sf::Keyboard::isKeyPressed(sf::Keyboard::Up)){
				toTileType = tileArray[pRow - 1][pCol].getType();
				if (toTileType != 'w'){
					player.setDirection('u');
					player.move();
					//playerSprite = player.getSprite();
				}
				//adjust score & tile if applicable
				if (toTileType == 'd'){
					tileArray[pRow - 1][pCol].setType('e');
					score += 1;
					scoreDisplay.setString("Score: " + (std::to_string(score)));
				}
				else if (toTileType == 'u'){
					tileArray[pRow - 1][pCol].setType('e');
					score += 2;
					scoreDisplay.setString("Score: " + (std::to_string(score)));
					blinky.frightenGhost(fright);
					blinkySpr.setTextureRect(fright); //fright blinky
					inky.frightenGhost(fright);
					inkySpr.setTextureRect(fright); //fright inky
					pinky.frightenGhost(fright);
					pinkySpr.setTextureRect(fright); //fright pinky
					clyde.frightenGhost(fright);
					clydeSpr.setTextureRect(fright); //fright clyde
				}
			}
			//move player down
			if (sf::Keyboard::isKeyPressed(sf::Keyboard::Down)){
				toTileType = tileArray[pRow + 1][pCol].getType();
				if (toTileType != 'w'){
					player.setDirection('d');
					player.move();
					//playerSprite = player.getSprite();
				}
				//adjust score & tile if applicable
				if (toTileType == 'd'){
					tileArray[pRow + 1][pCol].setType('e');
					score += 1;
					scoreDisplay.setString("Score: " + (std::to_string(score)));
				}
				else if (toTileType == 'u'){
					tileArray[pRow + 1][pCol].setType('e');
					score += 2;
					scoreDisplay.setString("Score: " + (std::to_string(score)));
					blinky.frightenGhost(fright);
					blinkySpr.setTextureRect(fright); //fright blinky
					inky.frightenGhost(fright);
					inkySpr.setTextureRect(fright); //fright inky
					pinky.frightenGhost(fright);
					pinkySpr.setTextureRect(fright); //fright pinky
					clyde.frightenGhost(fright);
					clydeSpr.setTextureRect(fright); //fright clyde
				}
			}
			//move player left
			if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left)){
				toTileType = tileArray[pRow][pCol - 1].getType();
				if (toTileType != 'w'){
					player.setDirection('l');
					if (pRow == 17 && pCol == 1) player.wrapHorizontal();
					else {
						player.move();
					}
					//playerSprite = player.getSprite();
				}
				//adjust score & tile if applicable
				if (toTileType == 'd'){
					tileArray[pRow][pCol - 1].setType('e');
					score += 1;
					scoreDisplay.setString("Score: " + (std::to_string(score)));
				}
				else if (toTileType == 'u'){
					tileArray[pRow][pCol-1].setType('e');
					score += 2;
					scoreDisplay.setString("Score: " + (std::to_string(score)));
					blinky.frightenGhost(fright);
					blinkySpr.setTextureRect(fright); //fright blinky
					inky.frightenGhost(fright);
					inkySpr.setTextureRect(fright); //fright inky
					pinky.frightenGhost(fright);
					pinkySpr.setTextureRect(fright); //fright pinky
					clyde.frightenGhost(fright);
					clydeSpr.setTextureRect(fright); //fright clyde
				}
			}
			//move player right
			if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right)){
				toTileType = tileArray[pRow][pCol + 1].getType();
				if (pRow == 17 && pCol == 27) {
					player.setDirection('r');
					player.wrapHorizontal();
					//playerSprite = player.getSprite();
				}
				else{
					if (toTileType != 'w'){
						player.setDirection('r');
						player.move();
					}
				}
				//playerSprite = player.getSprite();
				//adjust score & tile if applicable
				if (toTileType == 'd'){
					tileArray[pRow][pCol + 1].setType('e');
					score += 1;
					scoreDisplay.setString("Score: " + (std::to_string(score)));
				}
				else if (toTileType == 'u'){
					tileArray[pRow][pCol+1].setType('e');
					score += 2;
					scoreDisplay.setString("Score: " + (std::to_string(score)));
					blinky.frightenGhost(fright);
					blinkySpr.setTextureRect(fright); //fright blinky
					inky.frightenGhost(fright);
					inkySpr.setTextureRect(fright); //fright inky
					pinky.frightenGhost(fright);
					pinkySpr.setTextureRect(fright); //fright pinky
					clyde.frightenGhost(fright);
					clydeSpr.setTextureRect(fright); //fright clyde
				}
			}

			//reset dots
			if ((event.type == sf::Event::KeyPressed) && (event.key.code == sf::Keyboard::R)){
				for (int i = 0; i < rows; i++){
					for (int j = 0; j < cols; j++){
						tileArray[i][j].resetMap(i, j);
						if (tileArray[i][j].getType() == 'd'){
							tileArray[i][j].setSprite(dot);
						}
						if (tileArray[i][j].getType() == 'u'){
							tileArray[i][j].setSprite(powerup);
						}
						if (tileArray[i][j].getType() == 'e'){
							tileArray[i][j].setSprite(wall);
						}

					}
				}
			}


			playerSprite = player.getSprite();

			window.clear();
			window.draw(background);

			//draw dots and powerups
			for (int j = 0; j < rows; j++){
				for (int i = 0; i < cols; i++){
					int xpos = i * 8;
					int ypos = j * 8;
					Tile t = tileArray[j][i]; //j row, i col

					/*
					if (i == 25 && j == 26) {
						//playerSprite.setPosition(i * 8, j * 8);
						//window.draw(playerSprite);
						}
						//*/

					if (t.getType() == 'd' || t.getType() == 'u'){
						sf::Sprite drawTi = t.getSprite();
						drawTi.setPosition(xpos, ypos);
						window.draw(drawTi);

					} 
					/*
					else if (t.getType() == 'e'){
						sf::Sprite drawTi = wall; //t.getSprite();
						drawTi.setPosition(xpos, ypos);
						window.draw(drawTi);
					}
					*/
				}
			}


			window.draw(playerSprite);
			window.draw(blinkySpr);
			window.draw(inkySpr);
			window.draw(pinkySpr);
			window.draw(clydeSpr);
			window.draw(scoreDisplay);

			window.display();
		}

	}
}
Exemplo n.º 2
0
        main_game::main_game()
        {
            Level levelMap[36][28];

            sf::RenderWindow window(sf::VideoMode(screenW, screenH), "Pacman Game");
            sf::Texture spriteSheet;
            spriteSheet.loadFromFile("SpriteSheet.png");

            int screenW = 488;
            int screenH = 512;

            int map_rows = 36;
            int map_cols = 28;

            sf::Sprite playerSprite;
            playerSprite.setTexture(spriteSheet);
            playerSprite.setTextureRect(sf::IntRect(470, 0, 16, 16));
            playerSprite.setOrigin(sf::Vector2f(8, 8));
            playerSprite.setPosition(14 * 8, 20 * 8); 
            Player player(20, 14, playerSprite);
            sf::Sprite background;
            sf::Texture mazeBackground;
            background.setPosition(10, 12);

    
    

            for (int a = 0; a < map_rows; a++)
            {
                for (int b = 0; b < map_cols; b++)
                {
                    levelMap[a][b].resetMap(a, b);
                    if (levelMap[a][b].getType() == 'ball')
                    {
                        levelMap[a][b].setSprite(ball);
                    }
                    if (levelMap[a][b].getType() == 'power')
                    {
                        levelMap[a][b].setSprite(wall);
                    }

                }
            }

        sf::Font font;

        sf::Clock clock;
        sf::Time elapsed1;
        int waveCount = 1;
        int dotCounter = 0;


        sf::Texture ghostTex;
        ghostTex.loadFromFile("Level1 (blue).png");

        sf::Sprite blinkySpr;
       
        blinkySpr.setOrigin(8, 8);

        blinkySpr.setTexture(ghostTex);
        sf::IntRect blink (228, 64, 16, 16);
        blinkySpr.setTextureRect(blink);
        Ghosts blinky('follow', 'blinky', blinkySpr, 14, 14);
        blinkySpr.setPosition(14 * 8, 14 * 8); 

        sf::Sprite inkySpr;

       
        inkySpr.setOrigin(8, 8);

        inkySpr.setTexture(ghostTex);
        inkySpr.setTextureRect(sf::IntRect(228, 96, 16, 16));
        Ghosts inky('origin', 'inky', inkySpr, 14, 14); 
        inkySpr.setPosition(11.5 * 8, 16.5* 8);

        sf::Sprite pinkySpr;

        pinkySpr.setOrigin(8, 8);

        pinkySpr.setTexture(ghostTex);
        pinkySpr.setTextureRect(sf::IntRect(228, 80, 16, 16));
        Ghosts pinky('origin', 'pinky', pinkySpr, 14, 14);
        pinkySpr.setPosition(13.5 * 8, 17 * 8);

        sf::Sprite clydeSpr;
        
        clydeSpr.setOrigin(8, 8);

        clydeSpr.setTexture(ghostTex);
        clydeSpr.setTextureRect(sf::IntRect(228, 112, 16, 16));
        Ghosts clyde('origin', 'clyde', clydeSpr, 14, 14);
        clydeSpr.setPosition(15.5 * 8, 16.5 * 8);

        sf::IntRect fright (356, 64, 16, 16);

        sf::Text scoreDisplay;
        scoreDisplay.setFont(font);
        scoreDisplay.setCharacterSize(11);
        scoreDisplay.setPosition(8, screenH - 16);
        scoreDisplay.setColor(sf::Color::White);
        int score = 0;
        scoreDisplay.setString("Score: "+ (std::to_string(score)) );

            if (event.type == sf::Event::Closed)
            {
                window.close();
            }
            if (sf::Keyboard::isKeyPressed(sf::Keyboard::Up))
            {
                levelEntity = levelMap[pRow - 1][pCol].getType();
                player.setDirection('up');
                player.move();
                }
                if (levelEntity == 'u')
                {
                    levelMap[pRow - 1][pCol].setType('power');
                    score += 2;
                    scoreDisplay.setString("Score: " + (std::to_string(score)));
                    blinky.frightenGhost(fright);
                    blinkySpr.setTextureRect(fright); 
                    inky.frightenGhost(fright);
                    inkySpr.setTextureRect(fright);
                    pinky.frightenGhost(fright);
                    pinkySpr.setTextureRect(fright); 
                    clyde.frightenGhost(fright);
                    clydeSpr.setTextureRect(fright); 
                }
                else if (levelEntity == 'ball')
                {
                    levelMap[pRow - 1][pCol].setType('power');
                    score += 1;
                    scoreDisplay.setString("Score: " + (std::to_string(score)));
                }
            }