I'm a self taught programmer. I don't do it professionally; it's more of a hobby.
So, some of my friends play a pen & paper RPG called MERP. One of the guys who plays with them lives in Canada (the rest live in the United States). This lead to some issues of various aspects being difficult to perform without being very tedious. They found a map tool that allows the remote player to connect and see maps and stuff and they use a VOIP service for communication. The main issue they had was dice rolling. They looked around and couldn't find a dice roller that fit the purposes they needed and asked if I could make them one.
So, I made them a dice roller that uses a client/server architecture and allows the remote player to connect and for them to see each others rolls and do other various tasks specific to the game they play. For all intents and purposes it works just fine.
However, they had commented on the frequency of rolls seeming too weird. They would get what felt like an unusual occurrence of open ended rolls (where if it lands 1-5 or 96-100 you reroll and subtract or add the roll, respectively, to the original roll) and they felt that it seemed to favor certain rolls (in terms of what part of the spectrum it would roll on [consistently high or low]).
Now, this shouldn't of been any fault of my own, I used an array of the .NET pseudo random number generator that were initialized at the roll using a shifted time stamp of the moment they were created (where the time stamp is shifted per instance) and it would then randomly* pick which RNG to use for each individual roll using another RNG instance.
However, they insisted the frequency wasn't right. But, one of them had, what I felt was, a really good idea. The idea was to use a 3D die that is rolled using the mouse (with the force of the 'throw' determined by the speed the mouse was moved. Combine that with 'real' physics and you'd have something very similar to an actual die.
So, I started googling a lot for 3D C# stuff and determined DirectX would be a solid way to go. I downloaded the SDK and read some tutorials and was completely lost. Went right over my head. I googled some more, still made no progress. I posted on the XNA forums asking where to start and they suggested some wrappers for C# (including XNA and SlimDX). I felt XNA was geared too much towards Windows phones and the Xbox so I went to SlimDX.
I downloaded SlimDX, read their getting started page and the 3 tutorials they had and still... completely over my head. None of it makes sense to me. I can write a TCP library for automating the entire protocol for me making a server client program easy to setup and run and I can write the library from scratch in 3-4 hours. I can't, however, for the life of me get even a simple square to show up using DX. This isn't just DX related; I'm terrible at drawing things through code. I can make a moderately pretty UI if all the controls are created for me and I can play around with it in Visual Studio but ask me to draw a custom control or to draw things on a form through code and I'll fail miserably. Just can't seem to wrap my head around it.
So, I essentially need someone to hold my hand through this entire process.
Still interested? Read on:
What I'm trying to accomplish:
1.) Based on user input, create a 3D geometric shape with the number of sides specified in the input.
2.) Drawing numbers on each side
3.) Allowing the user to interact with the shape through mouse clicks in combination with the motion of the mouse.
4.) Allowing the user to 'throw' the shape with a force equal to the speed of the mouse cursor.
5.) Using physics for the shape to 'fall' through the 'air' once thrown and land on an invisible imaginary table that is infinite in length and width.
6.) Using physics for the shape to bounce around until it comes to a state of rest.
7.) Figuring out which number is on the side facing up.
8.) Getting the data needed to mimic the exact same motion and result on each connected client's screen.
Everything else from UI to netcode I can handle just fine. But, the rest of it, makes my brain hurt just imagining what needs to be done.
I'm not asking someone to just go, write all the code and call it a day.
What I am asking is for someone to work with me, step by step, and be there and capable of answering my questions so I can learn to do it myself. They, fortunately, aren't in any hurry for the application (since the one I already wrote is doing it's job well enough) so it's not like this has a deadline.
I work in C# and I am completely unfamiliar with WPF, though I am willing to start learning it as well.
If you haven't stopped reading already and are still interested, I'll be around or you can also e-mail me (jon at imawesome dot org).