Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added assets/sprites/enemies/kiss.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion compile.bat
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
mkdir build
xcopy /Y src\*.dll build
pushd build
g++ -Wall -g -Wpedantic -Wall -Werror -static-libgcc -static-libstdc++ -Wl,-Bstatic,--whole-archive -lwinpthread -Wl,--no-whole-archive -std=c++17 ..\src\main.cpp ..\src\libraylib.dll ../src/monkey.cpp ..\src\timer.cpp ../src/snake.cpp ../src/Fruits.cpp ../src/Nukes.cpp ../src/Explosion.cpp ../src/FrostNuke.cpp ../src/FrostExplosion.cpp ../src/pig.cpp ../src/BulletTime.cpp ../src/snecPac.cpp -o snake_plus_plus.exe
g++ -Wall -g -Wpedantic -Wall -Werror -static-libgcc -static-libstdc++ -Wl,-Bstatic,--whole-archive -lwinpthread -Wl,--no-whole-archive -std=c++17 ..\src\main.cpp ..\src\libraylib.dll ../src/monkey.cpp ..\src\timer.cpp ../src/snake.cpp ../src/Fruits.cpp ../src/Nukes.cpp ../src/Explosion.cpp ../src/FrostNuke.cpp ../src/FrostExplosion.cpp ../src/pig.cpp ../src/BulletTime.cpp ../src/snecPac.cpp ../src/MotoMoto.cpp ../src/Shoot.cpp -o snake_plus_plus.exe
popd
build\snake_plus_plus.exe
rmdir /Q /S build
91 changes: 91 additions & 0 deletions src/MotoMoto.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
#include "MotoMoto.h"
#include <iostream>

MotoMoto::MotoMoto(Texture2D motoMotoSprite) {
sprite = motoMotoSprite;
position = createPosition();
velocity = Vector2{ 0,0 };
acceleration = Vector2{ 0,0 };
width = 100;
height = 100;
maxspeed = 3;
maxSeekForce = 0.055;
dead = 0;
frozen = 0;
freeze_timer = nullptr;

}

void MotoMoto::draw()
{
motoMotoRec = { position.x,position.y,width, height };
DrawTexturePro(sprite, { 0.0f, 0.0f, (float)sprite.width, (float)sprite.height },
motoMotoRec, { 0.0f, 0.0f }, 0.0f, (frozen == 0) ? WHITE : SKYBLUE);
}

void MotoMoto::update() {
// Update velocity
velocity = Vector2Add(velocity, acceleration);
// Limit speed
limit(velocity, maxspeed);
position = Vector2Add(position, velocity);
// Reset accelertion to 0 each cycle
acceleration = Vector2Scale(acceleration, 0);
draw();
// maxspeed += 0.001;
if (frozen == 1 && freeze_timer->isReady())
{
frozen = 0;
maxspeed = 1.5;
delete freeze_timer;
}
}
bool MotoMoto::collide(Rectangle rec) {
if (CheckCollisionRecs(motoMotoRec, rec)) {
return true;
}
else {
return false;
}
}

void MotoMoto::applyForce(Vector2 force) {
// We could add mass here if we want A = F / M
acceleration = Vector2Add(acceleration, force);
}

void MotoMoto::limit(Vector2& v, float num)
{
if (v.x > num) { v.x = num; }
if (v.x < -num) { v.x = -num; }
if (v.y > num) { v.y = num; }
if (v.y < -num) { v.y = -num; }
}

void MotoMoto::applyBehaviors(std::vector<MotoMoto>& hippo) {
Vector2 destination = createPosition();
Vector2 seekForce = seek(destination);
seekForce = Vector2Scale(seekForce, 1);
applyForce(seekForce);
}
// A method that calculates a steering force towards a target
// STEER = DESIRED MINUS VELOCITY
Vector2 MotoMoto::seek(Vector2 target) {
Vector2 desired = Vector2Subtract(target, position); // A vector pointing from the position to the target

// Normalize desired and scale to maximum speed
desired = Vector2Normalize(desired);
desired = Vector2Scale(desired, maxspeed);
// Steering = Desired minus velocity
Vector2 steer = Vector2Subtract(desired, velocity);
limit(steer, maxSeekForce);

return steer;
}
Vector2 MotoMoto::createPosition() {
Vector2 vec;
vec.y = rand() % GetScreenHeight();
vec.x = rand() % GetScreenWidth();

return vec;
}
37 changes: 37 additions & 0 deletions src/MotoMoto.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
#ifndef __MotoMoto_H_INCLUDED__
#define __MotoMoto_H_INCLUDED__

#include "libs/raylib.h"
#include "libs/raymath.h"
#include <ctime>
#include "stdlib.h"
#include "timer.h"
#include <vector>



