Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Praktische Informatik » Zugriff verweigert » Antwort erstellen » Hallo Gast [Anmelden|Registrieren]

Antwort erstellen
Benutzername: (du bist nicht eingeloggt!)
Thema:
Nachricht:

HTML ist nicht erlaubt
BBCode ist erlaubt
Smilies sind erlaubt
Bilder sind erlaubt

Smilies: 21 von 33
smileWinkDaumen hoch
verwirrtAugenzwinkerngeschockt
Mit ZungeGottunglücklich
Forum Kloppebösegroßes Grinsen
TanzentraurigProst
TeufelSpamWillkommen
LehrerLOL HammerZunge raus
Hilfe 
aktuellen Tag schließen
alle Tags schließen
fettgedruckter Textkursiver Textunterstrichener Text zentrierter Text Hyperlink einfügenE-Mail-Adresse einfügenBild einfügen Zitat einfügenListe erstellen CODE einfügenPHP CODE farbig hervorheben
Spamschutz:
Text aus Bild eingeben
Spamschutz

Die letzten 2 Beiträge
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.
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?