First, since the methods are class methods, not instance methods, I assume that variables not ivars, but static variables of some sort.
If payments with some, not all, forms of payment are to be allowed (say, only with energy and samples, but not credits) then you should use three different methods. Otherwise, your payFor
method is very idiomatic to Objective C. Using C struct
should be reserved for the rare situations where Objective C classes no longer provide adequate performance.
Consider making the spaceship a singleton, and use ivars: this may become handy if you decide to introduce more ships in the game, or do something that's easier done with objects (e.g. externalization of object's state).