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

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

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

1回答

1023閲覧

Unity C# テトリス CS0270

baby-d

総合スコア2

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2023/01/20 04:52

前提

Unityで C#を使ってテトリスを作成中です。
基盤となるボードについてのスクリプトを書いています。

実現したいこと

・エラーを解決する

発生している問題・エラーメッセージ

CS0270: Array size cannot be specified in a variable declaration (try initializing with a 'new' expression) 配列サイズは変数宣言で指定できません ('new' 式で初期化してみてください)

該当のソースコード

C#

1public class Board : MonoBehaviour 2{ 3 4 private Transform[x,y] grid; 5 6 7 8 [SerializeField] 9 private Transform emptySprite; 10 11 [SerializeField] 12 private int height = 30,width = 10,header = 8; 13 14 private void Awake() 15 { 16 grid = new Transform[width,height]; 17 } 18 19 private void Start() 20 { 21 CreateBoard(); 22 } 23 24 25 void CreateBoard() 26 { 27 if (emptySprite) 28 { 29 for(int y = 0; y < height - header; y++) 30 { 31 for(int x = 0; x < width; x++) 32 { 33 Transform clone = Instantiate(emptySprite, 34 new Vector3(x, y, 0), Quaternion.identity); 35 36 clone.transform.parent = transform; 37 } 38 } 39 } 40 } 41 42 public bool CheckPosition(Block block) 43 { 44 foreach (Transform item in block.transform) 45 { 46 Vector2 pos = Rounding.Round(item.position); 47 48 if(!BoardOutCheck((int)pos.x,(int)pos.y)) 49 { 50 return false; 51 } 52 53 54 if(BlockCheck((int)pos.x, (int)pos.y,block)) 55 { 56 return false; 57 } 58 } 59 60 return true; 61 } 62 63 64 bool BoardOutCheck(int x, int y) 65 { 66 return (x >= 0 && x < width && y >= 0); 67 } 68 69 70 bool BlockCheck(int x , int y,Block block) 71 { 72 return(grid[x,y] != null && grid[x,y].parent !=block.transform); 73 } 74 75 76 public void SaveBlockInGrid(Block block) 77 { 78 foreach(Transform item in block.transform) 79 { 80 Vector2 pos = Rounding.Round(item.position); 81 82 grid[(int)pos.x, (int)pos.y] = item; 83 } 84 } 85 86 87 public void ClearAllRows() 88 { 89 for (int y = 0; y < height; y++) 90 { 91 if(IsComplete(y)) 92 { 93 ClearRow(y); 94 95 ShiftRowsDown(y + 1); 96 97 y--; 98 } 99 } 100 } 101 102 103 bool IsComplete(int y) 104 { 105 for (int x = 0; x < width; x++) 106 { 107 if(grid[x,y] == null) 108 { 109 return false; 110 } 111 } 112 113 return true; 114 } 115 116 void ClearRow() 117 { 118 for (int x = 0; x < width; x++) 119 { 120 if(grid[x,y] != null) 121 { 122 Destroy(grid[x,y].gameObject); 123 } 124 grid[x,y] = null; 125 } 126 127 128 129 void ShiftRowsDown(int startY) 130 { 131 for (int y = startY; y< height; y++) 132 { 133 for (int y= 0; x<width; x++) 134 { 135 if(grid[x,y] !=null) 136 { 137 grid[x,y - 1] = grid[x,y]; 138 grid[x,y] = null; 139 grid[x,y-1].position += new Vector3(0,-1,0); 140 } 141 } 142 } 143 } 144 } 145} 146 147 148どのコードが必要か分かりませんでしたので 149すべて記載させてもらいました。 150 151今回のエラーは一番上の方にある 152private Transform[x,y] grid; です。 153

試したこと

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2023/01/20 05:16

C# の基本的な文法を勉強しましょう。この先も、基本的な知識があれば聞かなくてすむことを、いちいち聞いて解決するつもりですか?
baby-d

2023/01/20 05:24

学習しながら作品を作っていて、わからないことを質問して文句を言われても。 回答があり、アドバイスならありがたいですが、ただただ自分の言いたいことだけ言われても 文句にすぎず解決につながりません。わかっているなら教えていただけませんか?嫌なのであればコメントしないでください。もう一度言いますが、学習途中での質問です。
退会済みユーザー

退会済みユーザー

2023/01/20 05:37 編集

