• Announcements

    • khawk

      Download the Game Design and Indie Game Marketing Freebook   07/19/17

      GameDev.net and CRC Press have teamed up to bring a free ebook of content curated from top titles published by CRC Press. The freebook, Practices of Game Design & Indie Game Marketing, includes chapters from The Art of Game Design: A Book of Lenses, A Practical Guide to Indie Game Marketing, and An Architectural Approach to Level Design. The GameDev.net FreeBook is relevant to game designers, developers, and those interested in learning more about the challenges in game development. We know game development can be a tough discipline and business, so we picked several chapters from CRC Press titles that we thought would be of interest to you, the GameDev.net audience, in your journey to design, develop, and market your next game. The free ebook is available through CRC Press by clicking here. The Curated Books The Art of Game Design: A Book of Lenses, Second Edition, by Jesse Schell Presents 100+ sets of questions, or different lenses, for viewing a game’s design, encompassing diverse fields such as psychology, architecture, music, film, software engineering, theme park design, mathematics, anthropology, and more. Written by one of the world's top game designers, this book describes the deepest and most fundamental principles of game design, demonstrating how tactics used in board, card, and athletic games also work in video games. It provides practical instruction on creating world-class games that will be played again and again. View it here. A Practical Guide to Indie Game Marketing, by Joel Dreskin Marketing is an essential but too frequently overlooked or minimized component of the release plan for indie games. A Practical Guide to Indie Game Marketing provides you with the tools needed to build visibility and sell your indie games. With special focus on those developers with small budgets and limited staff and resources, this book is packed with tangible recommendations and techniques that you can put to use immediately. As a seasoned professional of the indie game arena, author Joel Dreskin gives you insight into practical, real-world experiences of marketing numerous successful games and also provides stories of the failures. View it here. An Architectural Approach to Level Design This is one of the first books to integrate architectural and spatial design theory with the field of level design. The book presents architectural techniques and theories for level designers to use in their own work. It connects architecture and level design in different ways that address the practical elements of how designers construct space and the experiential elements of how and why humans interact with this space. Throughout the text, readers learn skills for spatial layout, evoking emotion through gamespaces, and creating better levels through architectural theory. View it here. Learn more and download the ebook by clicking here. Did you know? GameDev.net and CRC Press also recently teamed up to bring GDNet+ Members up to a 20% discount on all CRC Press books. Learn more about this and other benefits here.
Sign in to follow this  
Followers 0
Flavioli

C#: Suggested data structure for storing data for statistics?

2 posts in this topic

So in my game I have a class that logs certain datapoints so that I can analyze them statistically (both in-game, for the player to see his stats, and out-of-game, for testing and balancing). For example, I log each time specific units perform a specific task (such as "went to gather wood") to contrast it with others (like "went to gather stone"), so that I can later graph out the data and see what the big picture looks like for units' nondeterministic behavior. I also log statistics that are not counters, such as "average money spent" and I also store temporal data such as "average money spent over time"... each of these per game entity (such as "money spent by Unit#5"... keeping them as different series in a single graph). So basically I have 3 types of data: counters, statistics (so far only average... I use a struct called "Statistics" to accumulate data for this for each datapoint), and statistics over time.

My question is, what is the best data structure in C# to store and represent this type of data? Keep in mind that the data is not just discrete datapoints... as in, I have to fetch existing data points to update them as I log more data.

Originally my thought was to have a List of datapoints for each of the three value types (int for counter, Statistics for stats, Queue for temporal stats) but this is not a good idea because of what I described above. Instead, I currently have three Dictionaries of Dictionaries... but those dictionaries are hard to work with... for example, the one for temporal stats looks like this:

Dictionary< MetricType, Dictionary < string, Queue < Statistic > >

Where MetricType is an Enum corresponding to the specific type of event/statistic I'm logging (such as "MoneyOwnedByUnit")... it corresponds to selecting different charts to look at. The inner Dictionary is the set of "series" where each string is a series (such as "Unit #5") and the Queue stores, say, up to 500 points for the line graph (such as 0,11,55,33,20).

The nice thing about this is that I can store and fetch data in constant time but working with this large dictionary is a bit of a pain, and as I add more types of logging, or want to log more information for each data point, it quickly gets out of hand... when something this ugly shows up in my code, I typically imagine there is a better way. Does anyone know of a more elegant/correct way to store and fetch my statistics data, or is this pretty much the correct approach? Thanks! =)

Too long; didn't read:

Basically looking for a good data structure to store statistics like counters for an event or statistics about game data. I'm using nested dictionaries... doesn't seem like the best approach though, and would welcome better/cleaner alternatives.
0

Share this post


Link to post
Share on other sites

I might be misunderstanding what you're trying to accomplish, but to me it seems like it might be better to focus on a very precise way of recording the information you want, and then using functions to analyze it on demand. I don't see why you want to record an ongoing, real-time analysis of your data along with the data itself.

 

So you might track information in general as a KeyValuePair<GameTime, MetricType>, or a custom structure that can hold the same types of information, and then each time an action is taken in the game it gets added to a list for the acting character. As long as the time is recorded along with the other data, you can generate custom lists of data for anything you want to review be it by activity type, activities over any given period of time, or whatever else.

 

The idea is a very clear and direct data object that stores all of the information you might want to review later, and then pull only the data you want to look at at any given time. This keeps your code design clear and limits its complexity. You have flexibility in how the data is analyzed by writing a routine to cull whatever specific data you want, so you can always write new ones or alter existing ones. But you don't have to change the underlying data structures to do so.

0

Share this post


Link to post
Share on other sites

make a hash table, they're spectacular

 

EDIT:

I should've read everything before i posted

Edited by Muzzy A
0

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0