Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <SFML/Graphics.hpp>
- #include <string>
- #include <iostream>
- #include <fstream>
- #include <cstdlib>
- #include <fmod.h>
- #include <stdio.h>
- #include <cmath>
- using namespace sf;
- using namespace std;
- bool failed = true,
- firstlaunch = true,
- paused = false,
- keychangement = false;
- float fallspeed = 2.0;
- unsigned int heart_status = 3,
- score = 0,
- objx[4] = {2, 46, 91, 135},
- keyss[4] = {18, 3, 9, 10},
- keychangementstep = 0,
- explstep[4] = {0, 0, 0, 0},
- laststep[4] = {0, 0, 0, 0},
- music = 0;
- Color colors[] = {Color(182, 152, 192),
- Color(182, 192, 154),
- Color(151, 128, 117),
- Color(180, 203, 220),
- Color(150, 68, 251),
- Color(254, 56, 170),
- Color(255, 64, 69),
- Color(253, 228, 57),
- Color(243, 120, 67),
- Color(176, 253, 100),
- Color(120, 252, 232),
- Color(65, 69, 252),
- Color(215, 123, 0),
- Color(202, 0, 0),
- Color(29, 250, 139),
- Color(24, 197, 254),
- Color(185, 237, 65),
- Color(228, 176, 249),
- Color(55, 200, 185),
- Color(186, 69, 174),
- Color(204, 68, 69),
- Color(185, 185, 185),
- Color(91, 116, 162),
- Color(163, 176, 203),
- Color(36, 174, 136),
- Color(147, 255, 231),
- Color(187, 255, 147),
- Color(246, 156, 156),
- Color(241, 124, 213)
- };
- FMOD_SOUND *sound[2];
- FMOD_SYSTEM *vsystem;
- RectangleShape keys[4], objects[4], bobject, line[2], heartr[3],
- shoot[4], background;
- RenderWindow window(VideoMode(176, 450), "Kiloutre Game Test", Style::Close | Style::Titlebar);
- Texture heart[2];
- Text tscore, tfallspeed, tfailed, text[4];
- int OnKeyStateChange(Event::KeyEvent key, bool pressed);
- bool VerifyPos(unsigned int which);
- void IncreaseFallSpeed();
- void OnHit(bool good);
- void ReplaceObject(unsigned int which);
- bool Collision(unsigned int which);
- void SaveKeys()
- {
- ofstream mfile;
- mfile.open ("preferences.txt");
- mfile << keyss[0] << ' ' << keyss[1] << ' ' << keyss[2] << ' ' << keyss[3];
- mfile.close();
- }
- int main()
- {
- FMOD_System_Create(&vsystem);
- FMOD_System_Init(vsystem, 1, FMOD_INIT_NORMAL, NULL);
- window.setFramerateLimit(60);
- window.setKeyRepeatEnabled(false);
- FMOD_System_CreateSound(vsystem, "music.mp3", FMOD_CREATESAMPLE, 0, &sound[0]);
- FMOD_System_CreateSound(vsystem, "music2.mp3", FMOD_CREATESAMPLE, 0, &sound[1]);
- sf::Font font;
- font.loadFromFile("04B_19__.ttf");
- Texture turret[4], enemy, tbackground;
- RectangleShape band[2],
- expl[4];
- tbackground.loadFromFile("background.png", IntRect(0, 0, 176, 1808));
- background.setTexture(&tbackground, true);
- background.setSize(Vector2f(176, 1808));
- turret[0].loadFromFile("sprite.png", IntRect(1, 23, 30, 53));
- turret[1].loadFromFile("sprite.png", IntRect(94, 23, 30, 53));
- turret[2].loadFromFile("sprite.png", IntRect(32, 23, 30, 53));
- turret[3].loadFromFile("sprite.png", IntRect(63, 23, 30, 53));
- enemy.loadFromFile("sprite.png", IntRect(125, 0, 77, 56));
- heart[0].loadFromFile("sprite.png", IntRect(1, 1, 12, 10));
- heart[1].loadFromFile("sprite.png", IntRect(1, 12, 12, 10));
- tscore.setString("0");
- tscore.setFont(font);
- tscore.setCharacterSize(40);
- tscore.setPosition(170 - tscore.getLocalBounds().width, 0);
- tfallspeed.setString("Fall speed: 2.0");
- tfallspeed.setFont(font);
- tfallspeed.setCharacterSize(10);
- tfallspeed.setPosition(2, 35);
- tfailed.setString("Press SPACE\nto start\n\n\nPress + to\nchange the\nkeys");
- tfailed.setFont(font);
- tfailed.setCharacterSize(20);
- tfailed.setPosition(31, 60);
- band[0].setSize(Vector2f(176, 50));
- band[1].setSize(Vector2f(176, 56));
- band[0].setFillColor(Color(56, 56, 56));
- band[1].setFillColor(Color(35, 35, 35));
- band[1].setPosition(0, 394);
- line[0].setSize(Vector2f(176, 4));
- line[1].setSize(Vector2f(176, 4));
- line[0].setFillColor(Color(87, 87, 87));
- line[1].setFillColor(Color(87, 87, 87));
- line[0].setPosition(0, 390);
- line[1].setPosition(0, 50);
- unsigned int linehitbox = 390;
- bobject.setSize(Vector2f(77, 56));
- bobject.setTexture(&enemy, true);
- bobject.setPosition(49.5, 0);
- bobject.setFillColor(Color(200, 200, 200));
- for(unsigned int i = 0; i < 4; i++) {
- objects[i].setSize(Vector2f(38, 28));
- objects[i].setTexture(&enemy, true);
- ReplaceObject(i);
- shoot[i].setSize(Vector2f(4, 10));
- shoot[i].setPosition(-20, -220);
- keys[i].setSize(Vector2f(42, 74));
- keys[i].setTexture(&turret[i], true);
- text[i].setFont(font);
- text[i].setCharacterSize(20);
- if(i != 3)
- {
- heartr[i].setSize(Vector2f(12, 10));
- heartr[i].setTexture(&heart[0], true);
- }
- }
- ifstream file("preferences.txt");
- if(file)
- {
- string line;
- getline(file, line);
- sscanf((char*)line.c_str(),"%i %i %i %i", &keyss[0], &keyss[1], &keyss[2], &keyss[3]);
- }
- char tmp[2];
- sprintf(tmp, "%c", keyss[0] + 65);
- text[0].setString((string)tmp);
- sprintf(tmp, "%c", keyss[1] + 65);
- text[1].setString((string)tmp);
- sprintf(tmp, "%c", keyss[2] + 65);
- text[2].setString((string)tmp);
- sprintf(tmp, "%c", keyss[3] + 65);
- text[3].setString((string)tmp);
- heartr[0].setPosition(2, 2);
- heartr[1].setPosition(16, 2);
- heartr[2].setPosition(30, 2);
- keys[0].setPosition(0, 375);
- keys[1].setPosition(44, 375);
- keys[2].setPosition(89, 375);
- keys[3].setPosition(134, 375);
- text[0].setPosition(16, 415);
- text[1].setPosition(60, 415);
- text[2].setPosition(105, 415);
- text[3].setPosition(150, 415);
- while(window.isOpen()) {
- Event event;
- while(window.pollEvent(event))
- {
- if(event.type == Event::Closed)
- {
- window.close();
- return 1;
- }
- if(event.type == Event::KeyPressed)
- OnKeyStateChange(event.key, true);
- if(event.type == Event::KeyReleased)
- OnKeyStateChange(event.key, false);
- }
- if(!paused)
- {
- for(unsigned int i = 0; i < 4; i++)
- {
- shoot[i].move(0, -25);
- float objpos = objects[i].getPosition().y;
- if(!failed)
- {
- if(Collision(i))
- {
- bool error = false;
- if(objpos > 0){
- for(unsigned int o = 0; !error && o < 4 ; o++)
- {
- if(o == i)
- continue;
- if(objpos < objects[o].getPosition().y)
- error = true;
- }
- if(error){
- OnHit(false);
- shoot[i].setPosition(-20, -220);
- ReplaceObject(i);
- continue;
- }
- OnHit(true);
- shoot[i].setPosition(-20, -220);
- explstep[i] = 0;
- expl[i].setPosition(objects[i].getPosition());
- ReplaceObject(i);
- }
- continue;
- }
- }
- if(objpos + fallspeed + 56 < linehitbox)
- {
- objects[i].move(0, fallspeed);
- continue;
- }
- OnHit(false);
- ReplaceObject(i);
- }
- }
- if(!failed && !paused)
- background.move(0, (-fallspeed) / 10);
- if(background.getPosition().y < -1332)
- background.setPosition(0, 0);
- if(failed && !firstlaunch && bobject.getPosition().y < 60){
- bobject.move(0, 6);
- tfailed.move(0, 6);
- }
- window.clear();
- window.draw(background);
- window.draw(line[0]);
- window.draw(band[1]);
- for(unsigned int i = 0; i < 4; i++) {
- window.draw(objects[i]);
- window.draw(keys[i]);
- window.draw(shoot[i]);
- if(failed || paused) window.draw(text[i]);
- }
- window.draw(line[1]);
- window.draw(band[0]);
- window.draw(tscore);
- window.draw(tfallspeed);
- if(failed || paused) window.draw(tfailed);
- for(unsigned int i = 0; i < 3; i++)
- window.draw(heartr[i]);
- if(failed && !firstlaunch)
- window.draw(bobject);
- window.display();
- }
- SaveKeys();
- return 0;
- }
- bool Collision(unsigned int which)
- {
- float fActualY, fNextY;
- fActualY = shoot[which].getPosition().y;
- fNextY = fActualY - 25;
- if(objects[which].getPosition().y <= (fActualY + 10) && objects[which].getPosition().y >= fNextY)
- {
- return true;
- }
- if((objects[which].getPosition().y + 28) <= (fActualY + 10) && (objects[which].getPosition().y + 28) >= fNextY)
- {
- return true;
- }
- return false;
- }
- void ReplaceObject(unsigned int which)
- {
- objects[which].setPosition(objx[which], 0 - (float)(rand() % 200));
- while(!VerifyPos(which))
- objects[which].setPosition(objx[which], 0 - (float)(rand() % 300));
- objects[which].setFillColor(colors[(rand() % (((sizeof(colors)))/sizeof(*colors)))]);
- }
- bool VerifyPos(unsigned int which)
- {
- bool bPosOK;
- bPosOK = true;
- for(unsigned int i = 0; i < 4 && bPosOK; i++)
- {
- if(which != i)
- {
- float fDiff = abs((float)objects[i].getPosition().y - (float)objects[which].getPosition().y);
- if(fDiff < 28.0f)
- {
- bPosOK = false;
- }
- }
- }
- return bPosOK;
- }
- void IncreaseScore()
- {
- score++;
- char temp[4];
- sprintf(temp, "%d", score);
- tscore.setString((string)temp);
- tscore.setPosition(170 - tscore.getLocalBounds().width, 0);
- if(music == 0 && score == 100)
- FMOD_System_PlaySound(vsystem, sound[0], 0, false, 0);
- else if(music != 0 && score == 1)
- FMOD_System_PlaySound(vsystem, sound[1], 0, false, 0);
- }
- void IncreaseFallSpeed()
- {
- if(!failed){
- fallspeed+=0.0179;
- char temp[30];
- sprintf(temp, "Fall speed: %.2f", fallspeed);
- tfallspeed.setString((string)temp);
- }
- }
- void LifeDecrease()
- {
- if(heart_status != 1)
- {
- heart_status--;
- heartr[heart_status].setTexture(&heart[1], true);
- }
- else
- {
- heartr[0].setTexture(&heart[1], true);
- tfailed.setString(" You failed\n\nPress SPACE\nto restart \n\n\nPress + to\nchange the\nkeys");
- tfailed.setPosition(31, -154);
- bobject.setPosition(49.5, -230);
- failed = true;
- }
- }
- void OnHit(bool good)
- {
- if(paused) return;
- if(failed){
- IncreaseFallSpeed();
- return;
- }
- if(good){
- IncreaseScore();
- IncreaseFallSpeed();
- }
- else
- LifeDecrease();
- }
- void kShoot(unsigned int which)
- {
- float x;
- switch(which)
- {
- case 0:
- x = 18;
- break;
- case 1:
- x = 62;
- break;
- case 2:
- x = 107;
- break;
- case 3:
- x = 151;
- break;
- }
- shoot[which].setPosition(x, 365);
- }
- int OnKeyStateChange(Event::KeyEvent key, bool pressed)
- {
- switch(key.code)
- {
- case 67: case 55:
- {
- if(pressed && !keychangement && failed && !paused)
- {
- keychangement = true;
- keychangementstep = 0;
- tfailed.setString("Press the key\nfor the\nfirst turret");
- text[0].setColor(Color::Red);
- return 1;
- }
- break;
- }
- case Keyboard::Space: case Keyboard::Escape:
- {
- if(!firstlaunch && !failed && pressed)
- {
- if(paused)
- {
- tfailed.setString(" You failed\n\nPress SPACE\nto restart \n\n\nPress + to\nchange the\nkeys");
- paused = false;
- return 1;
- }
- else
- {
- tfailed.setString("Game paused\n\nPress SPACE\nto resume");
- paused = true;
- return 1;
- }
- }
- if(!failed || keychangement) return 1;
- if(key.code == Keyboard::Escape)
- return 1;
- for(unsigned int i = 0; i < 4; i++) {
- shoot[i].setPosition(0, -300);
- ReplaceObject(i);
- }
- score = 0;
- fallspeed = 2.0;
- heart_status = 3;
- heartr[0].setTexture(&heart[0], true);
- heartr[1].setTexture(&heart[0], true);
- heartr[2].setTexture(&heart[0], true);
- tscore.setString("0");
- tscore.setPosition(170 - tscore.getLocalBounds().width, 0);
- tfallspeed.setString("Fall speed: 2.0");
- music = rand() % 2;
- if(!firstlaunch){
- FMOD_Sound_Release(sound[0]);
- FMOD_Sound_Release(sound[1]);
- FMOD_System_CreateSound(vsystem, "music.mp3", FMOD_CREATESAMPLE, 0, &sound[0]);
- FMOD_System_CreateSound(vsystem, "music2.mp3", FMOD_CREATESAMPLE, 0, &sound[1]);
- background.setPosition(0, 0);
- }
- else firstlaunch = false;
- failed = false;
- return 1;
- }
- }
- if(keychangement && pressed && key.code != 67 && key.code != 55 && key.code != Keyboard::Escape && key.code != Keyboard::Space)
- {
- switch(keychangementstep)
- {
- case 0:
- {
- keyss[keychangementstep] = key.code;
- char tmp[2];
- sprintf(tmp, "%c", keyss[0] + 65);
- text[0].setString((string)tmp);
- text[0].setColor(Color::White);
- text[1].setColor(Color::Red);
- tfailed.setString("Press the key\nfor the\nsecond turret");
- keychangementstep++;
- break;
- }
- case 1:
- {
- if(key.code == keyss[0])
- return 1;
- keyss[keychangementstep] = key.code;
- char tmp[2];
- sprintf(tmp, "%c", keyss[1] + 65);
- text[1].setString((string)tmp);
- text[1].setColor(Color::White);
- text[2].setColor(Color::Red);
- tfailed.setString("Press the key\nfor the\nthird turret");
- keychangementstep++;
- break;
- }
- case 2:
- {
- if(key.code == keyss[0] || key.code == keyss[1])
- return 1;
- keyss[keychangementstep] = key.code;
- char tmp[2];
- sprintf(tmp, "%c", keyss[2] + 65);
- text[2].setString((string)tmp);
- text[2].setColor(Color::White);
- text[3].setColor(Color::Red);
- tfailed.setString("Press the key\nfor the\nfourth turret");
- keychangementstep=3;
- break;
- }
- case 3:
- {
- if(key.code == keyss[0] || key.code == keyss[1] || key.code == keyss[2])
- return 1;
- keyss[keychangementstep] = key.code;
- char tmp[2];
- sprintf(tmp, "%c", keyss[3] + 65);
- text[3].setString((string)tmp);
- text[3].setColor(Color::White);
- keychangement=false;
- keychangementstep=0;
- tfailed.setString("Press SPACE\nto start\n\n\nPress + to\nchange the\nkeys");
- SaveKeys();
- break;
- }
- }
- return 1;
- }
- if(!paused)
- {
- if((unsigned int)key.code == keyss[0])
- {
- if(pressed)
- {
- keys[0].setFillColor(Color(180, 180, 180));
- kShoot(0);
- }
- else if(!pressed)
- keys[0].setFillColor(Color::White);
- }
- if((unsigned int)key.code == keyss[1])
- {
- if(pressed)
- {
- keys[1].setFillColor(Color(180, 180, 180));
- kShoot(1);
- }
- else if(!pressed)
- keys[1].setFillColor(Color::White);
- }
- if((unsigned int)key.code == keyss[2])
- {
- if(pressed)
- {
- keys[2].setFillColor(Color(180, 180, 180));
- kShoot(2);
- }
- else if(!pressed)
- keys[2].setFillColor(Color::White);
- }
- if((unsigned int)key.code == keyss[3])
- {
- if(pressed)
- {
- keys[3].setFillColor(Color(180, 180, 180));
- kShoot(3);
- }
- else if(!pressed)
- keys[3].setFillColor(Color::White);
- }
- }
- return 1;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement