コンピュータを楽しもう!!

今、自分が面白くていろいろやってみたことを書き綴りたいと思います。連絡先はtarosa.yでgmail.comです。

DS2DSTest2をアップしました

dsをWiFi経由で遊ぶテストプログラムをアップロードしました。アップ先はNDS Program Roomです。

このプログラムでキー待ちしていて、押したキーを通信しあう関数を作ったので。ソースを書いておきます。

int WiFi_SelectKey( int sockNum, int *keyCd, int keyCdNum, u8 *sendData, bool keyOff )

キー入力をチェックしたいキーコードをkeyCdに入れて、セットしたキーコードの数(keyCdNum)と入力があった場合に相手に送信したい値の配列(dendData)、それと、キーから指が離れるまで待つかどうかのフラグ(keyOff)を引数に渡します。
戻り値は、押されて送信された送信値です。

//**************************************************
// キー選択待ちループ
// sockNum:ソケット番号, keyCd[]: 選択するキーコード配列
// keyCdNum: 選択キーの数, sendData[]:送るデータ配列
// keyOff:キーを離すまで待つときはtrue
// 戻り値: keyCdNum
//**************************************************
int	WiFi_SelectKey( int sockNum, int *keyCd, int keyCdNum, u8 *sendData, bool keyOff )
{
int key;
u8  sendText[1];
u8  recvText[1];
int recvd_len;
int i;
int ret = -1;

 while( ret==-1 ){
   scanKeys();
   key = keysHeld();	//押されたキー取得
   if( key!=0 ){
     for( i=0; i<keyCdNum; i++ ){	//指定キーコードに合うかどうかスキャン
       if( (key&keyCd[i])!=0 ){
         //キーコードにあったなら、sendData[i]を送信
         sendText[0] = sendData[i];
         send( sockNum, sendText, 1, 0 );
         while( true ){	//sendText[0]を受信するまでループ
           recvd_len = getRecvData( sockNum, recvText, 1, 0, 20000L );
           swiWaitForVBlank();
           if( recvd_len==1 && recvText[0]==sendText[0] ){	break;	}
         }
         ret = i;	//retにキーコード番号セット
         break;
       }
     }
     if( ret>=0 ){ break; } //キーコード番号がセットされていればwhileループを抜ける
   }
   //sendData[]を受信したらそれを送信してブレイク
   recvd_len = getRecvData( sockNum, recvText, 1, 0, 20000L );
   swiWaitForVBlank();	
   if( recvd_len==1 ){
     for( i=0; i<keyCdNum; i++ ){	//sendData[]に合うかどうかスキャン
       //sendData[]にあったなら、それを送信
       if( recvText[0]==sendData[i] ){
         send( sockNum, recvText, 1, 0 );	//recvText[0]を送信
         ret = i;	//retにキーコード番号セット
         break;
       }
     }
     if( ret>=0 ){ break; } //キーコード番号がセットされていればwhileループを抜ける
   }
 }
 if( keyOff==true ){ nkeywait(-1); }		//キーが離されるまで待つ
 return( ret );
}

画面を描く

drow()という関数も作っていました。これはキャラ1とキャラ2を指定座標に描く関数です。スプライトを理解していないので、単純に毎回画面に描画しています。スプライトについてどなたか教えて欲しいです。

//**************************************************
// 画面を描く
//**************************************************
void	drow( int xa, int xb )
{
 swiWaitForVBlank();
 DC_FlushAll();		//メモリのキャッシュのフラッシュ
 dmaCopy( (uint16*)back_bin, SubScreenA, 0x18000 );                  //背景描画
 GcopyL( SubScreenA, xa, 4, 82, 74, (uint16*)c1_bin, 0, 0, 82,74 );  //キャラ1描画
 GcopyL( SubScreenA, xb, 92, 82, 74, (uint16*)c2_bin, 0, 0, 82,74 ); //キャラ2描画
}


それと、main()の中で、ポケットWiFiにつなぎに行くところはコメントアウトして、自動接続のプログラムにしています。コメントを変えれば、SSIDとWEPキーのわかっているAPにつなぐことができると思います。

/* if( DS_ConnectAP( (char*)"ポケットWiFiのSSID",  WEPMODE_40BIT, (u8*)"ポケットWiFiのWEPキー" )==false ){
     ShinoUpPrint( MainScreenA, (u8 *)"AP Connect Error", RGB(31,0,0),RGB(0,0,0), 1 ,RGB(0,0,0) );
     while( true );
  }
*/
  if( !DS_WifiAutoConnect() ){		//APに自動接続(自作関数)
    ShinoPrintCenter( SubScreenA, 128, 5*12, (u8 *)"Auto Connect Error", RGB(31,0,0), RGB( 31,31,31 ), 1 );
    while( true );
  }


WiFiを使ったDS-DS通信は、この辺で一区切りにしようと思っています。
いろいろ更新目標の最後の月に入りました。

本当にやりたいことリスト

(ブログの終わりにやりたいことを書いておきたいと思います)

  • 求職活動・・・このブログで興味を持った人一声かけてください。m(_ _)m
  • Androidプログラム
  • Web系のプログラム