講座

それからのPython 10

はじめに

  • その9のつづき
  • 簡単なスペルの仕組みをつくってみる
  • 4部作のうちの4回目
  • ついに各スペルの実装へ

湧き水

お待たせしました!個別のスペル処理です。まず湧き水を見てみましょう。

続きを読む →

それからのPython 9

はじめに

  • その8のつづき
  • 簡単なスペルの仕組みをつくってみる
  • 4部作のうちの3回目・Python共通編
  • クラスを活用する

スペル情報クラス

スペル情報クラスです。BuildingInfoやUnitInfoのスペル版のようなイメージで、
このクラスを通してスペルのいろいろな情報を取得することができるようにします。

続きを読む →

それからのPython 8

はじめに

  • その7のつづき
  • 簡単なスペルの仕組みをつくってみる
  • 4部作のうちの2回目・Python準備編
  • オブジェクト
  • リスト操作

Pythonファイル

Python側のファイル構成はいつもの感じです。
EntryPoints\CvEventInterface.pyはいずれかのKujira MODから使いまわします。
忘れてしまった方はこちらにも置いてあります。

└─kujira_promospell
    └─Assets
        ├─Python
        │  ├─KujiraEventManager.py
        │  │
        │  └─Entrypoints
        │      └─CvEventInterface.py
        └─XML
            ├─Text
            │  └─Text_Kujira.xml
            └─Units
                └─CIV4PromotionInfos.xml

続きを読む →

それからのPython 7

はじめに

  • その6のつづき
  • 簡単なスペルの仕組みをつくってみる
  • 4部作のうちの1回目・XML編

設計しよう

実際のMODの例として、簡単なスペルをつくっていきたいと思います。
簡単のために、以下の仕様でつくることにします。

  • スペルと昇進を1対1で対応させる
  • 発動条件は昇進を取得したとき一回きりとする
  • スペル昇進を取れるのは火器ユニットとする
  • 具体的なスペル効果は以下の3種類とする
  • 湧き水:砂漠が平原に変化する
  • 毒散布:周囲1マスの敵対ユニットに弱体化昇進『毒』(戦闘力-20%)を与える
  • 火炎幕:周囲1マスの敵対ユニットに最大HPの10%のダメージを与える
    ただしこれによって最大HPの60%を切ることはないようにする
  • 湧き水において砂漠以外で発動したときは不発になるが、昇進は戻ってこないようにする

続きを読む →

付録:継承2

はじめに 付録:継承1のつづき 続・継承について 今回は理論回です。この回に出てくるコードはすべてMODではなく ただのPythonプログラムになっ

続きを読む →

付録:継承1

はじめに 継承について 今回は理論回です。この回に出てくるコードはすべてMODではなく ただのPythonプログラムになっていますので、paiza

続きを読む →

それからのPython 6

はじめに

  • その5のつづき
  • もっともっとクラスをつかう
  • 別ファイルからもつかう

コードを読む

Civ4からあらかじめ提供されているクラスはまだまだあります。
今回はその中から比較的簡単で読みやすいクラスを例に
実際にコードを読み解いてみたいと思います。

続きを読む →

付録:getUnitList()

はじめに それからのPython その6の付録 全ユニットを列挙するには 読む 早速 C:\Program Files (x86)\CYBERFRONT\Sid Meier's Civilization 4(J)\Beyond the Sword(J)\Assets\Python\Pyhelpers.py 1 を開いて、 getUnitList()というメソッ

続きを読む →

それからのPython 5

はじめに

  • その4のつづき
  • もっとクラスをつかう
  • 変数のスコープ

インスタンスの中のインスタンス

インスタンス変数にクラス型の変数を使う例を見てみましょう。

題材は、ちょっと賢い建造物クラスKujiraBuildingと、
それを用いて
《建造された都市で生産されたユニットだけでなく、
その都市で立ち止まったユニットにも衛生兵Ⅰを付与する赤十字》
をつくることです。

続きを読む →

それからのPython 4

はじめに

提供されているクラスを探訪してみる

新しいクラスをつくる体験をしたところで、
既存のクラスを使ってみる体験もしてみます。
APIリファレンスを見ながら、すすめていきましょう。

左上フレームにリストされているのが、クラス名(型名)です。
ためしにCyCityをクリックしてみましょう。
すると、右フレームにCyCity型のインスタンスメソッドがずらずらーっと出てきます。
CyCity型のメソッドだけでもずいぶん数があります。
流し読みしつつ、気になったのを見ていきましょう。

なお、色付き文字になっているのはです。例えば、
BOOL - ブール型(真と偽の2択)
INT - 数値型
VOID - なし(戻り値を返さないもの)
茶色 - なにかのID(基本的なふるまいはINTと同じ)
緑色 - クラス型
こんな具合です。

続きを読む →

それからのPython 3

はじめに

準備

kujira_classというMODを新しく作ります。

フォルダ構成

└─kujira_class
    └─Assets
        └─Python
            │─KujiraEventManager.py
            └─Entrypoints
                 └─CvEventInterface.py

続きを読む →

それからのPython 2

はじめに

  • その1のつづき
  • いろいろ表示してみる

-4000年

gc.getGame().getGameTurnYear()により現在の年を取得します。
これによって得られる値は数値型ですから、フォーマット文字列により埋め込んで
Unicode文字列を作り、表示してあげます。

コードはこうなります…

続きを読む →

それからのPython 1

はじめに

これは何か

