Skip to content

Commit

Permalink
Added tasks
Browse files Browse the repository at this point in the history
  • Loading branch information
TanishTuteja committed Apr 16, 2022
1 parent 81eb8a1 commit 26ec36f
Show file tree
Hide file tree
Showing 5 changed files with 157 additions and 36 deletions.
154 changes: 127 additions & 27 deletions Game.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
#include <arpa/inet.h>
#include <fcntl.h>
#include <netdb.h>
#include <algorithm>
#include "MessageStructs.h"

LGame::LGame(LWindow &window, std::string playerName, std::string opponentName, int &sockfd, sockaddr_in &theiraddr) : LScreen(window), playerName(playerName), opponentName(opponentName), sockfd(sockfd), theirAddr(theiraddr)
Expand All @@ -29,29 +30,23 @@ LGame::LGame(LWindow &window, std::string playerName, std::string opponentName,
Mix_PlayChannel(-1, introMusic, 0);
Mix_PlayMusic(backGroundMusic, -1);
initObjs();
initTasks();
// initSocket();
}

void LGame::initSocket()
void LGame::initTasks()
{
if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
for (int i = 0; i < tasksNum; i++)
{
perror("socket creation failed");
std::vector<std::pair<int, std::string>>::iterator it;
std::pair<int, std::string> t;
do
{
t = allTasks[rand() % allTasks.size()];
it = std::find(currTasks.begin(), currTasks.end(), t);
} while (it != currTasks.end());
currTasks.push_back(t);
}

fcntl(sockfd, F_SETFL, O_NONBLOCK);

// memset(&myAddr, 0, sizeof(myAddr));
memset(&theirAddr, 0, sizeof(theirAddr));

// myAddr.sin_family = AF_INET; // IPv4
// myAddr.sin_addr.s_addr = INADDR_ANY;
// myAddr.sin_port = htons(2000);

theirAddr.sin_family = AF_INET;
theirAddr.sin_port = htons(8080);
// theirAddr.sin_addr.s_addr = INADDR_ANY;
inet_pton(AF_INET, serverIp.c_str(), &(theirAddr.sin_addr.s_addr));
}

void LGame::handleEvent(SDL_Event &e)
Expand Down Expand Up @@ -450,9 +445,12 @@ std ::function<void(SDL_Event &e, Player &player)> getHostelEventListener(std ::
player.getCurrentTaskTimer().start();
player.setTaskText("resting ... ");
player.setTaskAnimation(player.getGame().sleepingAnimation);
player.setUpdateStateParameters({gMaxPlayerHealth,
0,
0});
player.setUpdateStateParameters({
gMaxPlayerHealth,
0,
0,
0,
});
}
break;
case SDLK_b:
Expand All @@ -463,6 +461,7 @@ std ::function<void(SDL_Event &e, Player &player)> getHostelEventListener(std ::
player.setCurrentTaskTime(3000);
player.getCurrentTaskTimer().start();
player.setUpdateStateParameters({30,
0,
0,
0});
}
Expand All @@ -475,6 +474,7 @@ std ::function<void(SDL_Event &e, Player &player)> getHostelEventListener(std ::
player.setCurrentTaskTime(3000);
player.getCurrentTaskTimer().start();
player.setUpdateStateParameters({30,
0,
0,
0});
}
Expand All @@ -487,6 +487,7 @@ std ::function<void(SDL_Event &e, Player &player)> getHostelEventListener(std ::
player.setCurrentTaskTime(3000);
player.getCurrentTaskTimer().start();
player.setUpdateStateParameters({30,
0,
0,
0});
}
Expand Down Expand Up @@ -568,6 +569,7 @@ void LGame::initEntities()
player.setCurrentTaskTime(5000);
player.getCurrentTaskTimer().start();
player.setUpdateStateParameters({0,
0,
0,
0});
break;
Expand All @@ -594,6 +596,7 @@ void LGame::initEntities()
player.getCurrentTaskTimer().start();
player.setUpdateStateParameters({20,
-20,
0,
0});
}
break;
Expand All @@ -618,6 +621,7 @@ void LGame::initEntities()
player.setTaskAnimation(player.getGame().icecreamAnimation);
player.setUpdateStateParameters({10,
-10,
0,
0});
}
break;
Expand All @@ -638,21 +642,56 @@ void LGame::initEntities()
switch (e.key.keysym.sym)
{
case SDLK_b:
player.setTaskText("having hotdog... ");
player.setTaskText("playing basketball... ");
player.setTaskAnimation(player.getGame().basketballAnimation);
player.setCurrentTaskTime(3000);
player.getCurrentTaskTimer().start();
player.setUpdateStateParameters({0,
player.setUpdateStateParameters({-5,
0,
0});
0,
10});
break;
}
}
});
Entity athletic("athletic", [&](Player &player, std::string &displayText)
{ displayText = "athletic"; });
Entity cricket("cricket", [&](Player &player, std::string &displayText)
{ displayText = "cricket"; });

