・GameCanvasの機能:今週使う変数、メソッド ・新規のメソッドはありません。
前回、apkが作れなかった人、xcodeを用いてうまく実機で動かせなかったmax&iOSユーザーは、前回の課題の問題解決から始めましょう。 「課題の進め方」 ※今回は第9回なので、フォルダはk09に改名してください。 サンプルの起動を確認し、スクリプトが編集できる状態になったら、 続きを読み進めてください。
(クラスに入った直後)に変数の宣言を足す
int pointer_start_x;
int pointer_start_y;
int pointer_dx;
int pointer_dy;
int old_pointer_count = 0;
int swipe_dir=0;
int swipe_dir_last = 0;
const int NO_DIR = 0;
const int DIR_UP = 1;
const int DIR_DOWN = 2;
const int DIR_RIGHT = 3;
const int DIR_LEFT = 4;
const int SWIPE_DIST = 30;
(InitGame()の中)に初期化処理を足す
gc.SetResolution(720,1280);
(UpdateGame()の中)に下記の行を足す
CalcSwipe();
DrawGame()の中に下記の行を記載
gc.ClearScreen();
// 黒の文字を描画します
gc.SetColor(0, 0, 0);
gc.SetFontSize(36);
gc.DrawString("DIR:"+swipe_dir,0,0);
gc.DrawString("LAST:"+swipe_dir_last,0,40);
クラスを閉じるかっこの手前にメソッドを追加
void CalcSwipe(){
if(gc.GetPointerFrameCount(0)==1){
pointer_start_x = (int)gc.GetPointerX(0);
pointer_start_y = (int)gc.GetPointerY(0);
}
if(gc.GetPointerFrameCount(0)>0){
pointer_dx = (int)gc.GetPointerX(0)-pointer_start_x;
pointer_dy = (int)gc.GetPointerY(0)-pointer_start_y;
}
swipe_dir = NO_DIR;
if(gc.PointerCount == 0 && old_pointer_count ==1 ){
if(pointer_dx * pointer_dx > pointer_dy * pointer_dy){
if(pointer_dx > SWIPE_DIST){
swipe_dir = DIR_RIGHT;
}
else if(pointer_dx < -SWIPE_DIST){
swipe_dir = DIR_LEFT;
}
}
else {
if(pointer_dy > SWIPE_DIST){
swipe_dir = DIR_DOWN;
}
else if(pointer_dy < -SWIPE_DIST){
swipe_dir = DIR_UP;
}
}
}
old_pointer_count = gc.PointerCount;
if(swipe_dir != NO_DIR){
swipe_dir_last = swipe_dir;
}
}
第2回のカードの文字列表示を参考に作成しましょう。
string[] dir_name = {"NO DIR","UP","DOWN","RIGHT","LEFT"};
gc.DrawString(dir_name[swipe_dir_last],0,80);
などを適宜追加します。
//追加で用意する変数
//GameStateSub:ゲーム内の処理の切り分けを行う
//(0:ラウンド表示中、1:お題提示中、2:成功、3:失敗、4:終了)
//count:汎用カウンター
//round:何ラウンド目かを保存
//target_dir:お題の方向を保存
//score:得点
//変数宣言に追加
int GameStateSub = 0;
int count = 0;
int round = 0;
int target_dir=0;
int score = 0;
//initGame内に追加
//updateGameの中
if(GameStateSub == 0){
count++;
if(count == 180){
GameStateSub = 1;
count =0;
target_dir = gc.Random(1,4);
}
}
else if(GameStateSub == 1){
count++;
if(swipe_dir!=NO_DIR){
if(swipe_dir == target_dir){
GameStateSub = 2;
score += 300-count;
count = 0;
}
else {
GameStateSub = 3;
score -= 500;
count = 0;
}
}
}
else if(GameStateSub == 2 || GameStateSub ==3){
count++;
if(count > 180){
round++;
if(round >=10){
GameStateSub = 4;
count = 0;
}
else {
GameStateSub=0;
count = 0;
}
}
}
//DrawGameの中
//テスト表示
gc.DrawString("STATESUB:"+GameStateSub,0,160);
gc.DrawString("COUNT:"+count,0,200);
gc.DrawString("ROUND:"+round,0,240);
gc.DrawString("TARGET:"+target_dir,0,280);
gc.DrawString("SCORE:"+score,0,320);
gc.SetFontSize(48);
if(GameStateSub==0){
gc.DrawString("ROUND:"+(round+1),320,600);
gc.DrawString("READY!",320,650);
}
else if(GameStateSub==1){
gc.DrawString(dir_name[target_dir],360,640);
}
else if(GameStateSub==2){
gc.DrawString("SUCCESS",360,640);
}
else if(GameStateSub==3){
gc.DrawString("FAIL",360,640);
}
else if(GameStateSub==4){
gc.DrawString("FINISHED!",360,600);
gc.DrawString("SCORE:"+score,360,650);
}
より良くする案を考えてみましょう。
プログラムが間違っていてビルドエラーが出ている可能性が高いです。
エディタ上でbuildしてみましょう。
{}の対応が間違っていないか、全角スペースが入っているかなど、確認してみましょう