What I think you want to do here is run two instances of J.

One instance for your "ticks" and the other for your "frames".

Sockets would be a way for these instances to communicate. Loosely
speaking: one of the instances would be a "web browser" and the other
would be a "web server" (but the complexities of the various http
protocol issues would be total overkill for something like this).

Note also that you'll have to do a certain amount of experimenting. If
you try to do "too much" you'll start spilling more time than you can
comfortably deal with. So you'll want to get something working and as
you progress through your game development you will have to adjust
both your game play and your code to live with what your current
system seems able to deal with. It'll be good to have a rough idea of
where you want to head but ... a lot will change. This will be
frustrating, at times.

Anyways...

That's the overview.

Also keep in mind that there are generally multiple ways of
accomplishing each aspect of your project.

For example: the whole point of this "dual J" design is so that the
two different aspects of the system can become out of sync with each
other. That's a complication and a questionable one. On the other
hand, this will also let you take advantage of two cpus, and that can
be a good thing.

But how do you let your two J programs run out of sync with each other
without getting lost?

Basically, one of them is going to have to wait some of the time or be
ignored some of the time.

In other words the client makes a request to the server and waits for
the server to get around to responding. The server tries to make
handling requests quick and simple. In your proposed outline, this
makes the "tick" system the server - and ticks will need to be fast
enough to keep your frame server from lagging too much (but slow
enough to be meaningful).

(There's other ways of doing this, but that's the simplest, given what
you've described.)

I'd also point you at J's socket labs, to get started. Note that this
puts you at the level of sending text messages - very simple
mechanism. Simple is good, though.

Would that be enough to get you started?

Of course another approach would be to just keep frames and ticks in
sync. That's much simpler.

Simple is good.

Thanks,

-- 
Raul


On Fri, Aug 29, 2014 at 7:23 PM, Neill Robson <[email protected]> wrote:
> Hello to all on the forum! If any you happen to know Mr. (Henry) Rich, I'm
> one of his students.
>
> The most direct way to create a constantly updating screen in J is to run
> the relevant gl2 commands in a sys_timer verb, set to repeat at a certain
> interval by the window driver. However, for a video game with any more than
> rudimentary complexity, one would wish to separate "frames" (drawing the
> image to the screen) from "ticks" (computing the game logic). Preferably,
> ticks would happen at a constant rate per second, and then the remaining
> computation time would be spent rendering frames. In Java, that would be
> implemented somehow similar to this:
>
> long lastTime = System.nanoTime();
> double nsPerTick = 1000000000D / 60D;
> double delta = 0;
> while (running) {
>             long now = System.nanoTime();
>             // Determine how long it has been since the last tick
>             delta += (now - lastTime) / nsPerTick;
>             lastTime = now;
>
>             // If more than 1/60th of a second has passed, tick for each
> 60th.
>             while (delta >= 1) {
>                 ticks++;
>                 tick();
>                 delta -= 1;
>             }
>
>             render();
> }
>
> Of course, J is *much* different than Java in many respects. "While" loops
> are frowned upon in this situation, because functional languages get hung
> up in the while loop until it is "finished;" however, for video games this
> "hanging up" seems to be exactly what is needed (without the side effects
> of freezing the terminal, of course).
>
> I have been directed towards sockets for this sort of situation in the
> past, but I've never progressed far enough down that route to understand
> the gritty details of how to implement such a system.
>
> Would someone on the forum be able to guide me towards a solution? To
> restate the problem, I'm looking for the functional (J) equivalent of a
> "while" loop that repeats one function at a fixed rate and runs the other
> as frequently as the host machine safely allows.
>
> Thank you for your assistance, and apologies for the protracted & ugly Java
> example!
>
> --
> -Neill
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to