ゲームのコードを記述するための準備
ラケットを操作するためのボタン
スマートフォンアプリ版では、ラケットを操作するためのボタンを画面下の左右に配置し、画面をタップしてラケットを動かせるようにします。Court上にTLayoutを配置しTSpeedButtonを2つ右側と左側に配置します。
さらに、Racket(TLabel)をなめらかに動かすためにRacket上にTFloatAnimationを配置します。
| プロパティ | 値 |
|---|---|
| Name | FloatAnimation1 |
| Duration | 0.1 |
| PropertyName | Position.X |
| StartValue | 0 |
| StopValue | 0 |
| Parent | Racket |
左右に配置したTSpeedButtonの名前をLeftButton、RightButtonに変更し、イベントハンドラからRacketを左右に動かすためのコードを記述します。
void __fastcall TGameForm::LeftButtonClick(TObject *Sender)
{
//ラケットを左に移動
if (Racket->Position->X > 0)
{
FloatAnimation1->StartValue = Racket->Position->X;
FloatAnimation1->StopValue = Racket->Position->X -60;
FloatAnimation1->Start();
}
}
void __fastcall TGameForm::RightButtonClick(TObject *Sender)
{
//ラケットを右に移動
if (Racket->Position->X <= (Court->Width - Racket->Width))
{
FloatAnimation1->StartValue = Racket->Position->X;
FloatAnimation1->StopValue = Racket->Position->X +60;
FloatAnimation1->Start();
}
}
変数の用意
ボールの角度を表すFAng、移動速度を表すFSpeed、そして一回の移動量を表すFDeltaX、FDeltaYです。これらの変数は、TGameForm のメンバ変数として、Unit1.hのTGameFormクラス宣言に追加します。また、FDeltaX、FDeltaYを再計算するCalcNewDelta()とボールを移動させるためのMoveBall()関数の宣言も追加します。
private: // ユーザー宣言
int FAng, FDeltaX, FDeltaY;
double FSpeed{15};
void __fastcall MoveBall(); //ボールを動かす関数定義
void __fastcall CalcNewDelta(); //FDeltaX、FDeltaYを再計算する関数定義
プロパティの用意
スコアとラケット数管理はTGameForm上にプロパティを用意します。FScoreはスコア点数、FRacketはラケット数管理です。これもint型で用意します。
private:
int FScore, FRacket;//スコア、ラケット残数
void __fastcall SetScore(const int NewScore);
void __fastcall SetRacketCount(const int NewRacket);
public:
//スコアプロパティ
__property int Score = { read = FScore, write = SetScore };
//ラケット残数プロパティ
__property int RacketCount = { read = FRacket, write = SetRacketCount };
それぞれの関数の実態も記述します。
void __fastcall TGameForm::SetScore(const int NewScore)
{
if ((FScore = NewScore) < 0)
FScore = 0;
ScoreLabel->Text = Format(L"%0.9d", ARRAYOFCONST((FScore)) );
}
void __fastcall TGameForm::SetRacketCount(const int NewRacket)
{
if (FRacket != NewRacket)
{
(NewRacket > 5)?FRacket = 5:FRacket = NewRacket;
if (FRacket < 0) FRacket = 0;
for (int i = 0; i < 4; i++)
{
dynamic_cast(FindComponent("Racket" + IntToStr(i+1)))->Visible = (i < FRacket-1);
}
}
}
この記事は参考になりましたか?
- EDN CodeZine出張所連載記事一覧
-
- 従来型C/SアプリケーションをSenchaを使ってWeb化してみる
- C++Builder 10.2 TokyoでレトロなラケットゲームをiOSで再構築してみる
- Delphiでデバイス機能をこってり使いつつマルチデバイス対応してみる
- この記事の著者
-
EDN編集部(イーディーエヌ編集部)
エンバカデロ・デベロッパーネットワーク(EDN)は、ソフトウェア開発者とデータベース技術者のための技術情報サイトです。Delphi、C++Builderをはじめとする開発ツールやER/Studioなどのデータベースツールに関連する技術記事、ビデオなどを提供しています。EDN編集部は、EDN記事と連携...
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社
この記事は参考になりましたか?
この記事をシェア
