classTime的問題 |
答題得分者是:AndrewK
|
a03021
一般會員 發表:3 回覆:9 積分:2 註冊:2009-07-25 發送簡訊給我 |
/****************************************************************************
* 答題時間設定 * ****************************************************************************/ //設定時間秒數 void __fastcall TformMain::setTime(int minT) { minTime = minT; } //--------------------------------------------------------------------------- //取得時間秒數 int __fastcall TformMain::getTime() { return minTime; } //--------------------------------------------------------------------------- //減少時間 void __fastcall TformMain::cutTime(int cutT) { if(minTime == 0) //時間到時將限制為零 minTime = 0; else minTime -= cutT; } //--------------------------------------------------------------------------- /**************************************************************************** * 答題時間 * ****************************************************************************/ void __fastcall TformMain::timeQuestionTimeTimer(TObject *Sender) { //答題時間遞減 cutTime(1); //顯示答題時間 Label_time->Caption = getTime(); //倒數時間設定 if (getTime() <= (minTime)) { getTime(); Label_time->Caption = getTime(); //顯示答題時間 } //答題時間結束 if (getTime() == (0)) { FeedBack(3); //時間到回饋 timeQuestionTime->Enabled = false; //答題結束,關閉倒數計時 Sky_JudgeCount = false; //答題結束, 關閉感應 } } 不太懂倒數時間設定那段程式碼 麻煩幫忙解釋一下(尤其是<=minTime那) 還有答題時間設定那段(尤其看不懂減少時間那段) 因為最近一直卡在沒辦法順利讓程式跑到我給的條件結束時跑到回饋的form 常常一執行就直接跑到formFeedBack(下面是最近卡關的程式碼) //--------------------------------------------------------------------------- void __fastcall TformExpElm::timeGameTimeTimer(TObject *Sender) { ExpElm_SubTime ; //遊戲時間遞減 if (ExpElm_SubTime%2 == 0) ExpElm_GameTime.cutTime(1); //時間Bar反應 imgGameTimeBar->Canvas->Brush->Color = clBlack; imgGameTimeBar->Canvas->FillRect(Rect(0,0,ExpElm_SubTime*0.5,25)); //遊戲時間結束 if (ExpElm_GameTime.getTime() == 0) { ExpElm_Timeover = false; FeedBack(); } } //--------------------------------------------------------------------------- void __fastcall TformExpElm::FeedBack() { //關閉時間倒數 timeGameTime->Enabled = false; timeCount->Enabled = false; //開啟回饋畫面 formFeedBack->Show(); //formFeedBack->Timer1->Enabled = true; //formFeedBack->LoadDB(2,formExpElm_QueGet.getTitleNum(),formJump_Left_Answer,formJump_Right_Answer); } 主要是在遊戲時間遞減那段看不懂怎麼運作 因為卡關卡一段時間了,所以希望各位能鼎力相助!!(抱歉,第一次問,問的東西有點多) 謝謝了!! (希望能用淺顯易懂的方式詳細說明,因為涉獵不深) 再次先謝謝大家了!!! |
AndrewK
高階會員 發表:6 回覆:151 積分:161 註冊:2006-10-09 發送簡訊給我 |
//設定時間秒數 |
a03021
一般會員 發表:3 回覆:9 積分:2 註冊:2009-07-25 發送簡訊給我 |
ExpElm_GameTime.setTime(60);
ExpElm_SubTime ; //遊戲時間遞減 if (ExpElm_SubTime%2 == 0) ExpElm_GameTime.cutTime(1); ExpElm_GameTime.getTime(); Label1->Caption = ExpElm_GameTime.getTime(); 之後加了第1行和6.7行 想看看它時間是怎麼遞減 結果他是60變59再變成60循環跑 不知道是哪邊邏輯錯了 還有不大懂它那裏為什麼要除以2取餘數,判斷奇數偶數是為了甚麼?看不太懂 minTime為什麼會等於0阿?不是等跑完才會return minTime為0阿? 不好意思 希望再幫多加解釋一下(理解力有點慢@@) 謝謝你了!!! |
AndrewK
高階會員 發表:6 回覆:151 積分:161 註冊:2006-10-09 發送簡訊給我 |
1. 從 timeGameTimeTimer.enable = ture 開始
timeGameTimeTimer 的事件 會一直不斷執行 執行到 timeGameTimeTimer.enable = false 執行的速度是 timeGameTimetimer 的 interval 屬性設多少 (單位:千分之一秒) Ex: timeGameTimetimer 的 interval 屬性設成 1000,就每一秒就跑這個事件一次,執行裡面 的程式碼,這個就是 Ttimer 物件的特性,也就是你現在命名為 timeGameTime 這個物件 2.你的 settime 這個動作,算是初始化的動作,不應該放在 timeGameTimeTimer 的事件裡 你可以用逐歩偵錯跑跑看,會發現一直不斷將 mintime 設為 60,我猜測 timeGameTimetimer 物件是你手動拉到 form 上的, 設計模式就建立好了,你試試看放在 formcreate 事件裡吧 3.為什麼要取2的餘數 --> 你的 timegametime 的 interval 設成多少? a.你可以試試不 % 2,再把 相關 ExpElm_SubTime 變數的值判斷要不要乘 2 b.也可以直接不 % 2,再改變 ExpElm_subTime變數,將 timeGameTimetimer 的 interval 屬性 值乘 2,看看顯示結果變成如何? 4. [code cpp] ExpElm_GameTime.setTime(60); ExpElm_SubTime ; //遊戲時間遞減 if (ExpElm_SubTime%2 == 0) ExpElm_GameTime.cutTime(1); ExpElm_GameTime.getTime(); Label1->Caption = ExpElm_GameTime.getTime(); [/code] 可以改成 [code cpp] ExpElm_GameTime.setTime(60); ExpElm_SubTime ; //遊戲時間遞減 if (ExpElm_SubTime%2 == 0) ExpElm_GameTime.cutTime(1); // ExpElm_GameTime.getTime(); 【getime 為取值用,這裡可以省略】 Label1->Caption = ExpElm_GameTime.getTime(); [/code] 當 ExpElm_GameTime.cutTime(1); 時,ExpElm_GameTime 裡的 minetime就自動減一了 5. 其實我也是單看你的程式碼,只能猜測你的 ExpElm_GameTime 這個物件,是已經寫好 並裝到 IDE 上,而裡面的 cutTime(),getTime(), setTime() 三個函式,就是 OO 的封裝的 特性,將 ExpElm_GameTime 的 minetime 封裝起來 如果還是有不清楚的地方,最好的方法,拿一本BCB的書,學兩件事 1.學學如何利用 BCB 來 逐歩偵錯,並觀看變數的變化 2.打開 BCB 的書,看看 TTime 這個物件的運作原理 最後你可以利用逐歩偵錯,對你的疑問,將程式做一些改變,觀看結果 對你以後程式的學習與撰寫會有非常大的幫助
------
Just Do It ------------------------- 其實男生不是真的喜歡你不減肥,而是喜歡你愛吃還不肥;也不是真的喜歡你不化妝,而是喜歡你素顏也好看;也不是真的喜歡你瘦,而是喜歡你瘦卻有胸;也不是真喜歡你獨立,而是他忙的時候別煩他。女孩子,太認真你就輸了。 |
a03021
一般會員 發表:3 回覆:9 積分:2 註冊:2009-07-25 發送簡訊給我 |
|
AndrewK
高階會員 發表:6 回覆:151 積分:161 註冊:2006-10-09 發送簡訊給我 |
1.ExpElm_GameTime.setTime(60) 【單獨這一行】
置於 Formcreate 函式 2.當被debug有錯誤時(會出現藍色的條狀顯示畫面) 如何能 Reset ?? 你可以按 Ctrl F2 3. 我回覆 #2 的文章中,部分內容有誤, 你的 setTime 函式中 minT 只是參數 無法用於timeQuestionTimeTimer 函式中做為判斷的依據 ============================================== 站內還有很多前輩分享經驗的文章,你也可以多多利用
------
Just Do It ------------------------- 其實男生不是真的喜歡你不減肥,而是喜歡你愛吃還不肥;也不是真的喜歡你不化妝,而是喜歡你素顏也好看;也不是真的喜歡你瘦,而是喜歡你瘦卻有胸;也不是真喜歡你獨立,而是他忙的時候別煩他。女孩子,太認真你就輸了。 |
a03021
一般會員 發表:3 回覆:9 積分:2 註冊:2009-07-25 發送簡訊給我 |
了解!! 希望以後還有機會能再請教你一些問題
付帶一個問題,BCB平方必須要寫成變數*變數,不能變數^2嗎? 在裡面搜尋和課本似乎沒注意到有說明這問題,謝謝了!! 底下是練習的程式碼,若都改成^2是能執行,不過出來答案不同 void __fastcall Tf5_8_1::btnRunClick(TObject *Sender) { int sideA,sideB,sideC; sideA=StrToInt(edtSideA->Text); sideB=StrToInt(edtSideB->Text); sideC=StrToInt(edtSideC->Text); if ((sideA sideB>sideC) && (sideB sideC>sideA) && (sideC sideA>sideB)) {if (sideC*sideC>sideA*sideA sideB*sideB) lblKind->Caption="鈍角三角形"; if (sideC*sideC==sideA*sideA sideB*sideB) lblKind->Caption="直角三角形"; if (sideC*sideC lblYN->Caption="Yes! 是!"; } else { lblYN->Caption="No! 不是!"; lblKind->Caption="不是三角形"; } } |
a03021
一般會員 發表:3 回覆:9 積分:2 註冊:2009-07-25 發送簡訊給我 |
if (rbt01->Checked==true)
lblShow2->Caption="祝: 學業進步!"; else if (rbt21->Checked==true) lblShow2->Caption="祝! 事事如意!"; else if (rbt41->Checked==true) lblShow2->Caption="祝! 身體健康!"; else if (rbt61->Checked==true) lblShow2->Caption="祝! 闔家平安!"; 這有辦法寫成switch寫法嗎? 不好意思 這次問題大概就這些了~~ |
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
你可以先寫看看,不行再看看compiler告訴你什麼訊息
===================引 用 a03021 文 章=================== if (rbt01->Checked==true) lblShow2->Caption="祝: 學業進步!"; else if (rbt21->Checked==true) lblShow2->Caption="祝! 事事如意!"; else if (rbt41->Checked==true) lblShow2->Caption="祝! 身體健康!"; else if (rbt61->Checked==true) lblShow2->Caption="祝! 闔家平安!"; 這有辦法寫成switch寫法嗎? 不好意思 這次問題大概就這些了~~ |
a03021
一般會員 發表:3 回覆:9 積分:2 註冊:2009-07-25 發送簡訊給我 |
|
AndrewK
高階會員 發表:6 回覆:151 積分:161 註冊:2006-10-09 發送簡訊給我 |
1.如果是練習 coding 所用,可以試試看用變數,再處理預防【邏輯上的錯誤】試試
2.思考是否可以用其他元件取代 Tcheckbox,再使用 switch .... case 試試看吧!! 接下來就看你自己如何處理了~~
------
Just Do It ------------------------- 其實男生不是真的喜歡你不減肥,而是喜歡你愛吃還不肥;也不是真的喜歡你不化妝,而是喜歡你素顏也好看;也不是真的喜歡你瘦,而是喜歡你瘦卻有胸;也不是真喜歡你獨立,而是他忙的時候別煩他。女孩子,太認真你就輸了。
編輯記錄
AndrewK 重新編輯於 2009-07-30 01:15:15, 註解 無‧
|
a03021
一般會員 發表:3 回覆:9 積分:2 註冊:2009-07-25 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |