2013-11-25 4 views
5

Это простой вопрос, но я не мог найти ответ нигде.Визуализация игры в XNA после написания кода консоли C#

Я новичок в программировании, и я написал полную доску игры на C#. Я думал представить его с XNA. Я бы хотел, чтобы в игре было открыто простое консольное приложение (которое у меня уже есть) и визуализация игры.

Моей идеей было бы позволить игроку сыграть свою очередь перед отправкой данных в окно XNA и заставить его прочитать эти данные и соответственно обновить их. Окно XNA не нужно ничего делать, кроме простого получения данных и обновления его графики. Я просто хочу знать, возможно ли это, если есть более простой способ сделать это, и если я должен использовать приложение формы Visual Studio Windows, а не XNA.

Заранее спасибо.

+0

Игра XNA (если она отличается от класса) должна иметь возможность доступа к «публичным» делегированным переменным консольного приложения. Получив это, метод draw может напрямую рисовать ваши изображения в зависимости от состояния позиции.Наконец, метод 'update' мог видеть, началась ли игра, закончилась и кто выиграл. Как и другие подобные вещи. Мона. – Monacraft

ответ

0

Это может работать для того, что вы хотите сделать:

Начните с создания нового проекта XNA.

Затем выполните следующие действия:

В Microsoft Visual C# щелкните правой кнопкой мыши проект в обозревателе решений. Затем нажмите «Свойства», а на вкладке «Приложение» выберите «Консольное приложение» в качестве типа вывода.

Я предполагаю, что вы знаете основы XNA.

Теперь в цикле обновления вы можете использовать Console.ReadLine(), чтобы получить пользовательский ввод с консоли, а затем обновить все, что вам нужно.

К сожалению, этого недостаточно для ваших нужд, вам придется пойти на компромиссы. Вы должны добавить игровые классы Board, которые вы внесли в проект XNA, и немного приспособить их для работы в XNA. Вы сможете получить вход от пользователя, но вы не сможете напрямую выводить результаты с консоли на XNA. Console.WriteLine() также доступен, поэтому вы сможете выводить текст в обычном режиме.

Как только вы доберетесь до этого, вы должны начать видеть, где проблемы лежат в зависимости от того, что требует ваш код с консоли. Не стесняйтесь публиковать снова здесь с этими проблемами, как только вы знаете, какими они могут быть, и я помогу придумать решение.

Это, похоже, единственная реальная выгода от этого - это Console.ReadLine(), чтобы получить вход. Кроме этого, код будет очень похож на обычный проект XNA.

0

Итак, я создал класс, в который вы можете ввести буквы верхнего и нижнего регистров пробелов и обратного пространства, которые выглядят так.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using Microsoft.Xna.Framework; 
using Microsoft.Xna.Framework.Audio; 
using Microsoft.Xna.Framework.Content; 
using Microsoft.Xna.Framework.GamerServices; 
using Microsoft.Xna.Framework.Graphics; 
using Microsoft.Xna.Framework.Input; 
using Microsoft.Xna.Framework.Media; 

namespace TileGame 
{ 
    class KeyboardEntering 
    { 
     private KeyboardState ksCurr; 
     private KeyboardState ksPrev; 

     public KeyboardEntering() 
     { 

     } 

     public string Update(string enterString) 
     { 
      string exitString = enterString; 
      ksCurr = Keyboard.GetState(); 
      if (!IsPressed(Keys.LeftShift) && !IsPressed(Keys.RightShift)) 
      { 
       if (OnRelease(Keys.A)) exitString += "a"; 
       if (OnRelease(Keys.B)) exitString += "b"; 
       if (OnRelease(Keys.C)) exitString += "c"; 
       if (OnRelease(Keys.D)) exitString += "d"; 
       if (OnRelease(Keys.E)) exitString += "e"; 
       if (OnRelease(Keys.F)) exitString += "f"; 
       if (OnRelease(Keys.G)) exitString += "g"; 
       if (OnRelease(Keys.H)) exitString += "h"; 
       if (OnRelease(Keys.I)) exitString += "i"; 
       if (OnRelease(Keys.J)) exitString += "j"; 
       if (OnRelease(Keys.K)) exitString += "k"; 
       if (OnRelease(Keys.L)) exitString += "l"; 
       if (OnRelease(Keys.M)) exitString += "m"; 
       if (OnRelease(Keys.N)) exitString += "n"; 
       if (OnRelease(Keys.O)) exitString += "o"; 
       if (OnRelease(Keys.P)) exitString += "p"; 
       if (OnRelease(Keys.Q)) exitString += "q"; 
       if (OnRelease(Keys.R)) exitString += "r"; 
       if (OnRelease(Keys.S)) exitString += "s"; 
       if (OnRelease(Keys.T)) exitString += "t"; 
       if (OnRelease(Keys.U)) exitString += "u"; 
       if (OnRelease(Keys.V)) exitString += "v"; 
       if (OnRelease(Keys.W)) exitString += "w"; 
       if (OnRelease(Keys.X)) exitString += "x"; 
       if (OnRelease(Keys.Y)) exitString += "y"; 
       if (OnRelease(Keys.Z)) exitString += "z"; 
      } 

      if (IsPressed(Keys.LeftShift) || IsPressed(Keys.RightShift)) 
      { 
       if (OnRelease(Keys.A)) exitString += "A"; 
       if (OnRelease(Keys.B)) exitString += "B"; 
       if (OnRelease(Keys.C)) exitString += "C"; 
       if (OnRelease(Keys.D)) exitString += "D"; 
       if (OnRelease(Keys.E)) exitString += "E"; 
       if (OnRelease(Keys.F)) exitString += "F"; 
       if (OnRelease(Keys.G)) exitString += "G"; 
       if (OnRelease(Keys.H)) exitString += "H"; 
       if (OnRelease(Keys.I)) exitString += "I"; 
       if (OnRelease(Keys.J)) exitString += "J"; 
       if (OnRelease(Keys.K)) exitString += "K"; 
       if (OnRelease(Keys.L)) exitString += "L"; 
       if (OnRelease(Keys.M)) exitString += "M"; 
       if (OnRelease(Keys.N)) exitString += "N"; 
       if (OnRelease(Keys.O)) exitString += "O"; 
       if (OnRelease(Keys.P)) exitString += "P"; 
       if (OnRelease(Keys.Q)) exitString += "Q"; 
       if (OnRelease(Keys.R)) exitString += "R"; 
       if (OnRelease(Keys.S)) exitString += "S"; 
       if (OnRelease(Keys.T)) exitString += "T"; 
       if (OnRelease(Keys.U)) exitString += "U"; 
       if (OnRelease(Keys.V)) exitString += "V"; 
       if (OnRelease(Keys.W)) exitString += "W"; 
       if (OnRelease(Keys.X)) exitString += "X"; 
       if (OnRelease(Keys.Y)) exitString += "Y"; 
       if (OnRelease(Keys.Z)) exitString += "Z"; 
      } 
      if (OnRelease(Keys.Space)) exitString += " "; 

      if (OnRelease(Keys.Back)) 
      { 
       if(exitString.Length != 0) exitString = exitString.Substring(0, exitString.Length - 1); 
      } 

      ksPrev = ksCurr; 
      return exitString; 
     } 

     public bool OnRelease(Keys key) 
     { 
      if (ksCurr == null) return false; 
      if (ksPrev == null) return false; 
      return ksCurr.IsKeyUp(key) && ksPrev.IsKeyDown(key); 
     } 
     public bool IsPressed(Keys key) 
     { 
      if (ksCurr == null) return false; 
      return ksCurr.IsKeyDown(key); 
     } 
    } 
} 

Затем, чтобы использовать это я делаю KeyboardEntering объекта и установить его на КЕ и обновление выглядит следующим образом

drawStringTest = ke.Update (drawStringTest);

тогда я просто рисую строку методом DrawString. Я надеюсь, что люди найдут это полезным. Я знаю, что это старый пост, а XNA - это то, чем он был, но все, что хаха.

Смежные вопросы