locomarco
Commander
- Registriert
- Aug. 2009
- Beiträge
- 2.446
Hi, ich hab hier ein kleines Problem das ich echt nicht kapieren.
Ich habe Gestern zur Übung ein kleines "Spiel" (wenn man es so nenn kann) in VC++ geschrieben.
C++
Das Funktioniert soweit auch wie es soll.
Heute hab ich Versucht das in C# zu übersetzen. Allerdings bekomme ich an einer Stelle den Fehler Verwendung der nicht zugewiesenen lokalen Variablen "att_name".
Der Fehler kommt in Zeile 101 bei
Console.WriteLine("Dein Gegner hat dich mit {0} angeriffen!\n\n", att_name);
att_name wird doch vor der while Schleife Deklariert und bekommt dann von einem der if-Blöcke einen Wert (Schlag, Tritt oder Messerhieb) zugewiesen.
Wenn ich die betroffene Zeile auskommentiere, bekomm ich die Warnung das ich att_name deklariert habe, es aber nie benutzt wird.
Kann mir das jemand erklären?
C#
Ich habe Gestern zur Übung ein kleines "Spiel" (wenn man es so nenn kann) in VC++ geschrieben.
C++
Code:
#include "stdafx.h"
#include <iostream>
#include <string>
#include <ctime>
using namespace std;
int main()
{
start:
int hp_spieler = 100, hp_gegner = 100;
string attacke;
while(hp_spieler > 0 && hp_gegner > 0)
{
system("cls");
srand(time(NULL)/3);
int attacke_gegner = 0 + rand()%(29-0+1);
string att_name;
cout << endl << "Du: " << hp_spieler << "HP" << " - " << "Gegner: " << hp_gegner << "HP" << endl << endl;
cout << "Wie willst du angreifen?" << endl;
cout << " ___________________________" << endl;
cout << " # Angriff | Schaden #" << endl;
cout << " # | #" << endl;
cout << " # Schlag | 5 #" << endl;
cout << " # Tritt | 10 #" << endl;
cout << " # Messerhieb | 20 #" << endl;
cout << " ___________________________" << endl << endl;
cout << "Tippe den Angriff einfach ein und bestaetige mit Enter" << endl << endl;
cin >> attacke;
cout << endl;
if(attacke == "Schlag")
{
hp_gegner -= 5;
}
else if(attacke == "Tritt")
{
hp_gegner -= 10;
}
else if(attacke == "Messerhieb")
{
hp_gegner -= 20;
}
switch(attacke_gegner)
{
case 0:
case 3:
case 6:
case 9:
case 12:
case 15:
case 18:
case 21:
case 24:
case 27:
att_name = "Schlag";
hp_spieler -= 5;
}
switch(attacke_gegner)
{
case 1:
case 4:
case 7:
case 10:
case 13:
case 16:
case 19:
case 22:
case 25:
case 28:
att_name = "Tritt";
hp_spieler -= 10;
}
switch(attacke_gegner)
{
case 2:
case 5:
case 8:
case 11:
case 14:
case 17:
case 20:
case 23:
case 26:
case 29:
att_name = "Messerhieb";
hp_spieler -= 20;
}
cout << "Dein Gegner hat dich mit " << att_name << " angeriffen!" << endl << endl << endl;
system("pause");
}
if(hp_spieler <= 0)
{
cout << endl << "Du hast Verloren!" << endl << endl;
}
else if(hp_gegner <= 0)
{
cout << endl << "Du hast Gewonnen!" << endl << endl;
}
system("pause");
goto start;
}
Das Funktioniert soweit auch wie es soll.
Heute hab ich Versucht das in C# zu übersetzen. Allerdings bekomme ich an einer Stelle den Fehler Verwendung der nicht zugewiesenen lokalen Variablen "att_name".
Der Fehler kommt in Zeile 101 bei
Console.WriteLine("Dein Gegner hat dich mit {0} angeriffen!\n\n", att_name);
att_name wird doch vor der while Schleife Deklariert und bekommt dann von einem der if-Blöcke einen Wert (Schlag, Tritt oder Messerhieb) zugewiesen.
Wenn ich die betroffene Zeile auskommentiere, bekomm ich die Warnung das ich att_name deklariert habe, es aber nie benutzt wird.
Kann mir das jemand erklären?
C#
Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using nsClearConsole;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
ClearConsole ClearMyConsole = new ClearConsole();
start:
int hp_spieler = 100, hp_gegner = 100;
int attacke_gegner;
string attacke;
string att_name;
while (hp_spieler > 0 && hp_gegner > 0)
{
ClearMyConsole.Clear();
Console.WriteLine("\nDu: {0} HP - Gegner: {1} HP",hp_spieler, hp_gegner);
Console.WriteLine("Wie willst du angreifen?");
Console.WriteLine(" ___________________________");
Console.WriteLine(" # Angriff | Schaden #");
Console.WriteLine(" # | #");
Console.WriteLine(" # Schlag | 5 #");
Console.WriteLine(" # Tritt | 10 #");
Console.WriteLine(" # Messerhieb | 20 #");
Console.WriteLine(" ___________________________\n");
Console.WriteLine("Tippe den Angriff einfach ein und bestaetige mit Enter\n");
attacke = Convert.ToString(Console.ReadLine());
Console.WriteLine();
if (attacke == "Schlag")
{
hp_gegner -= 5;
}
else if (attacke == "Tritt")
{
hp_gegner -= 10;
}
else if (attacke == "Messerhieb")
{
hp_gegner -= 20;
}
Random zufall = new Random();
attacke_gegner = zufall.Next(0, 29);
if(attacke_gegner == 0 ||
attacke_gegner == 3 ||
attacke_gegner == 6 ||
attacke_gegner == 9 ||
attacke_gegner == 12 ||
attacke_gegner == 15 ||
attacke_gegner == 18 ||
attacke_gegner == 21 ||
attacke_gegner == 24 ||
attacke_gegner == 27)
{
att_name = "Schlag";
hp_spieler -= 5;
}
else if(attacke_gegner == 1 ||
attacke_gegner == 4 ||
attacke_gegner == 7 ||
attacke_gegner == 10 ||
attacke_gegner == 13 ||
attacke_gegner == 16 ||
attacke_gegner == 19 ||
attacke_gegner == 22 ||
attacke_gegner == 25 ||
attacke_gegner == 28)
{
att_name = "Tritt";
hp_spieler -= 10;
}
else if(attacke_gegner == 2 ||
attacke_gegner == 5 ||
attacke_gegner == 8 ||
attacke_gegner == 11 ||
attacke_gegner == 14 ||
attacke_gegner == 17 ||
attacke_gegner == 20 ||
attacke_gegner == 23 ||
attacke_gegner == 26 ||
attacke_gegner == 29)
{
att_name = "Messerhieb";
hp_spieler -= 20;
}
Console.WriteLine("Dein Gegner hat dich mit {0} angeriffen!\n\n", att_name);
Console.ReadLine();
}
if (hp_spieler <= 0)
{
Console.WriteLine("\nDu hast Verloren!\n");
}
else if (hp_gegner <= 0)
{
Console.WriteLine("\nDu hast Gewonnen!");
}
Console.ReadLine();
goto start;
}
}
}
Zuletzt bearbeitet: