【问题标题】:Class file opens with notepad and is completely blank after computer restart类文件用记事本打开,电脑重启后完全空白
【发布时间】:2016-01-14 19:56:44
【问题描述】:

我朋友的 GameElements.cs 似乎以某种方式损坏了。我们在同一个班级学习,他给我发了他的项目,我也无法打开文件。我无法解决他的解决方案,因为他正在使用 XNA 而我正在使用 MonoGame。

遗憾的是,他没有任何备份(尽管这样他会很难学习)而且我们中的任何人都不熟悉 Visual Studio 和编程,因为我们才几个月课程。

文件仍然是 12kb,尽管我只能选择/复制空格。我不知道是否可以从中恢复代码,文件中显然有数据。

这是一个下载整个解决方案的链接,尽管有问题的损坏文件是“GameElements.cs”。如果有人能够恢复代码,我们都将不胜感激! http://www.filedropper.com/xnabus

【问题讨论】:

    标签: c# visual-studio-2010 xna


    【解决方案1】:

    请参阅下面的 GameElements.cs 代码。希望这可以帮助 :)。您可以使用任何 .Net Disassembler 来执行此操作。我使用 ILSpy 并从 XNA bus.exe 文件中反编译了您的代码。

    请注意,有时类或方法的名称可能存在一些小问题。所以,请彻底检查一遍代码以确保这一点。

    using Microsoft.Xna.Framework;
    using Microsoft.Xna.Framework.Content;
    using Microsoft.Xna.Framework.Graphics;
    using Microsoft.Xna.Framework.Input;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    
    namespace XNA_bus
    {
        internal static class GameElements
        {
            public enum State
            {
                Menu,
                Levels,
                Level1,
                Level2,
                Level3,
                Run,
                Highscore,
                Quit
            }
    
            private static Meny meny;
    
            private static Levels levels;
    
            private static Player player;
    
            private static List<Fiender> Fiende;
    
            private static List<GuldMynt> guldMynt;
    
            private static List<Powerup> SuperSkepp;
    
            private static List<Powerup> PenetratingBullets;
    
            private static Texture2D guldMyntSprite;
    
            private static Texture2D SuperskeppSprite;
    
            private static Texture2D PenetratingbulletsSprite;
    
            private static Utskrifter printText;
    
            private static Bakgrund bakgrund;
    
            private static Boss1 boss1;
    
            private static int boss1Liv = 3;
    
            private static int playerLiv = 1;
    
            public static GameElements.State currentState;
    
            public static void Initialize()
            {
                GameElements.guldMynt = new List<GuldMynt>();
                GameElements.SuperSkepp = new List<Powerup>();
                GameElements.PenetratingBullets = new List<Powerup>();
            }
    
            public static void LoadContent(ContentManager content, GameWindow window)
            {
                GameElements.player = new Player(content.Load<Texture2D>("Images/player/Player"), 0f, 200f, 2.5f, 4.5f, content.Load<Texture2D>("Images/player/bullet"));
                GameElements.bakgrund = new Bakgrund(content.Load<Texture2D>("Images/bakgrund"), window);
                GameElements.boss1 = new Boss1(content.Load<Texture2D>("Images/Enemies/Boss1"), 700f, 360f);
                GameElements.meny = new Meny(0);
                GameElements.meny.AddItem(content.Load<Texture2D>("Images/Meny/Start"), 1, window);
                GameElements.meny.AddItem(content.Load<Texture2D>("Images/Meny/Highscore"), 6, window);
                GameElements.meny.AddItem(content.Load<Texture2D>("Images/Meny/Avsluta"), 7, window);
                GameElements.levels = new Levels(1);
                GameElements.levels.AddItem(content.Load<Texture2D>("Images/Meny/Level 1"), 2, window);
                GameElements.levels.AddItem(content.Load<Texture2D>("Images/Meny/Level 2"), 3, window);
                GameElements.levels.AddItem(content.Load<Texture2D>("Images/Meny/Level 3"), 4, window);
                GameElements.Fiende = new List<Fiender>();
                Random random = new Random();
                Texture2D tmpsprite = content.Load<Texture2D>("Images/Enemies/Predator");
                for (int i = 0; i < 5; i++)
                {
                    int rndX = random.Next(window.get_ClientBounds().Width / 2, window.get_ClientBounds().Width - tmpsprite.get_Width());
                    int rndY = random.Next(0, window.get_ClientBounds().Height - tmpsprite.get_Height());
                    Predator temp = new Predator(tmpsprite, (float)rndX, (float)rndY);
                    GameElements.Fiende.Add(temp);
                }
                tmpsprite = content.Load<Texture2D>("Images/Enemies/mina");
                for (int i = 0; i < 5; i++)
                {
                    int rndX = random.Next(window.get_ClientBounds().Width / 2, window.get_ClientBounds().Width - tmpsprite.get_Width());
                    int rndY = random.Next(0, window.get_ClientBounds().Height - tmpsprite.get_Height());
                    Mine temp2 = new Mine(tmpsprite, (float)rndX, (float)rndY);
                    GameElements.Fiende.Add(temp2);
                }
                GameElements.printText = new Utskrifter(content.Load<SpriteFont>("Font1"));
                GameElements.guldMyntSprite = content.Load<Texture2D>("Images/Powerups/SpelMynt");
                GameElements.SuperskeppSprite = content.Load<Texture2D>("Images/Powerups/PowerUp");
                GameElements.PenetratingbulletsSprite = content.Load<Texture2D>("Images/Powerups/PowerUp2");
            }
    
            public static GameElements.State MenyUpdate(GameTime gameTime)
            {
                return (GameElements.State)GameElements.meny.Update(gameTime);
            }
    
            public static void MenyDraw(SpriteBatch spriteBatch)
            {
                GameElements.bakgrund.Draw(spriteBatch);
                GameElements.meny.Draw(spriteBatch);
            }
    
            public static GameElements.State RunUpdate(ContentManager content, GameWindow window, GameTime gameTime)
            {
                GameElements.bakgrund.Update(window);
                GameElements.player.Update(window, gameTime);
                foreach (Fiender f in GameElements.Fiende.ToList<Fiender>())
                {
                    foreach (Bullet b in GameElements.player.AntSkott.ToList<Bullet>())
                    {
                        if (f.CheckCollision(b))
                        {
                            f.Liv = false;
                            GameElements.player.poäng++;
                            if (!GameElements.player.PenetratingBullets)
                            {
                                GameElements.player.AntSkott.Remove(b);
                            }
                            else if (GameElements.player.PenetratingBullets)
                            {
                                if (gameTime.get_TotalGameTime().TotalSeconds > GameElements.player.PenetratingBulletsTime + 2.0)
                                {
                                    GameElements.player.PenetratingBullets = false;
                                }
                            }
                        }
                    }
                    if (f.Liv)
                    {
                        if (f.CheckCollision(GameElements.player))
                        {
                            GameElements.playerLiv--;
                            GameElements.player.Liv = false;
                        }
                        f.Update(window);
                    }
                    else
                    {
                        GameElements.Fiende.Remove(f);
                    }
                    if (!f.FKoll)
                    {
                        GameElements.Fiende.Remove(f);
                        GameElements.playerLiv--;
                    }
                }
                if (GameElements.boss1.Liv)
                {
                    foreach (Bullet b in GameElements.player.AntSkott.ToList<Bullet>())
                    {
                        if (GameElements.boss1.CheckCollision(b))
                        {
                            GameElements.player.AntSkott.Remove(b);
                            GameElements.boss1Liv--;
                        }
                    }
                    GameElements.boss1.Update(window);
                }
                if (GameElements.boss1Liv == 0)
                {
                    GameElements.boss1.Liv = false;
                }
                GameElements.State result;
                if (!GameElements.boss1.Liv)
                {
                    GameElements.Reset(window, content);
                    result = GameElements.State.Menu;
                }
                else
                {
                    Random random = new Random();
                    int newMynt = random.Next(1, 200);
                    if (newMynt == 1)
                    {
                        int rndX = random.Next(0, window.get_ClientBounds().Width - GameElements.guldMyntSprite.get_Width());
                        int rndY = random.Next(0, window.get_ClientBounds().Height - GameElements.guldMyntSprite.get_Height());
                        GameElements.guldMynt.Add(new GuldMynt(GameElements.guldMyntSprite, (float)rndX, (float)rndY));
                    }
                    foreach (GuldMynt gc in GameElements.guldMynt.ToList<GuldMynt>())
                    {
                        if (gc.Liv)
                        {
                            gc.Update(gameTime);
                            if (gc.CheckCollision(GameElements.player))
                            {
                                GameElements.guldMynt.Remove(gc);
                                GameElements.player.Poäng++;
                            }
                        }
                        else
                        {
                            GameElements.guldMynt.Remove(gc);
                        }
                    }
                    Random rnd = new Random();
                    int newPowerup = rnd.Next(1, 300);
                    if (newPowerup == 1)
                    {
                        int rndX = rnd.Next(0, window.get_ClientBounds().Width - GameElements.SuperskeppSprite.get_Width());
                        int rndY = rnd.Next(0, window.get_ClientBounds().Height - GameElements.SuperskeppSprite.get_Height());
                        GameElements.SuperSkepp.Add(new Powerup(GameElements.SuperskeppSprite, (float)rndX, (float)rndY));
                    }
                    foreach (Powerup Power in GameElements.SuperSkepp.ToList<Powerup>())
                    {
                        if (Power.Liv)
                        {
                            Power.Update(gameTime);
                            if (Power.CheckCollision(GameElements.player))
                            {
                                GameElements.SuperSkepp.Remove(Power);
                                GameElements.player.SuperSkepp = true;
                                GameElements.player.SuperSkeppTime = gameTime.get_TotalGameTime().TotalSeconds;
                            }
                        }
                        else
                        {
                            GameElements.SuperSkepp.Remove(Power);
                        }
                    }
                    Random rnd2 = new Random();
                    int NewPowerup = rnd2.Next(1, 300);
                    if (NewPowerup == 1)
                    {
                        int rndX = rnd2.Next(0, window.get_ClientBounds().Width - GameElements.PenetratingbulletsSprite.get_Width());
                        int rndY = rnd2.Next(0, window.get_ClientBounds().Height - GameElements.PenetratingbulletsSprite.get_Height());
                        GameElements.PenetratingBullets.Add(new Powerup(GameElements.PenetratingbulletsSprite, (float)rndX, (float)rndY));
                    }
                    foreach (Powerup P in GameElements.PenetratingBullets.ToList<Powerup>())
                    {
                        if (P.Liv)
                        {
                            P.Update(gameTime);
                            if (P.CheckCollision(GameElements.player))
                            {
                                GameElements.PenetratingBullets.Remove(P);
                                GameElements.player.PenetratingBullets = true;
                                GameElements.player.PenetratingBulletsTime = gameTime.get_TotalGameTime().TotalSeconds;
                            }
                        }
                        else
                        {
                            GameElements.PenetratingBullets.Remove(P);
                        }
                    }
                    if (!GameElements.player.Liv || GameElements.playerLiv == 0)
                    {
                        GameElements.Reset(window, content);
                        result = GameElements.State.Menu;
                    }
                    else
                    {
                        result = GameElements.State.Run;
                    }
                }
                return result;
            }
    
            public static void RunDraw(SpriteBatch spriteBatch)
            {
                GameElements.boss1.Draw(spriteBatch);
                GameElements.bakgrund.Draw(spriteBatch);
                GameElements.player.Draw(spriteBatch);
                foreach (Fiender f in GameElements.Fiende)
                {
                    f.Draw(spriteBatch);
                }
                foreach (GuldMynt gc in GameElements.guldMynt)
                {
                    gc.Draw(spriteBatch);
                }
                foreach (Powerup Power in GameElements.SuperSkepp)
                {
                    Power.Draw(spriteBatch);
                }
                foreach (Powerup p in GameElements.PenetratingBullets)
                {
                    p.Draw(spriteBatch);
                }
                GameElements.printText.Print("Points:" + GameElements.player.poäng, spriteBatch, 0, 0);
                GameElements.printText.Print("Boss Liv:" + GameElements.boss1Liv, spriteBatch, 680, 0);
                GameElements.printText.Print("Liv:" + GameElements.playerLiv, spriteBatch, 0, 20);
            }
    
            public static GameElements.State HighScoreUpdate()
            {
                GameElements.State result;
                if (Keyboard.GetState().IsKeyDown(27))
                {
                    result = GameElements.State.Menu;
                }
                else
                {
                    result = GameElements.State.Highscore;
                }
                return result;
            }
    
            public static void HighScoreDraw(SpriteBatch spriteBatch)
            {
            }
    
            private static void Reset(GameWindow window, ContentManager content)
            {
                GameElements.boss1Liv = 3;
                GameElements.playerLiv = 1;
                GameElements.boss1.Liv = true;
                GameElements.player.Reset(0f, 200f, 2.5f, 4.5f);
                GameElements.Fiende.Clear();
                Random random = new Random();
                Texture2D tmpsprite = content.Load<Texture2D>("Images/Enemies/Predator");
                for (int i = 0; i < 5; i++)
                {
                    int rndX = random.Next(window.get_ClientBounds().Width / 2, window.get_ClientBounds().Width - tmpsprite.get_Width());
                    int rndY = random.Next(0, window.get_ClientBounds().Height - tmpsprite.get_Height());
                    Predator temp = new Predator(tmpsprite, (float)rndX, (float)rndY);
                    GameElements.Fiende.Add(temp);
                }
                tmpsprite = content.Load<Texture2D>("Images/Enemies/mina");
                for (int i = 0; i < 5; i++)
                {
                    int rndX = random.Next(window.get_ClientBounds().Width / 2, window.get_ClientBounds().Width - tmpsprite.get_Width());
                    int rndY = random.Next(0, window.get_ClientBounds().Height - tmpsprite.get_Height());
                    Mine temp2 = new Mine(tmpsprite, (float)rndX, (float)rndY);
                    GameElements.Fiende.Add(temp2);
                }
            }
    
            public static GameElements.State LevelsUpdate(GameTime gameTime)
            {
                return (GameElements.State)GameElements.levels.Update(gameTime);
            }
    
            public static void LevelsDraw(SpriteBatch spritebatch)
            {
                GameElements.bakgrund.Draw(spritebatch);
                GameElements.levels.Draw(spritebatch);
            }
        }
    }
    

    【讨论】:

    • 代表我的朋友非常感谢!我安装了 .NET Reflector,但不太了解它的作用,我仍然对编程中的大部分内容有非常基本的了解。再次感谢您的帮助! :)
    • 没有问题。祝您项目顺利!如果您对此感到满意,请将其标记为答案。
    • @Martin 我也面临同样的问题,请您多解释一下如何恢复我的课程文件?
    • @UmangPatwa 抱歉,我离开了一段时间,错过了这个问题。如果您还没有弄清楚这一点,您可以安装一个 .NET 反汇编程序来反编译 .net 程序集,只要这些程序集没有签名。你可以试试 ILSpy,如果你卡在某个地方,请告诉我。
    • 如果 dll 被损坏的文件覆盖怎么办,dll 仍然会使用损坏的文件进行编译,但反汇编时它也显示为空白.. 这是一个糟糕的 Visual Studio 体验!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-02
    • 1970-01-01
    • 2018-12-20
    相关资源
    最近更新 更多