Disclaimer: I hate every programming language. That's a jokey "hate" but also a serious one! My favorite languages for big projects used to be Haskell and Prolog -- I would still defend them but I tired myself out on them pretty quickly. They all have featuresets that are laser-targeted to one kind of problem at the expense of most others. I don't think either comes with any features or builtins that would help you with this project. My favorite language for world simulation is Inform, but it's probably too special-purpose for what you want.
I have a hunch you'd be happiest if you picked a popular language. Out of the ten most popular languages on this page (
http://www.tiobe.com/tiobe_index) I think Java has the least wrong with it for writing big projects like this. (I can say much the same for C#, which trades lots of additional complexity for a ton of convenience features -- but it's not one of my primary technologies.) There's good libraries to get started with for curses-style development in Java, and the tooling is excellent, even though IMHO every major Java framework, including most of the builtins, is a design trainwreck. (Libraries with fewer aspirations of taking over your entire program are sometimes OK.)
Java is really verbose and the syntax is a little dated, though, so I can't recommend it super hard for
small projects. It's a language that takes a lot of time and effort to get something done in even if you know what you're trying to do. At least it's fast! (it's closely comparable to C++)
I can't in good conscience recommend Python for something larger than 1000 lines -- the documentation doesn't really cover what errors anything is allowed to throw and there's no static type system, which makes it really hard to determine if your code is going to crash or not. The error handling builtins have much less bias towards defaulting to doing the right thing than the builtins in e.g. Prolog or Icon, but both of those languages have IMHO too much bias in the direction of guessing what you mean.
I don't really like the syntax in Python, but most languages in wide use have really inflexible syntax. (At least Python's syntax is less verbose...) My big issue with it is that it wasn't designed for continuation-passing, even though it can do it -- continuation-passing is a really common tool for writing multitasking programs or otherwise manipulating what order things happen in, and Python not having it is imho cumbersome.
If I'm not throwing you to Java and I'm not throwing you to Python, though, I'm almost certainly throwing you to C, Javascript, or C++ and all of those have deeper fundamental problems, IMHO. Please use Python over those! They all suffer from a much worse version of Python's problems. Except C++, which is pretty type-safe but can still fail at a moment's notice due to manual memory management. (C nominally has a type system, but I don't believe the rumors.)
Don't use PHP.
Some other languages to consider if you want something
like Python are Ruby and Lua. Lua is effectively a smaller Python, but its builtins are tiny and you'll have to build everything you want yourself -- it's also hard to deploy. Ruby has better support for e.g. continuation-passing and continuations in general, which is a big win imho -- but it's far more complex and almost everything associated with it has horrific documentation.
(Disclaimer: I am far more experienced with C than with C++.) My experience with C++ is that a lot of my friends start big projects in it, then realize they made a bad memory management assumption at the beginning of their project and are pretty powerless to fix it. I don't think the memory management is as bad as a lot of people say, but you have to think about it all the time and every time you take a shortcut (which is constantly tempting) you're gambling on whether the shortcut you took is going to break your program in the future. It's also an extremely complicated language and a lot of the features interact in surprising ways. And it's famous for its cryptic error messages!
I think it would be a bad idea for someone who doesn't know exactly what he's getting into (meaning "has C or assembly language programming experience, and also has Java programming experience, and also understands how Java objects were implemented") to use C++. I think it's still not a good idea if you know the difficulties -- I don't like C++ very much -- but hey, some people don't use condoms, either.
If you really want to use C++, you might consider trying Rust if you get frustrated. Rust is about as difficult as C++ (it has a smaller featureset that can still create most of the same problems), but it comes with a checker to tell you when you make a mistake that's likely to break your program. Could also look into Modula-3, which I don't personally use but one of my friends does -- I wouldn't be the one to sell you on it though, and it's not widely used.