下高井戸拡張モジュールソース解説


最終更新: Mon Sep 12 15:31:23 2011


 ここでは、(株)ピーデーが開発した推理ゲーム「1980オタクのヒデオ」の拡張モジュール下高井戸のソースコード情報を提供しております。


ソリューション全体のスナップショット

 実はビルドして実行するのがやっかいな側面があるので、ファイルの説明だけではなく、ソリューション全体のそのものズバリを公開しておきます。Visual Studio 2010用です。

ソース解説その1 (AngfRuntime.xml)

<?xml version="1.0" encoding="utf-8" ?>
<root xmlns="http://angf.autumn.org/std001">
  <module>Shimotakaido.dll</module>
  <startupModule>0</startupModule>
  <name>下高井戸・拡張モジュール</name>
  <id>{547abf63-26a1-4309-a1b5-a243c11877ee}</id>
  <shareWorld>{3172E35B-03D2-4e5a-AC8D-ED278F80B264}</shareWorld>
  <require></require>
</root>

ソース解説その2 (MyModule.cs)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ANGFLib;
using EightyCommon;

namespace Shimotakaido
{
    // モジュールは、ANGFLibのModuleクラスを継承する
    public class MyModule : Module
    {
        // 識別用のユニークな番号
        public override string Id { get { return "{ca55cf81-9626-4684-adad-7984db535e2b}"; } }
        // モジュールが提供する場所の一覧
        public override Place[] GetPlaces() { return new Place[] { new Place科学要塞ソフトウェア研究所() }; }
        // 登場人物の実体を用意する
        public static Person ソフ殿 = new Personソフ殿();
        // アイテムその1を用意する (消費アイテム扱い)
        public static EightCommonItem Itemソフ殿だい = new EightCommonItemTemplate()
        {
            // 識別用のユニークな番号
            Id = "{b1674c3c-f251-463e-92cb-e83c0befc2c7}",
           // 説明文。アイテム選択時に表示される
            BaseDescription = "ソフ殿が大活躍する漫画らしいがぜんぜん面白くないぞ。",
            // 価格。ただし、モジュール次第でどう使われるか分からない
            Price = 500,
            // 一度に最大で持てる個数
            Max = 1,
            // 名前
            Name = "ソフ殿だい",
            // 対象性別 (Nutralは男女両用)
            性別 = Sex.Nutral,
            消費Sub = () =>
                {
                    // 独白を語らせる
                    DefaultPersons.独白.Say("僕はソフ殿だいを読んでみた。");
                    DefaultPersons.独白.Say("でも、面白くなかった。");
                    // 時間を10分進める
                    State.GoTime(10);
                    // falseを返すと消費しても無くならないことを示す
                    return false;
                }
        };
        // アイテムその2を用意する (アクセサリ扱い)
        public static EightCommonItem Itemソフ殿バッチ = new EightCommonItemTemplate()
        {
            Id = "{ec53514a-19fe-4a64-9407-67f811bc80f4}",
            BaseDescription = "ソフ殿が描かれたバッジだけどかっこわるいぞ",
            Price = 100,
            Max = 1,
            Name = "ソフ殿バッチ",
            性別 = Sex.Nutral,
            // 装備できる部位を示すbool配列
            AvailableEquipMap = EightyCommonConstants.アクセ,
            // 同時に装備される部位を示すbool配列
            SameTimeEquipMap = EightyCommonConstants.アクセ,
        };
        // 登場人物一覧をシステムに提供する
        public override Person[] GetPersons() { return new Person[] { ソフ殿 }; }
        // アイテム一覧をシステムに提供する
        public override Item[] GetItems() { return new Item[] { Itemソフ殿だい, Itemソフ殿バッチ }; }
    }
    // 人物のクラスを定義
    public class Personソフ殿 : Person
    {
        public Personソフ殿() : base("{7270ad82-a021-47c4-b9e1-ecf0f92a0e25}", "ソフ殿", Sex.Male) { }
    }
    // 場所「科学要塞ソフトウェア研究所」を定義
    public class Place科学要塞ソフトウェア研究所 : Place
    {
        // 識別用のユニークな番号
        public override string Id { get { return "{2ccfc203-d605-419f-a22e-c03bddc6b52d}"; } }
        // 名前
        public override string HumanReadableName { get { return "科学要塞ソフトウェア研究所"; } }
        // 存在位置 (駅の座標は情報メニューのトータルレポートで調べる。ただしkm単位なのでm単位に換算して書き込む)
        public override Position GetDistance() { return new Position() { x = -11900, y = -7880 }; }
        // 1980世界でのみ見える
        public override bool Visible { get { return EightyCommonGeneral.Is1980World(); } }
        // 見るを選んだときに実行されるメソッド
        private bool see()
        {
            // 独白を語らせる
            DefaultPersons.独白.Say("僕は立派な施設を見あげた。");
            DefaultPersons.独白.Say("でもよく見るとベニヤ板にペンキで描いてあるだけだった。");
            DefaultPersons.独白.Say("ベニヤ板の向こう側を見ると、ボロ屋が1つあった。");
            DefaultPersons.独白.Say("ボロ屋には科学要塞ソフトウェア公衆便城と書いてあった。");
            // ソフ殿に語らせる
            MyModule.ソフ殿.Say("我が科学要塞ソフトウェア研究所に何か御用かな。わしはソフトの神様ソフ殿じゃ。");
            MyModule.ソフ殿.Say("あ、こっちの看板は見ちゃダメ!");
            DefaultPersons.独白.Say("ソフ殿は慌ててボロ屋を隠した。");
            // Itemソフ殿だいを持っているか?
            if (State.GetItemCount(MyModule.Itemソフ殿だい) == 0)
            {
                // 所持数0の場合のみ
                MyModule.ソフ殿.Say("仕方がないなあ。君にはいいものをあげよう。");
                // アイテムをゲットだぜ
                State.GetItem(MyModule.Itemソフ殿だい);
                DefaultPersons.独白.Say("僕は、ソフ殿だい、というコミックをもらった。");
                MyModule.ソフ殿.Say("これを上げるから内緒だよ。じゃあね。");
            }
            else if (State.GetItemCount(MyModule.Itemソフ殿バッチ) == 0)
            {
                // 所持数0の場合のみ
                MyModule.ソフ殿.Say("仕方がないなあ。特別にいいものをあげよう。");
                State.GetItem(MyModule.Itemソフ殿バッチ);
                DefaultPersons.独白.Say("僕は、ソフ殿バッチ、というアクセサリをもらった。");
                MyModule.ソフ殿.Say("付けて歩くとかっこいいよ。じゃあね。");
            }
            State.GoTime(10);
            // ダミーなので返す値に意味は無い
            return true;
        }
        // コマンドを追加する
        public override bool ConstructMenu(List<SimpleMenuItem> list)
        {
            list.Add(new SimpleMenuItem("見る", see));
            // デフォルトのUIをキャンセルして独自実装する場合はfalseを返す。
            // falseを返すとOnMenuメソッドが呼ばれる
            return true;
        }
    }
}

注意


PIEDEY LINK BANNER
本サイトに関するお問い合わせ先: webmaster@piedey.co.jp
ソフトウェアに関するお問い合わせ先: support@piedey.co.jp
作成: 株式会社ピーデー・川俣 晶/autumn@piedey.co.jp