2014-02-25 95 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並無痛地引入新功能。

相關問題