【问题标题】:Visualizing a game in XNA after having written the C# console code编写 C# 控制台代码后在 XNA 中可视化游戏
【发布时间】:2013-12-10 08:26:07
【问题描述】:

这是一个简单的问题,但我在其他任何地方都找不到答案。

我是编程新手,我用 C# 编写了一个完整的棋盘游戏。我正在考虑用 XNA 来代表它。我希望游戏能够打开简单的控制台应用程序(我已经拥有)和游戏可视化。

我的想法是让玩家在将数据发送到 XNA 窗口之前轮到他玩,让它读取该数据并相应地更新它的图像。 XNA 窗口除了简单地接收数据并更新它的图形之外不需要做任何其他事情。我只是想知道这是否可能,是否有更简单的方法可以做到这一点,以及我是否应该使用 Visual Studio Windows 窗体应用程序而不是 XNA。

提前致谢。

【问题讨论】:

  • XNA 游戏(如果它是不同的类)应该能够访问控制台应用程序的public 委托变量。接收到这个,draw 方法可以直接根据位置的状态绘制你的图像。最后update 方法可以查看游戏是否开始、结束以及谁赢了。以及其他类似的事情。莫娜。

标签: c# visual-studio xna console


【解决方案1】:

所以我做了一个类,你可以用大写和小写字母输入空格和退格,看起来像这样。

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 对象并将其设置为 ke,更新看起来像这样

drawStringTest = ke.Update(drawStringTest);

然后我只需使用 DrawString 方法绘制字符串。我希望人们会发现这很有帮助。我知道这是一个旧帖子,XNA 已经不是以前的样子了,但无论如何哈哈。

【讨论】:

    【解决方案2】:

    这可能适用于您想要做的事情:

    首先创建一个新的 XNA 项目。

    然后执行以下操作:

    在 Microsoft Visual C# 中,在解决方案资源管理器中右键单击您的项目。然后点击“属性”并在“应用程序”选项卡中选择“控制台应用程序”作为您的输出类型。

    我假设您了解 XNA 的基础知识。

    现在,在更新循环中,您可以使用 Console.ReadLine() 从控制台获取用户输入,然后更新您需要的任何内容。

    很遗憾,仅此一项不足以满足您的需求,您必须做出一些妥协。您应该将您制作的棋盘游戏类添加到 XNA 项目中,并稍微调整它们以在 XNA 中工作。您将能够从用户那里获得输入,但不能直接从控制台向 XNA 提供输出。 Console.WriteLine() 也可用,因此您将能够照常输出文本。

    一旦你走到这一步,你应该开始根据你的代码对控制台的要求来了解问题所在。一旦您知道这些问题可能是什么,请随时在此处再次发布这些问题,我将帮助提出解决方案。

    也就是说,这样做的唯一真正好处似乎是使用 Console.ReadLine() 来获取输入。除此之外,代码将与常规 XNA 项目完全相同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-10
      • 2023-04-11
      • 1970-01-01
      相关资源
      最近更新 更多