• Content count

  • Joined

  • Last visited

Community Reputation

276 Neutral

About orizvi

  • Rank
  1. The way I see it, there are 3 stages to learning how to program:   1) Learning general programming concepts. Object oriented programming, functional programming, algorithms, the theory behind computers etc. This is important because its just as important to formulate your ideas correctly as it is to form the words in your chosen language. This is the real meat of programming. This is the stuff that remains the same regardless of programming language, and reduces programming languages into just a set of tools.   2) Learn the syntax. You'll need to do this for every language you learn. Learning syntax is the easiest part of programming and also the least valuable.   3) Practice. Do this every spare moment you have for the rest of your life.   It sounds like you've been following "tutorials" and other online resources. Unfortunately they are quite notorious for only teaching #2, skimming over #1 and barely mentioning #3.   I would recommend stepping back a bit from learning "C#" and focus a bit more on learning the general concepts and then move onto the practice. I remember being in a similar situation to you where I was stuck and wondering how I could go from depending on other programmer's to writing my own code without copying anyone. In hindsight, I would say my problem back then was essentially that I didn't have the foundation that allowed me to quickly and easily decompose problems I cared about into the set of tools a programming language provides.   I learned my foundation through a computer science degree, which is probably one of the best options. If that doesn't work for you - then maybe some of the other members can recommend some excellent books on the topic. What I recall from my textbooks was that they were horrible - so I won't bother recommending them. "The Art of Computer Programming" by Donald E. Knuth is a classic, but you might want something that guides you along a little more. Generally you can try searching Amazon for programming books - look at the ones that are more focused on the design of programs and concepts such as object oriented programming then teaching you a particular language.
  2. C# for Noobs

    Take a look at MSDN, specifically the Channel 9 section.
  3. What do you do when you need an idea?

    Public transport! Hop on a bus for an hour or two. Change of scenery plus being trapped in a bus without many distractions is great for thinking.
  4. Good game design software?

    I personally quite enjoy One Note for design purposes. Its less rigid than Word or Excel in terms of layout. When I'm designing, I'm not necessarily interested in making a document I can present with, I just want someplace to scribble my notes and the occasional doodle.   Excel and Word are great when you're creating more formal specifications.
  5. Game coding complete (Java)

    Personally I would say its better not to know the language that a book presents its examples in. The temptation to cheat and simply read the examples and convince yourself that you understand it is too great.   Much better to learn the content, and try to implement it in a different language and have the provided examples as a guide but not a complete give away.
  6. I find learning the fundamentals of a topic can be quite dry and difficult to find motivation for. Formal education is great in these situations since the teacher forces you to learn it. Once you're more confident with your abilities and you have the basics figured out, then you can learn a lot of the rest through experimentation.
  7.   This is so true. Any book that claims to teach you a particular programming language isn't really teaching you how to program. Its teaching you the syntax of that particular programming language along with some convenient examples. Maybe in a lot of cases this distinction doesn't really matter, but when you start working on larger and more complex projects or collaborating with other programmers, you'll start noticing that there is an entire set of terminology and problem solving techniques used which are far more generalized than just a particular language's syntax.   The gang of four's design pattern book is great example of such a book but there are many others. Once you're comfortable with the syntax of your chosen language, I would suggest reading the gang of four's design pattern book. It will really help you with managing complexity, which is an absolutely critical skill if you want to move beyond textbook examples and onto writing non-trivial code.
  8. Gamespy

    The Gamespy SDK was never released publicly. However, the Gamespy protocol is actually quite simple. You could probably reverse engineer most of it in a few evenings. You can also look to the communities of games that relied on Gamespy for their multiplayer. Everything from work arounds to alternative implementations of the Gamespy servers are available for these games. To my knowledge the Gamespy protocol should be the same across games though maybe older games are using an older version of the protocol.   Try Neverwinter Nights. It has a fairly active community, and they are using a community created Gamespy service that is open source if I recall correctly.
  9. As a comparison a university course takes 4 months and on average covers half the content in a text book. I'm not saying that's a good or bad pace, just that it is a common pace. It all depends on the density and complexity of information in your particular book of course. C++ is also such a big topic that no single or even a dozen books could contain everything you need to know. Learning to program is a life long commitment. It also requires an endless amount of practice. Never stop practicing. Edit: Don't restrict yourself to examples from books. Experiment. Don't code because you feel you have to write x lines of code to get to the next stage. Consider what matters to you and write code for that. My coding practices tends to be silly little utilities that solve random tasks for me.
  10. Confused on Big Oh

      That's not a very useful response. If you have an objection to my post - please elaborate since otherwise we can't really discuss it. And that's the point of a forum, to discuss things - isn't it?   Or would you like me to guess why you disagree?       Hmm.. You're right - I should have used upper bound, lower bound etc instead of worst case, best case etc.   And on more complex algorithms with very complicated behaviour I can see how we'd want to consider the upper bound on the average behavior etc.   I'm still not entirely convinced that using Big-O in such a manner is the best approach, but at least the way you explained it seems mathematically sound. 
  11. Confused on Big Oh

    Right there, you see a use of big-O notation for the average case.   EDIT: And a bunch of examples in one place (a whole table, actually): http://en.wikipedia.org/wiki/Sorting_algorithm#Comparison_of_algorithms   Tragically you gave an example of incorrect usages of Big-O notation.   Big-O notation is only for worst case growth of a function. Please refer to the formal definition also provided on wikipedia or any number of math texts. (Formal definition on wikipedia as I can't link to math texts: http://en.wikipedia.org/wiki/Big_O_notation#Formal_definition)   Now - that doesn't mean that the Big-O for a particular function can't be the same as one or even all of the 5 Bachmann-Landu notations. Consider the very simple case of an algorithm that goes through a list of n numbers and adds 1 to each number. That would take n operations exactly - which means its worst case is n, its average case is n, and its best case is also n.   If you read the paragraph just above the table you mentioned the author states:   Please see the following for an explanation of the other notations used: http://en.wikipedia.org/wiki/Big_O_notation#Related_asymptotic_notations   Outside of theoretical CS - you probably won't be seeing the other notations, as the common practice seems to be simply to abuse Big-O and use it everywhere even if it is an incorrect usage.
  12. Confused on Big Oh

    I found the data structure I was actually thinking of, even though other people have offered lots of great examples too.   http://msdn.microsoft.com/en-ca/library/system.collections.specialized.hybriddictionary.aspx   See the remarks section of that class and the classes it links to. Offers lots of great insight.   Overall - every algorithm has its advantages and disadvantages - there are no super algorithms that are magically better, simply some that are better in solving certain problems.
  13. Confused on Big Oh

    Expanding on frob's answer above. Refer to my previous post.     Its important to note the word "Growth" in there. So n^3 will grow to requiring more operations faster than n^2 - but without considering the C and k constants - it makes no guarantees about performance.   Essentially the way you should view the formulas is that when you substitute a value for n the result is the number of operations required.   So the more number of operations required = more time required but Big O doesn't provide us with details on how many operations are required since if you look back to how the proof for Big O is done - that information is lost in the process.   Lets say I have the following task: I have a binder of unsorted papers, and I want to find a particular paper. If I have n number of papers in the binder - in the worst case scenario I would perform n checks to see if it's the paper I want. That would give me a function we can define as f(x) = n since I have to perform n checks, and it would also be O(n).   Now if for whatever reason - in addition to looking through the papers in the binder, I also had to perform a calculation or some other operation for every page (maybe now I need to perform two comparisons since there are two possible ways to match the page I want). My function would be f(x) = 2n, which intuitively makes sense as taking more time since we have to do twice as many comparisons.   Its important to note that this second function would also be O(n) since Big O notation isn't so much interested in comparing the exact number of operations between functions but rather their growth - which in the case of both functions is linear (or n). And this also illustrates the reason why the C and k constants are important since for the first example - C = 1, k = 0, for the second example C = 2, and k = 0.   I'd also like to mention that there are a whole set of notations like Big O which all have to be considered to do a proper comparison of algorithms. Big O gives us upper bound, but there's still the average, and lower bounds to consider... But most people generally only look at worst case/upper bound for a quick sanity check. See http://en.wikipedia.org/wiki/Big_O_notation#Use_in_computer_science   In the real world - much of this doesn't really matter as frob mentioned. But as an example of  a real world example where it does matter is if you read through the implementation details of some generic data structures in the .Net Framework - they're actually implemented in such a way that depending on the number of items, they'll use different algorithms. This is because for small data sets (smaller values of n) an algorithm with a greater order of complexity actually performed better, but as the data set increases (for larger values of n) - a different algorithm is preferred because it has a lower order of complexity.
  14. Paying to enter a shop?

    A tax to get into the City where the best and wealthiest merchants are as opposed to the Towns where its free to enter but the selection is smaller and worse.
  15. I think in regards to the sexual assault/sex or whatever else... There should simply be a list of actions which can include a generic "Have sex". Whether the other character consents to the act is a different matter. If for example that option is used on a regular tribes woman - she might decline, and the player can try again after buying presents or doing something else to increase the "Persuasion". The same mechanic could apply to anything really - Take item, Follow me, Do a barrel roll etc. Its all dependant on how much your character is capable of persuading the NPC.    If you implemented actions which can affect the "Persuasion" value such as: Beat up, Threaten, Compliment, Restrain.. You could indirectly allow for actions like rape, theft etc. A character refuses to give up their prized knife? Beat them repeatedly to drive up the Persuasion value until they give it up.   In the case of prisoners/slaves - their Persuasion is probably so high from being attacked/captured that when you order them to do something - they won't object... And if they do - that can be corrected through a very general set of actions which don't touch on ethically sensitive issues as much.   Also opens up the possibility of treating your prisoners nicely so they don't run away?