2016-11-07 1 views
1

이것은 처음으로 코드를 작성하는 데 너무 복잡하여 문제가 발생했습니다. 그래서 Visual Studio를 사용하여 시각적 인 C#에서 매우 기본적인 텍스트 기반 RPG를 만들려고합니다. 나는이 시점까지 3 개의 형식을 가지고있다. 기본 메뉴 양식 (재생 및 종료 버튼 포함), 캐릭터 선택 양식 (클릭하면 열립니다), 게임 양식 자체. 문자 선택 양식에서 사용자는 문자 클래스 (마법사, 전사, 불량)를 선택하라는 메시지를 표시합니다. 나는 공공 추상 클래스라는 단체를 만들었습니다 switch 문 안에 클래스 객체 선언

public abstract class Entity 
{ 
    #region Attributes 

    protected string _name; 
    protected int _strength, _strengthModifier, 
     _magic, _magicModifier, 
     _luck, _luckModifier, 
     _defense, _defenseModifier, 
     _health, _healthModifier; 

    #endregion 

    #region Properties 

    public string Name 
    { 
     get { return _name; } 
     protected set { _name = value; } 
    } 
    public int Strength 
    { 
     get { return _strength; } 
     protected set { _strength = value; } 
    } 
    public int StrengthModifier 
    { 
     get { return _strengthModifier; } 
     protected set { _strengthModifier = value; } 
    } 
    public int Magic 
    { 
     get { return _magic; } 
     protected set { _magic = value; } 
    } 
    public int MagicModifier 
    { 
     get { return _magicModifier; } 
     protected set { _magicModifier = value; } 
    } 
    public int Luck 
    { 
     get { return _luck; } 
     protected set { _luck = value; } 
    } 
    public int LuckModifier 
    { 
     get { return _luckModifier; } 
     protected set { _luckModifier = value; } 
    } 
    public int Defense 
    { 
     get { return _defense; } 
     protected set { _defense = value; } 
    } 
    public int DefenseModifier 
    { 
     get { return _defenseModifier; } 
     protected set { _defenseModifier = value; } 
    } 
    public int Health 
    { 
     get { return _health; } 
     protected set { _health = value; } 
    } 
    public int HealthModifier 
    { 
     get { return _healthModifier; } 
     protected set { _healthModifier = value; } 
    } 

    #endregion 

    #region Constructor 
    public Entity() 
    { 
     Name = ""; 
     Strength = 0; 
     Magic = 0; 
     Luck = 0; 
     Defense = 0; 
     Health = 0; 
    } 
    #endregion 

    #region Methods 

    #endregion 

} 

그럼 나는이 일에서 상속 전사 클래스, 연령 클래스와 악성 클래스를 만들었습니다.

class Mage : Entity 
{ 
    public Mage(string name) : base() 
    { 
     _name = name; 

      #region Stats 
     _strength = 0; 
     _strengthModifier = 0; 
     _magic = 10; 
     _magicModifier = 3; 
     _luck = 3; 
     _luckModifier = 0; 
     _defense = 5; 
     _defenseModifier = 0; 
     _health = 100; 
     _healthModifier = 0; 
      #endregion 
    } 
} 

이제 게임 폼에 클래스 개체를 만듭니다. 캐릭터 선택 폼에서 게임 폼을 호출하고 플레이어 이름과 클래스를 매개 변수로 보냅니다.

 public Game(string name, string characterClass) 
    { 
     InitializeComponent(); 

     #region CreateCharacter 

     switch (characterClass) 
     { 
      case "Mage": 
       { 
        Mage player = new Mage(name); // create player 

        #region PrintPicture 

        pbPlayer.Image = Image.FromFile("C:/Users/mircea/Documents/Visual Studio 2015/Projects/RPG/Artwork/Characters/Mage.png"); 
        pbPlayer.BackgroundImageLayout = ImageLayout.Center; 
        pbPlayer.Size = new Size(145, 200); 

        #endregion 

        lblName.Text = player.Name.ToString(); // show player name 
        txtLog.Text += "Welcome to game title, " + name + "!"; // greet log 
        break; 
       } 
      case "Rogue": 
       { 
        Rogue player = new Rogue(name); // create player 

        #region PrintPicture 

        pbPlayer.Image = Image.FromFile("C:/Users/mircea/Documents/Visual Studio 2015/Projects/RPG/Artwork/Characters/Rogue.bmp"); 
        pbPlayer.BackgroundImageLayout = ImageLayout.Center; 
        pbPlayer.Size = new Size(145, 200); 

        #endregion 

        lblName.Text = player.Name.ToString(); // show player name 
        txtLog.Text += "Welcome to game title, " + name + "!"; // greet log 
        break; 
       } 
      case "Warrior": 
       { 
        Warrior player = new Warrior(name); // create player 

        #region PrintPicture 

        pbPlayer.Image = Image.FromFile("C:/Users/mircea/Documents/Visual Studio 2015/Projects/RPG/Artwork/Characters/Warrior.png"); 
        pbPlayer.BackgroundImageLayout = ImageLayout.Center; 
        pbPlayer.Size = new Size(145, 200); 

        #endregion 

        lblName.Text = player.Name.ToString(); //show player name 
        txtLog.Text += "Welcome to game title, " + name + "!"; // greet log 
        break; 
       } 
     } 

     #endregion 


    } 

