home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD2.mdf / c / library / dos / menu / kiwi / examples / ksreak.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-03-21  |  9.7 KB  |  482 lines

  1. #include<stdlib.h>
  2. #include<kiwi_inc.h>
  3. #include<kiwipro.h>
  4.  
  5.  
  6. /***** Menüfestlegungen            */
  7. MENU leiste[3]={
  8. "Datei",0,1,"",
  9. "Spielen",0,1,"",
  10. "Festleg",0,1,"",
  11. };
  12.  
  13. MENU datei_menu[2]={
  14. "Informationen  ",8,1,"",
  15. "Beende Programm",8,1,"",
  16. };
  17.  
  18. MENU spiel_menu[2]={
  19. "Spiel Starten ",0,1,"",
  20. "Spiel Optionen",0,6,"",
  21. };
  22.  
  23.  
  24.  
  25. /********  Globale Variable         */
  26.  
  27. int but_form=KIWI_MODE;        /* Form der Schalter        */
  28. int but_shad=SHADOW_ON;        /* Schalter mit Schatten    */
  29. int but_klick=KLICK_ON;        /* Schalter mit Klicken        */
  30. int freq_ein=100;        /* Einschaltfrequenz        */
  31. int ton_ein=2;                     /* Einschaltdauer        */
  32. int freq_aus=100;        /* Ausschaltfrequenz        */
  33. int ton_aus=2;            /* Einschaltdauer        */
  34.  
  35. int play_anzahl=10;        /* Anzahl Durchläufe        */
  36. int play_button;        /* Aktiver Schalter        */
  37. int error;            /* Abbruchbedingung        */
  38. int play_typ=3;    /* 6x5    */    /* Spielflächentyp        */
  39. int max_button;            /* Anzahl Schalter        */
  40.  
  41.  
  42. BUTTON *but[30];        /* Pointer auf die Schalter    */
  43. char *titel[30]={        /* Schlaterbeschriftungsfeld    */
  44. "Autton",
  45. "Button",
  46. "Cutton",
  47. "Dutton",
  48. "Eutton",
  49. "Futton",
  50. "Gutton",
  51. "Hutton",
  52. "Iutton",
  53. "Jutton",
  54. "Kutton",
  55. "Lutton",
  56. "Mutton",
  57. "Nutton",
  58. "Outton",
  59. "Putton",
  60. "Qutton",
  61. "Rutton",
  62. "Sutton",
  63. "Tutton",
  64. "Uutton",
  65. "Vutton",
  66. "Wutton",
  67. "Xutton",
  68. "Yutton",
  69. "Zutton",
  70. "Autton",
  71. "Button",
  72. "Cutton",
  73. "Dutton",};
  74.  
  75.  
  76. ZEIT start,ende,diff_time;    /* Definitionen der benötigten Zeitvariablen    */
  77. ULONG min,max,norm;        /* Millisekundenzähler                */
  78.  
  79.  
  80. int  main(void);
  81. int  dateimenu(void);
  82. int  spielmenu(void);
  83. int  festmenu(void);
  84. int  spieloptionen(void);
  85. int  play(void);
  86. int  action(void);
  87. int  set_button(void);
  88. int  init_tools(void);
  89. int  reset_tools(void);
  90. void  check_if_get_help(void);
  91.  
  92.  
  93. /* Macro to get a random integer within a specified range */
  94. #define getrandom( min, max ) ((rand() % (int)(((max)+1) - (min))) + (min))
  95.  
  96.  
  97.  
  98.  
  99.  
  100. /************************************************************************/
  101. main()
  102. {
  103. int wahl=0,ende=0;
  104. WINDOW win;
  105.  
  106. set_button_mode(but_shad);                /* Schalterschatten    */
  107. set_button_mode(but_klick);                /* Schalterklicken    */
  108. set_button_sound(freq_ein,ton_ein,freq_aus,ton_aus);    /* Tonart        */
  109. set_button_mode(but_form);                /* Schalterform        */
  110. set_window_display_mode(EXPLODE);            /* Fensteröffnungsform    */
  111. set_window_open_delay(7);                /* Öffnungsverzögerung    */
  112. set_scanf_exit_code(1,F6,1);                /* Exitcode für die Masken    */
  113.  
  114. init_tools();                        /* Initialisier Toolbox        */
  115.  
  116. init_main_menu(leiste,3);                /* Hauptmenü        */
  117. win=load_window("SPIELINT .WND");
  118. wait_input();
  119. close_window(win);
  120.  
  121. do
  122. {
  123.  
  124.     wahl=choose_main_menu();            /* Hauptmenüwahl            */
  125.     switch(wahl){
  126.  
  127.     case 0: ende=dateimenu();            /* Ende                */
  128.         break;
  129.  
  130.     case 1: spielmenu();                /* Spielen            */
  131.         break;
  132.  
  133.     case 2: festmenu();                /* Festlegungen            */
  134.         break;
  135.  
  136.     }
  137.  
  138. }while(!ende);
  139.  
  140. reset_tools();                        /* Ende des Spasses        */
  141.  
  142. return(0);
  143. }
  144.  
  145.  
  146. /************************************************************************/
  147. int dateimenu()
  148. {
  149. int wahl=0,res=0;
  150. WINDOW win=0,win1;
  151.  
  152. wahl=choose_sub_menu(datei_menu,2,&win);        /* Dateimenüwahl    */
  153. switch(wahl){
  154.  
  155.     case 0:    win1=load_window("INFO .WND");        /* Infofenster    */
  156.         wait_input();
  157.         close_window(win1);
  158.         break;
  159.  
  160.     case 1:     res=1;                    /* Tschüss        */
  161.         break;
  162.  
  163.  
  164.     default:break;
  165.     }
  166.  
  167. close_window(win);
  168. return(res);
  169. }
  170.  
  171. /************************************************************************/
  172. int spielmenu()
  173. {
  174. int wahl=0;
  175. WINDOW win=0;
  176.  
  177. wahl=choose_sub_menu(spiel_menu,2,&win);        /* Spielmenü        */
  178. switch(wahl){
  179.  
  180.     case 0:     play();                    /* Starte Spiel        */
  181.         break;
  182.  
  183.     case 1:     spieloptionen();            /* Spieloptionen    */
  184.         break;
  185.  
  186.     default:break;
  187.     }
  188.  
  189. close_window(win);
  190. return(0);
  191. }
  192.  
  193.  
  194. /************************************************************************/
  195. int festmenu()
  196. {
  197. int result=0;
  198. static WINDOW win=0;
  199. RADIO form,klick,shad;
  200.  
  201.      if(but_form==KIWI_MODE) form=0;
  202. else if(but_form==TURBO_MODE)form=1;
  203. else                         form=2;
  204.  
  205. if(but_shad==SHADOW_ON)shad=0;
  206. else                   shad=1;
  207.  
  208. if(but_klick==KLICK_ON)klick=0;
  209. else                   klick=1;
  210.  
  211.                         /* Hole mit Scanf die Einstellungen aus der Maske            */
  212. win=load_window("SETBUTT .WND");
  213. result=scanf_mask(win,0,   "x",    &form,
  214.                 &klick,
  215.                 &shad,
  216.                 &freq_ein,
  217.                 &ton_ein,
  218.                 &freq_aus,
  219.                 &ton_aus
  220.                 /* Button Speichern */
  221.                 /* Button Abbruch   */
  222.                 /* Button Hilfe     */);
  223.  
  224. close_window(win);
  225. if(result==F6)            /* Änderungen einstellen            */
  226. {
  227.          if(form==0)but_form=KIWI_MODE;
  228.     else if(form==1)but_form=TURBO_MODE;
  229.     else            but_form=MICROSOFT;
  230.  
  231.     if(shad==0)but_shad=SHADOW_ON;
  232.     else       but_shad=SHADOW_OFF;
  233.  
  234.     if(klick==0)but_klick=KLICK_ON;
  235.     else       but_klick=KLICK_OFF;
  236.  
  237.     set_button_mode(but_shad);
  238.     set_button_mode(but_klick);
  239.     set_button_sound(freq_ein,ton_ein,freq_aus,ton_aus);
  240.     set_button_mode(but_form);
  241. }
  242.  
  243. return(0);
  244. }
  245.  
  246.  
  247.  
  248. int spieloptionen()
  249. {
  250. static WINDOW win=0;
  251.  
  252. win=load_window("SPIELOPT.WND");
  253. scanf_mask(win,0,"x",&play_typ,
  254.             &play_anzahl
  255.             /* Button Ok */);
  256.  
  257. close_window(win);
  258. return(0);
  259. }
  260.  
  261.  
  262.  
  263.  
  264. /************************************************************************/
  265. int play()
  266. {
  267. int i,x,y,dx,dy,max_x,xa,ya;
  268. WINDOW win,win1;
  269. ULONG diff;
  270.  
  271. /* Setze die Spielfläche nach gewählten Modus            */
  272. if(play_typ==0)        /*    3x3    */    
  273. {
  274.     xa=12;
  275.     ya=3;    
  276.     dx=20;
  277.     dy=6;
  278.     max_x=70;
  279.     max_button=9;
  280. }
  281. else if(play_typ==1)    /*    4x4    */
  282. {
  283.     xa=8;
  284.     ya=2;    
  285.     dx=17;
  286.     dy=5;
  287.     max_x=76;
  288.     max_button=16;
  289. }
  290. else if(play_typ==2)    /*    5x5    */
  291. {
  292.     xa=4;
  293.     ya=1;    
  294.     dx=14;
  295.     dy=4;
  296.     max_x=74;
  297.     max_button=25;
  298. }
  299. else if(play_typ==3)    /*    5x5    */
  300. {
  301.     xa=2;
  302.     ya=1;    
  303.     dx=12;
  304.     dy=4;
  305.     max_x=74;
  306.     max_button=30;
  307. }
  308. /* Seed the random number generator with current time. */
  309. srand( (unsigned)time( NULL ) );
  310.  
  311. win=open_window("Spielfläche",2,2,78,24,DOPPELT);    /* Spielfläche    */
  312. y=ya;
  313. x=xa;
  314. for(i=0;i<max_button;i++)                /* Erstelle Schalter    */
  315. {
  316.     but[i]=create_button(win,titel[i],0,6,x,y);
  317.     x+=dx;
  318.  
  319.     if(x>=max_x)
  320.     {
  321.         y+=dy;
  322.         x=xa;
  323.     }
  324. }
  325.  
  326. win1=open_window("",AM,AM,45,3,DOPPELT);        /* Letzte Warnung    */
  327. display_string("Wenn fertig, beliebige Taste zum Starten",win1,AM,2);
  328. wait_input();
  329. close_window(win1);
  330.  
  331. max=norm=0l;                        /* Setze die Zeitdaten    */
  332. min=1000000l;
  333. error=0;
  334. for(i=0;i<play_anzahl&& error!=(-1);i++)
  335. {
  336.     set_button();                    /* Aktivier Schalter    */
  337.     activ_button(but[play_button]);            /* Setze den auf Aktiv    */
  338.     pieps();                    /* Letzte Meldung    */
  339.     get_system_time(&start);            /* Hole Startzeit    */
  340.     action();                    /* warte auf Aktion des Spielers    */
  341.     get_system_time(&ende);                /* Hole Endzeit        */
  342.     passiv_button(but[play_button]);        /* Schalter auf aus    */
  343.     if(error==1)error=0;                /* Weiterspielen ? ja    */
  344.  
  345.     diff=sub_time(&diff_time,&start,&ende);        /* Berechne Reaktionszeit    */
  346.     if(diff<min)min=diff;                /* Kleiner als bisher    */
  347.     if(diff>max)max=diff;                /* Größer als bisher    */
  348.     norm+=diff;
  349. }
  350. win1=open_window("Ergebnis",AM,AM,50,10,DOPPELT);    /* Zeige Ergebnis    */
  351. wlocate(win1,2,2);
  352. printw(win1,"Anzahl Durchläufe                   = %d \n",play_anzahl);
  353. printw(win1,"Minimale Reaktionszeit         (ms) = %ld\n",min);
  354. printw(win1,"Maximale Reaktionszeit         (ms) = %ld\n",max);
  355. printw(win1,"Durchschnittlich Reaktionszeit (ms) = %ld\n",norm/i);
  356. wait_input();
  357. close_window(win1);
  358.  
  359. for(i=0;i<max_button;i++)                /* Zerstöre Schalter    */
  360.     destroy_button(but[i]);
  361.  
  362. close_window(win);                    /* Fenster weg        */
  363.  
  364. return(0);
  365. }
  366.  
  367.  
  368.  
  369.  
  370. /************************************************************************/
  371. int action()
  372. {
  373. int ts,ms;
  374. UINT mx,my;
  375.  
  376.  
  377. do
  378. {
  379.     ts=input();                /* Tastatur        */
  380.     ms=mouse(&mx,&my);            /* Maus            */
  381.  
  382.     if(ts==27)error=(-1);            /* Abbruch        */
  383.     
  384.     if(get_input_status() & 8)        /* Alt Taste und     */
  385.     {
  386.         if(ts-65==play_button)error=1;  /* Treffer        */
  387.     }
  388.     if(ms==1 && is_mouse_inside_button(but[play_button]))error=1;
  389.                         /* Maustreffer        */
  390. }while(!error);                    /* Bis Treffer oder Lustlos    */
  391.  
  392. if(error==1)                    /* Getroffen        */
  393. {
  394.     press_button(but[play_button]);        /* Schalte Schalter ein    */
  395.     clear_input_qeue();            /* Warte bis alle Tassten los    */
  396.     release_button(but[play_button]);    /* Schalte Schalter aus    */
  397. }            
  398. return(0);
  399. }
  400.  
  401.  
  402.  
  403. /************************************************************************/
  404. int set_button()
  405. {
  406. int i,anzahl;
  407.  
  408.  
  409. anzahl=getrandom(40,140);            /* Wie oft Durchlaufen    */
  410.  
  411. for(i=0;i<anzahl;i++)                /* So oft Schalte     */
  412. {
  413.     play_button=getrandom(0,max_button-1);    /* Welcher Schalter    */
  414.     activ_button(but[play_button]);        /* Aktivieren        */
  415.     passiv_button(but[play_button]);    /* Passivieren        */
  416. }
  417. return(0);
  418. }
  419.  
  420.  
  421.  
  422.  
  423.  
  424. /* Initialisiere das TOOL Paket            */
  425. int init_tools()
  426. {
  427.  
  428. init_screen(VBLAU,HWEIS,VWEIS,HBLAU,MUSTER,DIREKT);
  429.  
  430. cls();                    /* Loesche Schirm mit zeichen     */
  431. init_window(10);            /* Mache Platz fuer 30 Fenster    */
  432. init_virtuell_screen(10);
  433.  
  434. init_window_manager();
  435. set_winman_mask(WINDOW_MOVE);
  436. set_window_move_mode(MIT_RAND);
  437. set_cursor_size(CURSOR_WEG);        /* Verstecke Cursor        */ 
  438.  
  439.  
  440. /* Mouse                    */
  441. set_mouse_cursor_size(CURSOR_VOLL);    /* Setze Mauscursorform        */
  442. init_mouse();                /* Aktiviere Maus wenn da    */
  443. limit_mouse_area(1,1,get_screen_wide(),get_screen_height());
  444.  
  445. return(0);
  446. }
  447.  
  448.  
  449.  
  450. /* Reinitialisiere das Tool Paket            */
  451. reset_tools()
  452. {
  453. reset_mouse();            /*    Maus weg    */
  454. reset_virtuell_screen();    /*    Screens weg    */
  455. reset_window();            /*     Fenster frei    */
  456. reset_screen();            /*     Bildschirm frei    */
  457. set_video_mode(C_80x25);
  458. check_memory();
  459.  
  460. clear();            /*     Loesche Bildschirm    */         
  461. exit(0);
  462.  
  463. return(0);
  464. }
  465.  
  466.  
  467.  
  468. /* Hilfe haben wir nicht, deshalb als Ersatz 3 Piepser    */
  469. void check_if_get_help()
  470. {
  471. return;
  472. }
  473.  
  474.  
  475. /* Windowmanager ist idle                */
  476. int check_window_manager(mode,mx,my)
  477. int mode;
  478. unsigned mx,my;
  479. {
  480. return(window_manager(mode,mx,my));
  481. }
  482.