RGKT-NDS-STDY-007(003)
息抜きに数当てゲームでも作ろうかと思ったけど数値入力用の適当なUIがdevkitProにないんで
ざっくりと書いてみたです。
BASIC言語のINPUT ステートメントぽいのを意識してるんですが
どちらかというとシューティングゲームのスコアネーム入力な感じになりつつあったり。
本当はそれっぽいの作りたいが為に console.c 見てたりしてたんです(自白)。
テンキーっぽいのを表示させてタッチスクリーン使って入力させるというのは
如何にもDSらしく、味気ないので却下しました。(ォ
あえてキャラクターで桁毎に配列で数字を文字として持ってるのは
atoi() で済ませれるというのがあったり、
16進数として入力させたい場合やスコアネーム用としての利用を念頭に入れてたりしてるので。
そのせいか、あるいは書き方が悪いのか、
行数が無駄に多く、見辛い気がしますw
変数が static なのも関数化したとき毎フレーム回ってる中で実行させる都合上そうさせてます。
スタートエンドで終わるような場面だけなら使い捨てでいいんですが…。
カーソル位置表示とかは無いです。
それやるだけで処理が途端に面倒くさくなりそうに思えたのでorz
なのでカーソル位置を見失わない応急処置として
左にカーソルを戻す=バックスペースという風に対処しました。
なけなしの工夫でごめんちゃい。(´・ω・`)
INPUT ステートメントもどき(書きかけ)
#include <nds.h> #include <stdio.h> #include <stdlib.h> #define INPUT_MAX 4 int main(void) { static char input_array[INPUT_MAX] = {'\0'}; static u32 i = 0, num = 0; consoleDemoInit(); //入力用配列の初期化 i = 0; input_array[i] = '0'; //プロンプトの表示 iprintf("\n?\n%c", input_array[i]); while(1) { scanKeys(); //数値を増やす if(keysDown() & KEY_UP){ if(input_array[i] < '9'){ input_array[i]++; iprintf("\x1b[1D%c", input_array[i]); } } //数値を減らす if(keysDown() & KEY_DOWN){ if(input_array[i] > '0'){ input_array[i]--; iprintf("\x1b[1D%c", input_array[i]); } } //前の桁に戻る if(keysDown() & KEY_LEFT){ if(i > 0){ iprintf("\x1b[1D "); input_array[i] = 0; i--; iprintf("\x1b[2D%c", input_array[i]); } } //次の桁に進む if(keysDown() & KEY_RIGHT){ if(i < INPUT_MAX - 1){ i++; input_array[i] = '0'; iprintf("%c", input_array[i]); } } //入力を確定して画面に表示して //以前の入力データをリセットする if(keysDown() & KEY_A){ num = atoi(input_array); iprintf("\ninput number : %d\n", num); for(i = 0;i < INPUT_MAX;i++) input_array[i] = '\0'; i = 0; input_array[i] = '0'; iprintf("\n?\n%c", input_array[i]); } swiWaitForVBlank(); } return 0; }