Luke Meyers 写道:
> DaVinci wrote:
> > I am writing a pong game.but met some problem.
> > the ball function to control the scrolling ball,
> >
> > void ball(int starty,int startx)
>
> This is going to sound odd, but I think the biggest problem in your
> program is right here. Functions *do* things, so it's most natural to
> name them with verbs or verb phrases. "ball" is a noun, not a verb
> (quit snickering, all you grammatical smart-alecks). Reading the
> function name, it's difficult for me -- and evidently for you -- to
> determine in any clear fashion what behavior this function is
> responsible for.
>
> I know, I know -- you're asking about looping, and I'm harping on about
> naming conventions. But work with me a moment -- what is it that you
> want this function to do? If you were going to rename it to a verb or
> verb phrase, what would you call it? For example, would it be
> moveBallOneStep()? Or perhaps moveBallForever()? Do you see how each
> of these names carries an obvious implication with regard to the
> looping logic? moveBallOneStep() obviously wants to just do one thing
> once, each time it's called, and not contain a loop. So, you would put
> the call to moveBallOneStep() *inside* a loop, rather than the loop
> inside the function.
>
> On the other hand, if you're going to moveBallForever(), then of course
> you'll need a loop similar to the one you've written. The thing with
> endless loops, though, is that they really hog the flow of control.
> main() doesn't get a chance to do anything as long as you're inside the
> body of moveBallForever() (or any other function called from main()).
> If you stay in that body indefinitely, the flow of control will never
> return to main(). Of course, you could always return after some
> condition is reached, e.g. moveBallUntilGameEnds().
>
> These aren't wonderful function names or anything, by the way -- just
> what I chose for purposes of illustration. They are, however, verb
> phrases.
>
> > {
> > int di ,i;
> > int dj,j;
> > di = 1;
> > dj = 1;
> > i = starty;
> > j = startx;
> > int ch;
>
> No need to declare everything at the top like this -- declare things as
> locally as possible, generally speaking. Also, save some vertical
> space by initializing things as you declare them, rather than declaring
> and then assigning. This is a good habit for efficiency, too, when you
> come to work with more complex objects.
>
> int i = starty;
> int j = startx;
>
> // (inside loop body)
> int const di = 1;
> int const dj = 1;
>
I will chang the variable di,and di
di = -di;
dj = -dj;
so I can't use const
> Looks like you're not using ch, so remove it.
>
> > I had trid to use IPC to make them work,let ball() be invoked by child
> > process
> > but not work.
>
> Egad... that's way more convoluted. You need to understand the basic
> event loop paradigm; it's very common. Concurrent programming via
> mechanisms such as IPC is worlds more complex -- get solid on the
> fundamentals first!
>
> Luke
|