Zugriff verweigert

Neue Frage »

Auf diesen Beitrag antworten »
Haevelin Zugriff verweigert

Zur Zeit programmiere ich das Spiel Vier gewinnt in C#.

Dazu habe ich ein Feld feld erstellt mit 6 mal 7 Größe für das Spielfeld. Für die Überprüfung, ob vier Felder zusammenhängen, habe ich ein Interface geschrieben mit:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
using System; 
using System.Collections.Generic;
 using System.Linq; using System.Text; 
using System.Threading.Tasks; 
 
namespace VierGewinntSpiel 
{     public interface IVierer    

 {         Koordinate Eins();         
Koordinate Zwei();         
Koordinate Drei();      
 Koordinate Vier();     
 } 
}


Für die HorizontalenVierer bspw. folgenden Code:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
using System; 
using System.Collections.Generic; 
using System.Linq;
 using System.Text; 
using System.Threading.Tasks; 
 namespace VierGewinntSpiel 
{             
struct HorizontalerVierer : IVierer         
{             private readonly int x;             
private readonly int y;              
public HorizontalerVierer(int x, int y)             
{                 this.x = x;                 this.y = y;             }              
public Koordinate Eins()                
 { return new Koordinate(x, y);                              }             
 public Koordinate Zwei()            
 {                                                       return new Koordinate(x+1, y);                              }              

public Koordinate Drei()             
{                                      return new Koordinate(x+2, y);                              }              
public Koordinate Vier()             
{                                                       
return new Koordinate(x+3, y);                             
}           
}     
}



Wenn ich jetzt die Felder prüfen will schalte ich folgenden Code:



code:
1:
2:
3:
4:
5:
6:
public  Boolean SelbeFarbe(ArrayList liste, int[,] feld)         
{             foreach (var viere in liste){                                  
HorizontalerVierer vier = (HorizontalerVierer)viere;                                  if ((feld[vier.Eins.x,vier.Eins.y]!=0)&&(feld[vier.Eins.X,vier.Eins.Y]==feld[vier.Zwei.X,vier.Zwei.Y])                     &&(feld[vier.Eins.X,vier.Eins.Y]==feld[vier.Drei.X,vier.Drei.Y])&&                     (feld[vier.Eins.X, vier.Eins.Y] == feld[vier.Vier.X, vier.Vier.Y]))                 {                     return true;                 }             
}             return false;          }
 


Jetzt erhalte ich die Fehlermeldung, dass Eins eine Methode ist und ich deshalb nicht auf Feldkoordinaten zurückgreifen kann!

Was ich auch ärgerlich finde ist, dass ich die Zeile
HorizontalerVierer vier = (HorizontalerVierer)viere;

nicht ersetzen kann durch IVierer vier = (IVierer)viere;

so bleibt mein Code begrenzt auf die HorizontalerVierer und ich kann das Interface nicht nutzen um andere Klassen, wie bspw. DiagonaleVierer darüber laufen zu lassen.


Wie löse ich das Problem?
 
Auf diesen Beitrag antworten »
Haevelin RE: Zugriff verweigert

Habe jetzt eine funktionsfähige Verbesserung.

Das Interface IVierer ist jetzt:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks;  
namespace VierGewinntSpiel 
{    
 interface IVierer     
{         Koordinate Eins { get; }         
Koordinate Zwei { get; }         
Koordinate Drei { get; }       
Koordinate Vier { get; }      
}
 }



Und eine Klasse die es instantiiert ist HorizontalerVierer mit:


code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
using System;
 using System.Collections.Generic; 
using System.Linq;
 using System.Text; 
using System.Threading.Tasks; 
 namespace VierGewinntSpiel 

{             
struct HorizontalerVierer : IVierer        
 {             private readonly int x;             
private readonly int y;             
 public HorizontalerVierer(int x, int y)            
 {                 this.x = x;                 this.y = y;             }              

public Koordinate Eins                 
{                  get {return new Koordinate(x, y);}                              }              

public Koordinate Zwei             
{                  get { return new Koordinate(x + 1, y); }                              }              

public Koordinate Drei             
{                  get { return new Koordinate(x + 2, y); }                              }              

public Koordinate Vier             
{                  get { return new Koordinate(x + 3, y); }                             }          
 }     
}


Auch das Casting in IVierer funktioniert.
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »