Now i know that its impossible to make a game uncrackable all i want is the best way to make it hard for them if someones going to hack my game i at lest make it a fun challenge for them
One of the base tools in the arsenal of a software hacker is a Hex Editor using which they crack the standalone/application.
Use of License Keys is one of the basic ways to make sure legitimate users are only able to play your game. But a cracker can easily find out and remove the loop from your code which looks for a Licence Key. Finding the loop from the assembly code is the tricky part but then all you need is to put a ‘NOP’ call.
One of the counter measure that makes crackers sweat is to have multiple checks for license key at various places in your game like after game loads, before the gameplay begins.
Use of Application.genuine is also a basic way to ensure the code is not tampered with. But this method does not guarantee of 100% success to work on all platforms and hardwares. And it also does not ensure guarantee against patches.
Encryption is also one of the ways to add an extra layer of security. You can store all your game data using encryption to reduce the tampering of your data. You can also use shadowing technique (the one used by Unix to store passwords).
The list goes on and on and on…
As everyone said in their comments under the question, it is best to put your efforts in making a quality game to provide your users with a quality experience rather than making the hackers sweat or giving them a fun in breaking your game (They are not your customers anyway).