線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1412
推到 Plurk!
推到 Facebook!

請問我該如何縮減我下列的程式碼

答題得分者是:jow
powervic
一般會員


發表:5
回覆:7
積分:2
註冊:2008-03-17

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-03-24 18:23:27 IP:59.120.xxx.xxx 訂閱

[code cpp]
if(ComboBox7->Text=="Snow") //判斷選取的動作內容並傳遞給動作參數
{
action[8]=SNOW;
}
if(ComboBox7->Text=="Left")
{
action[8]=LEFT;
}
if(ComboBox7->Text=="Right")
{
action[2]=RIGHT;
}
if(ComboBox7->Text=="Up")
{
action[8]=UP;
}
if(ComboBox7->Text=="Down")
{
action[8]=DOWN;
}
if(ComboBox7->Text=="Open")
{
action[8]=OPEN;
}
if(ComboBox7->Text=="Close")
{
action[8]=CLOSE;
}
if(ComboBox7->Text=="Flash")
{
action[8]=FLASH;
}
if(ComboBox7->Text=="Flash-Go")
{
action[8]=FLASH_GO;
}
if(ComboBox7->Text=="Doff")
{
action[8]=DOFF;
}
if(ComboBox7->Text=="Big")
{
action[8]=BIG;
}
if(ComboBox7->Text=="Jump")
{
action[8]=JUMP;
}
if(ComboBox7->Text=="Shift")
{
action[2]=SHIFT;
}
if(ComboBox7->Text=="Sqz")
{
action[8]=SQZ;
}
if(ComboBox7->Text=="L-Open")
{
action[8]=L_OPEN;
}
if(ComboBox7->Text=="R-Open")
{
action[8]=R_OPEN;
}
if(ComboBox7->Text=="Random")
{
action[8]=RANDOM;
}
[/code]
因為我對於C Builder不是非常了解
我應該如何運用指標縮減我這段的程式碼
tcSweey
一般會員


發表:7
回覆:19
積分:15
註冊:2005-01-04

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-03-24 18:50:55 IP:60.249.xxx.xxx 訂閱
  1. 您的範例如下
    if(ComboBox7->Text=="Snow") //判斷選取的動作內容並傳遞給動作參數
  2. {
  3. action[8]=SNOW;
  4. }


action 指的是變數嗎?另外你所定義的SNOW 又是為何?
如果你的功能是需要以ComboBox7來判斷的話,我建議可以以ItemIndex 來判斷(ComboBox7->ItemIndex)
如果你本身的action 是Function 的指標形態,例如宣告為
unsigned int(*const Action[20])(unsigned int k)={
//0 1 2 3 ........
SNOW, LEFT, RIGHT, UP, .......

}
那麼只需以下寫法就可以了
unsigned int (* act)(unsigned int);
act[ComboBox7->ItemIndex];
powervic
一般會員


發表:5
回覆:7
積分:2
註冊:2008-03-17

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-03-24 19:23:33 IP:59.126.xxx.xxx 訂閱
#define  SNOW       0x80        
#define LEFT 0x81
#define RIGHT 0x82
#define UP 0x83
#define DOWN 0x84
#define OPEN 0x85
#define CLOSE 0x86
.....
.....

byte action[10];
用來接收動作的指令碼@@

然後我的ComboBox 是用來選取動作的String
所以我用上面的方式來判斷
結果老師希望我改成指標的方式縮減我的程式碼
但是我有點不了解


我先try一下你說明的方法
看了你的方法有點靈感了
謝謝感恩^^

===================引 用 tcSweey 文 章===================
  1. 您的範例如下
    if(ComboBox7->Text=="Snow") //判斷選取的動作內容並傳遞給動作參數
  2. {
  3. action[8]=SNOW;
  4. }


