|
|
1.1 root 1: /*
2: * Copyright (c) 1980 Regents of the University of California.
3: * All rights reserved.
4: *
5: * Redistribution and use in source and binary forms are permitted provided
6: * that: (1) source distributions retain this entire copyright notice and
7: * comment, and (2) distributions including binaries display the following
8: * acknowledgement: ``This product includes software developed by the
9: * University of California, Berkeley and its contributors'' in the
10: * documentation or other materials provided with the distribution and in
11: * all advertising materials mentioning features or use of this software.
12: * Neither the name of the University nor the names of its contributors may
13: * be used to endorse or promote products derived from this software without
14: * specific prior written permission.
15: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
16: * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
17: * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
18: */
19:
20: #ifndef lint
21: static char sccsid[] = "@(#)play.c 5.6 (Berkeley) 6/26/90";
22: #endif /* not lint */
23:
24: # include "trek.h"
25: # include "getpar.h"
26: # include <setjmp.h>
27:
28: /*
29: ** INSTRUCTION READ AND MAIN PLAY LOOP
30: **
31: ** Well folks, this is it. Here we have the guts of the game.
32: ** This routine executes moves. It sets up per-move variables,
33: ** gets the command, and executes the command. After the command,
34: ** it calls events() to use up time, attack() to have Klingons
35: ** attack if the move was not free, and checkcond() to check up
36: ** on how we are doing after the move.
37: */
38: extern int abandon(), capture(), shield(), computer(), dcrept(),
39: destruct(), dock(), help(), impulse(), lrscan(),
40: warp(), dumpgame(), rest(), srscan(),
41: myreset(), torped(), visual(), setwarp(), undock(), phaser();
42:
43: struct cvntab Comtab[] =
44: {
45: "abandon", "", abandon, 0,
46: "ca", "pture", capture, 0,
47: "cl", "oak", shield, -1,
48: "c", "omputer", computer, 0,
49: "da", "mages", dcrept, 0,
50: "destruct", "", destruct, 0,
51: "do", "ck", dock, 0,
52: "help", "", help, 0,
53: "i", "mpulse", impulse, 0,
54: "l", "rscan", lrscan, 0,
55: "m", "ove", warp, 0,
56: "p", "hasers", phaser, 0,
57: "ram", "", warp, 1,
58: "dump", "", dumpgame, 0,
59: "r", "est", rest, 0,
60: "sh", "ield", shield, 0,
61: "s", "rscan", srscan, 0,
62: "st", "atus", srscan, -1,
63: "terminate", "", myreset, 0,
64: "t", "orpedo", torped, 0,
65: "u", "ndock", undock, 0,
66: "v", "isual", visual, 0,
67: "w", "arp", setwarp, 0,
68: 0
69: };
70:
71: myreset()
72: {
73: extern jmp_buf env;
74:
75: longjmp(env, 1);
76: }
77:
78: play()
79: {
80: struct cvntab *r;
81:
82: while (1)
83: {
84: Move.free = 1;
85: Move.time = 0.0;
86: Move.shldchg = 0;
87: Move.newquad = 0;
88: Move.resting = 0;
89: skiptonl(0);
90: r = getcodpar("\nCommand", Comtab);
91: (*r->value)(r->value2);
92: events(0);
93: attack(0);
94: checkcond();
95: }
96: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.