これは、
「はじめてのPythonMOD」シリーズの続きです。
もうちょっとPythonの書き方について勉強して、
より思い通りに記述できるようになろう、というのが大きな目的です。

これは何でないか

これは、前シリーズよりもさらに技術的な解説、Pythonの文法の解説に偏重しています。
また、「はじめてのPythonMOD」程度のMOD制作経験を前提としています。
コピペですぐ動くコードはあまりないかもしれません。

続きを読む →

はじめてのPythonMOD 7

はじめに

  • その6のつづき
  • XMLとPythonの合わせ技・Python編

Python

残った効果「都市圏内をすべて草原化する」なんてことは
XMLではできません。Pythonで実装していきましょう。

構想

いつもどおり、「いつ・どういう条件で・何をするか」を明らかにする必要があります。
「建造物が建ったとき」「それが肥沃化の神殿であれば」まではすぐにわかります。
「都市圏内を草原化する」……都市圏内とは何でしょうか?

続きを読む →

はじめてのPythonMOD 6

はじめに

  • その5のつづき
  • XMLとPythonの合わせ技・XML編
  • あくまでPythonのチュートリアルなので、XMLの詳しい話にはあまり踏み入りません

構想

これまでは既存の動作を変更してばかりでした。
Pythonでしかできない効果を持った新しい建造物を作りましょう!
とりあえず"いつもの"を作ります。

└─kujira_fert
    └─Assets
        └─Python
            ├─KujiraEventManager.py
            └─Entrypoints
                 └─CvEventInterface.py

続きを読む →

はじめてのPythonMOD 5

はじめに

  • その4のつづき
  • リストと繰り返し
  • 他のイベント

今日のMOD

準備

例によってkujira_forというMODを作ります。
kujira_ifをフォルダごとコピーして、フォルダ名をリネームしましょう。

└─kujira_for
    └─Assets
        └─Python
            │─KujiraEventManager.py
            └─Entrypoints
                 └─CvEventInterface.py

構想

《建造物が建設されたとき、その建造物がダンならば、
 都市と同じタイル上にいる全ユニットに教練Ⅰと教練Ⅱを与えるMOD》
を作りましょう。
捕まえるイベントをいつもと変えているほか、ユニットへの操作を入れています。

バニラの建造物によくある
「この都市で生産されたユニットに教練Ⅰと教練Ⅱ」
との違いに注意してください。
今作ろうとしているのはダンが建設完了したその瞬間に
都市直上にいたユニットに影響を与える一回限りの即時的な効果です。

続きを読む →

はじめてのPythonMOD 4

はじめに

  • その3のつづき
  • その3でMODひとつしか作れなかったので応用編の別立て

もう少し先へ

前半戦たるその3では
《都市が建設されたとき、所有者の志向が防衛志向ならば、その都市のタイルに弓兵を3体即座に作成するMOD》
を作りました。少し拡張してみましょう。

「弓兵固定ではなく、時代に合わせた防衛ユニットが出るようにしたい」

と思ったとします。が、少々厄介です。
というのも、「時代に合わせた防衛ユニット」という表現があいまいなのです。
これをプログラムするには「どういう条件で」「何が起こるのか」を具体的に定めるところから始めないといけません。

続きを読む →

はじめてのPythonMOD 3

はじめに

準備

Pythonそのものの文法を確かめるのにいちいちCiv4を起動するのでは面倒なので、
小さなPythonプログラムを試せる環境を用意しましょう。
あなたのコンピュータにPythonをインストールしてもよいですし、
現代ではオンライン上で小さなプログラムを試せるサイトもいろいろあるので、
利用させてもらってもよいでしょう。
この記事ではpaiza.ioを使うことにします。
コード作成画面に入ったら、左上(緑)の言語選択ボタンからPython2を選択し、

print 1129

と入力して、「実行」ボタンを押します。
「出力」のところに1129と出ていればOKです。

続きを読む →

はじめてのPythonMOD 2

はじめに

  • その1のつづき
  • 条件分岐を使ってみる

準備

前回のkujiraMODをフォルダごとコピーしてリネーム、kujira_ifというMODを作ります。

└─kujira_if
    └─Assets
        └─Python
            │─KujiraEventManager.py
            └─Entrypoints
                 └─CvEventInterface.py

このようにフォルダごとコピーすることで、
あるMODをもとにした派生MODを作成することができます。

選り好みする図書館

前回は《都市が建設されたとき、その都市に図書館を建設するMOD》をつくりました。
しばらくプレイするとわかりますが、このMODは誰の都市か、首都かどうか、
などを区別せず、全都市に無差別に図書館を建設します。
それもそのはず、「都市が建設されたとき」以外の条件を付けていないからです。
これだと創造志向があまりにもかわいそうですし、
せめて自動建設は首都だけにして少しマイルドにできないでしょうか。

この制限を考慮に入れて、
《都市が建設されたとき、その都市が首都であれば、その都市に図書館を建設するMOD》
をつくっていきます。

続きを読む →

はじめてのPythonMOD 1

はじめに

これは何か

これは、
「PythonによるModding、やってみたいけどどこから手を付けたら…」
という声にお応えして、CvEventManager.pyを編集して
XMLだけではできないちょっと面白いことをやってみようという企画です。
XMLで文明やユニットをいじったことがあればよりすんなり入り込めます。

これは何でないか

これは、技術的な解説、PythonによるModdingに親しむ、
という視点での説明に偏重しています。
あなたが作りたいMODへの直接的なヒントやコピペですぐ動くコードは
あまりないかもしれません。

続きを読む →