void Scene::gameInit() { if(dis == 0) { timer = new QTimer(this); timer_drum = new QTimer(this); connect(timer_drum,SIGNAL(timeout()),this,SLOT(random())); connect(timer,SIGNAL(timeout()),this,SLOT(advance())); connect(timer,SIGNAL(timeout()),this,SLOT(timeup())); timer_drum->start(2000); timer->start(20); } if(dis == 1) { disconnect(timer_drum,SIGNAL(timeout()),this,SLOT(random())); disconnect(timer,SIGNAL(timeout()),this,SLOT(advance())); disconnect(timer,SIGNAL(timeout()),this,SLOT(timeup())); } }
void _stdc timer(unsigned int duration) { long tim; tim=timerset(duration); while (! timeup(tim)) #ifdef UNIX sleep(0) #endif ; }
/*! * @brief ゲームのメインループ * @param [in] sock 送信先ソケットのディスクリプタ */ int play_tetris(int sock) { static const uchar FLAG = GAMEOVER; /* ゲームオーバ時に送信する値 */ uint cnt = 1; /* カウンタ */ time_t base_time = time(NULL); /* ゲーム開始時刻を記憶 */ initialize(sock); /* 初期化 */ while (!gameover) { /* ゲームオーバーになるまでゲーム続行 */ static uchar enemy_field[STAGE_HEIGHT][STAGE_WIDTH]; /* 相手のフィールドデータを格納する2次元配列 */ time_t game_time; /* ゲームを開始してから、何秒経過したかを保持する */ /* キー入力があればそれに応じて操作 */ control_block(); /* 32回ループをしたら、ブロックを1マス落とす */ if ((cnt = (cnt + 1) % 32) == 0) { drop_block(); } write(sock, field, sizeof(field)); /* 自分のフィールドデータを送信 */ write(sock, &score, sizeof(score)); /* 自分のスコアを送信 */ read(sock, enemy_field, sizeof(enemy_field)); /* 相手のフィールドデータを受信 */ read(sock, &enemy_score, sizeof(enemy_score)); /* 相手のスコアを受信 */ show_field(enemy_field, ENEMY_FIELD_X); /* 相手のフィールドを描画する */ if (read_protocol(enemy_field[0][0])) { /* 特別な値を受信していないかチェックする */ sleep(1); return EXIT_SUCCESS; /* ゲーム終了 */ } print_score(ENEMY_SCORE_X, ENEMY_SCORE_Y, enemy_score); /* 相手のスコアを描画 */ if ((game_time = GAME_TIME - (time(NULL) - base_time)) == 0) { timeup(sock); sleep(1); return EXIT_SUCCESS; /* ゲーム終了 */ } print_time(game_time); /* ゲーム時間を表示する */ usleep(20000); /* 20000マイクロ秒停止する(この間、CPUに負荷をかけない) */ } write(sock, &FLAG, sizeof(FLAG)); /* 自分がゲームオーバになったことを相手に知らせる */ clear(); mvprintw(RESULT_STR_Y, RESULT_STR_X, "You lose!"); refresh(); sleep(2); endwin(); /* curses終了 */ puts("\nYou lose!"); sleep(1); return EXIT_SUCCESS; }
word Shall_We_Continue(word timeout, char *do_what) { word pause, ret; int ch; long tmr; ret=TRUE; Putc('\n'); Printf(pause_msg, pause=timeout, do_what); while (pause-- > 0) { Printf(pause_time, pause); tmr=timerset(100); vbuf_flush(); while (!timeup(tmr) && !Mdm_keyp()) Giveaway_Slice(); if (Mdm_keyp()) { ch=Mdm_getcw(); if (ch=='\x0d') /* C/R */ break; else if (ch=='\x1b') /* ESC */ { /* Puts(xferaborted);*/ ret=FALSE; break; } } } Puts("\r" CLEOL); WhiteN(); return ret; }
static void near Clear_MNP_Garbage(void) { long done=timerset(500); int state=0; int ch; /* Wait for five seconds, or until we get two <cr>s or two <esc>s */ while (!timeup(done)) { if ((ch=mdm_getc())==-1) Giveaway_Slice(); else switch (state) { case 2: if (ch=='\r') return; else state=0; break; case 1: if (ch=='\x1b') return; else state=0; break; case 0: default: if (ch=='\x1b') state=1; else if (ch=='\r') state=2; else state=0; break; } } }
/*! * @brief 特別な値を受信したかどうかをチェックし、処理を行う * @param [in] pnum 受信した値の1バイト目 */ static uchar read_protocol(uchar pnum) { switch (pnum) { case INTERRUPT: clear(); mvprintw(RESULT_STR_Y, RESULT_STR_X, "Interrupted!"); refresh(); sleep(2); endwin(); puts("対戦相手が強制終了しました"); return TRUE; case GAMEOVER: clear(); mvprintw(RESULT_STR_Y, RESULT_STR_X, "You win!"); refresh(); sleep(2); endwin(); puts("\nYou win!"); return TRUE; case TIMEUP: timeup(sig_sock); return TRUE; } return FALSE; }
static int near WFC_IdleInternal(void) { static time_t last_ct=-1L; union stamp_combo now; time_t ct; if (loc_kbhit()) { switch (loc_getch()) { case K_ONEMORE: switch (loc_getch()) { case K_ALTX: kexit=TRUE; return 1; case K_ALTJ: #ifdef TTYVIDEO if (displaymode==VIDEO_IBM) #endif { if (dspwin) { WinClose(dspwin); dspwin=NULL; } VidCls(CGRAY | _BLACK); } Shell_To_Dos(); break; case K_ALTI: WFC_Init_Modem(); Update_Status(wfc_waiting); break; case K_ALTB: break; case K_ALTK: local=TRUE; baud=0L; return 1; } break; default: logit(log_wfc_keybjunk); } } ct=time(NULL); Get_Dos_Date(&now); if (now.dos_st.date != today.dos_st.date) { today=now; bstats.today_callers=0; Update_Callers(); Read_Event_File(event_num); Get_Next_Event(); } if (ct >= next_event_time) { if (!next_event.erl) Get_Next_Event(); else { next_event.flags |= EFLAG_DONE; Write_One_Event(&next_event); do_next_event=TRUE; return 1; } } if (last_ct != ct) { Update_Event_Time(); DrawMaxHeader(); if (init_tmr==-1) init_tmr=timerset(INIT_TIME); } /* If it's time to reinitialize the modem, do so now. */ #if (COMMAPI_VER > 1) if(ComIsAModem(hcModem)) { if (timeup(init_tmr)) { WFC_Init_Modem(); Update_Status(wfc_waiting); init_tmr=timerset(INIT_TIME); } Check_For_Message(NULL, NULL); } #endif Giveaway_Slice(); #if (COMMAPI_VER > 1) if(ComIsAModem(hcModem)) sleep(1); #endif return 0; }
static char * near Get_Modem_Response(void) { #define RESP_TIMEOUT 500 #define MAX_RESP_LEN 60 static char resp[MAX_RESP_LEN]; char *rsptr; long tm1; mdm_dtr(DTR_UP); for (*resp='\0';*resp=='\0';) { tm1=timerset(RESP_TIMEOUT); for (rsptr=resp; !timeup(tm1) && rsptr < resp+MAX_RESP_LEN;) { #ifndef __MSDOS__ if (!loc_kbhit()) if(ComIsAModem(hcModem)) ComRxWait(hcModem, 1000L); /* block for 1 second or until char avail*/ #endif if (! mdm_avail()) { /* As long as the string is empty, keep resetting the five-second * * timer. */ if (rsptr==resp) tm1=timerset(RESP_TIMEOUT); if (WFC_IdleInternal()) return NULL; } else { *rsptr=(char)mdm_ggetcw(); if (*rsptr=='\r' || *rsptr=='\n') break; rsptr++; } } /* Cap string */ *rsptr='\0'; /* Suppress any 'OK' messages */ /* if (eqstri(resp,"ok")) *resp='\0';*/ /* Reset the modem initialization timer so that we don't * try to reinit in the middle of a ring! */ init_tmr=timerset(INIT_TIME); /* If we got a response... */ if (*resp) { #ifdef TTYVIDEO if (displaymode==VIDEO_IBM) { #endif WinPutc(win_modem,'\r'); WinPutc(win_modem,'\n'); WinPutc(win_modem,' '); WinPuts(win_modem,resp); WinSync(win_modem,FALSE); #ifdef TTYVIDEO } else logit("#%s", cfancy_str(resp)); #endif } } return resp; }
//TIMEUP //7 = IRQ acknowledge //6-0 = MDR uint8 CPU::mmio_r4211() { uint8 r = (regs.mdr & 0x7f); r |= (uint8)(timeup()) << 7; return r; }
//TIMEUP //7 = IRQ acknowledge //6-0 = MDR uint8 CPU::mmio_r4211() { uint8 r = (regs.mdr & 0x7f); r |= (uint8)(Memory::debugger_access() ? status.irq_line : timeup()) << 7; return r; }