commit
554442b331
@ -0,0 +1,3 @@ |
||||
*~* |
||||
*\#* |
||||
build/ |
||||
@ -0,0 +1,14 @@ |
||||
cmake_minimum_required(VERSION 3.5) |
||||
project(kraken) |
||||
|
||||
file(GLOB |
||||
sources |
||||
src/*.cpp) |
||||
|
||||
add_executable(kraken.elf |
||||
${sources}) |
||||
|
||||
find_package(PkgConfig) |
||||
pkg_check_modules(SFML sfml-all) |
||||
|
||||
target_link_libraries(kraken.elf ${SFML_LDFLAGS}) |
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
After Width: | Height: | Size: 277 KiB |
Binary file not shown.
Binary file not shown.
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 15 KiB |
@ -0,0 +1,59 @@ |
||||
#include "Case.h" |
||||
|
||||
#include <SFML/Graphics.hpp> |
||||
#include <SFML/System.hpp> |
||||
#include <SFML/Window.hpp> |
||||
|
||||
#include <string> |
||||
#include <iostream> |
||||
|
||||
#define TILE_WIDTH 30 |
||||
#define TILE_HEIGHT 30 |
||||
|
||||
using namespace sf; |
||||
|
||||
Case::Case() |
||||
{ |
||||
//ctor
|
||||
} |
||||
|
||||
Case::Case(sf::RenderWindow* window, float x, float y) |
||||
{ |
||||
m_positionX=x; |
||||
m_positionY=y; |
||||
m_value=0; |
||||
m_statut=false; |
||||
m_window=window; |
||||
|
||||
} |
||||
|
||||
void Case::Settexture(std::string name) |
||||
{ |
||||
if(!m_texture.loadFromFile(name.c_str())){std::cout<<"|!|Texture loading failed :" << name << std::endl;} |
||||
m_sprite.setTexture(m_texture); |
||||
m_sprite.setTextureRect(IntRect(m_value*(TILE_WIDTH+1),0,TILE_WIDTH, TILE_HEIGHT)); |
||||
std::cout<< "0) Texture loaded "<<std::endl; |
||||
} |
||||
|
||||
void Case::draw(int whichOneX,int whichOneY,int x, int y) |
||||
{ |
||||
{m_sprite.setTextureRect(IntRect(whichOneX*(TILE_WIDTH+1),whichOneY*(TILE_HEIGHT+2),TILE_WIDTH, TILE_HEIGHT));} |
||||
|
||||
m_sprite.setPosition(x*TILE_WIDTH,y*TILE_HEIGHT); |
||||
m_window->draw(m_sprite); |
||||
|
||||
} |
||||
|
||||
void Case::drawFree(int whichOneX,int whichOneY,float x, float y) |
||||
{ |
||||
{m_sprite.setTextureRect(IntRect(whichOneX*(TILE_WIDTH+1),whichOneY*(TILE_HEIGHT+1),TILE_WIDTH, TILE_HEIGHT));} |
||||
|
||||
m_sprite.setPosition(x,y); |
||||
m_window->draw(m_sprite); |
||||
|
||||
} |
||||
|
||||
Case::~Case() |
||||
{ |
||||
//dtor
|
||||
} |
||||
@ -0,0 +1,49 @@ |
||||
#ifndef CASE_H |
||||
#define CASE_H |
||||
|
||||
#include <SFML/Graphics.hpp> |
||||
#include <SFML/System.hpp> |
||||
#include <SFML/Window.hpp> |
||||
|
||||
#include <string> |
||||
|
||||
class Case |
||||
{ |
||||
public: |
||||
Case(); |
||||
Case(sf::RenderWindow* window, float x=0, float y=0); |
||||
virtual ~Case(); |
||||
|
||||
float GetpositionX() { return m_positionX; } |
||||
void SetpositionX(float val) { m_positionX = val; } |
||||
|
||||
float GetpositionY() { return m_positionY; } |
||||
void SetpositionY(float val) { m_positionY = val; } |
||||
void Setposition(float x, float y){m_positionX=x;m_positionY=y;} |
||||
|
||||
int Getvalue(){return m_value;} |
||||
|
||||
sf::RenderWindow* Getwindow() { return m_window; } |
||||
void Setwindow(sf::RenderWindow* val) { m_window = val; } |
||||
|
||||
sf::Texture Gettexture() { return m_texture; } |
||||
void Settexture(std::string name) ; |
||||
|
||||
sf::Sprite Getsprite() { return m_sprite; } |
||||
void Setsprite(sf::Sprite val) { m_sprite = val; } |
||||
/// /// /// /// ///
|
||||
void draw(int whichOneX,int whichOneY,int x, int y); |
||||
void drawFree(int whichOneX,int whichOneY,float x, float y); |
||||
bool ifClicked(); |
||||
|
||||
protected: |
||||
float m_positionX; |
||||
float m_positionY; |
||||
int m_value; |
||||
bool m_statut; |
||||
sf::RenderWindow* m_window; |
||||
sf::Texture m_texture; |
||||
sf::Sprite m_sprite; |
||||
}; |
||||
|
||||
#endif // CASE_H
|
||||
@ -0,0 +1,193 @@ |
||||
#include "Hero.h" |
||||
|
||||
|
||||
#include "Case.h" |
||||
#include "Level.h" |
||||
#include "Kraken.h" |
||||
|
||||
#include <SFML/Graphics.hpp> |
||||
#include <SFML/Window.hpp> |
||||
#include <SFML/System.hpp> |
||||
|
||||
#include <string> |
||||
#include <vector> |
||||
#include <iostream> |
||||
|
||||
#define TILE_WIDTH 30 |
||||
#define TILE_HEIGHT 30 |
||||
|
||||
Hero::Hero(Kraken* kraken, float pozX, float pozY) |
||||
{ |
||||
m_speedX=0; |
||||
m_speedY=0; |
||||
m_pozX=pozX; |
||||
m_pozY=pozY; |
||||
m_attacking=false; |
||||
m_start.x=pozX; |
||||
m_start.y=pozY; |
||||
m_statut=1; |
||||
m_kraken=kraken; |
||||
hidden=false; |
||||
circle.setRadius(0); |
||||
circle.setPosition(m_pozX,m_pozY); |
||||
test=0; |
||||
m_dead=false; |
||||
m_clock.restart(); |
||||
hasAttacked=false; |
||||
|
||||
|
||||
//ctor
|
||||
} |
||||
|
||||
void Hero::die() |
||||
{ |
||||
m_dead=true; |
||||
|
||||
|
||||
} |
||||
|
||||
bool Hero::attack() |
||||
{ |
||||
sf::Time time; |
||||
time=m_clock.getElapsedTime(); |
||||
|
||||
if(time.asSeconds()<=0.3) |
||||
{ |
||||
time=m_clock.getElapsedTime(); |
||||
int coinH(0), coinV(0); |
||||
if(m_statut==0){m_speedX=0.5;} |
||||
if(m_statut==1){m_speedX=-0.5;} |
||||
if(m_statut==2){m_speedY=-0.5;} |
||||
if(m_statut==3){m_speedY=0.5;} |
||||
|
||||
|
||||
if(m_speedX>0){coinH=m_pozX+TILE_WIDTH+m_speedX;} |
||||
else if (m_speedX<0) {coinH=m_pozX+m_speedX; } |
||||
else if(m_speedX==0) {coinH=m_pozX+TILE_WIDTH/2;} |
||||
|
||||
if(m_speedY>0){coinV=m_pozY+TILE_HEIGHT+m_speedY;} |
||||
else if (m_speedY<0) {coinV=m_pozY+m_speedY;} |
||||
else if (m_speedY==0) {coinV=m_pozY+2*TILE_HEIGHT/3;} |
||||
|
||||
if (next(coinH,coinV)==3 || next(coinH,coinV)==5 ) {die();} |
||||
justMove(); |
||||
if(m_pozX>=m_kraken->Gethead().getPosition().x - TILE_WIDTH && m_pozX<=m_kraken->Gethead().getPosition().x +3*TILE_WIDTH && m_pozY<=m_kraken->Gethead().getPosition().y+3*TILE_HEIGHT && m_pozY>=m_kraken->Gethead().getPosition().y && hasAttacked==false){m_kraken->Damaged(); hasAttacked=true;} |
||||
} |
||||
else {m_speedX=0;m_speedY=0; |
||||
m_attacking=false;hasAttacked=false;} |
||||
|
||||
} |
||||
|
||||
|
||||
void Hero::Settexture(std::string name) |
||||
{ |
||||
if(!m_texture.loadFromFile(name.c_str())){std::cout<<"Echec chargement texture Hero"<<std::endl;} |
||||
m_sprite.setTexture(m_texture); |
||||
} |
||||
|
||||
void Hero::draw() |
||||
{ |
||||
|
||||
///Chosing the picture
|
||||
if(m_speedX>0 && m_speedY==0){m_statut=0;} |
||||
if(m_speedX<0 && m_speedY==0){m_statut=1;} |
||||
if(m_speedY>0 && m_speedX==0){m_statut=3;} |
||||
if(m_speedY<0 && m_speedX==0){m_statut=2;} |
||||
///
|
||||
|
||||
///Draw the hero
|
||||
if(hidden==false) |
||||
{ |
||||
m_sprite.setTextureRect(sf::IntRect(6*(TILE_WIDTH+1)+m_statut*(TILE_WIDTH+1),0,TILE_WIDTH,TILE_HEIGHT)); |
||||
m_sprite.setPosition(m_pozX,m_pozY); |
||||
m_kraken->Getlevel()->Getcase()->Getwindow()->draw(m_sprite); |
||||
} |
||||
|
||||
///LIFE
|
||||
if (m_color==2){m_sprite.setColor(sf::Color::Green);} |
||||
else if (m_color==3){m_sprite.setColor(sf::Color::Red);} |
||||
|
||||
///DEAD
|
||||
if (m_dead) |
||||
{ |
||||
// m_kraken->restart();
|
||||
//circle.setFillColor(sf::Color::Red);
|
||||
test=0; |
||||
sf::Texture Texplosion; |
||||
if(!Texplosion.loadFromFile("explosion.jpg")){std::cout<<"Error loading texture explosion"<<std::endl;}; |
||||
sf::Sprite explosion; |
||||
explosion.setTexture(Texplosion); |
||||
circle.setTexture(&Texplosion); |
||||
for(int i(0);i<200;i++) |
||||
{ |
||||
test+=0.25; |
||||
circle.setPosition(m_pozX-0.25*i,m_pozY-0.25*i); |
||||
circle.setRadius(test); |
||||
SetspeedX(0); SetspeedY(0); |
||||
m_kraken->Getlevel()->Getcase()->Getwindow()->draw(circle); |
||||
m_kraken->Getlevel()->Getcase()->Getwindow()->display(); |
||||
// for(int j(0);j<1000;j+=0.1){}
|
||||
} |
||||
SetpozX(m_start.x); |
||||
SetpozY(m_start.y); |
||||
m_attacking=false; |
||||
m_dead=false; |
||||
m_speedX=0; |
||||
m_speedY=0; |
||||
} |
||||
|
||||
} |
||||
|
||||
void Hero::justMove() |
||||
{ |
||||
if(next(m_pozX+TILE_WIDTH+m_speedX,m_pozY+2*TILE_HEIGHT/3+m_speedY)==5){m_speedX=0;} ///RIGHT
|
||||
if(next(m_pozX+m_speedX,m_pozY+2*TILE_HEIGHT/3+m_speedY)==5){m_speedX=0;} ///LEFT
|
||||
if(next(m_pozX+m_speedX+TILE_WIDTH/2, m_pozY+2*TILE_HEIGHT/3+m_speedY)==5){m_speedY=0;} ///UP & DOWN
|
||||
|
||||
if(m_kraken->Getlevel()->getCoord(convertCoordX(m_pozX+TILE_WIDTH/2),convertCoordY(m_pozY+2*TILE_HEIGHT/3))=='4') |
||||
{ |
||||
|
||||
|
||||
|
||||
for(int i(0);i<100;i++) |
||||
{ |
||||
m_speedX=0; m_speedY=0; |
||||
m_statut=i%4; |
||||
m_sprite.setTextureRect(sf::IntRect(6*(TILE_WIDTH+1)+m_statut*(TILE_WIDTH+1),0,TILE_WIDTH,TILE_HEIGHT)); |
||||
m_kraken->Getlevel()->Getcase()->Getwindow()->draw(m_sprite); |
||||
m_kraken->Getlevel()->Getcase()->Getwindow()->display();} |
||||
|
||||
|
||||
|
||||
|
||||
SetpozY(m_kraken->Getlevel()->findAnother2('4').first*TILE_WIDTH); |
||||
SetpozX(m_kraken->Getlevel()->findAnother2('4').second*TILE_HEIGHT); |
||||
} |
||||
|
||||
m_pozX+=m_speedX; |
||||
m_pozY+=m_speedY; |
||||
|
||||
} |
||||
|
||||
void Hero::update() |
||||
{ |
||||
if (m_attacking && m_dead==false){attack();} |
||||
else if(m_attacking==false){justMove();} |
||||
|
||||
if(m_kraken->getcounter()==2 && hidden==false){if(m_kraken->isThereCollision(convertCoordX(m_pozX+TILE_WIDTH/2),convertCoordY(m_pozY+TILE_HEIGHT/2))){ |
||||
m_dead=true; m_kraken->setVector(std::vector<int>(10,10)); |
||||
}} |
||||
|
||||
if(next(m_pozX+TILE_WIDTH/2,m_pozY+TILE_HEIGHT/2)==3){ |
||||
m_sprite.setTextureRect(sf::IntRect(11*(TILE_WIDTH+1),0,TILE_WIDTH,TILE_HEIGHT)); |
||||
m_sprite.setPosition(m_pozX,m_pozY); |
||||
m_kraken->Getlevel()->Getcase()->draw(0,6,convertCoordX(m_pozX+TILE_WIDTH/2),convertCoordY(m_pozY+TILE_HEIGHT/2)); |
||||
hidden=true;} |
||||
else if (next(m_pozX,m_pozY)!=3) {draw();hidden=false;} |
||||
|
||||
} |
||||
|
||||
Hero::~Hero() |
||||
{ |
||||
//dtor
|
||||
} |
||||
@ -0,0 +1,86 @@ |
||||
#ifndef HERO_H |
||||
#define HERO_H |
||||
|
||||
#include "Case.h" |
||||
#include "Level.h" |
||||
#include "Kraken.h" |
||||
|
||||
#include <SFML/Graphics.hpp> |
||||
#include <SFML/Window.hpp> |
||||
#include <SFML/System.hpp> |
||||
|
||||
#include <string> |
||||
#include <vector> |
||||
|
||||
#define TILE_WIDTH 30 |
||||
#define TILE_HEIGHT 30 |
||||
|
||||
|
||||
class Hero |
||||
{ |
||||
public: |
||||
Hero(Kraken* kraken, float pozX, float pozY); |
||||
virtual ~Hero(); |
||||
|
||||
float GetspeedX() { return m_speedX; } |
||||
void SetspeedX(float val) { m_speedX = val; } |
||||
|
||||
float GetspeedY() { return m_speedY; } |
||||
void SetspeedY(float val) { m_speedY = val; } |
||||
|
||||
float GetpozX() { return m_pozX; } |
||||
void SetpozX(float val) { m_pozX = val; } |
||||
|
||||
float GetpozY() { return m_pozY; } |
||||
void SetpozY(float val) { m_pozY = val; } |
||||
|
||||
bool Getattacking() { return m_attacking; } |
||||
void Setattacking(bool val) { m_attacking = val; } |
||||
|
||||
sf::Vector2f Getstart() { return m_start; } |
||||
void Setstart(sf::Vector2f val) { m_start = val; } |
||||
|
||||
sf::Texture Gettexture() { return m_texture; } |
||||
void Settexture(std::string name); |
||||
|
||||
sf::Sprite Getsprite() { return m_sprite; } |
||||
void Setsprite(sf::Sprite val) { m_sprite = val; } |
||||
|
||||
int Getstatut() { return m_statut; } |
||||
void Setstatut(int val) { m_statut = val; } |
||||
/// // /// /// // /// // /// // ///
|
||||
void draw(); |
||||
void update(); |
||||
bool attack(); |
||||
void justMove(); |
||||
void die(); |
||||
int convertCoordX(float a) {return int(a/TILE_WIDTH);} |
||||
int convertCoordY(float a) {return int(a/TILE_HEIGHT);} |
||||
int next(float a, float b){return m_kraken->Getlevel()->getCoord(convertCoordX(a),convertCoordY(b))-'0';} |
||||
void restartClock() {m_clock.restart();} |
||||
void setAttacking(bool val){m_attacking=val;} |
||||
bool isDead() {return m_dead;} |
||||
|
||||
|
||||
protected: |
||||
float m_speedX; |
||||
float m_speedY; |
||||
float m_pozX; |
||||
float m_pozY; |
||||
bool m_attacking; |
||||
bool hasAttacked; |
||||
bool underWater; |
||||
sf::Vector2f m_start; |
||||
sf::Texture m_texture; |
||||
sf::Sprite m_sprite; |
||||
int m_statut; |
||||
Kraken* m_kraken; |
||||
bool hidden; |
||||
bool m_dead; |
||||
int m_color; |
||||
sf::CircleShape circle; |
||||
float test; |
||||
sf::Clock m_clock; |
||||
}; |
||||
|
||||
#endif // HERO_H
|
||||
@ -0,0 +1,214 @@ |
||||
#include "Kraken.h" |
||||
|
||||
#include <SFML/Graphics.hpp> |
||||
#include <SFML/Window.hpp> |
||||
#include <SFML/System.hpp> |
||||
|
||||
#include "Case.h" |
||||
#include "Level.h" |
||||
#include "Kraken.h" |
||||
#include "Hero.h" |
||||
|
||||
#include <string> |
||||
#include <vector> |
||||
#include <iostream> |
||||
|
||||
#define TILE_WIDTH 30 |
||||
#define TILE_HEIGHT 30 |
||||
|
||||
Kraken::Kraken(Level* level,int width, int height, int numberTenta) |
||||
{ |
||||
m_level=level; |
||||
m_clock.restart(); |
||||
m_tentacleClock.restart(); |
||||
m_maxX=width; |
||||
m_maxY=height; |
||||
pozX=rand()%(m_maxX-3)*TILE_WIDTH+1; |
||||
pozY=rand()%(m_maxY-6)*TILE_HEIGHT+1; |
||||
m_head.setPosition(pozX,pozY); |
||||
m_counter=0; |
||||
m_life=5; |
||||
m_damaged=false; |
||||
m_dead=false; |
||||
m_numberTenta=numberTenta; |
||||
m_coords=std::vector<int>(10,0); |
||||
m_temp.restart(); |
||||
rapidity=1; |
||||
|
||||
|
||||
} |
||||
|
||||
|
||||
void Kraken::Settexture(std::string name) |
||||
{ |
||||
if(!m_texture.loadFromFile(name)){std::cout<<"Echec de l'ouverture texture Kraken" << std::endl;} |
||||
m_head.setTexture(m_texture); |
||||
m_tentacle.setTexture(m_texture); |
||||
|
||||
///Head
|
||||
|
||||
} |
||||
|
||||
void Kraken::drawTheHead(int a) |
||||
{ |
||||
m_head.setTextureRect(sf::IntRect(a*2*(1+TILE_WIDTH),TILE_HEIGHT,TILE_WIDTH*2, TILE_HEIGHT*3)); |
||||
// m_head.setPosition(x*TILE_WIDTH,y*TILE_HEIGHT);
|
||||
m_level->Getcase()->Getwindow()->draw(m_head); |
||||
int x= int(m_head.getPosition().x/TILE_WIDTH); |
||||
int y=int(m_head.getPosition().y/TILE_HEIGHT); |
||||
|
||||
for (int i(x-1);i<=x+2;i++) |
||||
{ |
||||
for(int j(y-1);j<=y+3;j++) |
||||
{ |
||||
m_level->setCoordCase(i,j,'5'); |
||||
} |
||||
} |
||||
m_level->setCoordCase(x,y+3,'2'); |
||||
m_level->setCoordCase(x+1,y+3,'2'); |
||||
|
||||
m_level->setCoordCase(x-2,y+4,'1'); |
||||
m_level->setCoordCase(x-1,y+4,'1'); |
||||
m_level->setCoordCase(x,y+4,'1'); |
||||
m_level->setCoordCase(x+1,y+4,'1'); |
||||
m_level->setCoordCase(x+2,y+4,'1'); |
||||
m_level->setCoordCase(x+3,y+4,'1'); |
||||
|
||||
|
||||
|
||||
} |
||||
|
||||
void Kraken::placeTheHeadAnywhere() |
||||
{ |
||||
{ |
||||
pozX=rand()%(m_maxX-3)*TILE_WIDTH+3; |
||||
pozY=rand()%(m_maxY-6)*TILE_HEIGHT+1; |
||||
m_head.setPosition(pozX,pozY);} |
||||
} |
||||
|
||||
|
||||
void Kraken::drawATentacle() |
||||
{ |
||||
|
||||
|
||||
m_tentacleTime=m_tentacleClock.getElapsedTime(); |
||||
int counteur; |
||||
bool pick(false), ended(true); |
||||
///Go
|
||||
if(m_tentacleTime.asMilliseconds()%2000<=50 && m_tentacleTime.asMilliseconds()%2000>=25){pick=true; ended=false;} |
||||
else if(m_tentacleTime.asMilliseconds()%2000<=100*rapidity && m_tentacleTime.asMilliseconds()%2000>=50){counteur=0;ended=false;} |
||||
else if(m_tentacleTime.asMilliseconds()%2000<=200*rapidity){counteur=1;ended=false;} |
||||
else if(m_tentacleTime.asMilliseconds()%2000<=300*rapidity){counteur=2;ended=false;} |
||||
else if(m_tentacleTime.asMilliseconds()%2000<=400*rapidity){counteur=3;ended=false;} |
||||
else if(m_tentacleTime.asMilliseconds()%2000<=500*rapidity){counteur=4;ended=false;} |
||||
else if(m_tentacleTime.asMilliseconds()%2000<=600*rapidity){counteur=5;ended=false;} |
||||
else if(m_tentacleTime.asMilliseconds()%2000<=700*rapidity){counteur=6;ended=false;} |
||||
else if(m_tentacleTime.asMilliseconds()%2000<=800*rapidity){counteur=7;ended=false;} |
||||
else if(m_tentacleTime.asMilliseconds()%2000<=900*rapidity){counteur=8;ended=false;} |
||||
else if(m_tentacleTime.asMilliseconds()%2000<=1000*rapidity){counteur=9;ended=false;} |
||||
///Back
|
||||
else if(m_tentacleTime.asMilliseconds()%2000<=1100*rapidity){counteur=8;ended=false;} |
||||
else if(m_tentacleTime.asMilliseconds()%2000<=1200*rapidity){counteur=7;ended=false;} |
||||
else if(m_tentacleTime.asMilliseconds()%2000<=1300*rapidity){counteur=6;ended=false;} |
||||
else if(m_tentacleTime.asMilliseconds()%2000<=1400*rapidity){counteur=5;ended=false;} |
||||
else if(m_tentacleTime.asMilliseconds()%2000<=1500*rapidity){counteur=4;ended=false;} |
||||
else if(m_tentacleTime.asMilliseconds()%2000<=1600*rapidity){counteur=3;ended=false;} |
||||
else if(m_tentacleTime.asMilliseconds()%2000<=1700*rapidity){counteur=2;ended=false;} |
||||
else if(m_tentacleTime.asMilliseconds()%2000<=1800*rapidity){counteur=1;ended=false;} |
||||
else if(m_tentacleTime.asMilliseconds()%2000<=1900*rapidity){counteur=0;ended=false;} |
||||
else if(m_tentacleTime.asMilliseconds()%2000<=1999*rapidity){counteur=0;ended=true;} |
||||
else {m_tentacleClock.restart();} |
||||
|
||||
if(pick){ |
||||
|
||||
m_coords.erase(m_coords.begin(),m_coords.end()); |
||||
setNumberTenta(rand()%6+1); |
||||
|
||||
for(int i(0);i<2*m_numberTenta-1;i+=2){ |
||||
|
||||
|
||||
m_coords.push_back(abs(pickX())); |
||||
m_coords.push_back(abs(pickY())); |
||||
} |
||||
} |
||||
|
||||
|
||||
|
||||
m_tentacle.setTextureRect(sf::IntRect(counteur*(TILE_WIDTH+1),4*(TILE_HEIGHT+2),TILE_WIDTH, TILE_HEIGHT*2)); |
||||
for(int i(0);i<m_numberTenta*2;i+=2){ |
||||
m_tentacle.setPosition(m_coords[i]*TILE_WIDTH,m_coords[i+1]*TILE_HEIGHT); |
||||
m_level->Getcase()->Getwindow()->draw(m_tentacle);} |
||||
|
||||
if (ended){for(int i(0); i<m_coords.size();i++){m_coords[i]=0;}} |
||||
|
||||
|
||||
} |
||||
|
||||
|
||||
|
||||
|
||||
bool Kraken::isThereCollision(int x, int y) |
||||
{ |
||||
|
||||
bool temp(false); |
||||
for(int i(0);i<m_coords.size()-2;i+=2){ |
||||
|
||||
if(m_coords[i]==x && m_coords[i+1]==y) |
||||
{std::cout<<" touche "; temp=true;} |
||||
} |
||||
return temp; |
||||
|
||||
} |
||||
|
||||
|
||||
|
||||
void Kraken::update() |
||||
{ |
||||
///HEAD
|
||||
m_time=m_clock.getElapsedTime(); |
||||
|
||||
if(m_time.asSeconds()<5*rapidity){m_counter=0;} |
||||
else if(m_time.asMilliseconds()<=8000*rapidity){m_counter=1;} |
||||
else if(m_time.asMilliseconds()<=10000*rapidity){m_counter=2;} |
||||
else {m_clock.restart();} |
||||
if(m_life==1){m_counter=2;} |
||||
///
|
||||
|
||||
///DAMAGED
|
||||
if(isDamaged()){ |
||||
|
||||
sf::Time test; |
||||
test=m_temp.getElapsedTime(); |
||||
m_time=m_clock.getElapsedTime(); |
||||
|
||||
if (test.asMilliseconds()%4000<=2000){m_counter=3;} |
||||
|
||||
else if (test.asMilliseconds()%4000>2000) {m_counter=3;m_damaged=false; m_life-=1; if(m_life<=0){m_counter=4;} placeTheHeadAnywhere(); m_damaged=false; } |
||||
//rapidity-=0.17;
|
||||
|
||||
|
||||
|
||||
|
||||
} |
||||
///
|
||||
|
||||
///DEAD
|
||||
if(isDead()){m_counter=4;} |
||||
///
|
||||
|
||||
if(m_counter==2){drawATentacle();} |
||||
|
||||
|
||||
drawTheHead(m_counter); |
||||
|
||||
///TENTACLE
|
||||
|
||||
} |
||||
|
||||
|
||||
|
||||
|
||||
Kraken::~Kraken() |
||||
{ |
||||
//dtor
|
||||
} |
||||
@ -0,0 +1,95 @@ |
||||
#ifndef KRAKEN_H |
||||
#define KRAKEN_H |
||||
|
||||
#include "Case.h" |
||||
#include "Level.h" |
||||
#include "Kraken.h" |
||||
|
||||
#include <SFML/Graphics.hpp> |
||||
#include <SFML/Window.hpp> |
||||
#include <SFML/System.hpp> |
||||
|
||||
#include <string> |
||||
#include <vector> |
||||
#include <iostream> |
||||
|
||||
#define TILE_WIDTH 30 |
||||
#define TILE_HEIGHT 30 |
||||
|
||||
class Kraken |
||||
{ |
||||
public: |
||||
Kraken(Level* level, int width=50, int height=50, int numberTenta=0); |
||||
virtual ~Kraken(); |
||||
|
||||
Level* Getlevel() { return m_level; } |
||||
void Setlevel(Level* val) { m_level = val; } |
||||
|
||||
sf::Texture Gettexture() { return m_texture; } |
||||
void Settexture(std::string name); |
||||
|
||||
sf::Sprite Gethead() { return m_head; } |
||||
void Sethead(sf::Sprite val) { m_head = val; } |
||||
|
||||
sf::Sprite Gettentacle() { return m_tentacle; } |
||||
void Settentacle(sf::Sprite val) { m_tentacle = val; } |
||||
|
||||
int getcounter(){return m_counter;} |
||||
sf::Vector2f getposition(){return sf::Vector2f(pozX,pozY);} |
||||
|
||||
std::vector<std::string> Gettab() { return m_tab; } |
||||
void Settab(std::vector<std::string> val) { m_tab = val; } |
||||
|
||||
void placeTheHeadAnywhere(); |
||||
|
||||
void setNumberTenta(int a){m_numberTenta=a;} |
||||
|
||||
|
||||
/// /// /// /// /// // /// /// /// ///
|
||||
void setCoord(float x, float y){m_heroCoordX=x; m_heroCoordY=y;} |
||||
void drawTheHead(int a=0); |
||||
void drawATentacle(); |
||||
void update(); |
||||
bool isThereCollision(int x, int y); |
||||
void setVector(std::vector<int> tab){m_coords=tab;} |
||||
const bool isDamaged(){return m_damaged;} |
||||
void Damaged(){ m_temp.restart(); m_damaged=true;} |
||||
bool isAttacking() {if (m_counter==2) return true; return false;} |
||||
|
||||
const bool isDead(){if(m_life==0){return true;} else {return false;}} |
||||
void setDead(bool val){m_dead=val;} |
||||
int pickX(){return rand()%10+int(m_heroCoordX/TILE_WIDTH)-5;} |
||||
int pickY(){return rand()%10+int(m_heroCoordY/TILE_HEIGHT)-5;} |
||||
// void restart() {m_clock.restart();}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
protected: |
||||
float m_heroCoordX; |
||||
float m_heroCoordY; |
||||
int pozY; |
||||
int pozX; |
||||
Level* m_level; |
||||
sf::Clock m_clock; |
||||
sf::Clock m_tentacleClock; |
||||
sf::Clock m_temp; |
||||
sf::Time m_tentacleTime; |
||||
sf::Texture m_texture; |
||||
sf::Sprite m_head; |
||||
sf::Sprite m_tentacle; |
||||
sf::Time m_time; |
||||
std::vector<std::string> m_tab; |
||||
int m_maxX; |
||||
int m_maxY; |
||||
int m_counter; |
||||
int m_life; |
||||
int m_numberTenta; |
||||
bool m_damaged; |
||||
bool m_dead; |
||||
float rapidity; |
||||
std::vector<int> m_coords; |
||||
}; |
||||
|
||||
#endif // KRAKEN_H
|
||||
@ -0,0 +1,107 @@ |
||||
#include "Level.h" |
||||
#include "Case.h" |
||||
|
||||
#include <SFML/Graphics.hpp> |
||||
#include <SFML/Window.hpp> |
||||
#include <SFML/System.hpp> |
||||
|
||||
#include <iostream> |
||||
#include <ctime> |
||||
#include <vector> |
||||
|
||||
using namespace sf; |
||||
|
||||
Level::Level(Case* aCase, int width, int height) |
||||
{ |
||||
m_width=width; |
||||
m_height=height; |
||||
m_case=aCase; |
||||
srand(time(NULL)); |
||||
|
||||
} |
||||
|
||||
char Level::findAnother(char val) |
||||
{ |
||||
|
||||
int x(0),y(0); |
||||
while (m_tab[y][x]!=val) |
||||
{ |
||||
x=rand()%(m_width+1), y=rand()%(m_height+1); |
||||
} |
||||
return m_tab[y][x]; |
||||
|
||||
|
||||
} |
||||
|
||||
std::pair<int,int> Level::findAnother2(char val) |
||||
{ |
||||
|
||||
int x(0),y(0); |
||||
while (m_tab[y][x]!=val) |
||||
{ |
||||
x=rand()%(m_width+1), y=rand()%(m_height+1); |
||||
} |
||||
return std::pair<int,int> (x,y); |
||||
|
||||
|
||||
} |
||||
|
||||
void Level::create() |
||||
{ |
||||
std::string line; |
||||
for(int i(0);i<m_width;i++) |
||||
{ |
||||
m_tab.push_back(line); |
||||
for (int j(0);j<m_height-1;j++) |
||||
{ |
||||
|
||||
int temp(rand()%26); |
||||
if (temp==0){m_tab[i]+='3';} |
||||
if (temp==1){m_tab[i]+='4';} |
||||
if (temp==2){m_tab[i]+='5';} |
||||
else {m_tab[i]+='0';} |
||||
//std::cout<<m_tab[i][j];
|
||||
} |
||||
} |
||||
for (int i(0);i<m_width;i++) |
||||
{ |
||||
m_tab[i][0]='5'; |
||||
m_tab[i][m_height-2]='5'; |
||||
} |
||||
for (int i(0);i<m_height;i++) |
||||
{ |
||||
m_tab[0][i]='5'; |
||||
m_tab[m_width-1][i]='5'; |
||||
|
||||
} |
||||
|
||||
} |
||||
|
||||
const void Level::draw() |
||||
{ |
||||
for(int i(0);i<m_width;i++) |
||||
{ |
||||
for (int j(0);j<m_height;j++) |
||||
{ |
||||
m_case->draw(m_tab[i][j]-'0',0,i,j); |
||||
} |
||||
} |
||||
} |
||||
|
||||
const void Level::show() |
||||
{ |
||||
for(int i(0);i<m_height;i++) |
||||
{ |
||||
for (int j(0);j<m_width;j++) |
||||
{ |
||||
std::cout<<m_tab[j][i]; |
||||
} |
||||
std::cout<<std::endl; |
||||
} |
||||
std::cout<<std::endl<<std::endl; |
||||
} |
||||
|
||||
Level::~Level() |
||||
{ |
||||
//dtor
|
||||
} |
||||
@ -0,0 +1,44 @@ |
||||
#ifndef LEVEL_H |
||||
#define LEVEL_H |
||||
|
||||
#include <SFML/Graphics.hpp> |
||||
#include <SFML/Window.hpp> |
||||
#include <SFML/System.hpp> |
||||
|
||||
#include "Case.h" |
||||
|
||||
#include <string> |
||||
#include <vector> |
||||
|
||||
class Level |
||||
{ |
||||
public: |
||||
Level(Case* aCase, int width=20, int height=20); |
||||
virtual ~Level(); |
||||
|
||||
int Getwidth() { return m_width; } |
||||
void Setwidth(int val) { m_width = val; } |
||||
|
||||
int Getheight() { return m_height; } |
||||
void Setheight(int val) { m_height = val; } |
||||
|
||||
Case* Getcase() { return m_case; } |
||||
void Setcase(Case* val) { m_case = val; } |
||||
/// /// /// /// /// /// /// /// /// /// /// /// ///
|
||||
void setCoordCase(int x, int y, char val) {m_tab[x][y]=val;} |
||||
char getCoord(int x, int y){ return m_tab[x][y];} |
||||
char findAnother(char val) ; |
||||
std::pair<int,int> findAnother2(char val); |
||||
void create(); |
||||
const void show(); |
||||
const void draw(); |
||||
|
||||
protected: |
||||
|
||||
int m_width; |
||||
int m_height; |
||||
std::vector<std::string> m_tab; |
||||
Case* m_case; |
||||
}; |
||||
|
||||
#endif // LEVEL_H
|
||||
@ -0,0 +1,161 @@ |
||||
#include <SFML/Graphics.hpp> |
||||
#include <SFML/Window.hpp> |
||||
#include <SFML/System.hpp> |
||||
#include <SFML/Audio.hpp> |
||||
|
||||
#include <iostream> |
||||
#include <ctime> |
||||
|
||||
#include "Case.h" |
||||
#include "Level.h" |
||||
#include "Kraken.h" |
||||
#include "Hero.h" |
||||
|
||||
#define TILE_WIDTH 30 |
||||
#define TILE_HEIGHT 30 |
||||
#define ASSETS_PATH "../assets/" |
||||
using namespace sf; |
||||
|
||||
|
||||
|
||||
void funct(std::string name) |
||||
{ |
||||
SoundBuffer Ssound; |
||||
if(!Ssound.loadFromFile(name.c_str())){std::cout<<"bug music (loading)"<<std::endl;}; |
||||
Sound sound(Ssound); |
||||
sound.play(); |
||||
while(sound.getStatus()==Sound::Playing){} |
||||
} |
||||
|
||||
|
||||
|
||||
|
||||
int main() |
||||
{ |
||||
|
||||
RenderWindow window(VideoMode::getDesktopMode(),"Kraken's Game"); |
||||
|
||||
srand(time(NULL)); |
||||
|
||||
|
||||
|
||||
Thread bearRoaring(&funct,ASSETS_PATH "BearRoaring.wav"); |
||||
Thread bubble(&funct,ASSETS_PATH "bubbleunderwater.wav"); |
||||
Thread explosion(&funct,ASSETS_PATH "Explosion2.wav"); |
||||
Thread scream(&funct,ASSETS_PATH "screamingMan.wav"); |
||||
|
||||
Case theCase(&window); |
||||
theCase.Settexture(ASSETS_PATH "tilesetNew.png"); |
||||
|
||||
Level theLevel(&theCase,int(VideoMode::getDesktopMode().width/TILE_HEIGHT), int(VideoMode::getDesktopMode().height/TILE_HEIGHT)); |
||||
theLevel.create(); |
||||
|
||||
Kraken theBeast(&theLevel,int(VideoMode::getDesktopMode().width/TILE_HEIGHT), int(VideoMode::getDesktopMode().height/TILE_HEIGHT),2); |
||||
theBeast.Settexture(ASSETS_PATH "tilesetNew2.png"); |
||||
|
||||
Hero Josh(&theBeast,70,70); |
||||
theLevel.setCoordCase(int(70/TILE_WIDTH),int(70/TILE_HEIGHT),'3'); |
||||
Josh.Settexture(ASSETS_PATH "tilesetNew2.png"); |
||||
|
||||
View beastView; |
||||
beastView.setCenter(theBeast.getposition().x+TILE_WIDTH*2,theBeast.getposition().y+TILE_HEIGHT); |
||||
beastView.setSize(2*TILE_WIDTH,3*TILE_HEIGHT); |
||||
beastView.setViewport(FloatRect(0.9f,0,0.2f,0.25f)); |
||||
beastView.zoom(2.0f); |
||||
|
||||
View joshView; |
||||
joshView.setCenter(Josh.GetpozX(),Josh.GetpozY()); |
||||
joshView.setSize(10*TILE_WIDTH,10*TILE_HEIGHT); |
||||
|
||||
|
||||
bool attack(false); |
||||
// joshView.setViewport(FloatRect(0, 0, 0.8f, 1));
|
||||
|
||||
|
||||
/* RectangleShape rect;
|
||||
rect.setSize(Vector2f(200,200)); |
||||
rect.setPosition(Vector2f(beastView.getCenter().x-beastView.getSize().x/2,beastView.getCenter().y-beastView.getSize().y)); |
||||
rect.setFillColor(Color::Black); */ |
||||
//
|
||||
|
||||
|
||||
|
||||
|
||||
while (window.isOpen()) |
||||
{ |
||||
|
||||
Event event; |
||||
while(window.pollEvent(event)) |
||||
{ |
||||
switch(event.type) |
||||
{ |
||||
case (Event::Closed): window.close(); |
||||
case Event::KeyReleased: |
||||
{ |
||||
if (event.key.code==Keyboard::Up || event.key.code==Keyboard::Down) {Josh.SetspeedY(0);} |
||||
if (event.key.code==Keyboard::Right || event.key.code==Keyboard::Left) {Josh.SetspeedX(0);} |
||||
//if (event.key.code==Keyboard::Space) {attack=true;}
|
||||
} |
||||
case Event::KeyPressed: |
||||
{ |
||||
if(event.key.code==Keyboard::Space){attack=true; } |
||||
} |
||||
} |
||||
// if(Keyboard::isKeyPressed(Keyboard::Add)){}
|
||||
if(Keyboard::isKeyPressed(Keyboard::Up)) {Josh.SetspeedY(-0.2);} |
||||
if(Keyboard::isKeyPressed(Keyboard::Down)) {Josh.SetspeedY(0.2);} |
||||
if(Keyboard::isKeyPressed(Keyboard::Right)) {Josh.SetspeedX(0.2);} |
||||
if(Keyboard::isKeyPressed(Keyboard::Left)) {Josh.SetspeedX(-0.2);} |
||||
if(Keyboard::isKeyPressed(Keyboard::Space)) {attack=false;} |
||||
|
||||
|
||||
|
||||
// for(int j(0);j<1000;j+=0.1){}
|
||||
|
||||
|
||||
} |
||||
|
||||
|
||||
|
||||
|
||||
if (attack) |
||||
{ |
||||
//scream.launch();
|
||||
Josh.restartClock();Josh.Setattacking(true); attack=false; |
||||
} |
||||
/*
|
||||
///SOUND
|
||||
if (Josh.isDead()){explosion.launch();} |
||||
if (theBeast.isAttacking()) {bearRoaring.launch();} |
||||
if(theLevel.getCoord(int((Josh.GetpozX()+TILE_WIDTH/2)/TILE_WIDTH),int((Josh.GetpozY()+TILE_HEIGHT/2)/TILE_HEIGHT))=='4') {bubble.launch();} |
||||
*/ |
||||
window.clear(Color(0,100,250)); |
||||
theBeast.setCoord(Josh.GetpozX(),Josh.GetpozY()); |
||||
|
||||
///
|
||||
|
||||
///Big map
|
||||
joshView.setCenter(Josh.GetpozX(),Josh.GetpozY()); |
||||
window.setView(joshView); |
||||
|
||||
theLevel.draw(); |
||||
|
||||
Josh.draw(); |
||||
Josh.update(); |
||||
theBeast.update(); |
||||
|
||||
|
||||
|
||||
///LITTLE MAP
|
||||
window.setView(beastView); |
||||
beastView.setCenter(theBeast.getposition().x+TILE_WIDTH*2,theBeast.getposition().y+TILE_HEIGHT); |
||||
theLevel.draw(); |
||||
Josh.draw(); |
||||
Josh.update(); |
||||
theBeast.update(); |
||||
///
|
||||
window.display(); |
||||
} |
||||
|
||||
return 0; |
||||
} |
||||
Loading…
Reference in new issue