سؤال

خلال الأسبوع الماضي كنت أعمل على roguelike لعبة في C ++ جنبا إلى جنب مع صديق. معظمهم تعلم اللغة أيضا.

أنا استخدم:

  • pdcurses.
  • ويندوز 7
  • Visual Studio C ++

لإخراج wchar_tأينما أردت في وحدة التحكم. لقد نجحت في otuputting بعض أحرف Unicode مثل u263b (☻)، ولكن البعض الآخر مثل u2638 (☸) سوف ينتهي فقط حسب علامات استفهام (؟).

إليك التعليمات البرمجية ذات الصلة التي أستخدمها للإخراج.

// Container of room information

struct RoomInfo
{
    wchar_t * layout;
    int width;
    int height;
};

// The following function builds RoomInfo 

RoomInfo Room::examine(IActor * examinor)
{
    RoomInfo ri;
    ri.width = this->width;
    ri.height = this->height;
    ri.layout = new wchar_t[height * width];
    for(unsigned int y = 0; y < height; y++)
    {
        for(unsigned int x = 0; x < width; x++)
        {
            ri.layout[y*width + x] = L'\u263B'; // works
            //ri.layout[y*width + x] = L'\u2638'; // will not work
        }
    }
}

// The following function outputs RoomInfo

void CursesConsole::printRoom(RoomInfo room)
{
    int w = room.width;
    int h = room.height;

    WINDOW * mapw = newwin(h, w, 1, 0);
    for(int y = 0; y < h; y++)
    {
        wmove(mapw, y, 0);
        for(int x = 0; x < w; x++)
        {
            int c = y*w + x;
            waddch(mapw, room.layout[c]);
        }
    }

    wrefresh(mapw);
    delwin(mapw);
}

أستطيع أن أسقط بالطبع مرة أخرى على شخصيات ANSI مملة. ولكن سيكون من الرائع حقا أن تلعب مجموعة Unicode كاملة من الشخصيات.

ليتم تلخيصه: كيف تتأكد من أن أحرف Unicode يتم إخراجها بشكل صحيح؟


يحرر:

حسنا، لذلك اكتشفت ترميزي يعمل بشكل صحيح. المشكلة هي أحتاج إلى إجبار المحطة على التبديل إلى وجه الخط الأكثر ثراء يونيكود. وبعد هل هناك طريقة عبر منصة للقيام بذلك؟ هل هناك حتى ويندوز طريقة محددة للقيام بذلك؟

هل كانت مفيدة؟

المحلول

المشكلة هي أنني بحاجة إلى إجبار المحطة على التبديل إلى وجه الخط الأكثر ثراء يونيكود. هل هناك طريقة عبر منصة للقيام بذلك؟ هل هناك حتى ويندوز طريقة محددة للقيام بذلك؟

كان لدي نظرة عن هذا، ولكن لم أتمكن من العثور على مكالمة Windows API للقيام بذلك (والتي قد تعني فقط أنني لم أجدها، بالطبع). لا أتوقع أن أجد طريقة عبر منصة للقيام بذلك.

أفضل حل يمكنني التفكير فيه هو إطلاق وحدة التحكم باستخدام شيدت خصيصا شل رابط (.lnk) ملف. إذا قرأت وثائق تنسيق الملفات, ، سترى أنه يسمح لك بتحديد خط.

لكن مشاكلك لا تنتهي هناك. يوفر تثبيت اللغة الغربية ل Windows وحدة التحكم Lucida., ، ولكن هذا الخط يوفر فقط مجموعة فرعية محدودة من الرمز الرمزي. أفترض أنه يمكنك إخراج / إدخال النص الياباني في وحدة التحكم على جهاز كمبيوتر يعمل بنظام Windows ياباني. كنت بحاجة إلى التحقق من ما هو متاح على نوافذ يابانية إذا كنت تريد التأكد من أنه سيعمل هناك.

يبدو أن Linux (Ubuntu، على الأقل) لديها دعم أفضل بكثير هنا، باستخدام UTF-8 وتوفير خط مع دعم جرفي واسع. لم أتحقق من Distrios الأخرى لمعرفة ما هي القصة الموجودة هناك، ولم تحقق من كيفية حل الخطوط في المحطة (سواء كان شيء X أو شيء جنوم أو أيا كان).

نصائح أخرى

من حيث المبدأ، يتم دعم جميع أحرف Unicode على وحدة التحكم. ربما تتعلق حقيقة أنك ترى علامات استفهام بدعم الخط لهذه الأحرف. حاول تحويل خط وحدة التحكم إلى شيء مع دعم Unicode جيد للغاية.

تحتاج إلى تعيين صفحة الرموز بشكل صحيح. هناك مقال جيد جدا حول هذا هنا: حلقة الوصل

على الرغم من أنه مفتاح كبير جدا، فقد تحاول استخدام وحدة تحكم بديلة، خاصة إذا كنت تقوم بعمل Roguelike. libtcod. هي مكتبة شعبية معتدلة، مكتوبة في C مع ربط C ++، والتي توفر وحدة تحكم ألوان كاملة يمكنك إعداد خطوطك والرسومات الحرارية. التي يجب أن تعطيك المزيد من المرونة بكثير من تعاليك مع ما يمنحك وحدة التحكم في Windows.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top