初めに
CodeColosseumはプレイヤーが人工知能(AI)を書き、2人のキャラクター同士で戦わせて勝敗を競うゲームです。
勝利条件はターン数最大1000の間で相手のHPを0にすること、もしくは1000ターン後により多くのHPが残っていることです。
リンク : http://codecolosseum.trap.games
ゲーム紹介
どのようなゲームかを軽く紹介します。
①対戦相手を選びます(別のキャラとも対戦できるので、最初は全弱を選ぶといいと思います)
②ステータスを設定し、スキルを作り、自分だけのキャラクターを作ります
名前や画像、スキル名なども自分で設定できます。(画像は自分で用意することもできます)
③どのタイミングでスキルを選択するのかを設計します。
この際、C言語に近い見た目のスクリプト言語"ChinoScript"で記述します。
④"サーバーに提出"を押すと、戦闘画面に映ります。
(場合によってはちょっと時間がかかります)
"さらに挑戦する"から別のキャラと対戦することもできます
特定のキャラに勝つことで、自分のキャラクターが対戦される側のキャラクターに登録されます。
ちょっと詳しいルール
パラメーター
それぞれのキャラクターにはプレイヤーが指定したパラメーターが存在します。
ステータス: それぞれの和は1以上100以下の整数となります。
○ヒットポイント(HP): この値の大小で勝敗が決まります。HPが0以下になると負けです。体力5倍の値になります。
○物理力(PHY): 0以上。物理スキルの強さを表します。
○魔法力(MAG): 0以上。魔法スキルの強さを表します。
○スキル(S): キャラクターは4つのスキルを扱えます。それぞれのスキルのパラメーターは以下のとおりです。
○属性(TYE): 物理、魔法、カウンターの3つが存在します。
○攻撃力(ATK): (物理属性、魔法属性のみ) 発動時に与える攻撃のパワーを表します。
○倍率(ATK): (カウンターのみ) 相手の物理攻撃を何倍にして返すかを表します。次のスキル発動時まで有効です。
○防御力(DEF): 相手の攻撃をどれだけ防ぐかを表します。次のスキル発動時まで有効です。
○待ち時間(WAI): スキルを発動するまでに必要な時間です。物理力/魔法力/攻撃力/防御力によって変動します。
それぞれの属性には以下のような特徴があります。
○物理
発動時またはその直前に相手が発動したスキルの属性が魔法である場合、攻撃力が1.5倍。
○魔法
カウンター属性に影響しない。
○カウンター
発動してから次のスキルを使うまで相手の物理攻撃を跳ね返す
ChinoScript
基本文法
ChinoScriptでは文の末尾にセミコロン;
を付ける必要があります。
また、幾つかの文を{}
でまとめたものをブロックと呼びます。
井桁#
から同じ行の末尾まではコメントとして扱われます。
変数や関数の識別子で使える文字は英数字(大文字小文字)とアンダーバーです。ただし、初めの文字は数字以外である必要があります。
例:
- OK: abcABC123
- OK: _abc
- NG: 123abc
556
のように整数リテラルは0から9までの数字で表されます。
'p'
のように、シングルクォーテーション'
で囲まれた文字は文字リテラルとして扱われます。
"pyonpyon"
のようにダブルクォーテーション"
で囲まれた文字列は文字列リテラルとして扱われます。
演算子
サポートされている演算子は以下のとおりです。
- (): 括弧
- *, /, %, +, -: 算術演算子(左から乗算、除算、剰余、加算、減算)
- ==, !=, <, >, <=, >=: 比較演算子
- &&, ||: 論理演算子(論理積、論理和)
- =, +=, -=, *=, /=, %=: 代入演算子
- []: 配列インデックス
注意: インクリメント、デクリメント、ビット演算、シフト演算などはできません。
制御構造
ChinoScriptでは制御構造としてif
, for
, while
をサポートしています。
- if (式) 文/ブロック [else 文/ブロック]: 式の値がtrue(真)の場合、最初の文またはブロックが実行されます。
else以降が書いてあれば式の値がfalse(負)の場合にelse以降の文/ブロックが実行されます。 - for (式1;式2;式3) 文/ブロック: 最初に式1が評価された後に式2がtrueである間、文またはブロックを繰り返します。
それぞれのループの最後に式3が実行されます。 - while (式) 文/ブロック: 式の値がtrueである限り文/ブロックを繰り返します。
フロー
CodeColosseumではキャラクターは次のように行動します。
開始 -> ループ { スキル宣言 -> スキルの待ち時間だけ待機 -> スキル発動 }
このうち、スキル宣言の時点でプレイヤーの入力したスクリプトが実行され、そのスクリプト内で発動するスキルを決定して出力します。
スクリプト内でのゲームの状態の取得について
ChinoScript内では定義された変数および関数でゲームの状態を取得できます。
- NOW: 現在のターン数
- M_,E_(プレフィックス): 自分("My")及び相手("Enemy")のパラメーター及び状態
- NOW: それぞれのキャラクターが最後にスキルを発動したターン数
- HP, PHY, MAG: それぞれのキャラクターのHP、攻撃力、魔法力
- MAXHP(E_のみ): 相手キャラクターの対戦前のHP
- N, TYE, ATK, DEF: キャラクターが最後に使ったスキルの番号、属性、攻撃力(カウンターの場合倍率)、防御力
- ATK_n, DEF_n, WAI_n: (n=1~4)それぞれの値について上からn番目のスキルの値
- _S(サフィックス): 上からn番目のスキル値をもつスキルの番号(1~4)
- NUM(n, PARAM): (n=1~4, PARAM=[ATK, DEF, WAI, TYE]) スキル番号n番目のパラメーターの値
例:
- 自分の攻撃力: M_ATK
- 相手がもつスキルの中で待ち時間が2番目に高いスキルの番号: E_WAI_2_S
ちょっとマニアックなゲームですが、ハマる人はハマると思うのでぜひぜひプレイして見てください!
リンク : http://codecolosseum.trap.games
クレジット
サーバー:@ponya
クライアント:@hukuda222
スクリプト実装:@long_long_float
イラスト:@KNJ
調整:@Its_me,@ahiru
スペシャルサンクス:@kaz,@nonsako