2012年10月25日

Android用ゲーム開発 -4日目-

3日目からの続き。

抽象UI

フレームワークは便利だけれど、縛られると、新しいフレームワークに乗り換えができなくなってしまいます。やっぱり、カッコいいフレームワークが出たら、試して見たいしね。

フレームワークとの接点を局所化したいので、抽象UIを作ります。
RPGなので、マップと入力を用意し、抽象UIにつなげます。


public class FundamentalUI {
 private Input inputdevice;
 private Map dungeon;
 
 FundamentalUI() {
 }

 public String left() {
  return inputdevice.left();
 }
 
 public String right() {
  return inputdevice.right();
 }
 
 public String up() {
  return inputdevice.up();
 }
 
 public String down() {
  return inputdevice.down();
 }
 
 public String upperleft() {
  return inputdevice.upperleft();
 }
 
 public String upperright() {
  return inputdevice.upperright();
 }
 
 public String lowerleft() {
  return inputdevice.lowerleft();
 }
 
 public String lowerright() {
  return inputdevice.lowerright();
 }
 
 public String decision() {
  return inputdevice.decision();
 }
 
 public Map getDungeon() {
  return this.dungeon;
 }
}


これを、Activityにつなぎます。

dispatchKeyEventメソッドをオーバーライドします。



@Override
    public boolean dispatchKeyEvent(KeyEvent event) {
     TextView textView = (TextView) findViewById(R.id.Helloworld);
     FundamentalUI fundamentalUI = new FundamentalUI();
     if (event.getAction() == KeyEvent.ACTION_UP) {
      switch (event.getKeyCode()) {
      case KeyEvent.KEYCODE_DPAD_UP:
      case KeyEvent.KEYCODE_K:
       textView.setText(fundamentalUI.up());
       return true;

      case KeyEvent.KEYCODE_DPAD_DOWN:
      case KeyEvent.KEYCODE_J:
       textView.setText(fundamentalUI.down());
       return true;

      case KeyEvent.KEYCODE_DPAD_LEFT:
      case KeyEvent.KEYCODE_H:
       textView.setText(fundamentalUI.left());
       return true;

      case KeyEvent.KEYCODE_DPAD_RIGHT:
      case KeyEvent.KEYCODE_L:
       textView.setText(fundamentalUI.right());
       return true;

      case KeyEvent.KEYCODE_Y:
       textView.setText(fundamentalUI.upperleft());
       return true;

      case KeyEvent.KEYCODE_U:
       textView.setText(fundamentalUI.upperright());
       return true;

      case KeyEvent.KEYCODE_B:
       textView.setText(fundamentalUI.lowerleft());
       return true;
       
      case KeyEvent.KEYCODE_N:
       textView.setText(fundamentalUI.lowerright());
       return true;

      case KeyEvent.KEYCODE_DPAD_CENTER:
       textView.setText(fundamentalUI.decision());
       return true;
   default:
    break;
      }
     }
     return super.dispatchKeyEvent(event);
    }



マップは、1と0の配列とし、画面にとりあえず、表示させています。





5日目へ。