Update 2001/kev
Format fix README.md. The author noted some known issues. Marked them as INABIAF. In this case (first one) I found the author's mastodon handle. Added to winners.csv and the README.md. I was unable to test that the program still works. I might test it another time.
This commit is contained in:
1 parent
ce9162e878
commit
31a4242f8c
3 files changed
+67
-51
No files matched your search
+45
-50
@@ -1,12 +1,12 @@
|
||||
# Best Curses Game
|
||||
|
||||
Kevin Pulo
|
||||
School of Information Technologies
|
||||
Madsen Building F09
|
||||
University of Sydney, NSW, 2006
|
||||
Australia
|
||||
|
||||
http://www.kev.pulo.com.au/
|
||||
Kevin Pulo
|
||||
School of Information Technologies
|
||||
Madsen Building F09
|
||||
University of Sydney, NSW, 2006
|
||||
Australia
|
||||
<http://www.kev.pulo.com.au/>
|
||||
Mastodon: <https://fosstodon.org/@devkev>
|
||||
|
||||
## To build:
|
||||
|
||||
@@ -38,12 +38,8 @@ box.
|
||||
|
||||
## Author's remarks:
|
||||
|
||||
NETWORK P*NG!
|
||||
[=================]
|
||||
|
||||
Kevin Pulo
|
||||
kev@pulo.com.au
|
||||
|
||||
**NETWORK PONG!**
|
||||
|
||||
### REQUIREMENTS
|
||||
|
||||
@@ -53,35 +49,34 @@ box.
|
||||
|
||||
### DESCRIPTION
|
||||
|
||||
This program is a two-player networked version of the eighties
|
||||
arcade classic, "pong". It uses standard TCP sockets to
|
||||
communicate over the net, and ncurses for display. It supports
|
||||
variable terminal sizes (though both players must have the same
|
||||
terminal size) and game speeds. Each player has a paddle to hit
|
||||
the ball, and you get points for getting the ball past your
|
||||
opponent's paddle. It's pretty fun! :)
|
||||
This program is a two-player networked version of the eighties arcade classic,
|
||||
[Pong](https://en.wikipedia.org/wiki/Pong). It uses standard TCP sockets to
|
||||
communicate over the net, and `ncurses` for display. It supports variable
|
||||
terminal sizes (though both players must have the same terminal size) and game
|
||||
speeds. Each player has a paddle to hit the ball, and you get points for
|
||||
getting the ball past your opponent's paddle. It's pretty fun! :)
|
||||
|
||||
### RUNNING
|
||||
|
||||
Run the server first without any command line arguments, ie.
|
||||
Run the server first without any command line arguments, i.e.
|
||||
|
||||
```sh
|
||||
./kev
|
||||
```
|
||||
|
||||
Then run the client with a single command line argument which is
|
||||
the name of the machine running the server, eg.
|
||||
the name of the machine running the server, e.g.
|
||||
|
||||
```sh
|
||||
./kev localhost
|
||||
```
|
||||
|
||||
Make sure that the terminals on both ends are the same size.
|
||||
Also, the TCP port number specified in the build file mustn't be
|
||||
blocked by a firewall.
|
||||
Make sure that the terminals on both ends are the same size. Also, the TCP port
|
||||
number (5455) specified in the [Makefile](Makefile) mustn't be blocked by a
|
||||
firewall.
|
||||
|
||||
Here's a good quick example to see it in action on your own
|
||||
machine, assuming you have Xwindows:
|
||||
machine, assuming you have `Xwindows`:
|
||||
|
||||
```sh
|
||||
xterm -geometry 80x40 -fg green -bg black -fn 9x15bold -e ./kev &
|
||||
@@ -91,9 +86,9 @@ xterm -geometry 80x40 -fg green -bg black -fn 9x15bold -e ./kev localhost&
|
||||
### PLAYING
|
||||
|
||||
Your paddle is the one at the bottom of the screen, your opponent
|
||||
is at the top. To move your paddle left, hold down ',' (ie. '<'
|
||||
but don't press shift). To move your paddle right, hold down '.'.
|
||||
To quit, either player may press 'q'.
|
||||
is at the top. To move your paddle left, hold down `,` (i.e. `<`
|
||||
but don't press shift). To move your paddle right, hold down `.`.
|
||||
To quit, either player may press `q`.
|
||||
|
||||
The current score is shown on the left side of the halfway line.
|
||||
Your score is the lower number, your opponents score is the upper
|
||||
@@ -110,10 +105,10 @@ will decrease (or if the ball is going slowly enough, it'll turn
|
||||
around).
|
||||
|
||||
You might want to increase your keyboard repeat rate before
|
||||
playing. On the Linux console try "kbdrate -r 24.0 -d 250"
|
||||
(kbdrate might be "hidden" from normal users in /sbin, and you
|
||||
might need to be root anyway), in Xwindows try "xset r rate 250
|
||||
24" (find out your current rate first with "xset q", so that you
|
||||
playing. On the Linux console try `kbdrate -r 24.0 -d 250`
|
||||
(`kbdrate` might be "hidden" from normal users in `/sbin`, and you
|
||||
might need to be root anyway), in `Xwindows` try `xset r rate 250
|
||||
24` (find out your current rate first with `xset q`, so that you
|
||||
can reset it later).
|
||||
|
||||
Look below in the Building section for info on how to speed up or
|
||||
@@ -122,23 +117,23 @@ terminal size).
|
||||
|
||||
### BUILDING
|
||||
|
||||
Just run the Makefile as above. The "SPEED" variable in the Makefile
|
||||
controls the speed of the game (defaults to 50). This speed is
|
||||
Just run `make`to use the Makefile as above. The `SPEED` variable in the Makefile
|
||||
controls the speed of the game (defaults to `50`). This speed is
|
||||
the delay between frames in milliseconds. Thus a value of 0 will
|
||||
make the game go as fast as your network can handle, and values
|
||||
less than 50 are useful for larger terminals or more exciting
|
||||
games. The program needs bandwidth equal to 1/s bytes per second
|
||||
(where "s" is the speed value). Any latency on the network will
|
||||
be added to s - so you should probably subtract any latency from
|
||||
the value of s you want to have. Given that loopback and fast
|
||||
(where `s` is the speed value). Any latency on the network will
|
||||
be added to `s` - so you should probably subtract any latency from
|
||||
the value of `s` you want to have. Given that `loopback` and fast
|
||||
Ethernet LANs are both much less than 1ms of latency, you should
|
||||
only need to worry about this if you plan on playing over a slower
|
||||
link like a cable modem, DSL, or (God-forbid) dialup.
|
||||
link like a cable modem, DSL, or (God-forbid) dial-up.
|
||||
|
||||
The TCP port to use for network communications is specified by the
|
||||
"PORT" variable in the Makefile. If the default of 5455 is
|
||||
`PORT` variable in the Makefile. If the default of `5455` is
|
||||
blocked for whatever reason, you can change it to something else.
|
||||
Of course if you use a port < 1024, you'll need to be root.
|
||||
Of course if you use a `port < 1024`, you'll need to be root.
|
||||
|
||||
### OBFUSCATION
|
||||
|
||||
@@ -159,22 +154,22 @@ unexpectedly cool. :)
|
||||
|
||||
### BUGS
|
||||
|
||||
There are 3 warnings when I compile with gcc 2.95.3 (-Wall -ansi
|
||||
-pedantic) on my Linux system, but all are completely harmless.
|
||||
There are 3 warnings when I compile with gcc 2.95.3 (`-Wall -ansi
|
||||
-pedantic`) on my Linux system, but all are completely harmless.
|
||||
|
||||
I don't like the curses and/or termcaps/terminfos on IRIX and
|
||||
Solaris (the only two non-Linux systems I have access to).
|
||||
Despite calling timeout(0), notimeout(win, TRUE), nodelay(win,
|
||||
TRUE) and/or keypad(win, FALSE), it still seems to force a delay
|
||||
into calls to getch() - I'm guessing at a termcap/terminfo level.
|
||||
Despite calling `timeout(0);`, `notimeout(win, TRUE);`, `nodelay(win,
|
||||
TRUE);` and/or `keypad(win, FALSE);`, it still seems to force a delay
|
||||
into calls to `getch()` - I'm guessing at a termcap/terminfo level.
|
||||
At any rate, I can't seem to force no delay. This is a shame,
|
||||
because it basically plays havoc with the input code, particularly
|
||||
the read-ahead canceller. It still works, but not nearly as well
|
||||
(keypresses are dodgey and holding down keys doesn't always work),
|
||||
and so I _much_ prefer and recommend Linux libncurses.
|
||||
(key presses are dodgy and holding down keys doesn't always work),
|
||||
and so I _much_ prefer and recommend Linux `libncurses`.
|
||||
|
||||
Sometimes when 'q' is pressed in one, the other will crash out
|
||||
with "Broken pipe".
|
||||
Sometimes when `q` is pressed in one, the other will crash out
|
||||
with `Broken pipe`.
|
||||
|
||||
If the specified port can't be bound or connected to, the program
|
||||
segfaults.
|
||||
@@ -185,7 +180,7 @@ possible to crash the program a player scores over a billion
|
||||
points (1e9). Maybe you can consider that the goal... ;)
|
||||
|
||||
If you run the client and server on different architectures, both
|
||||
architectures need to have the same character systems (ie. don't
|
||||
architectures need to have the same character systems (i.e. don't
|
||||
try mixing ASCII and EBCDIC). It is independent of endianness
|
||||
though.
|
||||
|
||||
|
||||
Reference in new issue
Block a user