Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 9 years ago.
Improve this question
Ok I gave been playing around with java for a year now an I can say that is is in my power to write a fully functional program.
A month ago I started studying vectors and so, when I tempted to implementing them into the LWJGL I realized that Java is not fast enough for the level of graphics that I wish to generate.
Now that is my problem and I have decided that I must learn a stronger Language but where do I begin I have tinkered around in C/C++ before but it kills my ambition to go and start over after already using a hole year.
my "algors" for rendering a vector are:
z = r(cos t+j sin t) //where the t is degrees and r is its length
(for the curious)
the program the continues a loop that alters its length with 1, gets its end X and Y and draws a pixel on that spot.
Not for game coding.
Name 1 free E-Book that will get Me on My feet with C
I realized that Java is not fast enough for the level of graphics that I wish to generate.
Java is plenty fast. Unless you want to work with high performance graphics, you can use it safely (and you will probably be able to use it even with high performance graphics).
In the vast majority of cases, the speed of your application will be a function of algorithmic complexity, not language used.
After your application is completed, if it doesn't run fast enough, you can optimize. If it still doesn't run fast enough, you can implement critical parts in C/C++/your-language-here.
If you start from "the language is not fast enough", you're already doing it wrong.
If you want to write a game, use an engine. There are many great engines in many languages. If you wonder about language-inherent performance, and you try to solve technological issues yourself, you are gonna be stuck doing that forever.
Do not reinvent the wheel. Stop worrying about which programming language is the best fit, and rather think about which engine is best suited for what you want to make.
Related
Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 3 years ago.
Improve this question
I'm planning to learn Big Data. I just have gone through tutorials but I'm a little bit confused what the modules are that I need to concentrate on from a developer perspective. Presently I'm working on java. I hope your response will be helpful for the next step of my Big Data journey.
First I'd propose to get familiar with the term, Big Data is a bit fluffy and debated one, more a marketing catchphrase than a technical specification, covering a huge range of technology.
Starting from that I'd try to determine which aspect (IoT, build/run datacenters, etl/data integration/warehousing, analytics/statistics/machine learning...) or perhaps which field of application (retail, bioinformatics...) you're interested in, and which is reasonable to access from an employment point of view. I'd think also about the tech stack you'd like to work on (Scala, Python...).
Reverse engineering job offers could be a way to get to that information actually.
The Data Scientist profile (etl + machine learing + visualization) gained broad acceptance and encompasses certain skill sets, Big Data Analyst and Bid Data Engineer also can be found, arguably with a not so well defined profile.
Nowadays one can get whole MSCs in data science (here's a personal evaluation of it), but perhaps you can get your foot into the door on a less fancy route too. Trainigs may come in varying quality, I found Andy Ngs machine learning and deep learing (big neural networks) MOOCs stunning, and everything coming from the EPFL-Scala side (if you want to go down that road) is technically superior and from the presentation ok (I tried Big Data Analysis with Scala and Spark).
Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
We don’t allow questions seeking recommendations for books, tools, software libraries, and more. You can edit the question so it can be answered with facts and citations.
Closed 5 years ago.
Improve this question
I am trying to find a way to calculate the strength of a hand, specifically how many unique hands (of the 169 starting hands) have a higher chance of winning at showdown given a complete or incomplete board (holdem).
I've tried to do this a few ways and have been somewhat successful but it takes an obnoxious amount of time for my program to run given that i'm essentially branching out for every possible hand combo, and comparing aggregate results for every scenario to find how many hands are better than hero's. TLDR it's terribly inefficient and it takes an unrealistic amount of time to run.
However there are tools like this one http://www.cardplayer.com/poker-tools/odds-calculator/texas-holdem that seem to do the calculation a lot faster. The above program seems to do calculations for all possible future board combinations, so it can give you the better hand for incomplete boards. Although, for my particular program i'd like to find the number of hands ahead of hero's at any given point, which would require me to run the program above for each of the 52*51 non-unique starting hands, and find my hand's place among the rest and once the number of better hands have been gotten, i'll have to reduce those to unqique starting hands (ie 8c7h and 8h7c would be reduced to 87o)
So my question is, are there any tools/frameworks/references (preferably in Java) out there for calculating the strength of hero's hand vs an anonymous hand given any complete or incomplete board that also doesn't take a day to run?
I am not much of a poker kind of guy, but you may find ThePokerBank site interesting, what about a whole course dedicated at poker theory from MIT, a bonus infographic to help you out too.
There are different strategies that you can take to try to tackle this issue, all of them involving quite some knowledge on Statiscal analysis, I would say that one of the reason other poker algorithm work a bit better is that they are using a form of vectorization math instead of a series of for loop. I know that language like octave/MatLab/R take this strategy to do bulk operation.
Good luck and have fun!!
This thread has much information Stack Overflow Evaluation Algorithms
Also at Code Project and a tutorial on an algorithm and Java source: at Github and in different languages at rosettacode.
Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 6 years ago.
Improve this question
I'm a beginner in Java and programming but I'm already creating a Texas Hold'em Poker game as a "practice and learn" project.
I know the rules of the game, but I'm not sure how to include bots or computer player that can decide when to go in and when to quit, how much to bet (including All-in bet),and if possible even to bluff from time to time.
At this point my question is:
Should I take an effort to "explain with if's and then's, when to do that or is there an algorithm that allows the bot player to do that?
If it exists, would that algorithm be specific for poker or is possible to reuse it to any game to allow the computer to "learn" the rules described in the programming, for different rules or even different games (so it applies to chess or monopoly, etc)?
The complexity and state space of the Poker is not large. Therefore it is possible to just exhaustively search all the combinations. In fact you can even calculate the probability of getting each cards with some arithmetic. I would recommend you to read Poker Theory and Analytics by Kevin Desmond on MIT Open Courseware to understand more.
Your idea is exactly what decision trees or random forests are. They are machine learning techniques that can build human-understandable rules with a tree of if-s.
On the other hand, there are also non-human-understandable machine learning. Neural network is a kind of that. The models are non-intuitive to human. They are mainly used for the problems that are hard to formulate or with extremely large state space, for example, playing Go (just like AlphaGo), identifying all the objects in an image, or how to win Starcraft.
Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 7 years ago.
Improve this question
Hey guys,
I'm a relatively new programmer in Java(and in general), but I want to know different ways of minimizing memory and RAM usage in programs that I make. I've heard of a few such as StringBuilder as an alternative to + String concatenation and stuff, but I'd like to hear what you guys know about how to maximize performance and why.
Thanks in advance!
In modern programming, it is a far better use of time your time to focus on making your code readable rather than trying to micro-optimse.
Modern compilers do an extremely impressive job of these small optimisations so that everyday programmers don't have to deal with them, and in the majority of cases it is better to leave it up to the compiler than to attempt it yourself.
In general I would say that the largest performance improvements can be gained by thinking about the design of your program ahead of time, before you even start typing. Once you've already bashed out 10,000+ lines of code implementing your latest 3D high-performance MMORPG, and you realise it's not as high-performance as you were hoping, making any drastic design changes will be considerable work. Some things to think about beforehand are:
Think about your algorithms complexity, for example string concatenation can be O(n^2) using String, but O(n) using StringBuilder.
Use object pools to reuse memory rather than creating new instances each time
Reuse existing library implementations of data-structures etc, rather than trying to recreate them yourself. Many more man-hours will have been put into these implementations than you could possibly spend on them, and so they are likely to be more efficient/robust
Finally I should mention, that if you do go trying to optimise some existing code because its not performing as well as needed, it's very important to know specifically where the problem area is. In this case a profiler is invaluable, and should help pinpoint any particular areas that are affecting performance. They might not be where you expect!
Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 8 years ago.
Improve this question
I'm getting into learning Computer Graphics with Java. I was wondering, should I learn Java2D before learning JOGL, or should I just learn JOGL (which handles 3d graphics as well)? This (I hope) isn't an opinion based question in the sense that I'm looking for a correct path to follow. I guess, put another way, my question is: what is the point of having the Java Graphics 2D library if JOGL is around?
Note: my final goal is to be able to develop Graphics for business applications.
It's not entirely clear what you mean by "business applications". You're not talking about the "computer game business", are you? ;-)
Seriously: Nearly every question of the form "Should I use X or Y?" has the same kinds of answers:
"That depends on what exactly you want to do" and
the subjective ones.
The Graphics2D class is a rather high level abstraction, and with a few lines you can do your first custom painting operations. And they are intuitive. You want to draw a line with Graphics2D? Well, call graphics.drawLine(0,0,100,100);. You'll quickly have a feeling of success. The basic code to get started is conveniently summarized in http://docs.oracle.com/javase/tutorial/uiswing/painting/ , and with the knowledge from http://docs.oracle.com/javase/tutorial/2d/geometry/index.html and some phantasy you can already achieve nice effects.
OpenGL is a different world. First of all its focus is 3D graphics, and this is not "just a superset of 2D". While you technically can do 2D graphics with OpenGL as well, that's not what it was made for. It's much closer to the hardware, tailored for high-performance management of large 3D objects with powerful (and complex) rendering techniques. You want do draw a line with OpenGL? Well, if you want to do this with pure, modern (!) OpenGL, it will involve maybe 100 lines of code, including your own shader programs that are written in GLSL. And without a profound background certain fields of mathematics and graphics cards, and without a reading elaborate tutorials or books (like http://arcsynthesis.org/gltut/ ), you'll hardly be able to bring anything to the screen at all.
So to summarize it, concerning your actual question:
what is the point of having the Java Graphics 2D library if JOGL is around?
If you want to create some 2D drawings, maybe some bar-, pie- or line charts, and maybe a few images, you simply would not use OpenGL due to its complexity. Java2D is part of the standard API, and it is tailored for things like this (although, of course, there are still different more specialized libraries for different purposes). If you want to do anything that goes beyond 2D, or employ some really sophisticated rendering effects, you'd have to use OpenGL.