diff options
author | Tom Barrett <tombarrett@cornell.engr.siu.edu> | 2015-05-08 10:14:42 -0500 |
---|---|---|
committer | Tom Barrett <tombarrett@cornell.engr.siu.edu> | 2015-05-08 10:14:42 -0500 |
commit | 39d7fe95633baafe4539f604186b151f30401a39 (patch) | |
tree | 242d91eafe56a15db046a1068d8e970624c6abfd | |
parent | 76e10e651906b756c4482274cdf1d8ccb686b915 (diff) | |
parent | 8c5121486a0e5d94ae5e5ee67370a31530cf8b6f (diff) |
Merge branch 'master' of http://github.com/majortom6/natures
-rw-r--r-- | inc/creature.hpp | 12 | ||||
-rw-r--r-- | inc/entity.hpp | 4 | ||||
-rw-r--r-- | inc/list.hpp | 4 | ||||
-rw-r--r-- | inc/location.hpp | 14 | ||||
-rw-r--r-- | inc/resource.hpp | 2 | ||||
-rw-r--r-- | src/creature.cpp | 114 | ||||
-rw-r--r-- | src/entity.cpp | 2 | ||||
-rw-r--r-- | src/list.cpp | 48 | ||||
-rw-r--r-- | src/main.cpp | 2 | ||||
-rw-r--r-- | src/resource.cpp | 16 | ||||
-rw-r--r-- | src/window.cpp | 8 |
11 files changed, 121 insertions, 105 deletions
diff --git a/inc/creature.hpp b/inc/creature.hpp index f72dfbc..9bb73ee 100644 --- a/inc/creature.hpp +++ b/inc/creature.hpp @@ -10,14 +10,16 @@ class Creature: public Entity Creature(Window m, std::string s); void Behavior(); void Action(); + void Priority(); Location getLocation(); + void giveKnown(std::vector<Location> Z){location = Z;}; private: - int xT; - int yT; - int hp; - int hu; - Location K[3]; + int xTarget; //x-coordinate of creature's target position + int yTarget; //y-coordinate of creature's target position + int health; //health of a creature (0-100) + int hunger; //value associated with a creatures want to find food (0-100) + std::vector<Location> location; //vector containing objects near the creature }; #endif diff --git a/inc/entity.hpp b/inc/entity.hpp index 5ed2e74..079da9b 100644 --- a/inc/entity.hpp +++ b/inc/entity.hpp @@ -10,8 +10,8 @@ class Entity SDL_Texture* loadTexture(std::string path, Window main); protected: - int x, y; - int height, width; + int xPosition, yPosition; //Coordinates of entity on window + int height, width; //Dimensions of image on window int degrees = 0; SDL_Texture* texture; SDL_Renderer* renderer; diff --git a/inc/list.hpp b/inc/list.hpp index 203ad7f..dc5c412 100644 --- a/inc/list.hpp +++ b/inc/list.hpp @@ -12,9 +12,11 @@ class List List(Window m); void Behavior(); void Place(); + double Distance(Location A, Location B); private: - //Window main; + //vectors containing objects of each type + Window * main;//will be needed for adding R's and C's after constructor. std::vector<Resource> R; std::vector<Creature> C; std::vector<Location> L; diff --git a/inc/location.hpp b/inc/location.hpp index 2042734..8bd512c 100644 --- a/inc/location.hpp +++ b/inc/location.hpp @@ -4,14 +4,12 @@ class Location { public: - Location(){x=y=t=0;}; - Location(int x, int y, int z){}; - int getType(){return t;}; - - private: - int x; - int y; - int t; + Location(){x=y=type=0;}; //is this line needed? + Location(int x1, int y1, int t1){x=x1;y=y1;type=t1;}; + + int x; //x-coordinate of entity + int y; //y-coordinate of entity + int type; //value associated with type of entity at location. 1: Creature, 2: Resource }; #endif diff --git a/inc/resource.hpp b/inc/resource.hpp index 2738f44..383e9ef 100644 --- a/inc/resource.hpp +++ b/inc/resource.hpp @@ -11,7 +11,7 @@ class Resource: public Entity Location getLocation(); private: - int amount; + int amount; //value associated with the amount of whatever (food, etc) left in the resource }; #endif diff --git a/src/creature.cpp b/src/creature.cpp index 9d50291..5c3bb8e 100644 --- a/src/creature.cpp +++ b/src/creature.cpp @@ -1,105 +1,95 @@ #include "creature.hpp" -Creature::Creature(Window m, std::string s) +Creature::Creature(Window m, std::string s) //Constructor { texture = loadTexture(s, m); renderer = m.getRenderer(); - hp = 100; - hu = 0; + health = 100; + hunger = 0; - int zy = rand()%800; - int zx = rand()%1200; - y=zy; - x=zx; - //std::cout << x << ' ' << y << std::endl; - - //For the test resource - xT=yT=300; + //initializes random start coordinates for creature, target position is equivalent to it's position + yPosition=yTarget=rand()%800; + xPosition=xTarget=rand()%1200; } void Creature::Behavior() { - hp--; - //Detection - - - //Priorities + health--; //Decrements health each time a behavior is executed + this->Priority(); //Checks which action has priority (doesn't really do this right now) + this->Action(); //Does action +} - //Action - this->Action(); +void Creature::Priority() +{ + //Traverses location vector, if object at [i] is resource (2), then creature's target coordinates are set + int i; + for(i=0;i<location.size();i++) + { + if(location[i].type==2) + { + xTarget = location[i].x; + yTarget = location[i].y; + } + } } void Creature::Action() { - //std::cout << (sqrt(((x-xT)^2)+((y-yT)^2)); - if((sqrt(((x-xT)^2)+((y-yT)^2)))<2) - return; //eat//reproduce//etc; + //If the distance is close, will return an bool + if(sqrt(pow(xPosition - xTarget, 2) + pow(yPosition - yTarget, 2)) < 2) + return; //<--- eat action should be here - if(x==xT) + //Makes moves towards target coordinates + if(xPosition==xTarget) { - if(y<yT) - y++; + if(yPosition<yTarget) + yPosition++; else - y--; + yPosition--; } - else if(y==yT) - { - if(x<xT) - x++; - else - x--; - } - else if(x<xT) + + else if(yPosition==yTarget) { - if(y<yT) - { - x++; - y++; - } + if(xPosition<xTarget) + xPosition++; else - { - x++; - y--; - } + xPosition--; } - else if (x>xT) + + else if(xPosition<xTarget) { - if(y<yT) + if(yPosition<yTarget) { - x--; - y++; + xPosition++; + yPosition++; } + else { - x--; - y--; + xPosition++; + yPosition--; } } - /* - else + else if (xPosition>xTarget) { - int z = rand()%2; - if(z) + if(yPosition<yTarget) { - if(x<xT) - x++; - else - x--; + xPosition--; + yPosition++; } + else { - if(y<yT) - y++; - else - y--; + xPosition--; + yPosition--; } } - */ } Location Creature::getLocation() { - Location L(x,y,1); + //returns location object of the specific creature + Location L(xPosition, yPosition, 1); return L; } diff --git a/src/entity.cpp b/src/entity.cpp index f7e8857..10a3ccc 100644 --- a/src/entity.cpp +++ b/src/entity.cpp @@ -2,7 +2,7 @@ void Entity::Place() { - SDL_Rect rect = {x, y, width/8, height/8}; + SDL_Rect rect = {xPosition, yPosition, width/8, height/8}; SDL_RenderCopyEx(renderer,texture,NULL,&rect,degrees,NULL,SDL_FLIP_NONE); } diff --git a/src/list.cpp b/src/list.cpp index c3246c9..2140a75 100644 --- a/src/list.cpp +++ b/src/list.cpp @@ -1,14 +1,16 @@ #include "list.hpp" -List::List(Window m) +List::List(Window m) //Constructor { int i; - for(i=0;i<5;i++) + + for(i=0;i<10;i++) { - Creature X = Creature(m,"img/Cbasic.png"); + Creature X(m,"img/Cbasic.png"); C.push_back(X); } + //Creates 5 resources, inserts them into vector R; inserts locations of resources into vector L for(i=0;i<5;i++) { Resource Y(m,"img/Rbasic.png"); @@ -17,31 +19,51 @@ List::List(Window m) } } -void List::Behavior() -{ - int i; - for(i = 0; i < C.size(); i++) - { - C[i].Behavior(); - } -} - void List::Place() { int i; + //if any locations are creatures, erases them from vector L for(i = 0;i < L.size(); i++) - if(L.getType()==1) + if(L[i].type==1) L.erase(L.begin()+i); + //places each creature on window, inserts their locations into vector L for(i = 0; i < C.size(); i++) { C[i].Place(); L.push_back(C[i].getLocation()); } + //places all resources for(i = 0; i < R.size(); i++) { R[i].Place(); } } + +void List::Behavior() +{ + int i, j; + std::vector<Location> Z; + + // + for(i = 0; i < C.size(); i++) + { + C[i].Behavior(); //executes the behavior of the creature at i + for(j = 0; j < L.size(); j++) + if(200>(Distance(C[i].getLocation(),L[j]))) //if the distance between the creature and L[j] is less than 200, insert L[j] into vector Z. + { + Z.push_back(L[j]); + } + + C[i].giveKnown(Z); //sets creature's target location? + Z.clear(); //clear vector Z for next creature + } +} + +double List::Distance(Location A, Location B) +{ + //computes distance between two points + return sqrt(pow(A.x - B.x, 2) + pow(A.y - B.y, 2)); +} diff --git a/src/main.cpp b/src/main.cpp index 1dec02c..4290386 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -22,7 +22,7 @@ int main() L.Behavior();
main.Render();
- SDL_Delay(5);
+ SDL_Delay(10);
}
main.Destroy();
diff --git a/src/resource.cpp b/src/resource.cpp index a087aca..5044760 100644 --- a/src/resource.cpp +++ b/src/resource.cpp @@ -1,17 +1,19 @@ #include "resource.hpp" -Resource::Resource(Window m, std::string s) +Resource::Resource(Window m, std::string s) //Constructor { texture = loadTexture(s, m); renderer = m.getRenderer(); - int zy = rand()%800; - int zx = rand()%1200; - y=zy; - x=zx; + + //Initialized random position coordinates + int yStart = rand()%800; + int xStart = rand()%1200; + yPosition = yStart; + xPosition = xStart; } -Location Resource::getLocation() +Location Resource::getLocation() //Returns resource object { - Location L(x,y,2); + Location L(xPosition,yPosition,2); return L; } diff --git a/src/window.cpp b/src/window.cpp index b25f11e..66c7a4c 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -1,6 +1,6 @@ #include "window.hpp" -Window::Window() +Window::Window() //Constructor { SDL_Init(SDL_INIT_VIDEO); main = SDL_CreateWindow("main",SDL_WINDOWPOS_UNDEFINED,SDL_WINDOWPOS_UNDEFINED,1280,800,SDL_WINDOW_SHOWN); @@ -8,19 +8,19 @@ Window::Window() SDL_SetRenderDrawColor(renderer, 0, 0, 0, 0); } -void Window::Destroy() +void Window::Destroy() //Kills window { SDL_DestroyRenderer(renderer); SDL_DestroyWindow(main); SDL_Quit(); } -void Window::Clear() +void Window::Clear() //Clears renderer { SDL_RenderClear(renderer); } -void Window::Render() +void Window::Render() //Brings image forward { SDL_RenderPresent(renderer); } |