ここはあなた専用の Q&A サイトではないのです。https://teratail.com/help/avoid-asking に書いてあるように「価値のあるコンテンツを世の中に残し届けることを目的」としているそうです。ごく基本的な知識があるか、でなくてもエラーメッセージを参考に少し調べればすぐわかることを聞いているあなたの質問が価値あるか考えてみてはいかが? これも読んでください。 https://teratail.com/help/question-tips
baby-d

2023/01/20 05:43

エラーメッセージを参考に調べた上でわからないから質問しているのです。 実際に私がわからなかったのですから、これからも基礎がわからない学習者は出てくるはずです。 そんなことよりも、プログラミングに関する質疑応答の場での この会話の方が価値が低く、世の中に残すべきコンテンツですか? わかっているなら教えてください。嫌なのであればコメントしてこないでくださいと前述しました。 基礎がわかるかどうかを判断するのは、学習者です。 基礎だからわかる。基礎だから質問してはだめ。そのようなルールはないのです。 私は議論に興味がありません。エラーを解決したいだけなので、 教えていただくことができないのなら、コメントしてこないでください。
退会済みユーザー

退会済みユーザー

2023/01/20 05:57 編集

> エラーメッセージを参考に調べた上でわからないから質問しているのです。 調べてるとは思えませんよ。エラーメッセージにある CS0270 でググると一番最初に出てくる Microsoft のドキュメントに詳しく書いてあるけど読みましたか? その前にも問題があって、未定義の変数は使えないというのは C# でアプリを作ってるなら知らない方がおかしいですよ。
baby-d

2023/01/20 05:58

マイクロソフトのドキュメントの int とか  newのやつをやってみましたが 違うエラーが次々に発生し、解決できてませんでしたので 質問をしているのです。もう一度言います。回答しないならコメントしてこないでください。不毛な時間でしかない。
YAmaGNZ

2023/01/20 06:04

参考にされているページがあるはずです。 そこに今回エラーとなる文が書いてあるのであれば、そこは参考にしないほうがいいかと思います。
baby-d

2023/01/20 06:11

なるほど、ありがとうございます。 参考にした記事がよくなかったです。 ありがとうございます。
YAmaGNZ

2023/01/20 06:16

何故エラーになるかというとエラーメッセージに書いてある通りで 宣言時のサイズ指定に変数は使用できません。 なので「private Transform[x,y] grid;」の何が問題になっているのかは分かるはずです。 で、貴方がこの文で何をしたいのかを理解しているのかが問題になります。 ここで何をしたいのかは説明できますか?
退会済みユーザー

退会済みユーザー

2023/01/20 06:37 編集

> 回答しないならコメントしてこないでください。不毛な時間でしかない。 Teratail は「価値のあるコンテンツを世の中に残し届けることを目的」ということなので、それにそぐわない質問は不毛だと言っておるのです。 ↓ 読んでみよう。 教えてクン養成マニュアル http://www.redout.net/data/osietekun.html
baby-d

2023/01/20 06:41

他の方の回答がわかりやすく解決しました! とても嬉しいです!! それにそぐわない質問などはなく プログラミングエラーに関係している話であれば、 誰かが、同じ悩みを持つ可能性がありコンテンツとして残すに値すると言っており、 尚且つ、あなたのしている、”初学者”への高圧的態度で意欲を剝ぐ一方的な会話は 不毛だと言っておるのです。 プログラミングができるから話の通ずる優秀な方ではないことが学べて 良い機会でした。
退会済みユーザー

退会済みユーザー

2023/01/20 07:03

前の質問 https://teratail.com/questions/ca37a5ohqibjj0 も同じ。基本的な知識があれば解決できるはず。前の質問が解決できても、基本的な知識がないからすぐ別の問題に当たってまた聞いてくる。今後も次から次へとそういうことを繰り返すつもりですか? そういう質問は「同じ悩みを持つ可能性がありコンテンツとして残すに値する」ということはないのですよ。みんな知っているはずの価値の低いスレッドに、ホントに価値あるスレッドが埋もれてしまうから。
guest

回答1

0

ベストアンサー

エラーメッセージのとおり配列の宣言にサイズは入れられないので、サイズを消しましょう。

cs

1 private Transform[,] grid;

多次元配列 (C# プログラミング ガイド)

投稿2023/01/20 06:16

int32_t

総合スコア20872

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

baby-d

2023/01/20 06:18

ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問