I would generally replace such switches with some kind of map. For example:
Code:
#include <iostream>
#include <map>
#include <cstdio>
#include <algorithm>
class Character
{
private:
int x, y;
static const int max_x = 10;
static const int min_x = -10;
static const int max_y = 10;
static const int min_y = -10;
public:
Character(int x, int y): x(x), y(y) {}
void move_by(int x_inc, int y_inc)
{
x += x_inc;
y += y_inc;
x = std::max(std::min(x, max_x), min_x);
y = std::max(std::min(y, max_y), min_y);
}
int get_x() const { return x; }
int get_y() const { return y; }
};
struct Point
{
int x, y;
Point(): x(0), y(0) {}
Point(int x, int y): x(x), y(y) {}
};
typedef std::map<char, Point> KeyMap;
void move(Character& character, const KeyMap& key_map);
int main()
{
Character character(0, 0);
KeyMap keys;
keys['a'] = Point(-1, 0);
keys['d'] = Point(1, 0);
keys['w'] = Point(0, -1);
keys['s'] = Point(0, 1);
move(character, keys);
}
void move(Character& character, const KeyMap& key_map)
{
while(true)
{
char direction;
std::cin >> direction;
std::cin.ignore(128, '\n');
KeyMap::const_iterator it = key_map.find(direction);
if (it != key_map.end()) {
character.move_by(it->second.x, it->second.y);
}
std::cout << character.get_x() << ", " << character.get_y() << std::endl;
}
}