|
|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T b
Length: 3312 (0xcf0)
Types: TextFile
Names: »bj.c«
└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987
└─⟦this⟧ »EUUGD18/General/Bj/bj.c«
#include <curses.h>
#include "defs.h"
/*
* This implements the player (client) portion of blackjack. It's
* pretty stupid, basically a big case statement. It listens to
* the dealer (server), and updates the screen, getting input from
* the player when necessary. Here are the commands it sends and
* receives:
*
* commands to client:
*
* Pnplayername add player playername as player n
* Mstring display string as a message
* Rstring display string and get single char response
* rstring display string and get string response
* Cnhstring display string as cards for player n hand h
*
* commands to server:
*
* H hit with another card
* S stand
* T split
* D double down
* Q quit
* (plus plain old string)
*/
main (argc, argv)
int argc;
char *argv[];
{
char buf[SLEN], host[20];
int s, make_con(); /* socket I talk and listen on */
void send_name();
char *gets();
(void) signal(SIGINT, SIG_IGN);
(void) signal(SIGQUIT, SIG_IGN);
if (argc == 2)
s = make_con(*++argv); /* host is a different machine */
else {
(void) gethostname(host, SLEN); /* host is this machine */
s = make_con(host);
}
send_name(s); /* send name, get player info */
initscr(); /* curses stuff */
noecho();
crmode();
refresh();
for (;;) {
standend();
sockread(s, buf); /* get command from dealer */
switch(buf[0]) {
case 'P': /* display player names */
standout();
switch(buf[1]) {
case '0':
mvaddstr(5, 55, buf + 2);
break;
case '1':
mvaddstr(11, 50, buf + 2);
break;
case '2':
mvaddstr(17, 45, buf + 2);
break;
case '3':
mvaddstr(17, 10, buf + 2);
break;
case '4':
mvaddstr(11, 5, buf + 2);
break;
case '5':
mvaddstr(5, 0, buf + 2);
mvaddstr(2, 30, "Dealer");
break;
}
refresh();
break;
case 'M': /* display a message */
move(0, 0);
clrtoeol();
mvaddstr(0, 0, buf + 1);
refresh();
sleep(1); /* delete or increase for different delay reading messages */
break;
case 'r': /* display a message, then read a string */
move(0, 0);
clrtoeol();
mvaddstr(0, 0, buf + 1);
refresh();
echo();
nocrmode();
(void) gets(buf); /* getstr() screws up tty bits */
sockwrite(s, buf);
noecho();
crmode();
break;
case 'R': /* display a message, then read a char */
move(0,0);
clrtoeol();
mvaddstr(0, 0, buf + 1);
refresh();
*buf = getch();
buf[1] = '\0';
sockwrite(s, buf);
break;
case 'C': /* display a players hand */
switch(buf[1]) {
case '0': /* the different players */
move(6, 55);
break;
case '1':
move(12, 50);
break;
case '2':
move(18, 45);
break;
case '3':
move(18, 10);
break;
case '4':
move(12, 5);
break;
case '5':
move(6, 0);
break;
case '6':
move(3, 30);
}
/* this places the hands under the player name in the proper row */
move(stdscr->_cury + buf[2] - '0', stdscr->_curx);
if (buf[1] == '6')
addstr(buf + 3);
else {
printw("#%c: ", buf[2] + 1);
addstr(buf + 3);
}
refresh();
break;
case 'c': /* clear screen */
clear();
refresh();
break;
case 'Q': /* quit */
endwin();
exit(0);
default:
puts("Error");
puts(buf);
}
(void) fflush(stdout);
}
}