home *** CD-ROM | disk | FTP | other *** search
- #include "MacLuff.h"
-
- /* Routin for input of moves and commands (Main event loop) */
- inmove(x, y) int *x, *y;{
- FlushEvents(everyEvent, 0);
- HiliteMenu(0);
-
- while(TRUE){
- GetNextEvent(everyEvent, &my_event);
- adjust_cursor();
- mouse_p.h = my_event.where.h;
- mouse_p.v = my_event.where.v;
- GlobalToLocal(&mouse_p);
- switch(my_event.what){
- case mouseDown:
- if(playcnt){
- DisableItem(my_menus[3], YOUR_MOVE);
- EnableItem(my_menus[3], REMOVE);
- }
- else{
- EnableItem(my_menus[3], YOUR_MOVE);
- DisableItem(my_menus[3], REMOVE);
- }
- switch(FindWindow(&my_event.where, &which_w)){
- case inMenuBar:
- if( do_command(MenuSelect(&my_event.where)) )
- return;
- FlushEvents(everyEvent, 0);
- break;
- case inContent:
- if(message_flag){
- EraseRect(&message_r);
- draw_holes();
- message_flag = FALSE;
- }
- if( !done_flag )
- if( the_w_click(x, y) )
- return;
- break;
- case inDrag:
- DragWindow(which_w, &my_event.where, &drag_r);
- break;
- }
- break;
- case updateEvt:
- BeginUpdate(the_w);
- utboard();
- EndUpdate(the_w);
- break;
- }
- }
- }
-
- do_command(help) int help;{
- char who;
- int x, y;
-
- the_menu = HiWord(help);
- the_item = LoWord(help);
- switch(the_menu){
- case APPLE:
- say_something();
- break;
- case FILE:
- switch(the_item){
- case NEW_GAME:
- if(message_flag){
- EraseRect(&message_r);
- draw_holes();
- message_flag = FALSE;
- }
- for(x = 0; x < XZIZE; x++)
- for(y = 0; y < YZIZE; y++){
- if(board[x][y] != ' '){
- play[x][y] = 0;
- board[x][y] = ' ';
- update(x, y);
- draw_empty(x, y);
- }
- }
- EnableItem(my_menus[3], HINT);
- EnableItem(my_menus[3], SHOW_GAME);
- done_flag = FALSE;
- playcnt = 0;
- break;
- case QUIT:
- ExitToShell();
- break;
- }
- break;
- case HELP:
- say_something_else();
- break;
- case COMMAND:
- if(message_flag){
- EraseRect(&message_r);
- draw_holes();
- message_flag = FALSE;
- }
- switch(the_item){
- case YOUR_MOVE:
- x = XZIZE/2;
- y = YZIZE/2;
- board[x][y] = 'o';
- update(x, y);
- play[x][y] = ++playcnt;
- draw_o(x, y);
- break;
- case REMOVE:
- while(TRUE){
- if(playcnt == 0)
- break;
- for(x = 0; x < XZIZE; x++)
- for(y = 0; y < YZIZE; y++)
- if(play[x][y] == playcnt){
- play[x][y] = 0;
- who = board[x][y];
- board[x][y] = ' ';
- update(x, y);
- draw_empty(x, y);
- }
- playcnt--;
- if(who == 'x')
- break;
- }
- EnableItem(my_menus[3], HINT);
- EnableItem(my_menus[3], SHOW_GAME);
- done_flag = FALSE;
- break;
- case SHOW_GAME:
- slf = TRUE;
- draw_message("Push mouse button to stop");
- return(TRUE);
- break;
- case HINT:
- if(chose('x', &x, &y))
- draw_hint(x, y);
- break;
- }
- break;
- }
- HiliteMenu(0);
- return(FALSE);
- }
-
- adjust_cursor(){
- if(PtInRect(&mouse_p, &play_r))
- SetCursor(&finger);
- else
- SetCursor(&QD->arrow);
- }
-
- the_w_click(x, y) int *x, *y;{
- if(PtInRect(&mouse_p, &play_r)){
- *x = mouse_p.h/15;
- *y = (mouse_p.v - 35)/15;
- if(board[*x][*y] == ' '){
- InvertRect(&xy_r[*x][*y]);
- while(StillDown());
- InvertRect(&xy_r[*x][*y]);
- return(TRUE);
- }
- }
- return(FALSE);
- }
-
- say_something(){
- EraseRect(&play_r);
- MoveTo(50, 50); DrawString("Luff is written by:");
- MoveTo(50, 80); DrawString("Roland Karlsson");
- MoveTo(50, 95); DrawString("Dpt. of Telecomm. & Computer Systems");
- MoveTo(50, 110); DrawString("Royal Institute of Technology");
- MoveTo(50, 125); DrawString("S-100 44 Stockholm, SWEDEN");
- MoveTo(50, 150); DrawString("roland@ttds");
- while( ! Button() );
- utboard();
- }
-
- say_something_else(){
- draw_message("Just point and push until you get 5 in a row");
- }
-