2016-12-13 2 views
-3

Ich mache ein einfaches City Builder Spiel (in der Konsole). Ich habe ein Problem mit einer Methode (DrawMap). Ich kann die Listen nicht als Eingabeargumente für die Methode verwenden. Ich bekomme eine ganze Reihe von Fehlern, also hier ist der Code.Verwenden von Listen als Methodenargumente

EDIT: Es funktioniert jetzt, danke 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

Würde es Ihnen etwas ausmachen, diesen Haufen von Fehlern zu teilen? Hat es etwas mit den Parametern der 'DrawMaps' Methode zu tun? –

+1

Warum haben Sie variable Namen wie map1.info ?? Es ist ein ungültiger Variablenname in C# –

+0

@DanHunex Er ist Teil des Objekts map1. Und es scheint jetzt gut zu funktionieren. – pippu

Antwort

1

Sie sollten über C# Methoden lesen (https://msdn.microsoft.com/en-us/library/ms173114.aspx).

Ich denke, dass Methode DrawMapmap Objekt nehmen sollte:

... 
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"); 
      } 
     } 
    } 
... 

In DrawMap Sie zwei Einheimische (j und k) erklären im gleichen Umfang. Das kannst du nicht tun.

Hier können Sie über lokale Variable und Umfang lesen: https://blogs.msdn.microsoft.com/samng/2007/11/09/local-variable-scoping-in-c/

0

Ich weiß nicht, wo man anfangen soll. Beginnen wir mit den Parametern der DrawMap Methode. C# erlaubt . in Variablennamen nicht. Wenn Sie die Signatur einer Methode deklarieren, schreiben Sie nur Namen für die Parameter. Versuchen Sie nicht, vorhandene Variablen in Ihrem Programm zu referenzieren. Wählen Sie einfach einen Namen. Der Compiler weiß, kurze Liste Sie meinen, wenn Sie sie im Aufruf der Methode übergeben:

DrawMap(map1.info, map.cursor); 

Nachdem Sie richtigen Namen für die Parameter Ihrer Methode wie folgt gegeben:

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

Sie können Verwenden Sie die Namen innerhalb des Bereichs der Methode.

Die zweite Sache ist, dass Sie Ihre Indexvariablen in der Methode zweimal deklarieren. Sehen Sie sich Ihre For-Loop-Deklaration an. Dort haben Sie int k=0; k<... das bedeutet, dass eine neue Variable mit dem gleichen Namen deklariert ist. Löschen Sie einfach die zwei Variablen über den Schleifen.

Verwandte Themen