/*** dollar.c A C program to play Dollar Pinball by Kevin Martin, version of 5/29/93 Dollar Pinball is the creation of Larry DeMar and Joe Kaminkow. Usage: dollar serialnumber blacknumber seriesyear Example: % dollar 58271385 7 1990 ***/ #include #include char *serial, *black, *year; int score, balls, warnings; int doubled, jackpot; /* flags */ char buf[256]; int usage(arg0) char *arg0; { printf(" Usage: %s serialnumber blacknumber seriesyear\n",arg0); printf("Example: %s 58271385 7 1990\n",arg0); return 2; } /* usage */ million() { printf("%-25s 1 M\n","Million"); score++; } /* million */ int main(argc, argv) int argc; char *argv[]; { int i, j; if (argc != 4) return usage(argv[0]); serial = argv[1]; black = argv[2]; year = strchr(argv[3],0) - 1; score = 0; balls = 3; warnings = 2; doubled = jackpot = 0; for (i = 0; i < 8; i++) { switch (serial[i]) { case '0': if (i < 7) { j = serial[i + 1] - '0'; j = j ? j : 10; printf("%c%c %-25s%3d M\n", serial[i],serial[i + 1],"Million Plus",j); score += j; i++; } else printf("%-25s 0 M\n","Million Plus"); break; case '1': printf("1 "); million(); break; case '2': printf("2 "); if (doubled) million(); else { printf("%-25s%3d M\n","Double Score",score); score <<= 1; doubled = 1; } break; case '3': printf("3 %-25s 3 M\n","Three Million"); score += 3; break; case '4': printf("4 "); if (jackpot) million(); else { j = atoi(black); if ((j < 1) || (j > 12)) { printf("--- Illegal black number value (1-12 only)\n"); return usage(argv[0]); } printf("%-25s%3d M\n","Jackpot",j); score += j; jackpot = 1; } break; case '5': balls++; printf("5 Extra Ball (%d Ball%s)\n",balls,balls == 1 ? "" : "s"); break; case '6': printf("6 "); if (--warnings) printf("Tilt Warning (%d Left)\n",warnings); else { warnings = 2; printf("TILT"); if (--balls) printf(" (%d Ball%s Left)\n",balls,balls == 1 ? "" : "s"); else { printf("\nGAME OVER\n"); i = 9; } } break; case '7': case '8': case '9': if ((i < 7) && (serial[i + 1] == serial[i])) { if ((i < 6) && (serial[i + 2] == serial[i])) { printf("%c%c%c %-25s 5 M\n", serial[i],serial[i],serial[i],"Special"); score += 5; i += 2; } else { printf("%c%c Fantastic Save\n",serial[i],serial[i]); i++; } } else { warnings = 2; printf("%c Drain",serial[i]); if (--balls) printf(" (%d Ball%s Left)\n",balls,balls == 1 ? "" : "s"); else { printf("\nGAME OVER\n"); i = 9; } } break; default: printf("--- Illegal character in serial number\n"); return usage(argv[0]); } } sprintf(buf,"%d Ball%s Remaining",balls,balls == 1 ? "" : "s"); printf(" %-25s%3d M\n",buf,balls); score += balls; if (serial[7] == *year) { printf(" %-25s 1 M\n","Match"); score++; } printf(" %-25s%3d Million Points\n","TOTAL SCORE",score); return 0; } /* main */