Jump to content
  • Advertisement

ICanC

Member
  • Content count

    33
  • Joined

  • Last visited

Community Reputation

147 Neutral

About ICanC

  • Rank
    Member

Personal Information

  • Interests
    Programming

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. the stock class now looks like this, but it generates the same error: #pragma once #include <iostream> #include <iomanip> #include <string> class stock { private: std::pair<std::string,float> company; public: stock(std::string name, float price); ~stock() = default; void display() const { std::cout << company.first << std::endl << std::fixed << std::setprecision(2) << company.second << std::endl; } const float getPrice() { return company.second; } const std::string getName() { return company.first; } bool operator==(stock n) { return this->company.first == n.company.first; } }; stock::stock(std::string name, float price) { company.first = name; company.second = price; }
  2. I've decided to change the code slightly and work with a vector of pairs instead. However now I'm having problems getting std::find to work again, please see the following code: void sell_stock(std::shared_ptr<stock> shares, int quantity) { std::vector<std::pair<stock, int>>::iterator it = std::find(std::begin(investments), std::end(investments), shares->getName()); if (it == std::end(investments)) { std::cout << "\n\nERROR - person.sell_stock tried to sell shares not in portfolio" << std::endl; char exit; std::cin >> exit; } else { investments.erase(it); cash += (shares->getPrice() * quantity); } } }; // ==================================================================================================================================== and the overload in the stock class : bool operator==(std::pair<std::string,float> n) { return this->company.first == n.first; } gives me error: c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.14.26428\include\xutility(3579): error C2678: binary '==': no operator found which takes a left-hand operand of type 'std::pair<stock,int>' (or there is no acceptable conversion) 1>c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.14.26428\include\random(2557): note: could be 'bool std::operator ==(const std::bernoulli_distribution &,const std::bernoulli_distribution &)' 1>c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.14.26428\include\system_error(284): note: or 'bool std::operator ==(const std::error_condition &,const std::error_condition &) noexcept' 1>c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.14.26428\include\system_error(278): note: or 'bool std::operator ==(const std::error_condition &,const std::error_code &) noexcept' 1>c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.14.26428\include\system_error(272): note: or 'bool std::operator ==(const std::error_code &,const std::error_condition &) noexcept' 1>c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.14.26428\include\system_error(266): note: or 'bool std::operator ==(const std::error_code &,const std::error_code &) noexcept' 1>c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.14.26428\include\exception(330): note: or 'bool std::operator ==(const std::exception_ptr &,std::nullptr_t) noexcept' 1>c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.14.26428\include\exception(325): note: or 'bool std::operator ==(std::nullptr_t,const std::exception_ptr &) noexcept' 1>c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.14.26428\include\exception(320): note: or 'bool std::operator ==(const std::exception_ptr &,const std::exception_ptr &) noexcept' 1>c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.14.26428\include\xutility(3579): note: while trying to match the argument list '(std::pair<stock,int>, const std::string)' 1>c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.14.26428\include\xutility(3592): note: see reference to function template instantiation '_InIt std::_Find_unchecked1<_InIt,_Ty>(_InIt,const _InIt,const _Ty &,std::false_type)' being compiled
  3. Thanks, fixed it searching for shares->getName() instead of the object itself and adding: bool operator==(std::string n) { return this->name == n; } not too sure how to compare 2 objects yet, so just looking at the name will do for now
  4. 1>------ Build started: Project: stock-simulator, Configuration: Debug Win32 ------ 1>main.cpp 1>c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.14.26428\include\memory(1772): warning C4244: 'argument': conversion from 'double' to 'float', possible loss of data 1>c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.14.26428\include\memory(1836): note: see reference to function template instantiation 'std::_Ref_count_obj<_Ty>::_Ref_count_obj<const char(&)[9],double>(const char (&)[9],double &&)' being compiled 1> with 1> [ 1> _Ty=stock 1> ] 1>c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.14.26428\include\memory(1837): note: see reference to function template instantiation 'std::_Ref_count_obj<_Ty>::_Ref_count_obj<const char(&)[9],double>(const char (&)[9],double &&)' being compiled 1> with 1> [ 1> _Ty=stock 1> ] 1>c:\users\jonathan\documents\projects\stock-simulator\main.cpp(22): note: see reference to function template instantiation 'std::shared_ptr<stock> std::make_shared<stock,const char(&)[9],double>(const char (&)[9],double &&)' being compiled 1>c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.14.26428\include\xutility(3579): error C2678: binary '==': no operator found which takes a left-hand operand of type 'stock' (or there is no acceptable conversion) 1>c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.14.26428\include\system_error(284): note: could be 'bool std::operator ==(const std::error_condition &,const std::error_condition &) noexcept' 1>c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.14.26428\include\system_error(278): note: or 'bool std::operator ==(const std::error_condition &,const std::error_code &) noexcept' 1>c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.14.26428\include\system_error(272): note: or 'bool std::operator ==(const std::error_code &,const std::error_condition &) noexcept' 1>c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.14.26428\include\system_error(266): note: or 'bool std::operator ==(const std::error_code &,const std::error_code &) noexcept' 1>c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.14.26428\include\exception(330): note: or 'bool std::operator ==(const std::exception_ptr &,std::nullptr_t) noexcept' 1>c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.14.26428\include\exception(325): note: or 'bool std::operator ==(std::nullptr_t,const std::exception_ptr &) noexcept' 1>c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.14.26428\include\exception(320): note: or 'bool std::operator ==(const std::exception_ptr &,const std::exception_ptr &) noexcept' 1>c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.14.26428\include\memory(1621): note: or 'bool std::operator ==<stock>(std::nullptr_t,const std::shared_ptr<stock> &) noexcept' 1>c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.14.26428\include\xutility(3579): note: while trying to match the argument list '(stock, const std::shared_ptr<stock>)' 1>c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.14.26428\include\xutility(3592): note: see reference to function template instantiation '_InIt std::_Find_unchecked1<_InIt,_Ty>(_InIt,const _InIt,const _Ty &,std::false_type)' being compiled 1> with 1> [ 1> _InIt=stock *, 1> _Ty=std::shared_ptr<stock> 1> ] 1>c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.14.26428\include\xutility(3601): note: see reference to function template instantiation '_InIt std::_Find_unchecked<stock*,_Ty>(const _InIt,const _InIt,const _Ty &)' being compiled 1> with 1> [ 1> _InIt=stock *, 1> _Ty=std::shared_ptr<stock> 1> ] 1>c:\users\jonathan\documents\projects\stock-simulator\person.hpp(22): note: see reference to function template instantiation '_InIt std::find<std::_Vector_iterator<std::_Vector_val<std::_Simple_types<_Ty>>>,std::shared_ptr<_Ty>>(_InIt,const _InIt,const std::shared_ptr<_Ty> &)' being compiled 1> with 1> [ 1> _InIt=std::_Vector_iterator<std::_Vector_val<std::_Simple_types<stock>>>, 1> _Ty=stock 1> ] 1>Done building project "stock-simulator.vcxproj" -- FAILED. ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
  5. #pragma once #include <string> #include <algorithm> #include "stock.hpp" class person { private: std::string name; float cash; std::vector<stock> investments; public: person(std::string name, float cash) { this->name = name; this->cash = cash; } ~person() = default; void buy_stock(std::shared_ptr<stock> shares, int quantity) { cash -= (shares->getPrice() * quantity); //quantity TODO investments.push_back(*shares); } void sell_stock(std::shared_ptr<stock> shares, int quantity) { std::vector<stock>::iterator it = std::find(std::begin(investments), std::end(investments), shares); if (it == std::end(investments)) { std::cout << "\n\nERROR - person.sell_stock tried to sell shares not in portfolio" << std::endl; char exit; std::cin >> exit; } else { ptrdiff_t index = std::distance(std::begin(investments), it); investments.erase(it); cash += (shares->getPrice() * quantity); } } }; The void sell_stock function won't compile but I can't understand the compiler errors that come out, please can someone advise? Is it something to do with the fact I don't have an overload for ==? by the way the ptrdiff_t index = std::distance I know is doing nothing note: see reference to function template instantiation '_InIt std::_Find_unchecked<stock*,_Ty>(const _InIt,const _InIt,const _Ty &)' being compiled 1> with 1> [ 1> _InIt=stock *, 1> _Ty=std::shared_ptr<stock> 1> ]
  6. ICanC

    C++ and SDL loop

    I'm a C++ and SDL beginner and I'm trying to make my first 2d game (blackjack) but I'm struggling to get an elegant loop in place to control the images, animations and input. in my rush and excitement to get graphics on the screen I ended up with a massive function handling everything, which just 2 'player decisions' in, has become a monstrous unmaintainable mess, e.g.: bool decision_one = true; bool decision_two = false; card playercard3 = this->deal(); while (decision_one) { SDL_PollEvent(&e); if (e.type == SDL_KEYDOWN) { if (e.key.keysym.sym == SDLK_h) { while (playersource3.x != playerdestination3.x) { playersource3.x += 10; playersource3.y += 10; SDL_BlitSurface(background, NULL, screenSurface, NULL); SDL_BlitSurface(this->getImage(playercard1.image_number), NULL, screenSurface, &playersource1); SDL_BlitSurface(redback, NULL, screenSurface, &dealersource1); SDL_BlitSurface(this->getImage(playercard2.image_number), NULL, screenSurface, &playersource2); SDL_BlitSurface(this->getImage(dealercard2.image_number), NULL, screenSurface, &dealersource2); SDL_BlitSurface(this->getImage(playercard3.image_number), NULL, screenSurface, &playersource3); SDL_UpdateWindowSurface(window); decision_one = false; decision_two = true; } } else if (e.key.keysym.sym == SDLK_s) { card dealercard1 = this->deal(); SDL_BlitSurface(this->getImage(dealercard1.image_number), NULL, screenSurface, &dealersource1); SDL_UpdateWindowSurface(window); decision_one = false; } } SDL_Delay(80); } So I'm trying break it up into smaller chunks like this: class card { private: std::string name; int value; int suit; public: int image_number; SDL_Rect source; SDL_Rect dest; int vel; card(std::string name, int value, int suit, int image_number); card() {}; ~card() {}; void display() const; }; class blackjack { private: std::vector<card> deck; int minBet; int maxBet; int decks; public: blackjack(int minBet, int maxBet, int decks); ~blackjack() {}; SDL_Surface* getImage(int i); void play_hand(std::shared_ptr<player> p); void getinput(std::shared_ptr<player> p); void create_card(card c, int sourceX, int sourceY, int destX, int destY, int vel); void animate_card(card c); void shuffle(); void reshuffle(); void render(); card deal(); void play(std::shared_ptr<player> p); }; card blackjack::deal() { card dealCard = this->deck[this->deck.size() - 1]; this->deck.pop_back(); return dealCard; } void blackjack::create_card(card c, int sourceX, int sourceY, int destX, int destY, int vel) { SDL_Surface* newCard = this->getImage(c.image_number); entities.push_back(*newCard); c.source.x = sourceX; c.source.y = sourceY; c.dest.x = destX; c.dest.y = destY; c.vel = vel; } void blackjack::animate_card(card c) { while (c.source.x != c.dest.x) { c.source.x += c.vel; c.source.x += c.vel; for (auto i : entities) { SDL_Surface *s = &i; SDL_BlitSurface(background, NULL, screenSurface, NULL); SDL_BlitSurface(s, NULL, screenSurface, //HOW TO GET IMAGE POS HERE?); SDL_UpdateWindowSurface(window); } } } void blackjack::render() { } void blackjack::play(std::shared_ptr<player> p) { this->shuffle(); init_graphics(); this->getinput(p); } The main problem I'm struggling to get my head around is rendering all current images in the game and animating them until they reach their destination. I've created a global variable std::vector<SDL_Surface> entities to hold all images in a hand, and I've gotten to the animate card function above but can't understand how i'm going to pass in the location of all the sdl_surface entities for the blitsurface function - any advise on a simple way to add images, animate them from a source to a dest, and keep track of all of this in one 'render' function would be great
  7. ICanC

    C++ comparing 2 floats

    thanks haegarr, that fixed it. and thanks Bregma, my logic was backwards, when writing that code I was wrongly thinking that 'return 0' indicates a 'true' and successful end to the program, when it is infact true values that indicate failure
  8. hi all, I'm testing with floats for the first time and have discovered that you can't compare 2 floats due to rounding errors. I've read online that you must use an epsilon and test for less than, however I don't seem to be able to get it working with the below code. - when running the code below it it is looping through 6 floats testing for equality with f entered by the player, but even if I put something totally different from the options, the message "not a valid position" is never executed void locks::try_lock() { print("\nEnter lock position: "); float f; cin >> f; int fexists = 1; float epsilon = 0.0000001; // Not sure what the best value to put here is? for (float &a : this->answers) { if ((a - f) < epsilon) { fexists = 0; } } if (fexists == 1) { cout << endl << f << " is not a valid position\n\n"; Sleep(2000); return; } }
  9. ICanC

    C++ buffer or vector issue

    Thanks for all the replies. I've fixed the iterator issue, and the actual cause of the problem was something to do with the messages not being properly conditioned, adding in a few ifs below fixed the issue void merchant::buyfrom(character *a) { print("\nItem to buy: "); string item1; getline(cin, item1); vector<item>::iterator it; unsigned vector_size = this->items.size(); int check = 0; // to handle merchant does not have msg with not enough gold msg for (it = this->items.begin(); it != this->items.end();) { if (it->name == item1) { if (it->price > a->gold) { print("\n\nYou don't have enough gold to buy the "); cout << it->name; check = 1; break; } print("\n\nYou bought "); std::cout << item1; print(" for "); std::cout << it->price; print(" gold"); a->inventory.push_back(*it); a->gold -= it->price; this->gold += it->price; this->items.erase(it); break; } else { ++it; } } if (this->items.size() == vector_size && check == 0) { print("\n\nMerchant does not have a "); std::cout << item1; print(" to sell"); } print("\n\n\n1. Back\n\n\n> "); char c; std::cin >> c; } void merchant::sellto(character *a) { print("\nItem to sell: "); string item1; getline(cin, item1); vector<item>::iterator it; unsigned vector_size = a->inventory.size(); for (it = a->inventory.begin(); it != a->inventory.end();) { if (it->name == item1) { print("\n\nYou sold "); std::cout << item1; print(" for "); std::cout << it->price; print(" gold"); this->items.push_back(*it); a->gold += it->price; this->gold -= it->price; a->inventory.erase(it); break; } else { ++it; } } if (a->inventory.size() == vector_size) { print("\nYou do not have "); std::cout << item1; print(" to sell"); } /* int increase = (it->price * 1.2+1); vector<item>::iterator it2; for (it2 = this->items.begin(); it2 != this->items.end(); ++it2) { if (it2->name == it->name) { it2->price = increase; } } */ print("\n\n\n1. Back\n\n\n> "); char c; std::cin >> c; }
  10. ICanC

    C++ buffer or vector issue

    Thanks, i've put the erase just before the break but the problem still occurs. I guess if there isn't anything obviously wrong the bug must be on the menu function which calls the above 2 functions? Or possibly the item struct?
  11. I'm looking for a bit of help please, I have a merchant class that you can buy from and sell to. The merchant has his own vector of struct 'items' as does the player. To begin the transactions, a merchants menu function is called, passing in the address of a player (character class) The below code works perfectly as expected, (e.g. if you haven't got enough gold, it states it correctly, or if either person doesn't have the item, etc) but as soon as a transaction occurs, like the player selling something, any attempts to sell anything else will show no message and just show the ".1. Back" option, or trying to buy something will say twice the merchant doesn't have it, or if he does, it will say he doesn't have it, but then say you bought it... it's probably something really simple and bad design on my part, but I can't figure it out void merchant::buyfrom(character *a) { print("\nItem to buy: "); string item1; fflush(stdin); getline(cin, item1); vector<item>::iterator it; for (it = this->items.begin(); it != this->items.end(); ++it) { if (it->name == item1) { if (it->price > a->gold) { print("\n\nYou don't have enough gold to buy the "); cout << it->name; break; } print("\n\nYou bought "); std::cout << item1; print(" for "); std::cout << it->price; print(" gold"); this->items.erase(it); a->inventory.push_back(*it); a->gold -= it->price; this->gold += it->price; break; } else { print("\n\nMerchant does not have a "); std::cout << item1; print(" to sell"); } } print("\n\n\n1. Back\n\n\n> "); char c; std::cin >> c; } void merchant::sellto(character *a) { print("\nItem to sell: "); string item1; fflush(stdin); getline(cin, item1); vector<item>::iterator it; for (it = a->inventory.begin(); it != a->inventory.end(); ++it) { if (it->name == item1) { print("\n\nYou sold "); std::cout << item1; print(" for "); std::cout << it->price; print(" gold"); a->inventory.erase(it); this->items.push_back(*it); a->gold += it->price; this->gold -= it->price; break; } else { print("\nYou do not have "); std::cout << item1; print(" to sell"); } } print("\n\n\n1. Back\n\n\n> "); char c; std::cin >> c; }
  12. ICanC

    C++ Random number issue

    Thanks TheChubu, that's exactly what I needed
  13. I'm struggling to get random numbers, in the below code, If I take out the time seed, I get different random numbers each roll, however they are the same on each play through. If I leave the time seed in, the rolls are always 1 and 1. Please can someone advise what I am doing wrong? I've tried making the game sleep a few seconds to change the results of time time seed call void dicegame::battle(character *a, character *b) { int rollone = this->roll(); int rolltwo = this->roll(); int total1 = rollone+rolltwo; Sleep(5000); int rollone2 = this->roll(); int rolltwo2 = this->roll(); int total2 = rollone2+rolltwo2; Sleep(5000); } int dicegame::roll() { static std::uniform_int_distribution<int> u(1, 6); static std::default_random_engine e; e.seed(time(0)); int roll = (u(e)); return roll; }
  14. ICanC

    C++ Text Adventure Design

    Thanks for the replies, and thanks Satharis, that makes a lot of sense. I feel a lot more confident now and will go and have a dabble this afternoon!
  15. ICanC

    C++ Text Adventure Design

    Thanks very much for the replies, I'm still struggling with this one. For the kind of actions I want (where they could be vastly different and load up various console displays), I feel like I need to have them as functions, somehow nicely wrapped in up an object. I've tried making an Actions class with all the functions, that take the player, current location, and int pressed as parameters (the int refers to what action number it is in a room) - or do away with the actions class and list them all in the character class (as I've tested at the bottom of the code below - obviously they won't all be just taking an item). But it doesn't seem orderly - Also, for all these objects to communicate with each other, it feels like I have to declare global pointers for the header files to see other objects I want them to be able to take parameters for in their functions? What I also find challenging (probably the most), is having all the control flow from the area class switch statement which currently handles direction: switch(choice) { case '1': this->look(); break; case '2': if (this->north != NULL) {current = this->north; here = false; break;} else {print("\n\nCan't go North"); Sleep(2500); break;} case '3': if (this->east != NULL) {current = this->east; here = false; break;} else {print("\n\nCan't go East"); Sleep(2500); break;} case '4': if (this->south != NULL) {current = this->south; here = false; break;} else {print("\n\nCan't go South"); Sleep(2500); break;} case '5': if (this->west != NULL) {current = this->west; here = false; break;} else {print("\n\nCan't go West"); Sleep(2500); break;} case '6': if (this->options >= 6) {} - somehow get action(function call for another object) by passing area, character and choice????? } Character class class character { private: short age; short health; short gold; std::vector<std::string> inventory; public: std::string name; character(); ~character(); void setname (std::string); void setage (short); void sethealth (short); void setgold (short); void buyitem (std::string, short); void sellitem (std::string, short); void takedamage (short); void display (); void additem (std::string); void removeitem (std::string); /* ACTIONS */ void takegem(); void takesword(); void findaction(); }; character::character() { this->name = "Unknown"; this->age = 0; this->health = 100; this->gold = 0; } character::~character() { } bool operator==(character& c1, character& c2) { if (c1.name == c2.name) { std::cout << "\n\nName is the same.\n\n"; return true; } else { std::cout << "\n\nName is different.\n\n"; return false; } } void character::setname(std::string name) { this->name = name; } void character::setage(short age) { this->age = age; } void character::sethealth(short health) { this->health = health; } void character::setgold(short gold) { this->gold = gold; } void character::buyitem(std::string item, short price) { if (price > this->gold) { print("\n\nYou do not have enough gold to buy "); std::cout << item; print("\n\n"); print("1. Back\n\n> "); char c; std::cin>>c; } else { this->gold -= price; this->inventory.push_back(item); print("\n\nYou bought "); std::cout << item; print(" for "); std::cout<<price; print(" gold\n\n"); print("1. Back\n\n> "); char c; std::cin>>c; } } void character::sellitem(std::string item, short price) { short temp = this->gold; std::vector<std::string>::iterator it; for (it = this->inventory.begin(); it != this->inventory.end(); ++it) { if (*it == item) { this->inventory.erase(it); this->gold += price; print("\n\nYou sold "); std::cout << item; print(" for "); std::cout << price; print(" gold"); break; } } if (temp == this->gold) { print("\nYou do not have "); std::cout << item; print(" to sell."); } print("\n\n1. Back\n\n> "); char c; std::cin>>c; } void character::takedamage(short damage) { this->health -= damage; if (this->health <= 0) { system("cls"); std::cout << TITLE; print("Your bones are swept clean by the desolate wind... your adventure is done."); print("\n\n1. Game Over\n\n> "); char c; std::cin>>c; exit (EXIT_SUCCESS); } } void character::display() { system("cls"); std::cout << TITLE; print("\nName: "); std::cout << this->name; print("\nAge: "); std::cout << this->age; print("\nHealth: "); std::cout << this->health; print("\nGold: "); std::cout << this->gold << "\n\n"; std::cout << this->name; print(" Inventory\n\n"); for (std::string s : this->inventory) { std::cout << s << std::endl; } print("\n\n1. Back\n\n> "); char c; std::cin>>c; } void character::additem(std::string item) { this->inventory.push_back(item); std::cout << "\nItem added"; } void character::removeitem(std::string item) { for (std::vector<std::string>::iterator it = this->inventory.begin(); it != this->inventory.end(); ++it) { if (*it == item) { this->inventory.erase(it); std::cout << "\nItem removed"; break; } } } // ACTIONS ///////////////////////////// ///////////////////////////// ///////////////////////////// void character::takegem() { system("cls"); print("You take a rough gemstone from the rocks"); char c; std::cin>>c; this->additem("Gemstone"); } void character::takesword() { system("cls"); print("You pick up a sword."); char c; std::cin>>c; this->additem("Sword"); } void character::findaction() { if (current->name == "Plains") { this->takegem(); } }
  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!