class MotoMoto{
public:
Vector2 position;
Vector2 velocity;
Vector2 acceleration;
float width, height;
float maxspeed; // Maximum speed
float maxSeekForce;
int dead;
int frozen;
Rectangle motoMotoRec;
Texture2D sprite;
Timer* freeze_timer;
MotoMoto(Texture2D motoMotoSprite);
void draw();
void update();
void limit(Vector2&, float);
void applyForce(Vector2);
void applyBehaviors(std::vector<MotoMoto>&);
bool collide(Rectangle rec);
Vector2 createPosition();
Vector2 seek(Vector2);
};

#endif
109 changes: 109 additions & 0 deletions src/Shoot.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
#include "Shoot.h"
#include <iostream>

Shoot::Shoot(Texture2D kissSprite, Vector2 hippoPosition){
sprite = kissSprite;
position = hippoPosition;
velocity = Vector2{ 0,0 };
acceleration = Vector2{ 0,0 };
width = 40;
height = 40;
maxspeed = 3;
maxSeekForce = 0.055;
dead = 0;
frozen = 0;
direction = createPosition();
freeze_timer = nullptr;
}
void Shoot::draw()
{
kissRec = { position.x,position.y,width, height };
DrawTexturePro(sprite, { 0.0f, 0.0f, (float)sprite.width, (float)sprite.height },
kissRec, { 0.0f, 0.0f }, 0.0f, (frozen == 0) ? WHITE : SKYBLUE);
}

void Shoot::update() {
// Update velocity
velocity = Vector2Add(velocity, acceleration);
// Limit speed
limit(velocity, maxspeed);
position = Vector2Add(position, velocity);
// Reset accelertion to 0 each cycle
acceleration = Vector2Scale(acceleration, 0);
draw();
// maxspeed += 0.001;
if (frozen == 1 && freeze_timer->isReady())
{
frozen = 0;
maxspeed = 1.5;
delete freeze_timer;
}
}
bool Shoot::collide(Rectangle rec) {
if (CheckCollisionRecs(kissRec, rec)) {
return true;
}
else {
return false;
}
}

void Shoot::applyForce(Vector2 force) {
// We could add mass here if we want A = F / M
acceleration = Vector2Add(acceleration, force);
}

void Shoot::limit(Vector2& v, float num)
{
if (v.x > num) { v.x = num; }
if (v.x < -num) { v.x = -num; }
if (v.y > num) { v.y = num; }
if (v.y < -num) { v.y = -num; }
}

void Shoot::applyBehaviors(std::vector<Shoot>& kiss) {
Vector2 seekForce = seek(direction);
seekForce = Vector2Scale(seekForce, 1);
applyForce(seekForce);
}
// A method that calculates a steering force towards a target
// STEER = DESIRED MINUS VELOCITY
Vector2 Shoot::seek(Vector2 target) {
Vector2 desired = Vector2Subtract(target, position); // A vector pointing from the position to the target

// Normalize desired and scale to maximum speed
desired = Vector2Normalize(desired);
desired = Vector2Scale(desired, maxspeed);
// Steering = Desired minus velocity
Vector2 steer = Vector2Subtract(desired, velocity);
limit(steer, maxSeekForce);

return steer;
}
Vector2 Shoot::createPosition() {
Vector2 vec;
int roll = GetRandomValue(1, 4);
switch (roll)
{
case 1:
vec.x = -width;
vec.y = rand() % GetScreenHeight();
break;
case 2:
vec.x = rand() % GetScreenWidth();
vec.y = -height;
break;
case 3:
vec.x = GetScreenWidth() + width;
vec.y = rand() % GetScreenHeight();
break;
case 4:
vec.x = rand() % GetScreenWidth();
vec.y = GetScreenHeight() + height;
break;

default:
break;
}
return vec;
}
37 changes: 37 additions & 0 deletions src/Shoot.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
#ifndef __SHOOT_H_INCLUDED__
#define __SHOOT_H_INCLUDED__

#include "libs/raylib.h"
#include "libs/raymath.h"
#include <ctime>
#include "stdlib.h"
#include "timer.h"
#include <vector>


class Shoot {
public:
Vector2 position;
Vector2 velocity;
Vector2 acceleration;
float width, height;
float maxspeed; // Maximum speed
float maxSeekForce;
Rectangle kissRec;
Texture2D sprite;
int frozen;
int dead;
Vector2 direction;
Timer* freeze_timer;
Shoot(Texture2D kissSprite, Vector2 hippoPosition);
void draw();
void update();
void limit(Vector2&, float);
void applyForce(Vector2);
void applyBehaviors(std::vector<Shoot>&);
bool collide(Rectangle rec);
Vector2 createPosition();
Vector2 seek(Vector2);
};

#endif
Loading