Esempio n. 1
0
void
Win::CreateUrlPopUpWindow()
{
	if( urlpopupwindow == NULL )
	{
		BRect frame( navview->urlview->Frame() );
		frame = navview->ConvertToScreen( frame );
		
		BRect wframe( frame );
		wframe.top = frame.bottom;
		wframe.bottom = wframe.top + 30;
		
		urlpopupwindow = new ThemisUrlPopUpWindow(
			this,
			wframe );
		
		urlpopupwindow->Run();
		urlpopupwindow->Show();
		
		// make the urlview the focusview otherwise
		// the urlpopup wouldnt be navigable by keyb
		if( CurrentFocus() != NULL )
			CurrentFocus()->MakeFocus( false );
	 	navview->urlview->textview->MakeFocus( true );
	}
}
Esempio n. 2
0
int main(){
	Point one(5,20),two(0,30),three(0,20),a(0,0),c(10,0),d(5,0),e(10,0);
	Robot MyRobot(10,20);
	WorldFrame wframe(a,0);
	JointFrame jframe1(a,0);
	JointFrame jframe2(c,0);
	TaskFrame tframe1(d,0);
	TaskFrame tframe2(e,90);
	MyRobot.PTPmove(tframe1,one);
	MyRobot.PTPmove(wframe,two);
	MyRobot.PTPmove(jframe1,three);
}
Esempio n. 3
0
// 神経衰弱 本編
void game_nervous(AppEnv& app_env) {
  // 乱数の基準値設定
  Random random; random.setSeed((u_int)time(nullptr));

  // 画像の読み込み
  Texture t_card("res/png/c01_standard.png");   // カードの画像
  Texture system("res/png/m01_nv.png");         // システムメッセージ
  Texture wframe("res/png/sys04_frame.png");    // テロップ用フレーム

  // BGM と SE の読み込み
  Media thema(M_THEMA); thema.gain(0.5); thema.looping(true);
  Media intro(M_INTRO); intro.gain(0.5);   // イントロ

  Media click(SE_CLICK); click.gain(0.5);         // クリックしたとき
  Media success(SE_SUCCESS); success.gain(0.25);   // カードのペアを作れた
  Media failure(SE_FAILURE); failure.gain(0.25);   // カードのペアを作れなかった
  Media finish(SE_FINISH); finish.gain(0.25);      // ゲーム終了

  // このゲーム内専用の変数
  short i;                  // 繰り返し処理用
  short open_count = 0;     // カードをめくった回数
  short open_chain = 0;     // 連続でペアを見つけた回数
  short hist_count = 0;     // 履歴に情報を保存した回数
  short field_count = 0;    // 場に残っているカードの枚数

  float card_x, card_y;     // カードの表示位置(始点)
  float sys_x, sys_y;       // システムメッセージの表示位置

  bool isContinue = true;   // 続けてカードをめくれるか
  bool isCheck = false;     // 対戦相手のAI用:履歴の確認
  bool isRandom = false;    // 対戦相手のAI用:検索で見つからないとき、ランダムで選択
  bool game_turn = true;    // 誰のターンか:true = プレイヤー、false = 対戦相手
  bool game_set = true;     // ゲーム終了判定

  // このゲーム内専用の変数:マウス判定用
  Vec2f mouse_pos;   // マウスカーソルの座標
  bool on_mouse;     // マウスカーソルの判定

  // 場に配置されるカードの情報
  struct Card {
    short number;   // カードの数字
    short mark;     // カードの記号
    bool isOpen;    // 表向きになっているか
  };

  // カード情報の生成
  Card field[JOKER_NG] = {};        // 場のカード情報
  short open_hist[MAX_HIST] = {};   // 表にしたカードの履歴
  short prev_1, prev_2;             // 表にしたカードの比較用
  short game_score[] = {0, 0};      // プレイヤーと対戦相手の点数

  // ゲームの初期化
  {
    // 履歴の初期化
    for (i = 0; i < MAX_HIST; i++) { open_hist[i] = -1; }

    // カード情報の初期化
    for (i = 0; i < JOKER_NG; i++) { field[i] = {i % CARD_NUM, i / CARD_NUM, false}; }

    // カードのシャッフル
    for (i = 0; i < JOKER_NG; i++) { std::swap(field[i], field[random.fromZeroToLast(JOKER_NG)]); }

    intro.play();   // イントロ再生
  }


  /* 本編 */
  ////////////////////////////////////////////////////////////////////////////////
  while (1) {
    if (!app_env.isOpen()) { return; }

    // BGM再生:イントロが終わったらループ部分の再生
    if (!intro.isPlaying()) { if (!thema.isPlaying()) { thema.play(); } }

    // カードの残り枚数を確認、2枚未満なら強制的に終了する
    if (game_set) {
      open_count = 0;    // めくった回数をリセット
      field_count = 0;   // カードの残り枚数をリセット

      // 残り枚数をカウント
      for (i = 0; i < JOKER_NG; i++) { if (!field[i].isOpen) { field_count++; } }

      // 2枚未満なら強制終了
      if (field_count < OPEN_ACT) { thema.stop(); break; }
      game_set = false;
    }

    app_env.setupDraw();

    // システムメッセージの表示
    {
      // メッセージ全体
      NV_disp_message(system, wframe, isContinue, game_set, open_chain, game_score);

      // スコアの表示
      {
        sys_x = (-Window::WIDTH / 2) + Card_W + Icon_W * 2;
        sys_y = (-Window::HEIGHT / 2) + (Telop_H * 4) - 2;

        CO_disp_number(system, game_score[DEF_PLAYER], sys_x, sys_y);                  // プレイヤーの点数
        CO_disp_number(system, game_score[DEF_RIVAL], sys_x, sys_y - (Telop_H + 2));   // 対戦相手の点数
      }
    }

    switch (game_turn) {
        // プレイヤーのターン
      case true:
        // マウス座標の取得
        mouse_pos = app_env.mousePosition();

        // カードごとの処理
        for (i = 0; i < JOKER_NG; i++) {
          // カードの表示位置設定
          card_x = (Card_W + 8) * ((i % CARD_NUM) - 6.5);
          card_y = (Card_H + 8) * ((i / CARD_NUM) - 1);

          // カードの上にマウスカーソルがあるか判定
          on_mouse = CO_on_mouse(mouse_pos, card_x, card_y, Card_W, Card_H);
          if (on_mouse && open_count < OPEN_ACT) {
            // まだ表向きになってないカードだったとき
            if (!field[i].isOpen) {
              // 左クリックしたときの処理
              if (app_env.isPushButton(Mouse::LEFT)) {
                app_env.flushInput();
                if (open_count == 0) { click.play(); }   // 1枚目をめくったときだけ SE再生

                field[i].isOpen = true;      // 選んだカードを表にする
                open_count++;                // めくった回数をカウント
                open_hist[hist_count] = i;   // めくったカードの場所を履歴に保存
                hist_count++;                // 履歴を保存した回数をカウント
              }
            }
          }
        }

        // カードを2枚めくったとき
        if (open_count == OPEN_ACT) {
          // カードを続けて選択できるとき
          if (isContinue) {
            // 表にしたカードの情報を取得
            prev_2 = open_hist[hist_count - OPEN_ACT];       // 最初にめくったカード
            prev_1 = open_hist[hist_count - OPEN_ACT + 1];   // 次にめくったカード

            // 表にしたカードの数字が同じだったとき
            if (field[prev_2].number == field[prev_1].number) {
              success.play();   // SE再生

              game_score[DEF_PLAYER]++;   // 点数を加算
              open_chain++;               // ペアを見つけた回数をカウント
              hist_count -= OPEN_ACT;     // 履歴に保存した回数をめくった回数だけ戻す
              game_set = true;            // 残り枚数が変化するので、もう一度確認する
            }

            // 違う数字だったとき、カードを選択できないようにする
            else {
              failure.play();   // SE再生
              isContinue = false;

              // 履歴が埋まったらカウンタをリセット
              if (hist_count >= MAX_HIST) { hist_count = 0; }
            }
          }

          // カードが選択できなくなったとき
          else {
            // 左クリックで相手のターンにする
            if (app_env.isPushButton(Mouse::LEFT)) {
              app_env.flushInput();
              click.play();
              game_turn = false;   // 対戦相手のターンに設定

              // 数字が違うので、表にしたカードを元に戻す
              field[prev_2].isOpen = false;
              field[prev_1].isOpen = false;

              // 各種カウンタのリセット
              open_chain = 0;
              isContinue = true;
              game_set = true;
            }
          }
        }

        break;   // プレイヤーのターン 終了

        // 対戦相手のターン
      case false:
        // カードを選択できなくなるまで処理を実行
        if (isContinue) {
          switch (open_count) {
              // 1枚目:裏向きのカードをランダムに選択
            case 0:
              prev_2 = random.fromZeroToLast(JOKER_NG);

              // ランダムに選択されたカードが裏向きなら決定
              if (!field[prev_2].isOpen) {
                open_count++;   // 2枚目の選択を開始

                // フラグをリセット
                isCheck = false;
                isRandom = true;
              }
              break;

              // 2枚目:履歴を検索、同じ数字が見つからなければランダムに選択
            case 1:
              // 1回だけ履歴を検索する
              if (!isCheck) {
                for (i = 0; i < MAX_HIST; i++) {
                  // 履歴に1枚目と同じ数字があれば「とりあえず」決定、ランダム選択を回避
                  if (field[open_hist[i]].number == field[prev_2].number) {
                    prev_1 = open_hist[i];
                    isRandom = false;
                    break;
                  }
                }

                isCheck = true;   // 履歴を確認したので、次の自分のターンまで確認しない
              }

              // 履歴検索に失敗していたら、ランダムにカードを選択
              if (isRandom) { prev_1 = random.fromZeroToLast(JOKER_NG); }

              // 選択されたカードが裏向き、かつ1枚目と違うカードなら確定、そうでなければランダム選択開始
              if (!field[prev_1].isOpen && prev_1 != prev_2) { open_count++; }
              else { isRandom = true; }
              break;

              // カードを2枚選択したとき
            case 2:
              // 選択されたカードを表向きにする
              field[prev_2].isOpen = true;
              field[prev_1].isOpen = true;

              // 選択された2枚が同じ数字だったら点数を加算して、もう一度選択する
              if (field[prev_1].number == field[prev_2].number) {
                game_score[DEF_RIVAL]++;   // 点数を加算
                game_set = true;           // 残り枚数が変化するので、もう一度確認する
              }

              // 同じ数字ではなかったとき、カードを選択できないように設定
              else { isContinue = false; }
              break;
          }
        }

        // カードを選択できなくなったとき
        else {
          // 左クリックでプレイヤーのターンにする
          if (app_env.isPushButton(Mouse::LEFT)) {
            app_env.flushInput();
            click.play();

            // 選択されたカードを元に戻す
            field[prev_2].isOpen = false;
            field[prev_1].isOpen = false;

            // 各種フラグのリセット
            game_turn = true;
            game_set = true;
            isContinue = true;
            isRandom = false;
          }
        }

        break;   // 対戦相手のターン 終了
    }

    // カード画像の表示
    for (i = 0; i < JOKER_NG; i++) {
      // カードの表示位置設定
      card_x = (Card_W + 8) * ((i % CARD_NUM) - 6.5);
      card_y = (Card_H + 8) * ((i / CARD_NUM) - 1);

      // カードの上にマウスカーソルがあるか判定
      on_mouse = CO_on_mouse(mouse_pos, card_x, card_y, Card_W, Card_H);
      if (field[i].isOpen || (app_env.isPressKey('O') && app_env.isPressKey('P'))) {
        // カードが表側のとき
        drawTextureBox(card_x, card_y, Card_W, Card_H,
          Card_W * field[i].number, Card_H * field[i].mark, Card_W, Card_H,
          t_card, Color(1, 1, 1));
      }
      else {
        // カードが裏側のとき
        drawTextureBox(card_x, card_y, Card_W, Card_H,
          Card_W * 1, Card_H * 4, Card_W, Card_H,
          t_card, NV_set_cardcolor(on_mouse));
      }
    }

    app_env.update();
  } // 本編 終了

  // リザルト画面
  finish.play();
  result_nervous(app_env, system, wframe,
    isContinue, game_set, open_chain,
    game_score[DEF_PLAYER], game_score[DEF_RIVAL]);
}
Esempio n. 4
0
static int edupdate (int full)
//*************************************************************************
//
//  Uebertraegt den Puffer an der aktuellen Position in das Bildschirmfenster
//
//*************************************************************************
{
  int x, y, i=e->index;
  int attr, blank; // vorbesetzen fuer hoehere Geschwindigkeit
  int yline;
  int a;
  int pos;
  int xend = e->xend;
  unsigned maxbuf = e->maxbuf;
  unsigned col;

  if (video_off)
    return OK;
  if (iskeytask())
    col = color.activ_frame;
  else
    col = color.back_frame;
  if (full)
    wframe(col, e->title, 0);
  putpos(); // Position anzeigen
  if (taskkbhit())
    return 0; // nur weitermachen wenn keine Taste gedrueckt
  for (y = e->y+e->frame; y <= (e->yend-e->frame); y++)
  {
    x = e->xoffset;
    yline = (bildspalten*y);
    if ((i >= e->blockbegin) && (i < e->blockend))
      attr = color.edit_block << 8;
    else
      attr = color.edit_text << 8;
    blank = attr | ' ';
    while (x && (i < maxbuf) && (buf[i] != LF))
    {
      i++;
      x--;
    }
    x = e->x+e->frame;
    while (((a = buf[i]) != LF) && (i < maxbuf))
    {
      if (x < xend)
      {
        if (vorne[pos = yline+(x++)] == wa)
          vram[pos] = a | attr;
      }
      i++;
    }
    i++;
    while (x < xend)
    {
      if (vorne[pos = yline+(x++)] == wa)
        vram[pos] = blank;
    }
  }
  lineout();
  return OK;
}