A6の仕様メモ


※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

A6の段階に入っても仕様が固まらないという情けなさ。

動かないコードです。注意しましょう!

とりあえずメモ。

確定したクラス

Vector2d

'''
>>> vec = Vector2d(2,10)
>>> tuple(vec)
(2,10)
'''
class Vector2d:
  def __init__(self,x,y):
    self.x=x
    self.y=y
  def __add__(self,t):
    return Vector2d(self.x+t.x,self.y+t.y)
  def __sub__(self,t):
    return Vector2d(self.x-t.x,self.y-t.y)
  def inv(t):
    return Vector2d(self.x,self.y)
  def __iadd__(self,t):
    self.x+=t.x
    self.y+=t.y
    return self
  def __isub__(self,t):
    self.x-=t.x
    self.y-=t.y
    return self
  def __eq__(self,t):
    if type(t)==tuple and len(t)==2:
      return self.x==t[0] and self.y ==t[1]
    if isinstance(t,Vector2d):
      return self.x==t.x and self.y == t.y
    else:
      return False
  def dump(self):
    print('vec:%d,%d'%(self.x,self.y))
    return self
  def __iter__(self):
    return (self.x,self.y)

Direction

Enum相当のクラス。

pythonでenumを実装したライブラリがあるようですが、

未だ実装せず。

class Direction:
  NO_DIR= Vector2d(0,0)
  NORTH = Vector2d(0,-1)
  SOUTH = Vector2d(0,1)
  WEST =  Vector2d(-1,0)
  EAST =  Vector2d(1,0)
  NORTH_WEST = NORTH + WEST
  NORTH_EAST = NORTH + EAST
  SOUTH_WEST = SOUTH + WEST
  SOUTH_EAST = SOUTH + EAST
  def __init__(self,direct):
    self.directon = direct

大きな変更点

ItemとTrapのスーパークラスの統一。

うっかりおとした鍬に足引っ掛けてベチンとか面白そうだし。

そうなると、アイテムを拾う際にはアイテムの一歩手前で、

その方向を指定して拾うって行動になるので、

新しくActionにtakeでも作らなきゃいけなくなる。

階段は拾えないけど、

ワープカーペットは拾えるとか面白い。

「あのフロアへの扉は魔王が隠し持っているぞ!」とか。

MapDataを管理していたMapDataCollectionの破棄

名前でデータを取ってくるだけなので、dictに変更。

ItemCollectionの追加

ゲーム中アイテムを全部保持しておく。

Itemの属性として、

self.belong_to = 'us'

僕のコードはengrishから抜け出せない (´・ω・`)

step_effect //踏んだとき

use_effect //使ったとき

throw_effect //投げてあたったとき

equip_effect //装備したとき

unequip_effect //装備をはずしたとき

通常step_effectは拾い上げるとかにしたほうがいい。

が、このゲームはpickup(direction)で拾うようにしたい。


半決定事項

ScreenPlayXml略してSPX.

ScreenPlayXmlにシナリオデータを格納して、

インスタンス作る時にロード。あとは煮るなり焼くなり。

スキーマかけるようになりたい。

<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:element name="SPX" type="xsd:string"/>
    <xsd;complexType>
      <xsd:element name="MAP_CSV"/>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>
今後追加すべき要素

・クリア条件

・敵キャラクタ定義文(そこまでスクリプトで自由設定させていいものか、ゲーム固定にすべきでは?)

・各フィールドの敵キャラ出現確率

・フィールド名

・フィールド進入可能領域

・自動生成フィールドフラグ

・NPCキャラクタ定義文

・NPCキャラクタスクリプト

・NPCキャラクタAI(これ必要か?)

・各種フラグメント管理

・ゲーム中設置アイテム一覧

・アイテム情報<場所(又は保持者)、>

プレイヤ、各キャラクタがとることができる行動一覧
  • 攻撃する
  • 移動する
  • 休む
  • アイテムを・・・
    • 使う
    • 投げる
    • 踏む
    • 拾う

要検討箇所

・プレイヤパラメータの計算式

V6の前にコードを考えるべき仕様

  • ランダムフィールドについて
    • いつランダムのフィールドが生成されるのか、更新タイミングはいつか、
    • NPCオブジェクトが迷い込んでいる時に更新はどうするのか
    • 強制退室させるのか
  • ダンジョン中のランプの実装について

実装済みファイル郡

roguev6/vect.py

roguev6/field.py