2016-12-13 15 views
-3

私は基本的な都市ビルダーゲームを作成しています(コンソールで)。私はメソッド(DrawMap)に問題があります。メソッドの入力引数としてリストを取得することはできません。私はエラーがたくさんあるので、ここにコードがあります。リストをメソッドの引数として使用する

編集:これで動作します。ありがとうございますkmatyaszek。

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace City 
{ 
    public class map 
    { 
     public int m { get; set; } //Map size 
     public List<int> info { get; set; } 
     public List<int> fire { get; set; } 
     public List<int> police { get; set; } 
     public List<int> education { get; set; } 
     public List<int> health { get; set; } 
     public List<int> cursor { get; set; } 
    } 
    class Program 
    { 

     static void Main(string[] args) 
     { 
      map map1 = new map(); 
      map1.m = 256; 

      map1.info = new List<int>(); 
      for (int i = 0; i < map1.m; i++) 
      { 
       map1.info.Add(0); 
      } 

      map1.fire = new List<int>(); 
      for (int i = 0; i < map1.m; i++) 
      { 
       map1.fire.Add(0); 
      } 
      map1.police = new List<int>(); 
      for (int i = 0; i < map1.m; i++) 
      { 
       map1.police.Add(0); 
      } 
      map1.education = new List<int>(); 
      for (int i = 0; i < map1.m; i++) 
      { 
       map1.education.Add(0); 
      } 
      map1.health = new List<int>(); 
      for (int i = 0; i < map1.m; i++) 
      { 
       map1.health.Add(0); 
      } 
      map1.cursor = new List<int>() { 0, 0 }; 

      DrawMap(map1.info, map1.cursor); 
     } 

     static void DrawMap(List<int> map1.info, List<int> map1.cursor) 
     { 
     int j = 0; 
     int k = 0; 
      for (int k = 0; k < Math.Sqrt(map1.m); k++) 
      { 
       Console.SetCursorPosition(map1.cursor[j], map1.cursor[k]);  

      for (int j = 0; j < Math.Sqrt(map1.m); j++) 
      { 
      Console.SetCursorPosition(map1.cursor[j], map1.cursor[k]); 
      Console.Write("A"); 
      } 
      } 
     } 
    } 
} 
+1

このエラーを共有してもよろしいですか?それは、 'DrawMaps'メソッドのパラメータのオッズに関係していますか? –

+1

なぜmap1.infoのような変数名がありますか?これはCでの不正な変数名です# –

+0

@DanHunexこれはmap1オブジェクトの一部です。そして今はうまくいくようです。 – pippu

答えて

1

C#の方法(https://msdn.microsoft.com/en-us/library/ms173114.aspx)についてお読みください。あなたは、同じスコープ内で2人の地元の人々(jとk)を宣言しDrawMap

... 
map1.health = new List<int>(); 
     for (int i = 0; i < map1.m; i++) 
     { 
      map1.health.Add(0); 
     } 
     map1.cursor = new List<int>() { 0, 0 }; 

     DrawMap(map1); 
    } 

    static void DrawMap(map map1) 
    { 
     int j = 0; 
     int k = 0; 
     for (k = 0; k < Math.Sqrt(map1.m); k++) 
     { 
      Console.SetCursorPosition(map1.cursor[j], map1.cursor[k]); 

      for (j = 0; j < Math.Sqrt(map1.m); j++) 
      { 
       Console.SetCursorPosition(map1.cursor[j], map1.cursor[k]); 
       Console.Write("A"); 
      } 
     } 
    } 
... 

私はこの方法DrawMapmapオブジェクトを取るべきだと思います。あなたはそれをすることはできません。私はどこを開始するのか分からない https://blogs.msdn.microsoft.com/samng/2007/11/09/local-variable-scoping-in-c/

0

ここでは、ローカル変数とスコープについて読むことができます。 DrawMapメソッドのパラメータから始めましょう。 C#では変数名に.を使用できません。メソッドのシグネチャを宣言するときは、パラメータの名前のみを記述します。あなたのプログラムの既存の変数を参照しようとしないでください。ちょうど名前を選んでください。あなたがメソッドの呼び出しに渡す場合、コンパイラは、あなたが意味する簡単なリストを知っています:

static void DrawMap(List<int> info, List<int> cursor) 

することができます:あなたはこのようなあなたのメソッドのパラメータに適切な名前を与えられた後

DrawMap(map1.info, map.cursor); 

メソッドのスコープ内の名前を使用します。

2番目の方法は、メソッドのインデックス変数を2回宣言することです。 forループ宣言を見てください。そこにはint k=0; k<...があります。つまり、同じ名前の新しい変数が宣言されています。ループの上にある2つの変数を削除するだけです。

関連する問題