action 指的是變數嗎?另外你所定義的SNOW 又是為何?
如果你的功能是需要以ComboBox7來判斷的話,我建議可以以ItemIndex 來判斷(ComboBox7->ItemIndex)
如果你本身的action 是Function 的指標形態,例如宣告為
unsigned int(*const Action[20])(unsigned int k)={
//0 1 2 3 ........
SNOW, LEFT, RIGHT, UP, .......

}
那麼只需以下寫法就可以了
unsigned int (* act)(unsigned int);
act[ComboBox7->ItemIndex];

編輯記錄
powervic 重新編輯於 2008-03-24 19:25:35, 註解 無‧
powervic 重新編輯於 2008-03-24 19:32:57, 註解 無‧
tcSweey
一般會員


發表:7
回覆:19
積分:15
註冊:2005-01-04

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-03-24 19:41:52 IP:60.249.xxx.xxx 訂閱
powervic 你好:
如果是你說的那樣,那麼只要寫成
action[8]=ComboBox7->ItemIndex 0x80;
我想應該就可以了
powervic
一般會員


發表:5
回覆:7
積分:2
註冊:2008-03-17

發送簡訊給我
#5 引用回覆 回覆 發表時間:2008-03-25 09:57:19 IP:59.126.xxx.xxx 訂閱
恩~用這個方法的確可行
那如果是要計算checkbox勾取的個數呢?
能否有指標的方式解決呢?

[code cpp]
bool is_Checked[10]; //接收是否勾取的訊息已便做判別動作
int check_Count=0;

if(CheckBox1->Checked == true) //判斷是否勾取並記錄數量
{
check_Count ;
}
if(CheckBox2->Checked == true)
{
check_Count ;
}
if(CheckBox3->Checked == true)
{
check_Count ;
}
if(CheckBox4->Checked == true)
{
check_Count ;
}
if(CheckBox5->Checked == true)
{
check_Count ;
}
if(CheckBox6->Checked == true)
{
check_Count ;
}
if(CheckBox7->Checked == true)
{
check_Count ;
}
if(CheckBox8->Checked == true)
{
check_Count ;
}
if(CheckBox9->Checked == true)
{
check_Count ;
}
if(CheckBox10->Checked == true)
{
check_Count ;
}

is_Checked[0]=CheckBox1->Checked; //是否勾取訊息予以傳遞
is_Checked[1]=CheckBox2->Checked;
is_Checked[2]=CheckBox3->Checked;
is_Checked[3]=CheckBox4->Checked;
is_Checked[4]=CheckBox5->Checked;
is_Checked[5]=CheckBox6->Checked;
is_Checked[6]=CheckBox7->Checked;
is_Checked[7]=CheckBox8->Checked;
is_Checked[8]=CheckBox9->Checked;
is_Checked[9]=CheckBox10->Checked;

[/code]
我們老大說這樣寫是愚公移山~但我對BCB了解的還不夠深入
那我該如何運用指標改寫呢?
===================引 用 tcSweey 文 章===================
powervic 你好:
如果是你說的那樣,那麼只要寫成
action[8]=ComboBox7->ItemIndex 0x80;
我想應該就可以了
編輯記錄
powervic 重新編輯於 2008-03-25 10:01:05, 註解 無‧
jow
尊榮會員


發表:66
回覆:751
積分:1253
註冊:2002-03-13

發送簡訊給我
#6 引用回覆 回覆 發表時間:2008-03-25 11:00:16 IP:210.66.xxx.xxx 未訂閱
[code cpp]
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
int CheckCount=0;
bool is_Checked[10];
for(int i=0;i<10;i ){
AnsiString S="CheckBox" IntToStr(i 1);//1~10
TCheckBox* cbx=(TCheckBox*)FindComponent(S);
is_Checked[i]=cbx!=NULL&&cbx->Checked;
if(is_Checked[i])CheckCount ;
}
}
//---------------------------------------------------------------------------
[/code]
編輯記錄
jow 重新編輯於 2008-03-25 11:06:13, 註解 無‧
系統時間:2024-03-29 16:50:31
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!