"Open source" has a very well-defined, widely accepted meaning. Part of this is that an open source license cannot restrict the purpose for which the code is used. This isn't making a value judgement on such licenses: it's just defining "open source".
If you actually want your code to be open source, you should use one of the common licenses like the GPL or BSD license; this makes life easier both for you and people who would use your code. Since these licenses are common, people know exactly how they work and are willing to trust them. A custom license like yours seems much riskier to use: for example, how is "competes with" defined?
You can license the code and the artistic assets separately. This is what Id does with its old Quake engines. This way the code is still open source in the strictest sense of the word, but somebody couldn't just resell your game as-is.
You can license the assets under one of the Creative Commons licenses. These have well-defined and well-understood terms that you can mix and match to find something that suits your needs.