質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.13%

テトリスオブジェクト参照がオブジェクト インスタンスに設定されていません。

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 939

LukeFukuda

score 69

テトリスをつくっています。1x4のテトリスブロックが0.1秒ごとに一枠落ちて一番下の枠まできたら2つ目の1x4のブロックが0.1秒ごとに1枠落ちて行ってひとつ前のブロックの上で止まって3つ目は一番上の枠に俳画されてゲームがとまってしまいます。そのあと、少ししたら オブジェクト参照がオブジェクト インスタンスに設定されていません。と下↓↓のところにひょうじされてしまいます。
 for (i = 1; i <= getout; i++)
        {
            g.DrawImage(fm[i], ICHI + 40 + yoko[i], tate[i], fm[i].Width + 60, fm[i].Height + 9);
        }

using System;
using System.Windows.Forms;
using System.Drawing;
using System.Linq;
using System.Collections;


class Sample1 : Form
{
   private static Image WK;

    private static Label [][]gb;

    private static int i, p1, p2, p3, p4, LEVEL, ICHI, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, saikoro, WUI, WIU, WW, canpion;
    private static int WWW; private static string[][] STR;
    private static int getout = 1;
    PictureBox[] lbx = new PictureBox[5];
    private static int UI; private static int IU; private static int[] yoko; private static int[][] UU;
    private static Image[] fm; private static int[] tate; private static int[][] GPS;

    public static void Main()
    {
        Application.Run(new Sample1());
    }
    public Sample1()
    {
       /// MessageBox.Show("start");
        //通常設定
        this.Text = "サンプル"; this.DoubleBuffered = true;
        this.Width = 800; this.Height = 800;
        //
        PictureBox WAK = new PictureBox(); WAKU W = new WAKU();WAK.Image = W.GetImage();WK = WAK.Image;

        saikoro = 1;

        LEVEL = 100;
        ICHI = 200;


        ///MessageBox.Show("set timer");




        //  箱作成
        tate = new int[getout + 21];
        yoko = new int[getout + 21];
        UU = new int[12][];
        for (int t = 0; t <= 11; t++)
        {
            UU[t] = new int[18];
        }
        GPS=new int[12][];
        for(p9=0;p9<=11;p9++){
            GPS[p9] = new int[18];
        }
        STR=new string[12][];
        for (int l1 = 0; l1 <= 11; l1++)
        {
            STR[l1] = new string[18];
        }
        PictureBox[]im = new PictureBox[getout + 21];


        ///MessageBox.Show("newimage");

        fm = new Image[getout + 21];
        for (p3 = -1; p3 <= 20; p3++)
        {
            im[getout + p3] = new PictureBox();
        }
        im[1].Image = Image.FromFile("C:\\Users\\琉久\\Pictures\\TETRIS\\bar.jpg");
        for (p6 = -1; p6 <= 20; p6++)
        {
            switch (saikoro)
            {
                case 1: im[getout + p6].Image = Image.FromFile("C:\\Users\\琉久\\Pictures\\TETRIS\\bar.jpg");
                    break;
                case 2:
                    im[getout + p6].Image = Image.FromFile("C:\\Users\\琉久\\Pictures\\TETRIS\\bar.jpg");
                    break;
                default:
                    break;
            }
        }


        for (p2 = -1; p2 <= 20; p2++)
        {
            fm[getout+ p2] = im[getout + p2].Image;
        }




        Timer tm = new Timer(); tm.Interval = LEVEL; tm.Start();

            this.Paint += new PaintEventHandler(fm_Paint);
        tm.Tick += new EventHandler(tm_Tick);
        this.KeyDown += new KeyEventHandler(fm_KeyDown);
    }
    public void fm_KeyDown(Object sender, KeyEventArgs e)
    {
        if (IU <= 5)
        {
            if (e.KeyCode == Keys.Right)
            {
                IU++;
                yoko[getout] += 33;
            }
        }
        if (IU >= 1)
        {
            if (e.KeyCode == Keys.Left)
            {
                IU--;
                yoko[getout] -= 33;
            }
        }

    }



    public void tm_Tick(Object sender, EventArgs e)
    {



        if (UI <= 15)
        {
            if (tate[getout] <= 420)
            {
                tate[getout] += 28;
            }
            //衝totu
            UI++;

        }
            this.Invalidate();
    }

    ///MessageBox.Show("eee");
    public void fm_Paint(Object sender, PaintEventArgs e)
    {
        ///MessageBox.Show("aaa");


        PictureBox[] im = new PictureBox[getout + 21]; fm = new Image[getout + 21];

        for (p4 = -1; p4 <= 20; p4++)
        {
            im[getout + p4] = new PictureBox();
        }

        //im[1].Image = Image.FromFile("C:\\Users\\琉久\\Pictures\\TETRIS\\bar.jpg");
        for (p1 = -1; p1 <= 20; p1++)
        {
            switch (saikoro)
            {
                case 1: im[getout + p1].Image = Image.FromFile("C:\\Users\\琉久\\Pictures\\TETRIS\\bar.jpg");
                    break;
                case 2: im[getout + p1].Image = Image.FromFile("C:\\Users\\琉久\\Pictures\\TETRIS\\squre.jpg");

                    break;

                default:
                    break;
            }
        }

        for (p5 = -1; p5 <= 20; p5++)
        {
            fm[getout + p5] = im[getout + p5].Image;
        }






        Graphics g = e.Graphics;
        g.DrawImage(WK, ICHI, 0, WK.Width + 265, WK.Height + 300);












      //衝突  
        if (UI <= 16)
        {
            for (p7 = 0; p7 <= 3; p7++)
            {
                //1x4のテトリスブロックなので
                GPS[IU + p7][UI] = 1;


                if (UU[IU + p7][UI] != 2)
                {

                    UU[IU + p7][UI] = GPS[IU + p7][UI] + GPS[IU + p7][UI + 1];

                    if (UU[IU + p7][UI] != 2)
                    {
                        UU[IU + p7][UI] = 0;
                        if (UI!=16&&UU[IU + p7][UI]!= 2)
                        {
                            GPS[IU + p7][UI] = 0;
                        }
                    }

                    if (UU[IU + p7][UI] == 2 || UI == 16)
                    {

                        WW = 1;
                    }

                } 
            }
        }



        if (WW == 1)
        {
                getout++;

            //リセット
            UI = 0;
            IU = 0;
            WW = 0;
        }

        for (i = 1; i <= getout; i++)
        {
            g.DrawImage(fm[i], ICHI + 40 + yoko[i], tate[i], fm[i].Width + 60, fm[i].Height + 9);
        }

        }  
    }







class WAKU
{
    private Image WK;
    public WAKU()
    {
        WK = Image.FromFile("C:\\Users\\琉久\\Pictures\\TETRIS\\WAKU.png");

    }
    public Image GetImage()
    {
        return WK;
    }
}
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

こんにちは。

そのケースの場合、fm, yoko, tateの中に未設定(nullのまま)の要素があるのだと思います。
yoko, tateはint[]型なのであり得ないですが、fmはクラスの配列ですのでnullがあり得ます。
fmの設計を見るとちょっとややこしいですので設定できていない要素があるのではないでしょうか?

getoutがどのように変化するのか分かりませんので断言できないのですが、getoutが2以上になるとfm[0]がnullのままになりそうにも見えます。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/02/01 18:16

    ありがとうございました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.13%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る