Score を表示

XNA で数字の画像を使ってゲームのスコアを表示します。
キーの操作でアップ/ダウンすることが出来ます。

前田稔(Maeda Minoru)の超初心者のプログラム入門

プログラムの説明

  1. メニューから [ファイル][新規作成][プロジェクト] で新しいプロジェクトを作成して下さい。
    透明色を設定した数字の PNG 画像を使って、ゲームのスコアを表示します。
    Image Object Class を使うとプログラムは簡単です。
    Image Object Class の説明は Image Class でアニメーション を参照して下さい。
  2. Game1.cs を編集して Score を表示するプログラムを作成します。
    今回は class Game1 の中で Image Class を定義してみましょう。
        public class Game1 : Microsoft.Xna.Framework.Game
        {
            #region ★イメージクラス
            public class Image
            {
                //Image Object Class を定義する
            }
            #endregion
        
  3. Image Class の定義に続いて、次の領域を宣言して下さい。
    myTexture は、0〜9の数字の画像で、1文字のサイズは「幅=60ドット, 高さ=90ドット」です。
    image はイメージクラスの定義です。
    Score はゲームのスコアを格納する領域です。
            GraphicsDeviceManager graphics;
            SpriteBatch spriteBatch;
            Texture2D   myTexture;     // 描画に使用するテクスチャ
            Image       image;         // イメージクラス
            int         Score;         // スコア
        
  4. Constructor にウインドウのサイズを設定するコードを追加します。
    今回はカウンタを表示するだけなので、幅=600, 高さ=200 に設定してみました。
            public Game1()
            {
                graphics = new GraphicsDeviceManager(this);
                Content.RootDirectory = "Content";
                graphics.PreferredBackBufferWidth = 600;
                graphics.PreferredBackBufferHeight = 200;
            }
        
  5. LoadContent() メソッドに画像をロードして Image Class を生成するコードを追加します。
    Number.png は0〜9の数字が横に並んだ画像なので、Image(myTexture,10,1) になります。
    Score には、初期値として 12345 を格納しています。
            protected override void LoadContent()
            {
                // Create a new SpriteBatch, which can be used to draw textures.
                spriteBatch = new SpriteBatch(GraphicsDevice);
    
                // TODO: use this.Content to load your game content here
                myTexture = Texture2D.FromFile(graphics.GraphicsDevice, "c:\\data\\test\\Number.png");
                image = new Image(myTexture,10,1);
                Score = 12345;
            }
        
  6. Update() メソッドでキーの状態を調べて Score を「アップ/ダウン」します。
            protected override void Update(GameTime gameTime)
            {
                // Allows the game to exit
                if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed ||
                    Keyboard.GetState().IsKeyDown(Keys.Escape)) this.Exit();
    
                // TODO: Add your update logic here
                KeyboardState keyState = Keyboard.GetState();
                if (keyState.IsKeyDown(Keys.NumPad9)) Score++;
                if (keyState.IsKeyDown(Keys.NumPad8)) Score += 10;
                if (keyState.IsKeyDown(Keys.NumPad7)) Score += 100;
                if (keyState.IsKeyDown(Keys.NumPad3)) Score--;
                if (keyState.IsKeyDown(Keys.NumPad2)) Score -= 10;
                if (keyState.IsKeyDown(Keys.NumPad1)) Score -= 100;
    
                base.Update(gameTime);
            }
        
    キーの説明です。
    キー 説明
    テンキー 9 Score を1アップ
    テンキー 8 Score を10アップ
    テンキー 7 Score を100アップ
    テンキー 3 Score を1ダウン
    テンキー 2 Score を10ダウン
    テンキー 1 Score を100ダウン
  7. Draw() メソッドに画像を描画するコードを記述します。
    Score の描画は DrawScore() メソッドで行っています。
            protected override void Draw(GameTime gameTime)
            {
                graphics.GraphicsDevice.Clear(Color.CornflowerBlue);
    
                // TODO: Add your drawing code here
                spriteBatch.Begin(SpriteBlendMode.AlphaBlend);
                DrawScore(120,40,Score,6);  //スコア描画
                spriteBatch.End();
    
                base.Draw(gameTime);
            }
        
  8. Score を描画する DrawScore() メソッドです。
    Draw() メソッドに続いて定義して下さい。
    Score の値を下位の桁から1文字ずつ描画しています。
            // Num の数字を下位の桁から一文字ずつ描画する
            private void DrawScore(int X, int Y, int Num, int maxArg)
            {   int wn;
    
                wn= Num;
                for (int i=maxArg-1; i>=0; i--)
                {   image.sp_no = wn%10;
                    wn/= 10;
                    image.Draw(spriteBatch,new Vector2(X+(i*60),Y));
                }
            }
        
  9. メニューの [デバッグ] から [デバッグ開始] を選択すればコンパイルされ、エラーが無ければ実行されます。

前田稔(Maeda Minoru)の超初心者のプログラム入門

超初心者のプログラム入門(XNA(C#) game program)