2016-07-11 10 views
-7

Hallo, ich versuche, ein Würfelspiel zu machen und immer wieder diesen Fehler zu bekommen, nicht sicher, was es ist oder ob etwas mit meinem Algorithmus nicht stimmt. Jede Hilfe wäre willkommen. Thanks :) Es zeigt einen Fehler:Anruf ist mehrdeutiger Fehler - Würfelspiel

The call is ambiguous between the following methods or properties: 'Form1.UpdateGameStatus(int)' and 'Form1.UpdateGameStatus(int)'

private int UpdateGameStatus(int sumDice) 
    { 

     if (sumDice == 2) 
     if (sumDice == 3) 
     if (sumDice == 14) 
      lblSum.Text = ("You lost!"); 
     if (sumDice == 9) 
     if (sumDice == 10) 
      lblSum.Text = ("You're winner!"); 
     if (sumDice == 0) 
      lblSum.Text = ("Roll again please!"); 
     return; 

    } 

    int point = 0; 
    int gamestatus = 0; 
    private void UpdateGameStatus(int sumDice) 
    { 
     while (sumDice == 4 || sumDice == 5 || sumDice == 6 || sumDice==||sumDice == 9 || sumDice == 10) 

      point = sumDice; 

     if (sumDice == point) 
      lblSum.Text = ("You're winner!"); 
     gamestatus = 1; 
     if (sumDice == 7) 
      lblSum.Text = ("You lost!"); 
     gamestatus = -1; 
     return; 
    } 
    private void btnRollDice_Click(object sender, EventArgs e) 
    { 

     int die1 = 0, die2 = 0; 
     RollDice(out die1, out die2); 
     UpdateGameStatus(sumDice);  
    } 
} 
}  
+0

Was ist mit dem Fehler, verstehst du nicht? – Servy

+0

Mir wurde gesagt, dass ich sowohl void als auch int verwenden soll, aber es lässt mich nicht. Gibt es eine Möglichkeit, beide mit dem gleichen Parameter und Namen zu verwenden? – Flow101

+0

Die Fehlermeldung beantwortet diese Frage speziell. – Servy

Antwort

3

Sie haben zwei Methoden mit derselben Signatur:

private void UpdateGameStatus(int sumDice) 

und

private int UpdateGameStatus(int sumDice) 

Der Compiler kann nicht wissen, was man was meinen Sie. Sie haben unterschiedliche Rückgabetypen, aber diese sind nicht Teil der Signatur.

+0

Ja, gibt es eine Möglichkeit, beides zu benutzen? oder Kann ich nur einen verwenden? Ich bin verwirrt darüber. – Flow101

+1

Sie können beide Methoden verwenden, aber sie können nicht gleich benannt werden oder zumindest nicht dieselben Parameter verwenden. Also entweder einen von ihnen umbenennen oder einen anderen Parameter angeben. Das würde den Compiler wissen lassen, wenn Sie jeden anrufen. Zum Beispiel könnten Sie die erste Methode 'GetGameStatus (int)' umbenennen. – Frecklefoot

+1

NEIN Sie können beide nicht verwenden, wenn beide den gleichen Namen und den gleichen Eingang haben. Benennen Sie den Namen um, den Sie nicht verwenden möchten. – Paparazzi

0

Die Fehlermeldung zeigt Ihnen, was falsch ist: Sie geben einen mehrdeutigen Anruf an UpdateGameStatus. Sie haben zwei Methoden, beide mit dem Namen UpdateGameStatus, die beide einen Ganzzahlwert haben. Warum hast du nicht nur eine Version, die die Summe der Würfel zurückgibt und auch den Spielstatus setzt? Das würde dein Problem lösen. Sie vervielfältigen hier unnötig Code.

Bearbeiten: Ich habe auch festgestellt, dass Ihre erste Methode nicht wirklich den Status des Spiels überhaupt aktualisieren, also wenn Sie beide behalten möchten, in Betracht ziehen, diese umzubenennen.

Bearbeiten 2: Um zusammenzufassen, was in den Kommentaren erwähnt wurde (und über die Fehlermeldung hinausgehen), scheinen Sie einige unnötige Code-Duplizierung zu haben. Denken Sie darüber nach, was diese Methode wirklich tun soll. Soll der Text auf "you lose!" gesetzt werden? Möchten Sie die gamestatus Variable (1, 0 oder -1) verfolgen? Möchten Sie, dass die Variable gamestatus zurückgegeben wird? Finden Sie genau heraus, was diese Methode tun/zurückgeben soll und versuchen Sie, den doppelten Code zu entfernen.

+0

@ Flow101 es scheint (soweit ich das beurteilen kann), dass die Leere man nur etwas tut, was die ganze Zahl schon tut. Ich würde empfehlen, die Ganzzahl 1 zu verwenden, die Spielstatus-/Ausgabenachricht basierend auf dem Ergebnis der Rolle zu aktualisieren und dann auch das Ergebnis der Rolle zurückzugeben. Ich bin mir nicht sicher, wo genau das verwendet wird, aber versuche einfach genau darüber nachzudenken, was diese Funktionen tun und wie du die Daten verwendest. Verwende den int-Wert, wenn dir der Rückgabewert wichtig ist (1, 0 oder -1), und den void-Wert, falls du es nicht tust (du interessierst dich nur für das Setzen des Gamestatus) –

+0

@ Flow101 Mit anderen Worten, kombiniere sie; nimm das Beste von jedem und stelle sie zusammen. Sie müssen den Anruf bei dem machen, was Ihnen wichtig ist, Sie sind derjenige, der das Programm gestaltet. –