Entity athletic("athletic", getTextPromptFunc("PRESS A TO DO ATHLETICS"), [&](SDL_Event &e, Player &player)
{
if (e.type == SDL_KEYDOWN && e.key.repeat == 0)
{
switch (e.key.keysym.sym)
{
case SDLK_a:
player.setTaskText("doing athletics... ");
//player.setTaskAnimation(player.getGame().basketballAnimation);
player.setCurrentTaskTime(3000);
player.getCurrentTaskTimer().start();
player.setUpdateStateParameters({-5,
0,
0,
10});
break;
}
} });

Entity cricket("cricket", getTextPromptFunc("PRESS C TO PLAY CRICKET"), [&](SDL_Event &e, Player &player)
{
if (e.type == SDL_KEYDOWN && e.key.repeat == 0)
{
switch (e.key.keysym.sym)
{
case SDLK_c:
player.setTaskText("playing cricket... ");
//player.setTaskAnimation(player.getGame().basketballAnimation);
player.setCurrentTaskTime(3000);
player.getCurrentTaskTimer().start();
player.setUpdateStateParameters({-5,
0,
0,
10});
break;
}
} });
Entity lhc("lhc", [&](Player &player, std::string &displayText)
{ displayText = "lhc"; });
Entity police("police", [&](Player &player, std::string &displayText)
Expand Down Expand Up @@ -682,6 +721,7 @@ void LGame::initEntities()
player.setUpdateStateParameters({
20 ,
-20 ,
0,
0
}) ;
}
Expand Down Expand Up @@ -775,4 +815,64 @@ int LGame::getWindowHeight()
LTimer LGame ::getTimer()
{
return globalTime;
}

bool LGame::hasTask(std::pair<int, std::string> task)
{
std::vector<std::pair<int, std::string>>::iterator it;
it = std::find(currTasks.begin(), currTasks.end(), task);
return it != currTasks.end();
}

bool LGame::hasTask(int task)
{
for (int i = 0; i < currTasks.size(); i++)
{
if (currTasks[i].first == task)
{
return true;
}
}
return false;
}

void LGame::replaceTask(std::pair<int, std::string> task)
{
std::vector<std::pair<int, std::string>>::iterator it;
it = std::find(currTasks.begin(), currTasks.end(), task);
int index = it - currTasks.begin();
std::vector<std::pair<int, std::string>>::iterator it2;
std::pair<int, std::string> t;
do
{
t = allTasks[rand() % allTasks.size()];
it2 = std::find(currTasks.begin(), currTasks.end(), t);
} while (it2 != currTasks.end());
currTasks[index] = t;
}

void LGame::replaceTask(int task)
{
int index = -1;
for (int i = 0; i < currTasks.size(); i++)
{
if (currTasks[i].first == task)
{
index = i;
break;
}
}
if (index == -1)
{
return;
}

std::vector<std::pair<int, std::string>>::iterator it2;
std::pair<int, std::string> t;
do
{
t = allTasks[rand() % allTasks.size()];
it2 = std::find(currTasks.begin(), currTasks.end(), t);
} while (it2 != currTasks.end());
currTasks[index] = t;
}
10 changes: 10 additions & 0 deletions Game.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,15 @@
#include <arpa/inet.h>
#include <fcntl.h>
#include <netdb.h>
#include <vector>