지금. 스위치 밖으로 플레이어를 호출하려고하면 작동하지 않습니다. 내가 볼 수있는 유일한 해결책은 각각의 경우에 한 번 코드를 3 번 ​​사용하는 것입니다. 나는 어쨌든 1000 % 확실하지 않다. 제안 사항이 있으십니까?

+2

변수는 스위치 케이스에 대해 로컬입니다. 스위치 외부에 있으면 자동으로 파괴됩니다. 스위치 외부에서 사용하려면 스위치 외부에서 선언해야합니다. – Steve

답변

0

문제는 로컬 브러시의 개체를 인스턴스화하기 때문입니다. 즉, 스위치 외부에서 개체에 액세스 할 수 없기 때문입니다. 스위치 외부에서 사용하려면 스위치 외부에서 스위치를 선언해야합니다. 이렇게 :

public Game(string name, string characterClass) 
    { 
     InitializeComponent(); 

     #region CreateCharacter 

     Entity player = null; 
     switch (characterClass) 
     { 
      case "Mage": 
       { 
        player = new Mage(name); // create player 

        #region PrintPicture 

        pbPlayer.Image = Image.FromFile("C:/Users/mircea/Documents/Visual Studio 2015/Projects/RPG/Artwork/Characters/Mage.png"); 
        pbPlayer.BackgroundImageLayout = ImageLayout.Center; 
        pbPlayer.Size = new Size(145, 200); 

        #endregion 

        lblName.Text = player.Name.ToString(); // show player name 
        txtLog.Text += "Welcome to game title, " + name + "!"; // greet log 
        break; 
       } 
      case "Rogue": 
       { 
        player = new Rogue(name); // create player 

        #region PrintPicture 

        pbPlayer.Image = Image.FromFile("C:/Users/mircea/Documents/Visual Studio 2015/Projects/RPG/Artwork/Characters/Rogue.bmp"); 
        pbPlayer.BackgroundImageLayout = ImageLayout.Center; 
        pbPlayer.Size = new Size(145, 200); 

        #endregion 

        lblName.Text = player.Name.ToString(); // show player name 
        txtLog.Text += "Welcome to game title, " + name + "!"; // greet log 
        break; 
       } 
      case "Warrior": 
       { 
        player = new Warrior(name); // create player 

        #region PrintPicture 

        pbPlayer.Image = Image.FromFile("C:/Users/mircea/Documents/Visual Studio 2015/Projects/RPG/Artwork/Characters/Warrior.png"); 
        pbPlayer.BackgroundImageLayout = ImageLayout.Center; 
        pbPlayer.Size = new Size(145, 200); 

        #endregion 

        lblName.Text = player.Name.ToString(); //show player name 
        txtLog.Text += "Welcome to game title, " + name + "!"; // greet log 
        break; 
       } 
     } 

     #endregion 


    } 

플레이어의 진술을 추상 형식의 스위치에 올려 놓았습니다.

스위치를 전환하기 전에 개체를 선언하면 해당 개체를 들어오고 나가기 위해 액세스 할 수 있습니다. 모든 객체는 엔터티에서 상속 받고 엔터티는 추상 클래스이므로 객체를 입력 할 때 사용할 수 있습니다.

귀하의 문제를 해결하는 가장 좋은 방법입니다.

+0

안녕하세요! 나는 그것을 시도했지만 여전히 오류가 발생합니다. 그것은 "지역 또는 매개 변수가 'player'라는 로컬 또는 매개 변수를 정의하기 위해 해당 지역 범위에서 사용되기 때문에이 범위에서 선언 할 수 없으며 모든"플레이어 "(마법사, 불량배, 전사) 스위치 안에 – Mike

+0

이것은 나를 위해 잘 작동합니다. 그러나 모든 유형이 엔티티를 확장해야한다는 것을 기억하십시오. Rogue and Warrior 수업에 참여할 수 있습니까? –

+0

Game 클래스도보고 싶습니다. 나는'player' 변수 전에 타입을 제거하는 것을 잊어 버린 것 같습니다. 변수의 유형을 스위치 위의 선언에 넣어야합니다. –