-1

私は C# とオブジェクト指向プログラミングの両方に非常に慣れていません。このプログラムがコンパイルされない理由を理解しようとしています。問題を引き起こしているコードスニペットは次のとおりです。

static void AdvancePreLvlThree() // advances player to next level when level is less than three
{
    if(level == 1)
    {
        xp = (xp - 100); // carries remaining xp over to next level
    }
    else if(level == 2)
    {
        xp = (xp - 150);
    }

    level +=1; // advances
    return Update(); // checks again to see if they can advance further
}

完全なプログラム:

///////////////////////////////////////////////////////
//
// A namespace/program for managing experience points 
// and determining if the player can level up.
//
// Written by Jared Beach
// January 19, 2013
//
//////////////////////////////////////////////////////

using System;
namespace LevelSystem
{
    public class LevelSystem 
    {
        public void LevelStorage()
        {
            int level = 1; // stores player level
        }

        public void XPStorage()
        {
            int xp = 0; // stores player xp
        }

        public void XPRequirement() // xp required to advance to the next level
        {
            int maxXP = (8 * level^3);

        static void AdvancePreLvlThree() // advances player to next level when level is less than three
        {
            if(level == 1)
            {
                xp = (xp - 100); // carries remaining xp over to next level
            }
            else if(level == 2)
            {
                xp = (xp - 150);
            }

            level +=1; // advances
            return Update(); // checks again to see if they can advance further
        }

        static void Advance() // advances player to next level
        {
            xp = (level - maxXP); // carries remaining xp over to next level
            level +=1;
            return Update();
        }

        static void Update() // checks to see if player can advance levels
        {
            if(level == 1 && xp > 100) // special case to keep basic progression ratio close to one
            {
                AdvancePreLvlThree();
            }
            else if(level == 3 && xp > 150)
            {
                AdvancePreLvlThree();
            }
            else if(xp >= 3 && xp > maxXP) 
            {
               return Advance();
            }
        }
    }

    public class Program
    {
        static void Main(string[] args)
        {

        }
    }
}

私が得ているエラーは次のとおりです。

Program.cs(30,8): error CS1525: Unexpected symbol `static'
Program.cs(30,16): error CS1547: Keyword `void' cannot be used in this context
Program.cs(30,38): error CS1525: Unexpected symbol `('
Program.cs(36,16): error CS1519: Unexpected symbol `else' in class, struct, or interface member declaration
Program.cs(36,28): error CS1519: Unexpected symbol `==' in class, struct, or interface member declaration
Program.cs(38,20): error CS1519: Unexpected symbol `=' in class, struct, or interface member declaration
Program.cs(38,26): error CS1519: Unexpected symbol `-' in class, struct, or interface member declaration
Program.cs(41,12): error CS1525: Unexpected symbol `level'

関連する場合、メインと同じクラスではありません。

4

2 に答える 2

3

他の人が述べているように、この場合はすべてのコードを表示する必要があると述べています。これは、コードに他の何かが欠けている/間違っているように聞こえ、その時点で壊れているためです。これはあなたがやろうとしていることの実際の例ですが、多くの項目を持つ非常に良いアプローチのようには見えず、オブジェクト指向プログラミングstaticを実際に調べる必要があります!

namespace ConsoleApplication1
{
    class Program
    {
        private static int level = 0;
        private static int xp = 0;

        static void Main(string[] args)
        {
            AdvancePreLvlThree();
        }

        static bool AdvancePreLvlThree() // advances player to next level when level is less than three
        {
            if(level == 1)
            {
                xp = (xp - 100); // carries remaining xp over to next level
            }
            else if(level == 2)
            {
                xp = (xp - 150);
            }

            level +=1; // advances
            return Update(); // checks again to see if they can advance further
        }

        static bool Update()
        {
            // Yes they can...
            return true;
        }
    }
}

AdvancePreLvlThreeそれがあなたがやろうとしていたことですが、メソッドは無効としてマークされていたので、私はあなたのメソッドがブール値を返すようにしましたか? とにかく、うまくいけば、これで始められるでしょうか?

于 2013-01-22T15:42:11.597 に答える
1

いくつかのこと、

  1. メソッドは void として宣言され、update を返すため、メソッドを update と同じ戻り値の型にします。
  2. メソッドがメインと同じクラスにない場合は、メソッドを公開し、メインを含むクラスで新しいクラスを参照します。
  3. XP とレベルは、使用する前に変数として宣言し、メソッド レベルのスコープで宣言します。
  4. このメソッドは update と同じクラスにある必要があります。
于 2013-01-22T15:46:38.930 に答える