class LGame : public LScreen
{
private:
const std::vector<std::pair<int, std::string>> allTasks = {std::pair<int, std::string>(27, "Play Basketball"), std::pair<int, std::string>(28, "Do Athletics"), std::pair<int, std::string>(29, "Play Cricket")};
std::vector<std::pair<int, std::string>> currTasks;
int tasksNum = 2;

std::string serverIp;
std::string playerName, opponentName;

Expand Down Expand Up @@ -60,6 +65,7 @@ class LGame : public LScreen
int mTileHeight;
int mMaxPlayerHealth;
bool initObjs();
void initTasks();
bool setTiles();
void initEntities();

Expand Down Expand Up @@ -91,6 +97,10 @@ class LGame : public LScreen
LTimer getTimer();
Mix_Music *backGroundMusic;
Mix_Chunk *introMusic;
bool hasTask(std::pair<int, std::string> task);
bool hasTask(int task);
void replaceTask(std::pair<int, std::string> task);
void replaceTask(int task);
};

#endif
12 changes: 9 additions & 3 deletions Player.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
#include <time.h>
#include <stdlib.h>
#include "constants.h"
#include <algorithm>

std ::vector<std ::string> hostelNames{"nilgiri", "kara", "aravali", "jwala", "kumaon", "vindy", "satpura", "udai_girnar", "himadri", "kailash"};

Expand All @@ -30,7 +31,7 @@ Player ::Player(LTexture &myTexture, LGame &game, int playerHeight, int playerWi
hostelName = "nilgiri"; // for testing
currentTaskTime = 0;
currentTaskTimer = LTimer();
updateState = {0.0, 0, 0};
updateState = {0.0, 0, 0, 0};
// Initialize the velocity
mVelX = 0;
mVelY = 0;
Expand Down Expand Up @@ -93,7 +94,7 @@ void Player ::resetPlayer()
currentTaskTime = 0;
currentTaskTimer.stop();
direction = 'D';
updateState = {0, 0, 0};
updateState = {0, 0, 0, 0};
}

void Player::handleEvent(SDL_Event &e)
Expand Down Expand Up @@ -407,7 +408,7 @@ void Player::update()
currentTaskTime = 0;
currentTaskTimer.stop();
updateStateParameters(updateState);
updateState = {0.0, 0, 0};
updateState = {0.0, 0, 0, 0};
taskText = "";
hasTaskAnimation = false;
// update player stats
Expand Down Expand Up @@ -495,6 +496,11 @@ void Player::updateStateParameters(playerStateUpdate s)
setHealth(getHealth() + s.health);
setPoints(getPoints() + s.points);
setMoney(getMoney() + s.money);
if (mGame.hasTask(lastTileType))
{
setPoints(getPoints() + s.pointsIfTask);
mGame.replaceTask(lastTileType);
}
}

void Player::setUpdateStateParameters(playerStateUpdate s)
Expand Down
3 changes: 3 additions & 0 deletions main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
#include <fstream>
#include <iostream>
#include <sstream>
#include <random>
#include <time.h>

#include "MyWindow.h"
#include "Game.h"
Expand All @@ -15,6 +17,7 @@ const int SCREEN_HEIGHT = 480;

int main(int argc, char *args[])
{
srand(time(0));
std::string serverIp = "192.168.227.10";
if (argc > 1)
{
Expand Down
14 changes: 8 additions & 6 deletions utilities.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
struct playerStateUpdate{

float health ;
int money ;
int points ;
} ;
struct playerStateUpdate
{

float health;
int money;
int points;
int pointsIfTask;
};

0 comments on commit 26ec36f

Please sign in to comment.