2014-02-25 52 views
0

我制作了一个hang子手游戏,并且希望能够在您赢/输后重启它,而不是每次都要手动重启程序。应用程序不存在于C#控制台中,我想重新启动控制台

我在互联网上看到'应用程序',可以用来重新启动控制台。但是,它表示应用程序不存在。

Close(); 
System.Diagnostics.Process.Start(Application.ExecutablePath); 

请帮帮我!

+3

难道你不能只是添加一些代码来重置应用程序,而不是实际重新启动它? – JLe

+1

我想你听说过循环和东西?为什么需要重启程序有正当理由吗? –

+0

请参阅Patrick关于如何获得执行/入口程序集的答案,但正如JLe所说,这不是解决实际问题的好方法。即你不应该每次都重新开始游戏。 考虑让你的状态重置为知道状态或将你的状态封装在单独的对象等方法 – Andre

回答

1

你可以找到它在here

您需要包括System.Windows.Forms组件,并添加using

using System.Windows.Forms 

但对于控制台应用程序我宁愿使用this(当你的控制台组件) :

System.Reflection.Assembly.GetExecutingAssembly().Location 

像安德烈说的评论,你会更好地使用Assembly.GetEntryAssembly()因为它获得了第一个被调用的程序集(这当然是控制台应用程序中的可执行文件)

而且,与先前已删除的答案类似,先重新打开,然后关闭应用程序。

+1

我同意。绝对不要在WinFor上添加依赖关系来获取组装路径。另外看看Assembly.GetEntryAssembly() – Andre

+0

@Andre:更新了答案。谢谢! –

+0

好吧,我尝试添加使用System.Windows.Forms,并且我得到错误'类型或命名空间名'Windows'不存在于命名空间'系统'中(您是否缺少程序集引用?“ – FatPoo2

0

我不认为你真的需要重新启动你的控制台应用程序来重新开始你的游戏。这里是一个可能的游戏重新启动的情况,可用于:

class Program 
{ 
    static void Main(string[] args) 
    { 
     Game game = new Game(); 

     Menu menu = new Menu(game); 

     game.Finished += menu.AskAndRun; 

     menu.Welcome(); 
    } 
} 

class Menu 
{ 
    public readonly IRunnable runnable; 

    public Menu(IRunnable runnable) 
    { 
     this.runnable = runnable; 
    } 

    public void Welcome() 
    { 
     Console.WriteLine("Welcome, Player!"); 

     AskAndRun(); 
    } 

    public void AskAndRun() 
    { 
     Console.WriteLine("\nTo play a new game, press [ENTER]"); 

     Console.ReadLine(); 

     Console.Clear(); 

     runnable.Run(); 
    } 
} 

interface IRunnable 
{ 
    void Run(); 
} 

class Game : IRunnable 
{ 
    public event Action Finished; 

    public void Run() 
    { 
     Console.WriteLine("Game started here..."); 

     Console.WriteLine("Oops! Game finished already"); 

     if (Finished != null) 
     { 
      Finished(); 
     } 
    } 
} 

正如你所看到的,Game类是从现在Menu类处理重启的逻辑分离。现在推出新功能如退出和计算已开始游戏的数量是微不足道的。

请注意Menu不依赖于Game这一事实。这取决于IRunnable,这将帮助您更改Game,测试Menu并无痛地引入新功能。

相关问题