#include <ui.h>
Public Methods | |
void | FlashNodes (Player &p, MoveList &ml) |
void | ShowAllPlayers (void) |
Move | GetPlayerMove (Player &, MoveList &) |
void | BeginTurn (Player &) |
void | EndTurn (Player &, Move) |
void | RevealSpy (Player &p, Move m) |
void | SpyTurn (Move &, int) |
Move | NoLegalMoves (Player &p) |
int | TransPop (byte bv, int color) |
void | InitScreen (void) |
void | DrawScreen (void) |
void | EraseScreen (void) |
void | Refresh (void) |
void | DrawTitleScreen () |
int * | UFWOOM (void) |
void | Intro () |
void | AboutButton (Display &) |
void | AnnounceWin (Player &, int) |
Private Methods | |
void | ShowSpyMoves (MoveList &moves) |
int | ComputePossTokens (MoveList &, int dest) |
Private Attributes | |
MapWindow * | mapwin |
KeyWindow * | keywin |
CPanelWindow * | cpanel |
PlayerWindow * | playwin |
InfoWindow * | infowin |
|
Definition at line 17 of file intro.c. References Display::Add(), Window::Client(), Display::Draw(), Viewport::GetMaxX(), Viewport::GetMaxY(), Viewport::OutTextXY(), Pause, Viewport::SetTextJustify(), and Viewport::SetTextStyle(). Referenced by Intro().
00018 { 00019 Window *wf1 = new Window (200, 80, GREEN, LIGHTGRAY); 00020 assert (wf1 != NULL); 00021 IntroDisplay.Add (wf1, 175, 20); 00022 IntroDisplay.Draw(); 00023 wf1->Client().SetTextStyle (GOTHIC_FONT, 0, 3); 00024 wf1->Client().SetTextJustify (CENTER_TEXT, CENTER_TEXT); 00025 wf1->Client().OutTextXY (wf1->Client().GetMaxX()/2, wf1->Client().GetMaxY()/2, "PREGO"); 00026 delay(Pause); 00027 Window *wf2 = new Window (200, 80, GREEN, LIGHTGRAY); 00028 assert (wf2 != NULL); 00029 IntroDisplay.Add (wf2, 5, 250); 00030 IntroDisplay.Draw(); 00031 wf2->Client().SetTextStyle (GOTHIC_FONT, 0, 3); 00032 wf2->Client().SetTextJustify (CENTER_TEXT, CENTER_TEXT); 00033 wf2->Client().OutTextXY (wf2->Client().GetMaxX()/2, wf2->Client().GetMaxY()/2, "SOMBRERO"); 00034 delay(Pause); 00035 Window *wf3 = new Window (200, 80, GREEN, LIGHTGRAY); 00036 assert (wf3 != NULL); 00037 IntroDisplay.Add (wf3, 350, 223); 00038 IntroDisplay.Draw(); 00039 wf3->Client().SetTextStyle (GOTHIC_FONT, 0, 3); 00040 wf3->Client().SetTextJustify (CENTER_TEXT, CENTER_TEXT); 00041 wf3->Client().OutTextXY (wf3->Client().GetMaxX()/2, wf3->Client().GetMaxY()/2, "KNEE CAPS"); 00042 delay (Pause); 00043 Window *wf4 = new Window (300, 50, BLUE, LIGHTGRAY); 00044 assert (wf4 != NULL); 00045 IntroDisplay.Add (wf4, 5, 400); 00046 IntroDisplay.Draw(); 00047 wf4->Client().SetTextStyle (GOTHIC_FONT, 0, 2); 00048 wf4->Client().SetTextJustify (CENTER_TEXT, CENTER_TEXT); 00049 wf4->Client().OutTextXY (wf4->Client().GetMaxX()/2, wf4->Client().GetMaxY()/2, "Click anywhere to play game"); 00050 delay (Pause/2); 00051 } |
|
Definition at line 217 of file ui.c. References FlashNodes(), Player::GetName(), Player::IsSpy(), MessageWin(), and NLines. Referenced by main().
00218 { 00219 char* Text [NLines]; 00220 00221 for (int i=0; i<NLines; i++) 00222 Text [i] = new char [40]; 00223 00224 if (P.IsSpy ()) 00225 { 00226 sprintf (Text [0], "** Congratulations **"); 00227 sprintf (Text [1], "The elusive %s", P.GetName ()); 00228 sprintf (Text [2], "escaped from the Detectives..."); 00229 sprintf (Text [3], ""); 00230 MoveList m; 00231 FlashNodes (P, m); 00232 FlashNodes (P, m); 00233 } 00234 else 00235 { 00236 sprintf (Text [0], "** Congratulations **"); 00237 sprintf (Text [1], "%s", P.GetName ()); 00238 sprintf (Text [2], "caught the spy"); 00239 sprintf (Text [3], "in round %d.", RoundN+1); 00240 sprintf (Text [4], ""); 00241 } 00242 MessageWin (RED, WHITE, "Game Over...", WHITE, Text, BLACK); 00243 00244 for (i=0; i<NLines; i++) 00245 delete Text [i]; 00246 } |
|
Definition at line 140 of file ui.c. References mapwin, playwin, Player::Position(), MapWindow::UnHilightNode(), and PlayerWindow::Update().
00141 { 00142 playwin->Update (p, theRules.CurrentTurn()); 00143 mapwin->UnHilightNode (p.Position()); 00144 } |
|
Definition at line 126 of file ui.c. References MoveList::GetCurrent(), MoveList::Next(), Move::Node, MoveList::Reset(), and Move::Trans. Referenced by GetPlayerMove().
00127 { 00128 int transtypes = 0; 00129 00130 if (ml.Reset ()) 00131 do { 00132 if (ml.GetCurrent()->Node == dest) 00133 transtypes = ml.GetCurrent()->Trans; 00134 } while (ml.Next ()); 00135 00136 return transtypes; 00137 } |
|
Definition at line 56 of file ui.h. Referenced by InitScreen(), and Refresh().
00056 { theDisplay.Draw (); } |
|
Definition at line 249 of file ui.c. Referenced by UFWOOM().
00250 { 00251 theDisplay.SetTextJustify (CENTER_TEXT, CENTER_TEXT); 00252 theDisplay.SetTextStyle (TRIPLEX_FONT, 0, 8); 00253 theDisplay.OutTextXY (theDisplay.GetMaxX()/2, 35, "Scotland Yard"); 00254 } |
|
Definition at line 147 of file ui.c. References Player::GetColor(), MapWindow::HilightNode(), mapwin, Move::Node, Player::Position(), and MapWindow::UnHilightNode().
00148 { 00149 mapwin->UnHilightNode (p.Position()); 00150 mapwin->HilightNode (m.Node, p.GetColor ()); 00151 } |
|
Definition at line 57 of file ui.h. Referenced by InitScreen(), and Refresh().
00057 { theDisplay.Erase (); theDisplay.Clear (); } |
|
Definition at line 107 of file ui.c. References MapWindow::DisableNodes(), MapWindow::EnableNodes(), Player::GetColor(), MapWindow::HilightNode(), mapwin, Player::Position(), and MapWindow::UnHilightNode(). Referenced by AnnounceWin(), GetPlayerMove(), and RevealSpy().
00108 { 00109 const int delaytime = 250; 00110 const int iterations = 2; 00111 00112 for (int i=0; i<iterations; i++) 00113 { 00114 mapwin->EnableNodes (ml, p.GetColor()); 00115 mapwin->HilightNode (p.Position(), p.GetColor()); 00116 delay (delaytime); 00117 mapwin->DisableNodes (ml); 00118 mapwin->UnHilightNode (p.Position()); 00119 delay (delaytime); 00120 } 00121 mapwin->EnableNodes (ml, p.GetColor()); 00122 mapwin->HilightNode (p.Position(), p.GetColor()); 00123 } |
|
Definition at line 56 of file ui.c. References AwayNow, ButtonMsg, ButtonPress, byte, Message::code, ComputePossTokens(), Message::d1, MapWindow::DisableNodes(), False, FlashNodes(), Player::GetColor(), ID_LEGAL, ID_QUIT, ID_REFRESH, ID_SPY, Player::IsSpy(), mapwin, MessageWin(), On, Message::origin, Player::Position(), Refresh(), ShowSpyMoves(), SpyMove, Status, TransPop(), True, and MapWindow::UnHilightNode().
00057 { 00058 if (p.IsSpy()) 00059 { 00060 char buf [40]; 00061 sprintf (buf, "Round %d", theRules.CurrentTurn()); 00062 MessageWin (BLUE, WHITE, buf, WHITE, SpyMove, BLACK); 00063 } 00064 FlashNodes (p, ml); 00065 00066 Message m; 00067 bool Done = False; 00068 int token; 00069 00070 Mouse.Flush (); 00071 do { 00072 m = theDisplay.Dispatch (Mouse.Event ()); 00073 if ((m.origin == ButtonMsg) && (m.code == ButtonPress)) 00074 switch (m.d1) 00075 { 00076 case ID_REFRESH: 00077 Refresh (); 00078 case ID_LEGAL: 00079 FlashNodes (p, ml); 00080 break; 00081 case ID_SPY: 00082 ShowSpyMoves (thePlayers[0]->GetHistory()); 00083 break; 00084 case ID_QUIT: 00085 MessageWin (RED, WHITE, "Quit Game", WHITE, AwayNow, BLACK); 00086 exit (1); 00087 break; 00088 } 00089 if ((m.origin == ButtonMsg) && (m.code == Status)) 00090 { 00091 byte bv = ComputePossTokens (ml, m.d1); 00092 token = TransPop (bv, p.GetColor()); 00093 if (token == -1) // if they cancel 00094 mapwin->UnHilightNode (m.d1); 00095 else 00096 Done = True; 00097 } 00098 } while (! Done); 00099 00100 mapwin->UnHilightNode (p.Position()); 00101 mapwin->UnHilightNode (m.d1); 00102 mapwin->DisableNodes (ml); 00103 return Move (p.Position(), m.d1, On<<token); 00104 } |
|
Definition at line 21 of file ui.c. References cpanel, DrawScreen(), EraseScreen(), infowin, keywin, mapwin, and playwin. Referenced by main().
00022 { 00023 EraseScreen (); 00024 00025 mapwin = new MapWindow; 00026 keywin = new KeyWindow; 00027 cpanel = new CPanelWindow; 00028 playwin = new PlayerWindow; 00029 infowin = new InfoWindow; 00030 00031 theDisplay.Add (mapwin, 0, 0); 00032 theDisplay.Add (keywin, 223, 403); 00033 theDisplay.Add (cpanel, 300, 403); 00034 theDisplay.Add (playwin, 0, 403); 00035 theDisplay.Add (infowin, 502, 403); 00036 theDisplay.SetLineStyle (SOLID_LINE, HORIZ_DIR, 2); 00037 theDisplay.SetColor (BLUE); 00038 theDisplay.Line (0, 401, 639, 401); 00039 DrawScreen (); 00040 } |
|
Definition at line 55 of file intro.c. References AboutButton(), Display::Add(), ButtonMsg, ButtonPress, Viewport::Clear(), Window::Client(), Display::Dispatch(), Display::Draw(), Viewport::GetMaxX(), Viewport::GetMaxY(), PushButton::GetXDim(), PushButton::GetYDim(), Viewport::OutTextXY(), Pause, Viewport::SetBkColor(), Viewport::SetColor(), Viewport::SetTextJustify(), and Viewport::SetTextStyle(). Referenced by main().
00056 { 00057 Display IntroDisplay; 00058 00059 IntroDisplay.SetBkColor (BLACK); 00060 IntroDisplay.Clear(); 00061 00062 IntroDisplay.SetTextStyle (TRIPLEX_FONT, 0, 12); 00063 IntroDisplay.SetColor (LIGHTGRAY); 00064 IntroDisplay.SetTextJustify (CENTER_TEXT, CENTER_TEXT); 00065 IntroDisplay.OutTextXY (IntroDisplay.GetMaxX()/2, 90, "Scotland"); 00066 IntroDisplay.SetColor (WHITE); 00067 IntroDisplay.OutTextXY (IntroDisplay.GetMaxX()/2 - 4, 86, "Scotland"); 00068 IntroDisplay.SetTextStyle (TRIPLEX_FONT, 0, 14); 00069 IntroDisplay.SetColor (LIGHTGRAY); 00070 IntroDisplay.OutTextXY (IntroDisplay.GetMaxX()/2, 300, "Yard"); 00071 IntroDisplay.SetColor (WHITE); 00072 IntroDisplay.OutTextXY (IntroDisplay.GetMaxX()/2 - 4, 296, "Yard"); 00073 00074 // delay(1500); 00075 00076 Window *w2 = new Window (100, 80, BLUE, LIGHTGRAY); 00077 assert (w2 != NULL); 00078 IntroDisplay.Add (w2, 160, 180); 00079 IntroDisplay.Draw(); 00080 w2->Client().SetTextStyle (GOTHIC_FONT, 0, 3); 00081 w2->Client().SetColor (BLUE); 00082 w2->Client().OutTextXY(18, 10, "Chris"); 00083 w2->Client().OutTextXY(15, 30, "L"); 00084 delay(Pause); 00085 00086 Window *w4 = new Window (100, 80, BLUE, LIGHTGRAY); 00087 assert (w4 != NULL); 00088 IntroDisplay.Add (w4, 370, 180); 00089 IntroDisplay.Draw(); 00090 w4->Client().SetTextStyle (GOTHIC_FONT, 0, 3); 00091 w4->Client().SetColor (BLUE); 00092 w4->Client().OutTextXY(20, 10, "Evan"); 00093 w4->Client().OutTextXY(14, 30, "O"); 00094 delay(Pause); 00095 00096 Window *w3 = new Window (100, 80, BLUE, LIGHTGRAY); 00097 assert (w3 != NULL); 00098 IntroDisplay.Add (w3, 265, 180); 00099 IntroDisplay.Draw(); 00100 w3->Client().SetTextStyle (GOTHIC_FONT, 0, 3); 00101 w3->Client().SetColor (BLUE); 00102 w3->Client().OutTextXY(15, 10, "Wilson"); 00103 w3->Client().OutTextXY(20, 30, "T"); 00104 delay(Pause); 00105 00106 Window *w = new Window (100, 80, BLUE, LIGHTGRAY); 00107 assert (w != NULL); 00108 IntroDisplay.Add (w, 55, 180); 00109 IntroDisplay.Draw(); 00110 w->Client().SetTextStyle (GOTHIC_FONT, 0, 3); 00111 w->Client().SetColor (BLUE); 00112 w->Client().OutTextXY(18, 10, "Steve"); 00113 w->Client().OutTextXY(18, 30, "W"); 00114 delay(Pause); 00115 00116 Window *w5 = new Window (100, 80, BLUE, LIGHTGRAY); 00117 assert (w5 != NULL); 00118 IntroDisplay.Add (w5, 475, 180); 00119 IntroDisplay.Draw(); 00120 w5->Client().SetTextStyle (GOTHIC_FONT, 0, 3); 00121 w5->Client().SetColor (BLUE); 00122 w5->Client().OutTextXY(20, 10, "Evan"); 00123 w5->Client().OutTextXY(14, 30, "B"); 00124 00125 PushButton *pb = new PushButton ("Play Game", BLUE, 0xFB); 00126 assert (pb != NULL); 00127 PushButton *pb2 = new PushButton ("About...", BLUE, 0xFA); 00128 assert (pb2 != NULL); 00129 // PushButton *pb3 = new PushButton ("Huh???", BLUE, 0xF0); 00130 // assert (pb3 != NULL); 00131 00132 IntroDisplay.Add (pb, 500, IntroDisplay.GetMaxY() - pb->GetYDim() - 5); 00133 IntroDisplay.Add (pb2, 500 - pb->GetXDim() - 5, IntroDisplay.GetMaxY() - pb2->GetYDim() - 5); 00134 // IntroDisplay.Add (pb3, 500 - pb->GetXDim() - pb2->GetXDim() - 20, IntroDisplay.GetMaxY() - pb3->GetYDim() - 5); 00135 IntroDisplay.Draw(); 00136 00137 Message DoneMsg (ButtonMsg, ButtonPress, 0xFB), 00138 AboutMsg (ButtonMsg, ButtonPress, 0xFA), 00139 // Bounce (ButtonMsg, ButtonPress, 0xF0), 00140 m; 00141 00142 do { 00143 m = IntroDisplay.Dispatch (Mouse.Event()); 00144 if (m == AboutMsg) 00145 { AboutButton(IntroDisplay); 00146 m = IntroDisplay.Dispatch (Mouse.WaitForAnyEvent()); 00147 m = DoneMsg; 00148 } 00149 // if (m == Bounce) 00150 // { 00151 // for (int i = 0; i < 10; i++) 00152 // { 00153 // 00154 // 00155 // } 00156 // } 00157 } while (m != DoneMsg); 00158 } |
|
Definition at line 198 of file ui.c. References Player::GetName(), MessageWin(), and NullMove.
00199 { 00200 char* Text [5]; 00201 for (int i=0; i<5; i++) 00202 { 00203 Text [i] = new char [40]; 00204 assert (Text [i] != NULL); 00205 } 00206 sprintf (Text[0], "%s has", p.GetName()); 00207 sprintf (Text[1], "no legal moves"); 00208 sprintf (Text[2], "this turn."); 00209 sprintf (Text[3], ""); 00210 MessageWin (BLUE, WHITE, "Sorry", WHITE, Text, BLACK); 00211 for (i=0; i<5; i++) 00212 delete Text [i]; 00213 return NullMove; 00214 } |
|
Definition at line 58 of file ui.h. References DrawScreen(), and EraseScreen(). Referenced by GetPlayerMove().
00058 { EraseScreen(); DrawScreen (); } |
|
Definition at line 154 of file ui.c. References BusMask, FlashNodes(), Player::GetName(), MessageWin(), SubwayMask, and Move::Trans.
00155 { 00156 const int nlines = 3; 00157 char *Text [nlines]; 00158 00159 for (int i=0; i<nlines; i++) 00160 Text [i] = new char [40]; 00161 00162 sprintf (Text[0], "%s was seen taking %s", 00163 p.GetName(), (m.Trans==SubwayMask)? "the Subway" : 00164 ((m.Trans==BusMask)? "the Bus" : "a Taxi")); 00165 sprintf (Text[1], "He will now be revealed!"); 00166 sprintf (Text[2], ""); 00167 00168 MessageWin (BLUE, WHITE, "Tip", WHITE, Text, BLACK); 00169 00170 MoveList ml; 00171 FlashNodes (p, ml); 00172 } |
|
Definition at line 42 of file ui.c. References Player::GetColor(), MapWindow::HilightNode(), mapwin, and Player::Position(). Referenced by main().
00043 { 00044 for (int i=1; i<NumPlayers; i++) 00045 { 00046 Player* p = thePlayers [i]; 00047 mapwin->HilightNode (p->Position(), p->GetColor()); 00048 } 00049 } |
|
Definition at line 21 of file spywin.c. References Display::Add(), BusMask, ButtonPress, Window::Client(), Message::code, Display::Dispatch(), Window::Draw(), MoveList::GetCurrent(), Viewport::GetMaxX(), Viewport::GetMaxY(), PushButton::GetXDim(), PushButton::GetYDim(), Window::Init(), MoveList::Next(), Viewport::OutTextXY(), MoveList::Reset(), Viewport::SetColor(), SubwayMask, TaxiMask, and Move::Trans. Referenced by GetPlayerMove().
00022 { 00023 PopUpWin *SMWindow = new PopUpWin(200, 170, BLUE, WHITE, "Spy Moves", WHITE); 00024 assert (SMWindow != NULL); 00025 SMWindow->Init(&theDisplay, 100, 100); 00026 PushButton *pb = new PushButton (" OK ", BLUE, 0xF0); 00027 assert (pb != NULL); 00028 SMWindow->Client().Add (pb, (SMWindow->Client().GetMaxX()/2) - (pb->GetXDim()/2), SMWindow->Client().GetMaxY() - pb->GetYDim() - 5); 00029 SMWindow->Draw(); 00030 SMWindow->Client().SetColor (BLACK); 00031 00032 Move *current; 00033 char info[20]; 00034 moves.Reset(); 00035 int i = 1,AddlX = 0, y = 0; 00036 if (moves.Reset()) 00037 { 00038 do { 00039 current = moves.GetCurrent(); 00040 if (current->Trans==SubwayMask) 00041 {sprintf (info, "%2d: Subway", i);} 00042 else 00043 if (current->Trans==TaxiMask) 00044 {sprintf (info, "%2d: Taxi", i);} 00045 else 00046 if (current->Trans==BusMask) 00047 {sprintf (info, "%2d: Bus", i);} 00048 if (i == 13) 00049 {AddlX = 100; // puts text in second column 00050 y = 0;} // puts text in first row 00051 SMWindow->Client().OutTextXY(5 + AddlX, 5 + (8*y), info); 00052 i++; 00053 y++; 00054 } while (moves.Next()); 00055 } 00056 Message m; 00057 do 00058 { 00059 m = SMWindow->Client().Dispatch (Mouse.Event()); 00060 } while (m.code != ButtonPress); 00061 delete SMWindow; 00062 } |
|
Definition at line 175 of file ui.c. References BusMask, MessageWin(), NLines, SubwayMask, and Move::Trans.
00176 { 00177 char* Text [NLines]; 00178 char t [40]; 00179 00180 for (int i=0; i<NLines; i++) 00181 Text [i] = new char [40]; 00182 00183 sprintf (t, "Tip: Round %d", RoundN+1); 00184 sprintf (Text [0], "Sources tell you the"); 00185 sprintf (Text [1], "Spy was seen taking"); 00186 if (mv.Trans & SubwayMask) 00187 sprintf (Text [2], "the Subway"); 00188 else if (mv.Trans & BusMask) 00189 sprintf (Text [2], "the Bus"); 00190 else 00191 sprintf (Text [2], "a Taxi"); 00192 sprintf (Text [3], ""); 00193 00194 MessageWin (BLUE, WHITE, t, WHITE, Text, BLACK); 00195 } |
|
Definition at line 24 of file transpop.c. References Group::Add(), Display::Add(), BusMask, ButtonMsg, ButtonPress, byte, Window::Client(), Message::code, Message::d1, Message::d2, Group::DisableBox(), Window::Dispatch(), Window::Draw(), Viewport::GetMaxX(), Viewport::GetMaxY(), PushButton::GetYDim(), Window::Init(), Message::origin, Square, Status, SubwayMask, TaxiMask, TWinXDim, and TWinYDim. Referenced by GetPlayerMove().
00025 { 00026 int Mode=0, i=0; 00027 00028 // CREATE WINDOW 00029 PopUpWin *w = new PopUpWin(TWinXDim, TWinYDim, RED, WHITE, 00030 "Mode of Transportation", WHITE); 00031 assert(w !=NULL); 00032 w->Init(&theDisplay, 640/2-TWinXDim/2, 480/2-TWinYDim/2); 00033 00034 // CREATE CHECKBOXES 00035 CheckBox *ch[3]; 00036 ch[0] = new CheckBox("Taxi", BLACK, color, 1000, Square); 00037 ch[1] = new CheckBox("Bus", BLACK, color, 1001, Square); 00038 ch[2] = new CheckBox("Subway", BLACK, color, 1002, Square); 00039 for(i=0; i<3; i++) 00040 assert(ch[i] !=NULL); 00041 00042 // CREATE PUSHBUTTONS 00043 PushButton *pb[2]; 00044 pb[1] = new PushButton ("Cancel", BLUE, 901); 00045 pb[0] = new PushButton ("Done", BLUE, 900, pb[1]->GetXDim(), pb[1]->GetYDim()); 00046 for(i=0; i<2; i++) 00047 assert(pb[i] !=NULL); 00048 00049 //CREATE GROUP AND ADD CHECKBOXES 00050 Group *modes = new Group(3, 1000); 00051 assert(modes !=NULL); 00052 w->Client().Add(modes, 0, 0); 00053 for(i=0; i<3; i++) 00054 modes->Add(ch[i], 20, 20+(i*20)); 00055 00056 //ADD PUSHBUTTONS AND GROUP TO POP-UP WINDOW 00057 w->Client().Add(pb[0], w->Client().GetMaxX()/2-65, w->Client().GetMaxY()-pb[0]->GetYDim()-5); 00058 w->Client().Add(pb[1], w->Client().GetMaxX()/2+5, w->Client().GetMaxY()-pb[1]->GetYDim()-5); 00059 00060 //DRAW POP-UP WINDOW 00061 w->Draw(); 00062 00063 int def = 0; 00064 if(!(bv & TaxiMask)) 00065 modes->DisableBox(1000); 00066 else 00067 def = 1000; 00068 if(!(bv & BusMask)) 00069 modes->DisableBox(1001); 00070 else if (!def) def = 1001; 00071 if(!(bv & SubwayMask)) 00072 modes->DisableBox(1002); 00073 else if (!def) def = 1002; 00074 00075 Mode=def-1000; 00076 Message DoneMsg(ButtonMsg, ButtonPress, 900), m; 00077 Message CancelMsg(ButtonMsg, ButtonPress, 901); 00078 do { 00079 m=w->Dispatch(Mouse.Event()); 00080 if((m.origin==ButtonMsg)&&(m.code==Status)&&(m.d2)) //Checkbox on 00081 Mode=m.d1-1000; 00082 } while((m != DoneMsg) && (m != CancelMsg)); 00083 00084 delete w; 00085 00086 if(m==CancelMsg) 00087 return (-1); 00088 else 00089 return Mode; 00090 } |
|
Definition at line 20 of file ufwoom.c. References Group::Add(), Display::Add(), ButtonMsg, ButtonPress, Circle, Viewport::Clear(), Window::Client(), Message::code, ComputerP, Message::d1, Message::d2, Disable, Display::Dispatch(), Display::Draw(), DrawTitleScreen(), Enable, Viewport::GetMaxX(), Viewport::GetMaxY(), PushButton::GetXDim(), PushButton::GetYDim(), GodMsg, HumanP, Inactive, Initial_Button_ID, Initial_Circle_CheckBox_ID, Initial_Group_ID, Initial_Square_CheckBox_ID, MaxPlayers, Off, On, Message::origin, Viewport::OutTextXY(), PColor, RequestStatus, Viewport::SetBkColor(), Viewport::SetColor(), Viewport::SetTextStyle(), Square, and Status. Referenced by PlayerSetup().
00021 { 00022 Display UFWOOMDisplay; 00023 int* info; // used to return info to user 00024 00025 int Num_Buttons = 0; 00026 int Num_Square_CheckBoxes = 0; 00027 int Num_Circle_CheckBoxes = 0; 00028 int Num_Groups = 0; 00029 00030 char buf[40]; 00031 00032 int i; 00033 info = new int[6]; // new space to store info 00034 00035 UFWOOMDisplay.SetBkColor (BLACK); 00036 UFWOOMDisplay.Clear (); 00037 00038 CheckBox *box [MaxPlayers*3]; // each player requires three checkboxes 00039 for (int plyr = 0; plyr < MaxPlayers; plyr++) 00040 { // new control checkboxes for each player 00041 box[plyr*2] = new CheckBox ("Computer", BLACK, PColor[plyr], Initial_Square_CheckBox_ID + Num_Square_CheckBoxes, Square); 00042 Num_Square_CheckBoxes++; // increment square check box count 00043 box[(plyr*2)+1] = new CheckBox ("Human", BLACK, PColor[plyr], Initial_Square_CheckBox_ID + Num_Square_CheckBoxes, Square); 00044 Num_Square_CheckBoxes++; 00045 } 00046 00047 box[Num_Square_CheckBoxes + Num_Circle_CheckBoxes] = new CheckBox ("Mr. X", BLACK, PColor[0], Initial_Circle_CheckBox_ID + Num_Circle_CheckBoxes, Circle); 00048 Num_Circle_CheckBoxes++; 00049 00050 for (i = 0; i < MaxPlayers; i++) { 00051 sprintf (buf, "Detective %d", i+1); 00052 box[Num_Square_CheckBoxes + Num_Circle_CheckBoxes] = new CheckBox (buf, BLACK, PColor[i+1], Initial_Circle_CheckBox_ID + Num_Circle_CheckBoxes, Circle); 00053 Num_Circle_CheckBoxes++; 00054 } 00055 00056 PushButton *pb = new PushButton ("Play Game", BLUE, Initial_Button_ID); 00057 Num_Buttons++; 00058 00059 // assert gracefully aborts if failure 00060 for (i=0; i < (Num_Square_CheckBoxes + Num_Circle_CheckBoxes); i++) 00061 assert (box[i] != NULL); 00062 assert (pb != NULL); 00063 00064 Group *g[6]; 00065 00066 for (i=0; i < MaxPlayers; i++) 00067 { 00068 g[i] = new Group (2, Initial_Group_ID + Num_Groups); 00069 Num_Groups++; 00070 } 00071 00072 Window *w = new Window (376, 235, RED, LIGHTGRAY, "Player Information", WHITE); 00073 assert (w != NULL); 00074 // add window to display 00075 UFWOOMDisplay.Add (w, UFWOOMDisplay.GetMaxX()/2-(376/2), UFWOOMDisplay.GetMaxY()/2-(235/2)); 00076 for(i=0; i<MaxPlayers; i++) 00077 w->Client().Add (g[i], 0, 0); // add groups to the window 00078 00079 for (i=0; i<12; i+=2) { 00080 g[i/2]->Add(box[i], 167, 40+(20*(i/2))); // add boxes to the groups 00081 g[i/2]->Add(box[i+1], 267, 40+(20*(i/2))); 00082 } 00083 00084 for (i=0; i < MaxPlayers; i++) // add boxes to windows 00085 w->Client().Add (box[i+12], 10, 40+(20*i)); 00086 // add push button to window 00087 w->Client().Add (pb, (w->Client().GetMaxX()/2)-(pb->GetXDim()/2), w->Client().GetMaxY() - pb->GetYDim() - 5); 00088 00089 DrawTitleScreen(); // this probably shouldn't be in func UFWOOM, but for now 00090 00091 UFWOOMDisplay.Draw (); 00092 00093 w->Client().SetTextStyle(DEFAULT_FONT, 0, 1); 00094 w->Client().SetColor(WHITE); 00095 w->Client().OutTextXY(15, 20, "Players"); 00096 w->Client().OutTextXY(170, 20, "Control"); 00097 00098 for(i=102; i<107; i++) // disable circle buttons for all but spy and player 1 00099 UFWOOMDisplay.Dispatch (Message (GodMsg, Disable, i-100+200)); 00100 00101 // the circle button for the spy and detective 1 are ALWAYS on 00102 box[12] -> ChangeStatus (On); // A game consists of a spy 00103 box[12] -> SetPseudo (Off); 00104 box[13] -> ChangeStatus (On); // and at least 1 detective 00105 box[13] -> SetPseudo (Off); 00106 00107 Message DoneMsg (ButtonMsg, ButtonPress, 0xFF), m; 00108 00109 do { 00110 m = UFWOOMDisplay.Dispatch (Mouse.Event ()); 00111 00112 if ((m.origin==ButtonMsg)&&(m.code==Status)&&(m.d2)) { 00113 for(i=102; i<107; i++) { 00114 if(m.d1==i) 00115 UFWOOMDisplay.Dispatch (Message (GodMsg, Enable, i-100+200)); 00116 } 00117 } 00118 else 00119 if ((m.origin == ButtonMsg) && (m.code == Status)&&(!m.d2)) { 00120 for(i=102; i<107; i++) { 00121 if(m.d1==i) 00122 UFWOOMDisplay.Dispatch (Message (GodMsg, Disable, i-100+200)); 00123 } 00124 } 00125 } while (m != DoneMsg); // when they click Play Game button, end loop 00126 00127 // loop through the circle buttons and request their status 00128 for (i = Initial_Circle_CheckBox_ID; i < Initial_Circle_CheckBox_ID + Num_Circle_CheckBoxes; i++) { 00129 m = UFWOOMDisplay.Dispatch (Message (GodMsg, RequestStatus, i)); 00130 info[i - Initial_Circle_CheckBox_ID] = Inactive; // initialize players to inactive 00131 if ((m.origin == ButtonMsg) && (m.code == Status) && (m.d1 == i)) 00132 { 00133 if (m.d2) // button is pressed 00134 { // are they controlled by a human or the computer 00135 m = UFWOOMDisplay.Dispatch (Message (GodMsg, RequestStatus, (Initial_Square_CheckBox_ID + ((i - Initial_Circle_CheckBox_ID) *2)))); 00136 if ((m.origin == ButtonMsg) && (m.code == Status) && (m.d1 == Initial_Square_CheckBox_ID + ((i - Initial_Circle_CheckBox_ID) *2))) 00137 { // note: control buttons are mutually exclusive 00138 if (m.d2) // they are controlled by the computer 00139 {info[i - Initial_Circle_CheckBox_ID] = ComputerP;} 00140 else if (!m.d2) // they are controlled by a human 00141 {info[i - Initial_Circle_CheckBox_ID] = HumanP;} 00142 } 00143 } 00144 } 00145 } 00146 return (info); 00147 } |
|
Definition at line 35 of file ui.h. Referenced by InitScreen(). |
|
Definition at line 37 of file ui.h. Referenced by InitScreen(). |
|
Definition at line 34 of file ui.h. Referenced by InitScreen(). |
|
Definition at line 33 of file ui.h. Referenced by BeginTurn(), EndTurn(), FlashNodes(), GetPlayerMove(), InitScreen(), and ShowAllPlayers(). |
|
Definition at line 36 of file ui.h. Referenced by BeginTurn(), and InitScreen(). |