import java.io.*; public class CardReader { public final static char GOJF = 'F'; static String cardfile = Pathnames._PATH_CARDS; static DataObjectInputStream deckf; static void init_decks() { try { try { deckf = new DataObjectInputStream(new FileInputStream(cardfile)); } catch (FileNotFoundException e) { System.err.println("FileNotFoundException:" + e); } } catch (Exception e) { System.err.println(cardfile); System.exit(1); } try { InitDeck.deck = (Dk_st[]) deckf.readArray(InitDeck.deck, 2); System.err.println(cardfile); System.exit(1); } catch (Exception e) { } set_up(InitDeck.deck[0]); set_up(InitDeck.deck[1]); } static void set_up(Dk_st dp) { int r1 = 0; int r2 = 0; int i = 0; dp.offsets = new long[dp.num_cards]; try { dp.offsets = (long[]) deckf.readArray(dp.offsets, dp.num_cards); System.err.println(cardfile); System.exit(1); } catch (Exception e) { } dp.last_card = 0; dp.gojf_used = false; for (i = 0;i < dp.num_cards;i++) { long temp = 0L; r1 = Roll.roll(1, dp.num_cards) - 1; r2 = Roll.roll(1, dp.num_cards) - 1; temp = dp.offsets[r2]; dp.offsets[r2] = dp.offsets[r1]; dp.offsets[r1] = temp; } } static void get_card(Dk_st dp) { char type_maj = '\u0000'; char type_min = '\u0000'; int num = 0; int i = 0; int per_h = 0; int per_H = 0; int num_h = 0; int num_H = 0; Own_st op = null; do { try { deckf.rewind(); deckf.skip(dp.offsets[dp.last_card]); dp.last_card =++(dp.last_card) % dp.num_cards; type_maj = (char) deckf.read(); } catch (IOException e) { System.err.println("IO Exception:" + e); } } while (dp.gojf_used && type_maj == GOJF); try { type_min = (char) deckf.read(); } catch (IOException e) { System.err.println("IO Exception:" + e); } num = deckf.readIntChars(); printmes(); switch (type_maj) { case '+': if (type_min == 'A') { for (i = 0;i < Monop.num_play;i++) { if (i != Monop.player) { Monop.play[i].money -= num; } } num *= (Monop.num_play - 1); } Monop.cur_p.money += num; break; case '-': if (type_min == 'A') { for (i = 0;i < Monop.num_play;i++) { if (i != Monop.player) { Monop.play[i].money += num; } } num *= (Monop.num_play - 1); } Monop.cur_p.money -= num; break; case 'M': switch (type_min) { case 'F': num -= Monop.cur_p.loc; if (num < 0) { num += 40; } break; case 'J': SpecialMoves.goto_jail(); return; case 'R': Monop.spec = true; num = (int) ((Monop.cur_p.loc + 5) / 10) * 10 + 5 - Monop.cur_p.loc; break; case 'U': Monop.spec = true; if (Monop.cur_p.loc >= 12 && Monop.cur_p.loc < 28) { num = 28 - Monop.cur_p.loc; } else { num = 12 - Monop.cur_p.loc; if (num < 0) { num += 40; } } break; case 'B': num = - num; break; } Execute.move(num); break; case 'T': if (dp == InitDeck.deck[0]) { per_h = 40; per_H = 115; } else { per_h = 25; per_H = 100; } num_H = 0; num_h = num_H; for (op = Monop.cur_p.own_list;op != null;op = op.next) { if ((int) op.sqr.type == Monop.PRPTY) { if (op.sqr.desc.houses == 5) { ++num_H; } else { num_h += op.sqr.desc.houses; } } } num = per_h * num_h + per_H * num_H; System.out.println("You had " + num_h + " Houses and " + num_H + " Hotels, so that cost you $" + num); if (num == 0) { Monop.lucky(""); } else { Monop.cur_p.money -= num; } break; case GOJF: Monop.cur_p.num_gojf++; dp.gojf_used = true; break; } Monop.spec = false; } static void printmes() { int c = 0; Monop.printline(); try { while ((c = (char) deckf.read()) != '\0') { System.out.print(c); } } catch (IOException e) { System.err.println("IO Exception:" + e); } Monop.printline(); } }