モジュール別APIリファレンス

本ページでは、各モジュールの詳細なAPI仕様を提供します。 全モジュールは3層アーキテクチャ(Controller/Service/Component)で統一されています。

CONFIGモジュール

設定管理機能のAPI仕様です。

Controller層

Service層

class common.config.service.action.Action(request: ConfigActionRequest)

ベースクラス: object

設定画面のアクションを実行するクラス。

画面上の各種設定項目に対する操作を処理し、設定フォームに反映させる。 具体的には、タブの選択、方向キー設定、直進キー設定、足踏みキー設定、音量設定、テスト選択などの操作を行う。

注釈

このクラスはビジネスロジックの検証と処理結果の返却を担当し、フォームの直接的な更新は行わない。

select_go_key_type() Response

GOキーの種類をユーザーの操作に基づいて選択する。ユーザーの操作に基づいて、GOキーの種類が選択されたかどうかを判断する。

処理フロー図を確認する
        
flowchart TD
	%% --- Common Styles ---
	classDef error fill:#f96,stroke:#333,stroke-width:2px
	classDef success fill:#9f9,stroke:#333,stroke-width:2px
	classDef info fill:#eee,stroke:#999,stroke-dasharray: 5 5
	Start(["select_go_key_type"]) --> V{"KeyTypeValidator"} -- "NG" --> R1["Code.ARGUMENT_ERROR<br/>data: KEY_TYPE_ERROR"]:::error
	V -- "OK" --> C1{"TYPE_1?"} -- "Yes" --> R2["Code.OK<br/>data: GoKeyTypes.TYPE_1"]:::success
	C1 -- "No" --> C2{"TYPE_2?"} -- "Yes" --> R3["Code.OK<br/>data: GoKeyTypes.TYPE_2"]:::success
	C2 -- "No" --> R4["Code.DO_NOTHING"]:::info
    
戻り値:

GOキーの種類の選択結果を含む Response オブジェクト。GOキーの種類が選択された場合は選択されたGOキーの種類を返す。引数が無効な場合はARGUMENT_ERRORを返す。何も変更がない場合はDO_NOTHINGを返す

戻り値の型:

Response

select_step_key_type() Response

STEPキーの種類をユーザーの操作に基づいて選択する。ユーザーのクリック操作に基づいて、STEPキーの種類を判断する。

処理フロー図を確認する
        
flowchart TD
	%% --- Common Styles ---
	classDef error fill:#f96,stroke:#333,stroke-width:2px
	classDef success fill:#9f9,stroke:#333,stroke-width:2px
	classDef info fill:#eee,stroke:#999,stroke-dasharray: 5 5
	Start(["select_step_key_type"]) --> V{"KeyTypeValidator"} -- "NG" --> R1["Code.ARGUMENT_ERROR"]:::error
	V -- "OK" --> C1{"TYPE_1?"} -- "Yes" --> R2["Code.OK<br/>data: TYPE_2"]:::success
	C1 -- "No" --> C2{"TYPE_2?"} -- "Yes" --> R3["Code.OK<br/>data: TYPE_1"]:::success
	C2 -- "No" --> R4["Code.DO_NOTHING"]:::info
    
戻り値:

STEPキーの種類の選択結果を含む Response オブジェクト。STEPキーの種類が選択された場合は選択されたSTEPキーの種類を返す。引数が無効な場合はARGUMENT_ERRORを返す。何も変更がない場合はDO_NOTHINGを返す

戻り値の型:

Response

select_tab() Response

タブボタンのクリックに基づいて、タブを選択する。ユーザーの操作に基づいて、タブが選択されたかどうかを判断する。

処理フロー図を確認する
        
flowchart TD
	%% --- Common Styles ---
	classDef error fill:#f96,stroke:#333,stroke-width:2px
	classDef success fill:#9f9,stroke:#333,stroke-width:2px
	classDef info fill:#eee,stroke:#999,stroke-dasharray: 5 5
	Start(["select_tab"]) --> V{"KeyTypeValidator"} -- "NG" --> R1["Code.ARGUMENT_ERROR"]:::error
	V -- "OK" --> C1{"OPERATION?"} -- "Yes" --> R2["Code.OK<br/>data: TabTypes.OPERATION"]:::success
	C1 -- "No" --> C2{"SOUND?"} -- "Yes" --> R3["Code.OK<br/>data: TabTypes.SOUND"]:::success
	C2 -- "No" --> R4["Code.DO_NOTHING"]:::info
    
戻り値:

タブボタンの選択結果を含む Response オブジェクト。タブが選択された場合は選択されたタブの種類を返す。引数が無効な場合はARGUMENT_ERRORを返す。何も変更がない場合はDO_NOTHINGを返す

戻り値の型:

Response

select_test() Response

テストアクションを選択する。ユーザーの操作に基づいて、テストアクションが選択されたかどうかを判断する。

処理フロー図を確認する
        
flowchart TD
	%% --- Common Styles ---
	classDef error fill:#f96,stroke:#333,stroke-width:2px
	classDef success fill:#9f9,stroke:#333,stroke-width:2px
	classDef info fill:#eee,stroke:#999,stroke-dasharray: 5 5
	Start(["select_test"]) --> C{"test_click?"} -- "Yes" --> R1["Code.OK<br/>data: True"]:::success
	C -- "No" --> R2["Code.DO_NOTHING<br/>data: False"]:::info
    
戻り値:

テストアクションの選択結果を含む Response オブジェクト。テストアクションが選択された場合はTrueを返し、選択されなかった場合はFalseを返す

戻り値の型:

Response

select_volume() Response

音量レベルをユーザーの操作に基づいて選択する。音量スライダーのクリック位置に基づいて、音量レベルを計算して返す。

処理フロー図を確認する
        
flowchart TD
	%% --- Common Styles ---
	classDef error fill:#f96,stroke:#333,stroke-width:2px
	classDef success fill:#9f9,stroke:#333,stroke-width:2px
	classDef info fill:#eee,stroke:#999,stroke-dasharray: 5 5
	Start(["select_volume"]) --> C{"slider_click?"} -- "No" --> R1["Code.DO_NOTHING<br/>data: VOLUME_ERROR"]:::info
	C -- "Yes" --> P{"位置判定"} -- "範囲内" --> R2["Code.OK<br/>data: int音量"]:::success
	P -- "MIN未満" --> R3["Code.OK<br/>data: VOLUME_MIN"]:::success
	P -- "MAX超過" --> R4["Code.OK<br/>data: VOLUME_MAX"]:::success
    
戻り値:

音量レベルを含む Response オブジェクト。クリック位置が音量スライダーの範囲内にある場合は計算された音量レベルを返し、範囲外の場合は最小または最大の音量レベルを返す。クリックされていない場合は DO_NOTHING を返す

戻り値の型:

Response

select_way_key_type() Response

WAYキーの種類をユーザーの操作に基づいて選択する。ユーザーのクリック操作に基づいて、WAYキーの種類を判断する。

処理フロー図を確認する
        
flowchart TD
	%% --- Common Styles ---
	classDef error fill:#f96,stroke:#333,stroke-width:2px
	classDef success fill:#9f9,stroke:#333,stroke-width:2px
	classDef info fill:#eee,stroke:#999,stroke-dasharray: 5 5
	Start(["select_way_key_type"]) --> V{"KeyTypeValidator"} -- "NG" --> R1["result: Code.ARGUMENT_ERROR<br/>data: KEY_TYPE_ERROR"]:::error
	V -- "OK" --> C1{"TYPE_1 をクリック?"} -- "Yes" --> R2["result: Code.OK<br/>data: WayKeyTypes.TYPE_1"]:::success
	C1 -- "No" --> C2{"TYPE_2 をクリック?"} -- "Yes" --> R3["result: Code.OK<br/>data: WayKeyTypes.TYPE_2"]:::success
	C2 -- "No" --> R4["result: Code.DO_NOTHING<br/>data: KEY_TYPE_ERROR"]:::info
    
戻り値:

WAYキーの種類の選択結果を含む Response オブジェクト。WAYキーの種類が選択された場合は選択されたWAYキーの種類を返す。引数が無効な場合はARGUMENT_ERRORを返す。何も変更がない場合はDO_NOTHINGを返す

戻り値の型:

Response

class common.config.service.sound.Sound(request: ConfigSoundRequest)

ベースクラス: object

サウンド関連のサービスクラス。

テスト音声の再生や停止、チャンネル管理などを行う。

注釈

このクラスはサウンド処理のビジネスロジックを担当し、実際のサウンド制御は専用のマネージャークラスで行う。

start() Response

サウンド関連の処理を開始する。音声の再生や再生状態の確認を行う。

処理フロー図を確認する
        
flowchart TD
	%% --- Common Styles ---
	classDef error fill:#f96,stroke:#333,stroke-width:2px
	classDef success fill:#9f9,stroke:#333,stroke-width:2px
	classDef info fill:#eee,stroke:#999,stroke-dasharray: 5 5
	Start(["start"]) --> F{"再生要求?"} -- "Yes" --> C{"can_sound_start?"} -- "Yes" --> T["Try: SoundChannelManager.start()"]
	T -- "成功" --> R1["Code.OK<br/>data: (True, Busy, channel)"]:::success
	T -- "失敗" --> R2["Code.SOUND_ERROR<br/>data: (False, False, None)"]:::error
	C -- "No" --> R3["Code.SOUND_PENDING<br/>data: (False, Busy, channel)"]:::info
	F -- "No" --> R4["Code.OK<br/>data: (False, Busy, channel/None)"]:::info
    
戻り値:

サウンド関連の処理結果を含む Response オブジェクト。音声の再生状態やチャンネル情報などが含まれる。data は (is_start_playing, is_channel_busy, channel) のタプル。is_start_playing は音声を新たに再生開始したかどうか、is_channel_busy はチャンネルが現在再生中かどうか、channel は使用される Channel オブジェクト。result は処理結果のコード(OK、SOUND_PENDING、SOUND_ERROR)

戻り値の型:

Response

static stop(channel: Channel | None) Response

指定されたチャンネルで再生中の音声を停止する。

処理フロー図を確認する
        
flowchart TD
	%% --- Common Styles ---
	classDef error fill:#f96,stroke:#333,stroke-width:2px
	classDef success fill:#9f9,stroke:#333,stroke-width:2px
	classDef info fill:#eee,stroke:#999,stroke-dasharray: 5 5
	Start(["stop"]) --> C{"channel?"} -- "Yes" --> R1["Code.OK<br/>data: None"]:::success
	C -- "No" --> R2["Code.DO_NOTHING<br/>data: None"]:::info
    
パラメータ:

channel (Channel | None) -- 停止する音声が再生されている Channel オブジェクト

戻り値:

音声停止の処理結果を含む Response オブジェクト。成功の場合は Code.OK、チャンネルが None の場合は Code.DO_NOTHING が返される。data は None(停止処理の結果に関する追加情報は含まれない)

戻り値の型:

Response

Component層

Validator系

class common.config.service.component.actionRequestValidator.RequestValidator(_request: ConfigActionRequest)

ベースクラス: object

リクエストの妥当性を検証するクラス。

パラメータ:

_request (ConfigActionRequest) -- 検証対象のリクエスト

注釈

このクラスは dataclassfrozen=True として定義されており、作成後にフィールド値を変更することはできない。

raise_if_invalid() None

リクエストの妥当性を検証する。

処理フロー図を確認する
        
flowchart TD
	%% --- Common Styles ---
	classDef error fill:#f96,stroke:#333,stroke-width:2px
	classDef success fill:#9f9,stroke:#333,stroke-width:2px
	classDef info fill:#eee,stroke:#999,stroke-dasharray: 5 5
	Start(["raise_if_invalid"]) --> L["14属性走査"] --> R1["None/ValueError"]
    
例外:

ValueError -- リクエストが無効な場合に発生

class common.config.service.component.actionKeyTypeValidator.KeyTypeValidator(key_type: int, key_type_max: int, click_list: list[bool])

ベースクラス: object

キータイプの妥当性を検証するクラス。

パラメータ:
  • key_type (int) -- 検証対象のキータイプ

  • key_type_max (int) -- キータイプの最大値

  • click_list (list[bool]) -- 関連するクリック状態のリスト

注釈

このクラスは dataclassfrozen=True として定義されており、作成後にフィールド値を変更することはできない。

click_list: list[bool]
is_invalid() bool

キータイプの妥当性を検証する。

処理フロー図を確認する
        
flowchart TD
	%% --- Common Styles ---
	classDef error fill:#f96,stroke:#333,stroke-width:2px
	classDef success fill:#9f9,stroke:#333,stroke-width:2px
	classDef info fill:#eee,stroke:#999,stroke-dasharray: 5 5
	Start(["is_invalid"]) --> C{"異常値?"} -- "Yes" --> R1["True"]:::error
	C -- "No" --> R2["False"]:::success
    
戻り値:

キータイプが無効な場合はTrue、そうでない場合はFalse

戻り値の型:

bool

key_type: int
key_type_max: int
class common.config.service.component.displayRequestValidator.RequestValidator(_request: ConfigDisplayRequest)

ベースクラス: object

リクエストの妥当性を検証するクラス。

パラメータ:

_request (ConfigDisplayRequest) -- 検証対象のリクエスト

注釈

このクラスは dataclassfrozen=True として定義されており、作成後にフィールド値を変更することはできない。

raise_if_invalid() None

リクエストの妥当性を検証する。

処理フロー図を確認する
        
flowchart TD
	%% --- Common Styles ---
	classDef error fill:#f96,stroke:#333,stroke-width:2px
	classDef success fill:#9f9,stroke:#333,stroke-width:2px
	classDef info fill:#eee,stroke:#999,stroke-dasharray: 5 5
	Start(["raise_if_invalid"]) --> L["17属性走査"] --> R1["None/ValueError"]
    
例外:

ValueError -- リクエストが無効な場合に発生

注釈

厳密な型チェックは行わず、intbool かのみ確認する。

class common.config.service.component.soundRequestValidator.RequestValidator(_request: ConfigSoundRequest)

ベースクラス: object

リクエストの妥当性を検証するクラス。

パラメータ:

_request (ConfigSoundRequest) -- 検証対象のリクエスト

注釈

このクラスは dataclassfrozen=True として定義されており、作成後にフィールド値を変更することはできない。

raise_if_invalid() None

リクエストの妥当性を検証する。

処理フロー図を確認する
        
flowchart TD
	%% --- Common Styles ---
	classDef error fill:#f96,stroke:#333,stroke-width:2px
	classDef success fill:#9f9,stroke:#333,stroke-width:2px
	classDef info fill:#eee,stroke:#999,stroke-dasharray: 5 5
	Start(["raise_if_invalid"]) --> L["5属性+channel走査"] --> R1["None/ValueError"]
    
例外:

ValueError -- リクエストが無効な場合に発生

注釈

厳密な型チェックは行わず、intboollist かのみ確認する。 channel 属性については Channel または None を許容する。

class common.config.service.component.statusRequestValidator.RequestValidator(_request: ConfigStatusRequest)

ベースクラス: object

リクエストの妥当性を検証するクラス。

パラメータ:

_request (ConfigStatusRequest) -- 検証対象のリクエスト

注釈

このクラスは dataclassfrozen=True として定義されており、作成後にフィールド値を変更することはできない。

raise_if_invalid() None

リクエストの妥当性を検証する。

処理フロー図を確認する
        
flowchart TD
	%% --- Common Styles ---
	classDef error fill:#f96,stroke:#333,stroke-width:2px
	classDef success fill:#9f9,stroke:#333,stroke-width:2px
	classDef info fill:#eee,stroke:#999,stroke-dasharray: 5 5
	Start(["raise_if_invalid"]) --> L["4属性走査"] --> R1["None/ValueError"]
    
例外:

ValueError -- リクエストが無効な場合に発生

注釈

厳密な型チェックは行わず、intboolstr かのみ確認する。

Manager系

class common.config.service.component.soundChannelManager.SoundChannelManager(channel: Channel | None, mp3_path: str | None = None, volume: int | None = None)

ベースクラス: object

音声再生を管理するクラス。

パラメータ:
  • channel (Channel | None) -- 再生に使用されるチャンネル

  • mp3_path (str | None) -- 再生するMP3ファイルのパス

  • volume (int | None) -- 再生する音量レベルを示す整数

注釈

このクラスは dataclassfrozen=True として定義されており、作成後にフィールド値を変更することはできない。

channel: Channel | None
mp3_path: str | None = None
start() None

音声再生を開始するメソッド。

チャンネルが有効であれば、指定されたMP3ファイルを再生し、音量を設定する。

処理フロー図を確認する
        
flowchart TD
	%% --- Common Styles ---
	classDef error fill:#f96,stroke:#333,stroke-width:2px
	classDef success fill:#9f9,stroke:#333,stroke-width:2px
	classDef info fill:#eee,stroke:#999,stroke-dasharray: 5 5
	Start(["start"]) --> V{"引数OK?"} -- "OK" --> T["Try: play"]
	T -- "Err" --> E["Exception"]:::error
    
例外:
  • Exception -- 音声再生に失敗した場合の一般的な例外

  • ValueError -- 引数の不備(volumeが VolumeSliderSize の範囲外、mp3_pathがNoneなど)がある場合

stop() None

音声再生を停止するメソッド。

チャンネルの停止を試み、失敗した場合はエラーログを記録する。

処理フロー図を確認する
        
flowchart TD
	%% --- Common Styles ---
	classDef error fill:#f96,stroke:#333,stroke-width:2px
	classDef success fill:#9f9,stroke:#333,stroke-width:2px
	classDef info fill:#eee,stroke:#999,stroke-dasharray: 5 5
	Start(["stop"]) --> T["Try: stop"]
	T -- "Err" --> L["ERROR_LOG"]:::error
    

注釈

処理の流れ:

  • チャンネルが有効であれば、チャンネルの停止を試みる

  • チャンネルが無効であったり、停止に失敗した場合は、エラーログを記録する

volume: int | None = None
class common.config.service.component.statusConvertManager.StatusConvertManager(_load_data: str | None = None)

ベースクラス: object

データの変換を行うクラス。ロードしたデータを設定フォームのデータに変換する。

パラメータ:

_load_data (str | None) -- ロードしたデータ。ロードに成功した場合はロードしたデータを格納し、ロードに失敗した場合や未保存の場合は None または空文字列を格納する

注釈

このクラスは dataclassfrozen=True として定義されており、作成後にフィールド値を変更することはできない。

load_data_to_config_data() tuple[int, int, int]

ロードしたデータを変換する。

_load_data が None または空文字列である場合は、デフォルトの設定値とする。

処理フロー図を確認する
        
flowchart TD
	%% --- Common Styles ---
	classDef error fill:#f96,stroke:#333,stroke-width:2px
	classDef success fill:#9f9,stroke:#333,stroke-width:2px
	classDef info fill:#eee,stroke:#999,stroke-dasharray: 5 5
	Start(["load_data_to_config_data 開始"]) --> N{"None または空文字列?"}
	N -- "Yes" --> D["DEFAULT_SAVE_CONF_TUPLE を返却"]:::info
	N -- "No" --> T["Try: split(',') & int() 変換"]
	T -- "成功" --> R["(way_key_type, go_key_type, volume) を返却"]:::success
	T -. "例外発生" .-> Catch["DEFAULT_SAVE_CONF_TUPLE を返却"]:::error
	D --> End(["終了"])
	R --> End
	Catch --> End

    
戻り値:

ConfigFormの設定に用いるデータのタプル (way_key_type, go_key_type, volume) を返す

戻り値の型:

tuple[int, int, int]

Check系

class common.config.service.component.soundChannelCheck.SoundChannelCheck(_channel_index: int, _has_channel_available: bool, _channel: Channel | None)

ベースクラス: object

サウンドチャンネルの状態をチェックするクラス。

パラメータ:
  • _channel_index (int) -- チャンネルのインデックス

  • _has_channel_available (bool) -- 使用可能なチャンネルがあるかどうかのフラグ。True: 使用可能なチャンネルがある、False: 使用可能なチャンネルがない

  • _channel (Channel | None) -- チェック対象のサウンドチャンネル

注釈

このクラスは dataclassfrozen=True として定義されており、作成後にフィールド値を変更することはできない。

can_sound_start() bool

サウンドを再生できるかどうかを判断するメソッド。

チャンネルが使用可能で、チャンネルのインデックスが RELEASED_CHANNEL_INDEX であり、 チャンネルオブジェクトが None の場合に True を返す。

処理フロー図を確認する
        
flowchart TD
	%% --- Common Styles ---
	classDef error fill:#f96,stroke:#333,stroke-width:2px
	classDef success fill:#9f9,stroke:#333,stroke-width:2px
	classDef info fill:#eee,stroke:#999,stroke-dasharray: 5 5
	Start(["can_sound_start"]) --> C["条件判定"] --> R1["bool"]
    
戻り値:

サウンドを再生できる場合は True、再生できない場合は False。すでに再生中のチャンネルがある可能性があるため、再生開始できないことを示す

戻り値の型:

bool

HOMEモジュール

ホーム画面機能のAPI仕様です。

Controller層

Service層

class common.home.service.display.Display(request: HomeDisplayRequest)

ベースクラス: object

ホーム画面の表示を処理するクラス。

スタートボタン、設定ボタン、ロードボタン、終了ボタンなどの表示位置を取得する。

注釈

このクラスは表示処理のビジネスロジックを担当し、実際の画面描画は各メソッド内で行う。

disp_config_button()

画面上の設定ボタンの表示位置を取得する。

処理フロー図を確認する
        
flowchart TD
	%% --- Common Styles ---
	classDef error fill:#f96,stroke:#333,stroke-width:2px
	classDef success fill:#9f9,stroke:#333,stroke-width:2px
	classDef info fill:#eee,stroke:#999,stroke-dasharray: 5 5

	%% --- Main Flow ---
	START(["開始: disp_config_button"]) --> CHECK_TOUCH{"self._config_touch?<br/>設定ボタンタッチ状態判定"}
	CHECK_TOUCH -->|True| IMG_TOUCH["CONFIG_TOUCH画像を選択<br/>ButtonIndex.CONFIG_TOUCH"]
	CHECK_TOUCH -->|False| IMG_NORMAL["通常画像を選択<br/>ButtonIndex.CONFIG"]
	
	IMG_TOUCH --> CREATE_DSM_TOUCH["Dsm作成・実行<br/>screen: self._screen<br/>img: CONFIG_TOUCH<br/>pos: ButtonPosition.CONFIG_BUTTON"]
	IMG_NORMAL --> CREATE_DSM_NORMAL["Dsm作成・実行<br/>screen: self._screen<br/>img: CONFIG<br/>pos: ButtonPosition.CONFIG_BUTTON"]
	
	CREATE_DSM_TOUCH --> DSM_BLIT["error_flg = Dsm(...).blit()<br/>DisplayScreenManager描画実行"]
	CREATE_DSM_NORMAL --> DSM_BLIT
	
	DSM_BLIT --> ERROR_CHECK{"error_flg?<br/>描画エラー判定"}
	ERROR_CHECK -->|True| ERROR_RESPONSE["Response生成<br/>data: ButtonPosition.ERROR<br/>result: Code.SCREEN_ERROR"]
	ERROR_CHECK -->|False| SUCCESS_RESPONSE["Response生成<br/>data: ButtonPosition.CONFIG_BUTTON<br/>result: Code.OK"]
	
	ERROR_RESPONSE --> END(["return Response<br/>エラー終了"])
	SUCCESS_RESPONSE --> END_SUCCESS(["return Response<br/>正常終了"])

	%% --- Apply Styles ---
	START:::info
	CHECK_TOUCH:::info
	IMG_TOUCH:::info
	IMG_NORMAL:::info
	CREATE_DSM_TOUCH:::info
	CREATE_DSM_NORMAL:::info
	DSM_BLIT:::info
	ERROR_CHECK:::info
	ERROR_RESPONSE:::error
	SUCCESS_RESPONSE:::success
	END:::error
	END_SUCCESS:::success

    
戻り値:

設定ボタンの表示位置を含むレスポンスオブジェクト

戻り値の型:

Response

disp_exit_button()

画面上の終了ボタンの表示位置を取得する。

処理フロー図を確認する
        
flowchart TD
	%% --- Common Styles ---
	classDef error fill:#f96,stroke:#333,stroke-width:2px
	classDef success fill:#9f9,stroke:#333,stroke-width:2px
	classDef info fill:#eee,stroke:#999,stroke-dasharray: 5 5

	%% --- Main Flow ---
	START(["開始: disp_exit_button"]) --> CHECK_TOUCH{"self._exit_touch?<br/>終了ボタンタッチ状態判定"}
	CHECK_TOUCH -->|True| IMG_TOUCH["EXIT_TOUCH画像を選択<br/>ButtonIndex.EXIT_TOUCH"]
	CHECK_TOUCH -->|False| IMG_NORMAL["通常画像を選択<br/>ButtonIndex.EXIT"]
	
	IMG_TOUCH --> CREATE_DSM_TOUCH["Dsm作成・実行<br/>screen: self._screen<br/>img: EXIT_TOUCH<br/>pos: ButtonPosition.EXIT_BUTTON"]
	IMG_NORMAL --> CREATE_DSM_NORMAL["Dsm作成・実行<br/>screen: self._screen<br/>img: EXIT<br/>pos: ButtonPosition.EXIT_BUTTON"]
	
	CREATE_DSM_TOUCH --> DSM_BLIT["error_flg = Dsm(...).blit()<br/>DisplayScreenManager描画実行"]
	CREATE_DSM_NORMAL --> DSM_BLIT
	
	DSM_BLIT --> ERROR_CHECK{"error_flg?<br/>描画エラー判定"}
	ERROR_CHECK -->|True| ERROR_RESPONSE["Response生成<br/>data: ButtonPosition.ERROR<br/>result: Code.SCREEN_ERROR"]
	ERROR_CHECK -->|False| SUCCESS_RESPONSE["Response生成<br/>data: ButtonPosition.EXIT_BUTTON<br/>result: Code.OK"]
	
	ERROR_RESPONSE --> END(["return Response<br/>エラー終了"])
	SUCCESS_RESPONSE --> END_SUCCESS(["return Response<br/>正常終了"])

	%% --- Apply Styles ---
	START:::info
	CHECK_TOUCH:::info
	IMG_TOUCH:::info
	IMG_NORMAL:::info
	CREATE_DSM_TOUCH:::info
	CREATE_DSM_NORMAL:::info
	DSM_BLIT:::info
	ERROR_CHECK:::info
	ERROR_RESPONSE:::error
	SUCCESS_RESPONSE:::success
	END:::error
	END_SUCCESS:::success

    
戻り値:

終了ボタンの表示位置を含むレスポンスオブジェクト

戻り値の型:

Response

disp_load_button()

画面上のロードボタンの表示位置を取得する。

処理フロー図を確認する
        
flowchart TD
	%% --- Common Styles ---
	classDef error fill:#f96,stroke:#333,stroke-width:2px
	classDef success fill:#9f9,stroke:#333,stroke-width:2px
	classDef info fill:#eee,stroke:#999,stroke-dasharray: 5 5

	%% --- Main Flow ---
	START(["開始: disp_load_button"]) --> CHECK_TOUCH{"self._load_touch?<br/>ロードボタンタッチ状態判定"}
	CHECK_TOUCH -->|True| IMG_TOUCH["LOAD_TOUCH画像を選択<br/>ButtonIndex.LOAD_TOUCH"]
	CHECK_TOUCH -->|False| IMG_NORMAL["通常画像を選択<br/>ButtonIndex.LOAD"]
	
	IMG_TOUCH --> CREATE_DSM_TOUCH["Dsm作成・実行<br/>screen: self._screen<br/>img: LOAD_TOUCH<br/>pos: ButtonPosition.LOAD_BUTTON"]
	IMG_NORMAL --> CREATE_DSM_NORMAL["Dsm作成・実行<br/>screen: self._screen<br/>img: LOAD<br/>pos: ButtonPosition.LOAD_BUTTON"]
	
	CREATE_DSM_TOUCH --> DSM_BLIT["error_flg = Dsm(...).blit()<br/>DisplayScreenManager描画実行"]
	CREATE_DSM_NORMAL --> DSM_BLIT
	
	DSM_BLIT --> ERROR_CHECK{"error_flg?<br/>描画エラー判定"}
	ERROR_CHECK -->|True| ERROR_RESPONSE["Response生成<br/>data: ButtonPosition.ERROR<br/>result: Code.SCREEN_ERROR"]
	ERROR_CHECK -->|False| SUCCESS_RESPONSE["Response生成<br/>data: ButtonPosition.LOAD_BUTTON<br/>result: Code.OK"]
	
	ERROR_RESPONSE --> END(["return Response<br/>エラー終了"])
	SUCCESS_RESPONSE --> END_SUCCESS(["return Response<br/>正常終了"])

	%% --- Apply Styles ---
	START:::info
	CHECK_TOUCH:::info
	IMG_TOUCH:::info
	IMG_NORMAL:::info
	CREATE_DSM_TOUCH:::info
	CREATE_DSM_NORMAL:::info
	DSM_BLIT:::info
	ERROR_CHECK:::info
	ERROR_RESPONSE:::error
	SUCCESS_RESPONSE:::success
	END:::error
	END_SUCCESS:::success

    
戻り値:

ロードボタンの表示位置を含むレスポンスオブジェクト

戻り値の型:

Response

disp_start_button()

画面上のスタートボタンの表示位置を取得する。

処理フロー図を確認する
        
flowchart TD
	%% --- Common Styles ---
	classDef error fill:#f96,stroke:#333,stroke-width:2px
	classDef success fill:#9f9,stroke:#333,stroke-width:2px
	classDef info fill:#eee,stroke:#999,stroke-dasharray: 5 5

	%% --- Main Flow ---
	START(["開始: disp_start_button"]) --> CHECK_TOUCH{"self._start_touch?<br/>スタートボタンタッチ状態判定"}
	CHECK_TOUCH -->|True| IMG_TOUCH["START_TOUCH画像を選択<br/>ButtonIndex.START_TOUCH"]
	CHECK_TOUCH -->|False| IMG_NORMAL["通常画像を選択<br/>ButtonIndex.START"]
	
	IMG_TOUCH --> CREATE_DSM_TOUCH["Dsm作成・実行<br/>screen: self._screen<br/>img: START_TOUCH<br/>pos: ButtonPosition.START_BUTTON"]
	IMG_NORMAL --> CREATE_DSM_NORMAL["Dsm作成・実行<br/>screen: self._screen<br/>img: START<br/>pos: ButtonPosition.START_BUTTON"]
	
	CREATE_DSM_TOUCH --> DSM_BLIT["error_flg = Dsm(...).blit()<br/>DisplayScreenManager描画実行"]
	CREATE_DSM_NORMAL --> DSM_BLIT
	
	DSM_BLIT --> ERROR_CHECK{"error_flg?<br/>描画エラー判定"}
	ERROR_CHECK -->|True| ERROR_RESPONSE["Response生成<br/>data: ButtonPosition.ERROR<br/>result: Code.SCREEN_ERROR"]
	ERROR_CHECK -->|False| SUCCESS_RESPONSE["Response生成<br/>data: ButtonPosition.START_BUTTON<br/>result: Code.OK"]
	
	ERROR_RESPONSE --> END(["return Response<br/>エラー終了"])
	SUCCESS_RESPONSE --> END_SUCCESS(["return Response<br/>正常終了"])

	%% --- Apply Styles ---
	START:::info
	CHECK_TOUCH:::info
	IMG_TOUCH:::info
	IMG_NORMAL:::info
	CREATE_DSM_TOUCH:::info
	CREATE_DSM_NORMAL:::info
	DSM_BLIT:::info
	ERROR_CHECK:::info
	ERROR_RESPONSE:::error
	SUCCESS_RESPONSE:::success
	END:::error
	END_SUCCESS:::success

    
戻り値:

スタートボタンの表示位置を含むレスポンスオブジェクト

戻り値の型:

Response

class common.home.service.sound.Sound(request: HomeSoundRequest)

ベースクラス: object

ホーム画面のサウンド関連のアクションを実行するクラス。

ユーザーの操作に基づいてサウンドの再生を開始し、ホーム画面のサウンド関連の状態を更新する。

注釈

このクラスはサウンドの再生処理を担当し、実際のサウンドの管理や停止処理は他のクラスで行われる。

start() Response

ユーザーの操作に基づいてサウンド再生を実行する。タッチがある場合はクリック音を再生し、処理結果を返す。

処理フロー図を確認する
        
flowchart TD
	%% --- Common Styles ---
	classDef error fill:#f96,stroke:#333,stroke-width:2px
	classDef success fill:#9f9,stroke:#333,stroke-width:2px
	classDef info fill:#eee,stroke:#999,stroke-dasharray: 5 5

	%% --- Main Flow ---
	START(["開始: start"]) --> CHECK_ANY_TOUCH{"any(self._touch_list)?<br/>いずれかのタッチが発生?"}
	
	CHECK_ANY_TOUCH -->|False| RETURN_OK_NO_SOUND["return Response(<br/>data=None,<br/>result=Code.OK)<br/>サウンド再生なし"]
	CHECK_ANY_TOUCH -->|True| TRY_START["try:<br/>サウンド再生処理開始"]
	
	TRY_START --> CREATE_SCM["Scm = SoundChannelManager(<br/>mp3_path=self._sound_list[SoundIndex.CLICK],<br/>volume=self._volume<br/>)<br/>マネージャーインスタンス作成"]
	
	CREATE_SCM --> START_SOUND["Scm.start()<br/>サウンド再生開始"]
	START_SOUND --> RETURN_OK["return Response(<br/>data=None,<br/>result=Code.OK)<br/>再生成功"]
	
	TRY_START --> EXCEPT_START["except Exception as e:<br/>例外キャッチ"]
	EXCEPT_START --> LOG_ERROR["ERROR_LOG(<br/>f'サウンド再生エラー:<br/>サウンドを再生できませんでした。 {e}'<br/>)<br/>エラーログ記録"]
	LOG_ERROR --> RETURN_ERROR["return Response(<br/>data=None,<br/>result=Code.SOUND_ERROR)"]
	
	RETURN_OK_NO_SOUND --> END(["終了<br/>Response返却"])
	RETURN_OK --> END
	RETURN_ERROR --> END

	%% --- Apply Styles ---
	START:::info
	CHECK_ANY_TOUCH:::info
	TRY_START:::info
	CREATE_SCM:::info
	START_SOUND:::info
	EXCEPT_START:::error
	LOG_ERROR:::error
	RETURN_OK_NO_SOUND:::success
	RETURN_OK:::success
	RETURN_ERROR:::error
	END:::info



    
戻り値:

サウンド関連の処理結果を含む Response オブジェクト。data は常に None。result は処理結果のコード(OK:再生成功、SOUND_ERROR:再生エラー)

戻り値の型:

Response

class common.home.service.status.Status(request: HomeStatusRequest)

ベースクラス: object

ホーム画面の次の状態を決定するクラス。

クリック状態(スタート・設定・終了・ロード)を評価し、対応する次の画面状態を返す。 いずれのクリックも検出されない場合はホーム状態のまま変化なしとして返す。

get_next_status() Response

次の状態を取得する。ユーザーの操作に基づいて次の状態を判断し、対応する状態を返す。

処理フロー図を確認する
        
flowchart TD
	%% --- Common Styles ---
	classDef error fill:#f96,stroke:#333,stroke-width:2px
	classDef success fill:#9f9,stroke:#333,stroke-width:2px
	classDef info fill:#eee,stroke:#999,stroke-dasharray: 5 5

	%% --- Main Flow ---
	START(["開始: get_next_status"]) --> CHECK_START{"self._start_click?<br/>スタートクリック判定"}

	CHECK_START -->|True| RETURN_DUNGEON["return Response(<br/>data=STATUS.DUNGEON(),<br/>result=Code.OK<br/>)<br/>ダンジョン状態を返す"]
	CHECK_START -->|False| CHECK_CONFIG{"self._config_click?<br/>設定クリック判定"}

	CHECK_CONFIG -->|True| RETURN_CONFIG["return Response(<br/>data=STATUS.CONFIG(),<br/>result=Code.OK<br/>)<br/>設定状態を返す"]
	CHECK_CONFIG -->|False| CHECK_EXIT{"self._exit_click?<br/>終了クリック判定"}

	CHECK_EXIT -->|True| RETURN_EXIT["return Response(<br/>data=STATUS.EXIT(),<br/>result=Code.OK<br/>)<br/>終了状態を返す"]
	CHECK_EXIT -->|False| CHECK_LOAD{"self._load_click?<br/>ロードクリック判定"}

	CHECK_LOAD -->|True| RETURN_SAVE["return Response(<br/>data=STATUS.SAVE(),<br/>result=Code.OK<br/>)<br/>セーブ状態を返す"]
	CHECK_LOAD -->|False| RETURN_HOME["return Response(<br/>data=STATUS.HOME(),<br/>result=Code.DO_NOTHING<br/>)<br/>ホーム状態を返す(変化なし)"]

	RETURN_DUNGEON --> END(["終了<br/>Response を返す"])
	RETURN_CONFIG --> END
	RETURN_EXIT --> END
	RETURN_SAVE --> END
	RETURN_HOME --> END

	%% --- Apply Styles ---
	START:::info
	CHECK_START:::info
	CHECK_CONFIG:::info
	CHECK_EXIT:::info
	CHECK_LOAD:::info
	RETURN_DUNGEON:::success
	RETURN_CONFIG:::success
	RETURN_EXIT:::success
	RETURN_SAVE:::success
	RETURN_HOME:::info
	END:::success


    
戻り値:

ホーム画面の次の状態を示す Response オブジェクト。data は次の状態を示す。result は処理結果のコード(OK:状態取得成功、DO_NOTHING:状態変更なし)

戻り値の型:

Response

Component層

Validator系

class common.home.service.component.displayRequestValidator.RequestValidator(_request: HomeDisplayRequest)

ベースクラス: AbstractRequestValidator

リクエストの妥当性を検証するクラス。

パラメータ:

_request (HomeDisplayRequest) -- 検証対象のリクエスト

注釈

このクラスは dataclassfrozen=True として定義されており、作成後にフィールド値を変更することはできない。

raise_if_invalid() None

リクエストの妥当性を検証する。

処理フロー図を確認する
        flowchart TD
	%% --- Common Styles ---
	classDef error fill:#f96,stroke:#333,stroke-width:2px
	classDef success fill:#9f9,stroke:#333,stroke-width:2px
	classDef info fill:#eee,stroke:#999,stroke-dasharray: 5 5

	%% --- Main Flow ---
	START(["開始: raise_if_invalid"]) --> INIT_ATTRS["bool属性リスト初期化<br/>start_touch, load_touch,<br/>config_touch, exit_touch"]
	
	INIT_ATTRS --> LOOP_START["for attr in bool_attributes:<br/>各bool属性の検証ループ開始"]
	LOOP_START --> CHECK_HASATTR{"hasattr(self._request, attr)?<br/>属性存在確認"}
	
	CHECK_HASATTR -->|False| LOG_MISSING["ERROR_LOG:<br/>[RequestValidator] Request missing<br/>required attribute: {attr}"]
	CHECK_HASATTR -->|True| GET_VALUE["value = getattr(self._request, attr)<br/>属性値を取得"]
	
	LOG_MISSING --> RAISE_MISSING["ValueError:<br/>RequestValidator: Missing<br/>attribute '{attr}'"]
	
	GET_VALUE --> CHECK_NONE{"value is None?<br/>None値チェック"}
	CHECK_NONE -->|True| LOG_NONE["ERROR_LOG:<br/>[RequestValidator] Request attribute<br/>'{attr}' is None"]
	CHECK_NONE -->|False| CHECK_BOOL{"isinstance(value, bool)?<br/>bool型チェック"}
	
	LOG_NONE --> RAISE_NONE["ValueError:<br/>RequestValidator: Attribute<br/>'{attr}' cannot be None"]
	
	CHECK_BOOL -->|False| LOG_TYPE_ERROR["ERROR_LOG:<br/>[RequestValidator] Request attribute<br/>'{attr}' has invalid type: {type(value)}"]
	CHECK_BOOL -->|True| NEXT_ATTR["次の属性へ<br/>ループ継続"]
	
	LOG_TYPE_ERROR --> RAISE_TYPE_ERROR["ValueError:<br/>RequestValidator: Invalid type for<br/>attribute '{attr}', expected bool"]
	
	NEXT_ATTR --> LOOP_CHECK{"全bool属性チェック完了?"}
	LOOP_CHECK -->|No| CHECK_HASATTR
	LOOP_CHECK -->|Yes| CHECK_SCREEN_HASATTR{"hasattr(self._request, 'screen')?<br/>screen属性存在確認"}
	
	CHECK_SCREEN_HASATTR -->|False| LOG_SCREEN_MISSING["ERROR_LOG:<br/>[RequestValidator] Request missing<br/>'screen' attribute"]
	CHECK_SCREEN_HASATTR -->|True| CHECK_SCREEN_NONE{"self._request.screen is None?<br/>screen値のNoneチェック"}
	
	LOG_SCREEN_MISSING --> RAISE_SCREEN_MISSING["ValueError:<br/>RequestValidator: Missing<br/>'screen' attribute"]
	
	CHECK_SCREEN_NONE -->|True| LOG_SCREEN_NONE["ERROR_LOG:<br/>[RequestValidator] Request attribute<br/>'screen' is None"]
	CHECK_SCREEN_NONE -->|False| CHECK_SCREEN_TYPE{"isinstance(self._request.screen, Surface)?<br/>Surface型チェック"}
	
	LOG_SCREEN_NONE --> RAISE_SCREEN_NONE["ValueError:<br/>RequestValidator: 'screen'<br/>attribute cannot be None"]
	
	CHECK_SCREEN_TYPE -->|False| LOG_SCREEN_TYPE["ERROR_LOG:<br/>[RequestValidator] Request attribute<br/>'screen' has invalid type:<br/>{type(self._request.screen)}"]
	CHECK_SCREEN_TYPE -->|True| CHECK_IMGLIST_HASATTR{"hasattr(self._request, 'img_list')?<br/>img_list属性存在確認"}
	
	LOG_SCREEN_TYPE --> RAISE_SCREEN_TYPE["ValueError:<br/>RequestValidator: Invalid type for<br/>attribute 'screen', expected Surface"]
	
	CHECK_IMGLIST_HASATTR -->|False| LOG_IMGLIST_MISSING["ERROR_LOG:<br/>[RequestValidator] Request missing<br/>'img_list' attribute"]
	CHECK_IMGLIST_HASATTR -->|True| CHECK_IMGLIST_NONE{"self._request.img_list is None?<br/>img_list値のNoneチェック"}
	
	LOG_IMGLIST_MISSING --> RAISE_IMGLIST_MISSING["ValueError:<br/>RequestValidator: Missing<br/>'img_list' attribute"]
	
	CHECK_IMGLIST_NONE -->|True| LOG_IMGLIST_NONE["ERROR_LOG:<br/>[RequestValidator] Request attribute<br/>'img_list' is None"]
	CHECK_IMGLIST_NONE -->|False| CHECK_IMGLIST_TYPE{"isinstance(self._request.img_list, list)?<br/>list型チェック"}
	
	LOG_IMGLIST_NONE --> RAISE_IMGLIST_NONE["ValueError:<br/>RequestValidator: 'img_list'<br/>attribute cannot be None"]
	
	CHECK_IMGLIST_TYPE -->|False| LOG_IMGLIST_TYPE["ERROR_LOG:<br/>[RequestValidator] Request attribute<br/>'img_list' has invalid type:<br/>{type(self._request.img_list)}"]
	CHECK_IMGLIST_TYPE -->|True| VALIDATION_SUCCESS["検証完了<br/>例外なし<br/>return None"]
	
	LOG_IMGLIST_TYPE --> RAISE_IMGLIST_TYPE["ValueError:<br/>RequestValidator: Invalid type for<br/>attribute 'img_list', expected list"]
	
	VALIDATION_SUCCESS --> END(["正常終了"])
	
	RAISE_MISSING --> ERROR_END(["例外で終了"])
	RAISE_NONE --> ERROR_END
	RAISE_TYPE_ERROR --> ERROR_END
	RAISE_SCREEN_MISSING --> ERROR_END
	RAISE_SCREEN_NONE --> ERROR_END
	RAISE_SCREEN_TYPE --> ERROR_END
	RAISE_IMGLIST_MISSING --> ERROR_END
	RAISE_IMGLIST_NONE --> ERROR_END
	RAISE_IMGLIST_TYPE --> ERROR_END

	%% --- Apply Styles ---
	START:::info
	INIT_ATTRS:::info
	LOOP_START:::info
	CHECK_HASATTR:::info
	GET_VALUE:::info
	CHECK_NONE:::info
	CHECK_BOOL:::info
	NEXT_ATTR:::info
	LOOP_CHECK:::info
	CHECK_SCREEN_HASATTR:::info
	CHECK_SCREEN_NONE:::info
	CHECK_SCREEN_TYPE:::info
	CHECK_IMGLIST_HASATTR:::info
	CHECK_IMGLIST_NONE:::info
	CHECK_IMGLIST_TYPE:::info
	VALIDATION_SUCCESS:::success
	LOG_MISSING:::error
	LOG_NONE:::error
	LOG_TYPE_ERROR:::error
	LOG_SCREEN_MISSING:::error
	LOG_SCREEN_NONE:::error
	LOG_SCREEN_TYPE:::error
	LOG_IMGLIST_MISSING:::error
	LOG_IMGLIST_NONE:::error
	LOG_IMGLIST_TYPE:::error
	RAISE_MISSING:::error
	RAISE_NONE:::error
	RAISE_TYPE_ERROR:::error
	RAISE_SCREEN_MISSING:::error
	RAISE_SCREEN_NONE:::error
	RAISE_SCREEN_TYPE:::error
	RAISE_IMGLIST_MISSING:::error
	RAISE_IMGLIST_NONE:::error
	RAISE_IMGLIST_TYPE:::error
	END:::success
	ERROR_END:::error

    
例外:

ValueError -- リクエストが無効な場合に発生

注釈

厳密な型チェックを行い、bool、Surface、listの型を正確に検証する。

class common.home.service.component.soundRequestValidator.RequestValidator(_request: HomeSoundRequest)

ベースクラス: AbstractRequestValidator

リクエストの妥当性を検証するクラス。

パラメータ:

_request (HomeSoundRequest) -- 検証対象のリクエスト

注釈

このクラスは dataclassfrozen=True として定義されており、作成後にフィールド値を変更することはできない。

raise_if_invalid() None

リクエストの妥当性を検証する。

処理フロー図を確認する
        
flowchart TD
	%% --- Common Styles ---
	classDef error fill:#f96,stroke:#333,stroke-width:2px
	classDef success fill:#9f9,stroke:#333,stroke-width:2px
	classDef info fill:#eee,stroke:#999,stroke-dasharray: 5 5

	%% --- Main Flow ---
	START(["開始: raise_if_invalid"]) --> INIT_ATTRS["bool_attributes = (<br/>'start_click', 'config_click',<br/>'exit_click', 'load_click'<br/>)<br/>bool属性リスト初期化"]
	
	INIT_ATTRS --> LOOP_START["for attr in bool_attributes:<br/>各bool属性の検証ループ開始"]
	LOOP_START --> CHECK_HASATTR{"hasattr(self._request, attr)?<br/>属性存在確認"}
	
	CHECK_HASATTR -->|False| LOG_MISSING["ERROR_LOG:<br/>[RequestValidator] Request missing<br/>required attribute: {attr}"]
	CHECK_HASATTR -->|True| GET_VALUE["value = getattr(self._request, attr)<br/>属性値を取得"]
	
	LOG_MISSING --> RAISE_MISSING["ValueError:<br/>RequestValidator: Missing<br/>attribute '{attr}'"]
	
	GET_VALUE --> CHECK_NONE{"value is None?<br/>None値チェック"}
	CHECK_NONE -->|True| LOG_NONE["ERROR_LOG:<br/>[RequestValidator] Request attribute<br/>'{attr}' is None"]
	CHECK_NONE -->|False| CHECK_BOOL{"isinstance(value, bool)?<br/>bool型チェック"}
	
	LOG_NONE --> RAISE_NONE["ValueError:<br/>RequestValidator: Attribute<br/>'{attr}' cannot be None"]
	
	CHECK_BOOL -->|False| LOG_TYPE_ERROR["ERROR_LOG:<br/>[RequestValidator] Request attribute<br/>'{attr}' has invalid type: {type(value)}"]
	CHECK_BOOL -->|True| NEXT_ATTR["次の属性へ<br/>ループ継続"]
	
	LOG_TYPE_ERROR --> RAISE_TYPE_ERROR["ValueError:<br/>RequestValidator: Invalid type for<br/>attribute '{attr}', expected bool"]
	
	NEXT_ATTR --> LOOP_CHECK{"全bool属性チェック完了?"}
	LOOP_CHECK -->|No| CHECK_HASATTR
	LOOP_CHECK -->|Yes| CHECK_VOLUME_HASATTR{"hasattr(self._request, 'volume')?<br/>volume属性存在確認"}
	
	CHECK_VOLUME_HASATTR -->|False| LOG_VOLUME_MISSING["ERROR_LOG:<br/>[RequestValidator] Request missing<br/>'volume' attribute"]
	CHECK_VOLUME_HASATTR -->|True| CHECK_VOLUME_NONE{"self._request.volume is None?<br/>volume値のNoneチェック"}
	
	LOG_VOLUME_MISSING --> RAISE_VOLUME_MISSING["ValueError:<br/>RequestValidator: Missing<br/>'volume' attribute"]
	
	CHECK_VOLUME_NONE -->|True| LOG_VOLUME_NONE["ERROR_LOG:<br/>[RequestValidator] Request attribute<br/>'volume' is None"]
	CHECK_VOLUME_NONE -->|False| CHECK_VOLUME_TYPE{"isinstance(self._request.volume, int)?<br/>int型チェック"}
	
	LOG_VOLUME_NONE --> RAISE_VOLUME_NONE["ValueError:<br/>RequestValidator: 'volume'<br/>attribute cannot be None"]
	
	CHECK_VOLUME_TYPE -->|False| LOG_VOLUME_TYPE["ERROR_LOG:<br/>[RequestValidator] Request attribute<br/>'volume' has invalid type:<br/>{type(self._request.volume)}"]
	CHECK_VOLUME_TYPE -->|True| CHECK_SOUNDLIST_HASATTR{"hasattr(self._request, 'sound_list')?<br/>sound_list属性存在確認"}
	
	LOG_VOLUME_TYPE --> RAISE_VOLUME_TYPE["ValueError:<br/>RequestValidator: Invalid type for<br/>attribute 'volume', expected int"]
	
	CHECK_SOUNDLIST_HASATTR -->|False| LOG_SOUNDLIST_MISSING["ERROR_LOG:<br/>[RequestValidator] Request missing<br/>'sound_list' attribute"]
	CHECK_SOUNDLIST_HASATTR -->|True| CHECK_SOUNDLIST_NONE{"self._request.sound_list is None?<br/>sound_list値のNoneチェック"}
	
	LOG_SOUNDLIST_MISSING --> RAISE_SOUNDLIST_MISSING["ValueError:<br/>RequestValidator: Missing<br/>'sound_list' attribute"]
	
	CHECK_SOUNDLIST_NONE -->|True| LOG_SOUNDLIST_NONE["ERROR_LOG:<br/>[RequestValidator] Request attribute<br/>'sound_list' is None"]
	CHECK_SOUNDLIST_NONE -->|False| CHECK_SOUNDLIST_TYPE{"isinstance(self._request.sound_list, list)?<br/>list型チェック"}
	
	LOG_SOUNDLIST_NONE --> RAISE_SOUNDLIST_NONE["ValueError:<br/>RequestValidator: 'sound_list'<br/>attribute cannot be None"]
	
	CHECK_SOUNDLIST_TYPE -->|False| LOG_SOUNDLIST_TYPE["ERROR_LOG:<br/>[RequestValidator] Request attribute<br/>'sound_list' has invalid type:<br/>{type(self._request.sound_list)}"]
	CHECK_SOUNDLIST_TYPE -->|True| VALIDATION_SUCCESS["検証完了<br/>例外なし<br/>return None"]
	
	LOG_SOUNDLIST_TYPE --> RAISE_SOUNDLIST_TYPE["ValueError:<br/>RequestValidator: Invalid type for<br/>attribute 'sound_list', expected list"]
	
	VALIDATION_SUCCESS --> END(["正常終了"])
	
	RAISE_MISSING --> ERROR_END(["例外で終了"])
	RAISE_NONE --> ERROR_END
	RAISE_TYPE_ERROR --> ERROR_END
	RAISE_VOLUME_MISSING --> ERROR_END
	RAISE_VOLUME_NONE --> ERROR_END
	RAISE_VOLUME_TYPE --> ERROR_END
	RAISE_SOUNDLIST_MISSING --> ERROR_END
	RAISE_SOUNDLIST_NONE --> ERROR_END
	RAISE_SOUNDLIST_TYPE --> ERROR_END

	%% --- Apply Styles ---
	START:::info
	INIT_ATTRS:::info
	LOOP_START:::info
	CHECK_HASATTR:::info
	GET_VALUE:::info
	CHECK_NONE:::info
	CHECK_BOOL:::info
	NEXT_ATTR:::info
	LOOP_CHECK:::info
	CHECK_VOLUME_HASATTR:::info
	CHECK_VOLUME_NONE:::info
	CHECK_VOLUME_TYPE:::info
	CHECK_SOUNDLIST_HASATTR:::info
	CHECK_SOUNDLIST_NONE:::info
	CHECK_SOUNDLIST_TYPE:::info
	VALIDATION_SUCCESS:::success
	LOG_MISSING:::error
	LOG_NONE:::error
	LOG_TYPE_ERROR:::error
	LOG_VOLUME_MISSING:::error
	LOG_VOLUME_NONE:::error
	LOG_VOLUME_TYPE:::error
	LOG_SOUNDLIST_MISSING:::error
	LOG_SOUNDLIST_NONE:::error
	LOG_SOUNDLIST_TYPE:::error
	RAISE_MISSING:::error
	RAISE_NONE:::error
	RAISE_TYPE_ERROR:::error
	RAISE_VOLUME_MISSING:::error
	RAISE_VOLUME_NONE:::error
	RAISE_VOLUME_TYPE:::error
	RAISE_SOUNDLIST_MISSING:::error
	RAISE_SOUNDLIST_NONE:::error
	RAISE_SOUNDLIST_TYPE:::error
	END:::success
	ERROR_END:::error



    
例外:

ValueError -- リクエストが無効な場合に発生

注釈

厳密な型チェックを行い、bool、int、listの型を正確に検証する。

Manager系

class common.home.service.component.displayScreenManager.DisplayScreenManager(_screen: Surface | None = None, _img: Surface | None = None, _pos: tuple[int, int] | None = None)

ベースクラス: AbstractScreenComponent

画面の描画を管理するクラス。

パラメータ:
  • _screen (Surface) -- 描画対象の画面

  • _img (Surface) -- 描画する画像

  • _pos (tuple[int, int]) -- 描画位置 (x, y)

blit() bool

画面に画像を描画する。

処理フロー図を確認する
        
flowchart TD
	%% --- Common Styles ---
	classDef error fill:#f96,stroke:#333,stroke-width:2px
	classDef success fill:#9f9,stroke:#333,stroke-width:2px
	classDef info fill:#eee,stroke:#999,stroke-dasharray: 5 5

	%% --- Validation Phase ---
	START(["開始: blit"]) --> CHECK_SCREEN{"self._screen is None?<br/>画面オブジェクトの存在確認"}
	CHECK_SCREEN -->|True| LOG_SCREEN_ERROR["ERROR_LOG:<br/>[DisplayScreenManager] Screen is not set."]
	CHECK_SCREEN -->|False| CHECK_IMG{"self._img is None?<br/>画像オブジェクトの存在確認"}
	
	LOG_SCREEN_ERROR --> RETURN_SCREEN_ERROR["return True<br/>バリデーションエラー"]
	
	CHECK_IMG -->|True| LOG_IMG_ERROR["ERROR_LOG:<br/>[DisplayScreenManager] Image is not set."]
	CHECK_IMG -->|False| CHECK_POS{"self._pos is None?<br/>位置情報の存在確認"}
	
	LOG_IMG_ERROR --> RETURN_IMG_ERROR["return True<br/>バリデーションエラー"]
	
	CHECK_POS -->|True| LOG_POS_ERROR["ERROR_LOG:<br/>[DisplayScreenManager] Position is not set."]
	CHECK_POS -->|False| TRY_BLIT["try:<br/>self._screen.blit(self._img, self._pos)<br/>画面描画実行"]
	
	LOG_POS_ERROR --> RETURN_POS_ERROR["return True<br/>バリデーションエラー"]

	%% --- Main Blit Execution ---
	TRY_BLIT --> BLIT_SUCCESS["描画成功<br/>return False"]
	TRY_BLIT --> PYGAME_ERROR["pygame.error発生<br/>画面描画エラー"]
	TRY_BLIT --> MEMORY_ERROR["MemoryError発生<br/>メモリ不足"]
	TRY_BLIT --> GENERAL_ERROR["Exception発生<br/>その他例外"]

	%% --- Pygame Error Recovery Chain ---
	PYGAME_ERROR --> TRY_PYGAME_RECOVERY["try:<br/>self._handle_pygame_error(e)"]
	TRY_PYGAME_RECOVERY --> CHECK_ERROR_TYPE{"エラーメッセージ判定<br/>str(error).lower()"}
	
	CHECK_ERROR_TYPE -->|"surface" + "size/dimension"| EXECUTE_SURFACE_RECOVERY_CHAIN["Surface size関連<br/>self._execute_recovery_chain()"]
	CHECK_ERROR_TYPE -->|"format" or "depth"| DIRECT_FORMAT_CONVERSION["Format/Depth関連<br/>self._try_format_conversion()"]
	CHECK_ERROR_TYPE -->|その他| EXECUTE_GENERAL_RECOVERY_CHAIN["その他のエラー<br/>self._execute_recovery_chain()"]
	
	%% --- Direct Format Conversion Path ---
	DIRECT_FORMAT_CONVERSION -->|Success| FORMAT_CONVERSION_SUCCESS["フォーマット変換成功<br/>return False"]
	DIRECT_FORMAT_CONVERSION -->|Fail| FORMAT_CONVERSION_FAILED["フォーマット変換失敗<br/>return True"]
	
	%% --- Surface Size Recovery Chain ---
	EXECUTE_SURFACE_RECOVERY_CHAIN --> SURFACE_RECOVERY_METHODS["Surface size用<br/>リカバリーチェーン実行"]
	SURFACE_RECOVERY_METHODS --> SURFACE_TRY_POSITION["1. _try_position_recovery()<br/>位置調整リカバリー"]
	SURFACE_TRY_POSITION -->|Success| SURFACE_RECOVERY_SUCCESS_1["位置調整成功<br/>return False"]
	SURFACE_TRY_POSITION -->|Fail| SURFACE_TRY_FORMAT["2. _try_format_conversion()<br/>フォーマット変換リカバリー"]
	
	SURFACE_TRY_FORMAT -->|Success| SURFACE_RECOVERY_SUCCESS_2["フォーマット変換成功<br/>return False"]
	SURFACE_TRY_FORMAT -->|Fail| SURFACE_TRY_SCALING["3. _try_scaling_recovery()<br/>スケーリングリカバリー"]
	
	SURFACE_TRY_SCALING -->|Success| SURFACE_RECOVERY_SUCCESS_3["スケーリング成功<br/>return False"]
	SURFACE_TRY_SCALING -->|Fail| SURFACE_TRY_CLIPPING["4. _try_clipping_recovery()<br/>クリッピングリカバリー"]
	
	SURFACE_TRY_CLIPPING -->|Success| SURFACE_RECOVERY_SUCCESS_4["クリッピング成功<br/>return False"]
	SURFACE_TRY_CLIPPING -->|Fail| SURFACE_TRY_FALLBACK["5. _try_fallback_recovery()<br/>フォールバック処理"]
	
	SURFACE_TRY_FALLBACK -->|Success| SURFACE_RECOVERY_SUCCESS_5["フォールバック成功<br/>return False<br/>赤い矩形描画"]
	SURFACE_TRY_FALLBACK -->|Fail| SURFACE_ALL_RECOVERY_FAILED["Surface size用<br/>全リカバリー失敗<br/>return True"]
	
	%% --- General Recovery Chain ---
	EXECUTE_GENERAL_RECOVERY_CHAIN --> GENERAL_RECOVERY_METHODS["一般用<br/>リカバリーチェーン実行"]
	GENERAL_RECOVERY_METHODS --> GENERAL_TRY_POSITION["1. _try_position_recovery()<br/>位置調整リカバリー"]
	GENERAL_TRY_POSITION -->|Success| GENERAL_RECOVERY_SUCCESS_1["位置調整成功<br/>return False"]
	GENERAL_TRY_POSITION -->|Fail| GENERAL_TRY_FORMAT["2. _try_format_conversion()<br/>フォーマット変換リカバリー"]
	
	GENERAL_TRY_FORMAT -->|Success| GENERAL_RECOVERY_SUCCESS_2["フォーマット変換成功<br/>return False"]
	GENERAL_TRY_FORMAT -->|Fail| GENERAL_TRY_SCALING["3. _try_scaling_recovery()<br/>スケーリングリカバリー"]
	
	GENERAL_TRY_SCALING -->|Success| GENERAL_RECOVERY_SUCCESS_3["スケーリング成功<br/>return False"]
	GENERAL_TRY_SCALING -->|Fail| GENERAL_TRY_CLIPPING["4. _try_clipping_recovery()<br/>クリッピングリカバリー"]
	
	GENERAL_TRY_CLIPPING -->|Success| GENERAL_RECOVERY_SUCCESS_4["クリッピング成功<br/>return False"]
	GENERAL_TRY_CLIPPING -->|Fail| GENERAL_TRY_FALLBACK["5. _try_fallback_recovery()<br/>フォールバック処理"]
	
	GENERAL_TRY_FALLBACK -->|Success| GENERAL_RECOVERY_SUCCESS_5["フォールバック成功<br/>return False<br/>赤い矩形描画"]
	GENERAL_TRY_FALLBACK -->|Fail| GENERAL_ALL_RECOVERY_FAILED["一般用<br/>全リカバリー失敗<br/>return True"]

	%% --- Recovery Exception Handling ---
	TRY_PYGAME_RECOVERY --> PYGAME_RECOVERY_ERROR["Exception発生<br/>リカバリー処理例外"]
	PYGAME_RECOVERY_ERROR --> LOG_PYGAME_RECOVERY_ERROR["ERROR_LOG:<br/>Error during pygame error recovery"]
	LOG_PYGAME_RECOVERY_ERROR --> PYGAME_FINAL_ERROR["return True<br/>リカバリー例外エラー"]

	%% --- Memory Error Handling ---
	MEMORY_ERROR --> TRY_MEMORY_RECOVERY["try:<br/>self._handle_memory_error(e)"]
	TRY_MEMORY_RECOVERY --> MEMORY_HANDLER_RESULT["メモリエラーハンドリング<br/>通常return True"]
	TRY_MEMORY_RECOVERY --> MEMORY_RECOVERY_ERROR["Exception発生<br/>メモリリカバリー例外"]
	
	MEMORY_RECOVERY_ERROR --> LOG_MEMORY_RECOVERY_ERROR["ERROR_LOG:<br/>Error during memory error recovery"]
	LOG_MEMORY_RECOVERY_ERROR --> MEMORY_FINAL_ERROR["return True<br/>メモリリカバリー例外"]

	%% --- General Error Handling ---
	GENERAL_ERROR --> TRY_GENERAL_RECOVERY["try:<br/>self._handle_general_error(e)"]
	TRY_GENERAL_RECOVERY --> GENERAL_HANDLER_RESULT["一般例外ハンドリング<br/>通常return True"]
	TRY_GENERAL_RECOVERY --> GENERAL_RECOVERY_ERROR["Exception発生<br/>一般リカバリー例外"]
	
	GENERAL_RECOVERY_ERROR --> LOG_GENERAL_RECOVERY_ERROR["ERROR_LOG:<br/>Error during general error recovery"]
	LOG_GENERAL_RECOVERY_ERROR --> GENERAL_FINAL_ERROR["return True<br/>一般リカバリー例外"]

	%% --- End States ---
	BLIT_SUCCESS --> SUCCESS_END(["正常終了"])
	FORMAT_CONVERSION_SUCCESS --> SUCCESS_END
	SURFACE_RECOVERY_SUCCESS_1 --> SUCCESS_END
	SURFACE_RECOVERY_SUCCESS_2 --> SUCCESS_END
	SURFACE_RECOVERY_SUCCESS_3 --> SUCCESS_END
	SURFACE_RECOVERY_SUCCESS_4 --> SUCCESS_END
	SURFACE_RECOVERY_SUCCESS_5 --> SUCCESS_END
	GENERAL_RECOVERY_SUCCESS_1 --> SUCCESS_END
	GENERAL_RECOVERY_SUCCESS_2 --> SUCCESS_END
	GENERAL_RECOVERY_SUCCESS_3 --> SUCCESS_END
	GENERAL_RECOVERY_SUCCESS_4 --> SUCCESS_END
	GENERAL_RECOVERY_SUCCESS_5 --> SUCCESS_END
	
	RETURN_SCREEN_ERROR --> ERROR_END(["エラー終了"])
	RETURN_IMG_ERROR --> ERROR_END
	RETURN_POS_ERROR --> ERROR_END
	FORMAT_CONVERSION_FAILED --> ERROR_END
	SURFACE_ALL_RECOVERY_FAILED --> ERROR_END
	GENERAL_ALL_RECOVERY_FAILED --> ERROR_END
	PYGAME_FINAL_ERROR --> ERROR_END
	MEMORY_HANDLER_RESULT --> ERROR_END
	MEMORY_FINAL_ERROR --> ERROR_END
	GENERAL_HANDLER_RESULT --> ERROR_END
	GENERAL_FINAL_ERROR --> ERROR_END

	%% --- Apply Styles ---
	START:::info
	CHECK_SCREEN:::info
	CHECK_IMG:::info
	CHECK_POS:::info
	LOG_SCREEN_ERROR:::error
	LOG_IMG_ERROR:::error
	LOG_POS_ERROR:::error
	RETURN_SCREEN_ERROR:::error
	RETURN_IMG_ERROR:::error
	RETURN_POS_ERROR:::error
	TRY_BLIT:::info
	BLIT_SUCCESS:::success
	PYGAME_ERROR:::error
	MEMORY_ERROR:::error
	GENERAL_ERROR:::error
	TRY_PYGAME_RECOVERY:::info
	CHECK_ERROR_TYPE:::info
	EXECUTE_SURFACE_RECOVERY_CHAIN:::info
	DIRECT_FORMAT_CONVERSION:::info
	EXECUTE_GENERAL_RECOVERY_CHAIN:::info
	FORMAT_CONVERSION_SUCCESS:::success
	FORMAT_CONVERSION_FAILED:::error
	SURFACE_RECOVERY_METHODS:::info
	SURFACE_TRY_POSITION:::info
	SURFACE_TRY_FORMAT:::info
	SURFACE_TRY_SCALING:::info
	SURFACE_TRY_CLIPPING:::info
	SURFACE_TRY_FALLBACK:::info
	SURFACE_RECOVERY_SUCCESS_1:::success
	SURFACE_RECOVERY_SUCCESS_2:::success
	SURFACE_RECOVERY_SUCCESS_3:::success
	SURFACE_RECOVERY_SUCCESS_4:::success
	SURFACE_RECOVERY_SUCCESS_5:::success
	SURFACE_ALL_RECOVERY_FAILED:::error
	GENERAL_RECOVERY_METHODS:::info
	GENERAL_TRY_POSITION:::info
	GENERAL_TRY_FORMAT:::info
	GENERAL_TRY_SCALING:::info
	GENERAL_TRY_CLIPPING:::info
	GENERAL_TRY_FALLBACK:::info
	GENERAL_RECOVERY_SUCCESS_1:::success
	GENERAL_RECOVERY_SUCCESS_2:::success
	GENERAL_RECOVERY_SUCCESS_3:::success
	GENERAL_RECOVERY_SUCCESS_4:::success
	GENERAL_RECOVERY_SUCCESS_5:::success
	GENERAL_ALL_RECOVERY_FAILED:::error
	PYGAME_RECOVERY_ERROR:::error
	LOG_PYGAME_RECOVERY_ERROR:::error
	PYGAME_FINAL_ERROR:::error
	TRY_MEMORY_RECOVERY:::info
	MEMORY_HANDLER_RESULT:::error
	MEMORY_RECOVERY_ERROR:::error
	LOG_MEMORY_RECOVERY_ERROR:::error
	MEMORY_FINAL_ERROR:::error
	TRY_GENERAL_RECOVERY:::info
	GENERAL_HANDLER_RESULT:::error
	GENERAL_RECOVERY_ERROR:::error
	LOG_GENERAL_RECOVERY_ERROR:::error
	GENERAL_FINAL_ERROR:::error
	SUCCESS_END:::success
	ERROR_END:::error

    
戻り値:

描画処理が成功したかどうかを示すフラグ (True: エラー発生, False: 成功)

戻り値の型:

bool

class common.home.service.component.soundChannelManager.SoundChannelManager(mp3_path: str | None = None, volume: int | None = None)

ベースクラス: AbstractSoundManager

音声再生を管理するクラス。

パラメータ:
  • mp3_path (str | None) -- 再生するMP3ファイルのパス

  • volume (int | None) -- 再生する音量レベルを示す整数

注釈

このクラスは dataclassfrozen=True として定義されており、作成後にフィールド値を変更することはできない。

mp3_path: str | None = None
start() None

音声再生を開始するメソッド。

引数(volume および mp3_path)が有効であれば、指定されたMP3ファイルを再生し、音量を設定する。

処理フロー図を確認する
        
flowchart TD
	%% --- Common Styles ---
	classDef error fill:#f96,stroke:#333,stroke-width:2px
	classDef success fill:#9f9,stroke:#333,stroke-width:2px
	classDef info fill:#eee,stroke:#999,stroke-dasharray: 5 5

	%% --- Main Flow ---
	START(["開始: start"]) --> CHECK_BOTH{"super()._is_volume_valid(self.volume)<br/>and<br/>super()._is_mp3_path_valid(self.mp3_path)?<br/>音量とMP3パスの妥当性チェック"}
	
	CHECK_BOTH -->|False| RAISE_VALUE_ERROR["ValueError発生<br/>引数不備エラー:<br/>volume={self.volume},<br/>mp3_path={self.mp3_path}"]
	
	CHECK_BOTH -->|True| TRY_START["try:<br/>音声再生ブロック開始"]
	
	TRY_START --> LOAD_MUSIC["pygame.mixer.music.load(<br/>self.mp3_path)<br/>MP3ファイル読み込み"]
	
	LOAD_MUSIC --> SET_VOLUME["pygame.mixer.music.set_volume(<br/>self.volume / VolumeSliderSize.VOLUME_MAX<br/>)<br/>音量設定"]
	
	SET_VOLUME --> PLAY["pygame.mixer.music.play()<br/>再生開始"]
	
	PLAY --> SUCCESS_END(["再生成功<br/>終了"])
	
	TRY_START --> EXCEPT_BLOCK["except Exception as e:<br/>例外キャッチ<br/>(load, set_volume, play<br/>のいずれかで発生)"]
	
	EXCEPT_BLOCK --> RAISE_EXCEPTION["Exception発生<br/>音声再生エラー: 音声を再生できませんでした。<br/>エラー: {e}"]
	
	RAISE_VALUE_ERROR --> ERROR_END(["例外で終了"])
	RAISE_EXCEPTION --> ERROR_END

	%% --- Apply Styles ---
	START:::info
	CHECK_BOTH:::info
	TRY_START:::info
	LOAD_MUSIC:::info
	SET_VOLUME:::info
	PLAY:::info
	EXCEPT_BLOCK:::error
	SUCCESS_END:::success
	RAISE_VALUE_ERROR:::error
	RAISE_EXCEPTION:::error
	ERROR_END:::error



    
例外:
  • Exception -- 音声再生に失敗した場合の一般的な例外

  • ValueError -- 引数の不備(volumeが VolumeSliderSize の範囲外、mp3_pathがNoneなど)がある場合

stop() None

音声再生を停止するメソッド(本クラスではサポートされていない)。

処理フロー図を確認する
        
flowchart TD
	%% --- Common Styles ---
	classDef error fill:#f96,stroke:#333,stroke-width:2px
	classDef success fill:#9f9,stroke:#333,stroke-width:2px
	classDef info fill:#eee,stroke:#999,stroke-dasharray: 5 5

	%% --- Main Flow ---
	START(["開始: stop"]) --> RAISE_EXCEPTION["NotImplementedError発生<br/>このクラスは音声再生専用で、<br/>停止処理はサポートされていません。"]
	RAISE_EXCEPTION --> ERROR_END(["例外で終了"])

	%% --- Apply Styles ---
	START:::info
	RAISE_EXCEPTION:::error
	ERROR_END:::error



    
volume: int | None = None

SAVEモジュール

セーブ・ロード機能のAPI仕様です。

Controller層

Service層

class common.save.service.display.Display(request: SaveDisplayRequest)

ベースクラス: object

セーブ画面の表示を処理するクラス。

バックボタン、ホームボタン、セーブデータのリスト、セーブボタン、ロードボタン、デリートボタンなどの表示位置を取得する。

注釈

このクラスは表示処理のビジネスロジックを担当し、実際の画面描画は各メソッド内で行う。

disp_back_button() Response
バックボタンを表示する。
  • タッチされている場合は、タッチされた状態の画像を表示する

  • タッチされていない場合は、通常の画像を表示する

処理フロー図を確認する
        
flowchart TD
	%% --- Common Styles ---
	classDef error fill:#f96,stroke:#333,stroke-width:2px
	classDef success fill:#9f9,stroke:#333,stroke-width:2px
	classDef info fill:#eee,stroke:#999,stroke-dasharray: 5 5

	START(["開始: disp_back_button"]):::info
	CHECK_TOUCH{"back_button_touch<br/>が True?"}:::info

	TOUCH_IMG["DisplayScreenManager 生成<br/>(タッチ状態の画像を使用)"]:::info
	NORMAL_IMG["DisplayScreenManager 生成<br/>(通常状態の画像を使用)"]:::info

	BLIT["Dsm.blit() で画面描画"]:::info
	CHECK_ERROR{"error_flg<br/>== True?"}:::info

	CREATE_RESPONSE_OK["Response 生成<br/>data = Position.BACK_BUTTON<br/>result = Code.OK"]:::success
	CREATE_RESPONSE_ERROR["Response 生成<br/>data = Position.ERROR<br/>result = Code.SCREEN_ERROR"]:::error

	RETURN(["Response を返却"]):::success
	END(["処理完了"]):::success

	START --> CHECK_TOUCH
	CHECK_TOUCH -- yes --> TOUCH_IMG
	CHECK_TOUCH -- no --> NORMAL_IMG
	TOUCH_IMG --> BLIT
	NORMAL_IMG --> BLIT
	BLIT --> CHECK_ERROR
	CHECK_ERROR -- yes --> CREATE_RESPONSE_ERROR --> RETURN
	CHECK_ERROR -- no --> CREATE_RESPONSE_OK --> RETURN
	RETURN --> END



    
戻り値:

バックボタンの位置を返す

戻り値の型:

Response

disp_delete_button(index: int) Response
デリートボタンを表示する。
  • タッチされている場合は、タッチされた状態の画像を表示する

  • タッチされていない場合は、通常の画像を表示する

処理フロー図を確認する
        
flowchart TD
	%% --- Common Styles ---
	classDef error fill:#f96,stroke:#333,stroke-width:2px
	classDef success fill:#9f9,stroke:#333,stroke-width:2px
	classDef info fill:#eee,stroke:#999,stroke-dasharray: 5 5

	START(["開始: disp_delete_button"]):::info
	PARAM["パラメータ受け取り<br/>index: int"]:::info

	GET_DISP_LIST["self._disp_list[index] から取得<br/>flag, text = self._disp_list[index]"]:::info
	CHECK_FLAG{"flag<br/>== True?"}:::info

	DELETE_ENABLED["削除ボタン有効<br/>セーブデータが存在"]:::success
	CHECK_TOUCH{"self._delete_touch_list[index]<br/>== True?"}:::info

	TOUCH_IMG["DisplayScreenManager 生成<br/>SaveButtonIndex.DELETE_TOUCH"]:::info
	NORMAL_IMG["DisplayScreenManager 生成<br/>SaveButtonIndex.DELETE"]:::info

	BLIT_ENABLED["Dsm.blit() で画面描画<br/>error_flg を取得"]:::info

	DELETE_DISABLED["削除ボタン無効<br/>セーブデータが未存在"]:::error
	DISABLE_IMG["DisplayScreenManager 生成<br/>SaveButtonIndex.DELETE_DISABLE"]:::info
	BLIT_DISABLED["Dsm.blit() で画面描画<br/>error_flg を取得"]:::info

	CHECK_ERROR_ENABLED{"error_flg<br/>== True?"}
	CREATE_RESPONSE_ERROR_ENABLED["Display.__create_response<br/>(error_flg, Position.DELETE_BUTTON_LIST[index])"]:::error
	CREATE_RESPONSE_OK_ENABLED["Display.__create_response<br/>(error_flg, Position.DELETE_BUTTON_LIST[index])"]:::success

	CHECK_ERROR_DISABLED{"error_flg<br/>== True?"}
	CREATE_RESPONSE_ERROR_DISABLED["Display.__create_response<br/>(error_flg, Position.DISABLE)"]:::error
	CREATE_RESPONSE_OK_DISABLED["Display.__create_response<br/>(error_flg, Position.DISABLE)"]:::success

	RETURN(["Response を返却"]):::success
	END(["処理完了"]):::success

	START --> PARAM --> GET_DISP_LIST --> CHECK_FLAG
	CHECK_FLAG -- yes --> DELETE_ENABLED --> CHECK_TOUCH
	CHECK_TOUCH -- yes --> TOUCH_IMG
	CHECK_TOUCH -- no --> NORMAL_IMG
	TOUCH_IMG --> BLIT_ENABLED
	NORMAL_IMG --> BLIT_ENABLED
	BLIT_ENABLED --> CHECK_ERROR_ENABLED
	CHECK_ERROR_ENABLED -- yes --> CREATE_RESPONSE_ERROR_ENABLED --> RETURN
	CHECK_ERROR_ENABLED -- no --> CREATE_RESPONSE_OK_ENABLED --> RETURN

	CHECK_FLAG -- no --> DELETE_DISABLED --> DISABLE_IMG --> BLIT_DISABLED --> CHECK_ERROR_DISABLED
	CHECK_ERROR_DISABLED -- yes --> CREATE_RESPONSE_ERROR_DISABLED --> RETURN
	CHECK_ERROR_DISABLED -- no --> CREATE_RESPONSE_OK_DISABLED --> RETURN

	RETURN --> END



    
パラメータ:

index (int) -- 表示するリストのインデックス

戻り値:

デリートボタンの位置を返す

戻り値の型:

Response

disp_home_button() Response
ホームボタンを表示する。
  • タッチされている場合は、タッチされた状態の画像を表示する

  • タッチされていない場合は、通常の画像を表示する

処理フロー図を確認する
        
flowchart TD
	%% --- Common Styles ---
	classDef error fill:#f96,stroke:#333,stroke-width:2px
	classDef success fill:#9f9,stroke:#333,stroke-width:2px
	classDef info fill:#eee,stroke:#999,stroke-dasharray: 5 5

	START(["開始: disp_home_button"]):::info
	CHECK_TOUCH{"home_button_touch<br/>が True?"}:::info

	TOUCH_IMG["DisplayScreenManager 生成<br/>(タッチ状態の画像を使用)"]:::info
	NORMAL_IMG["DisplayScreenManager 生成<br/>(通常状態の画像を使用)"]:::info

	BLIT["Dsm.blit() で画面描画"]:::info
	CHECK_ERROR{"error_flg<br/>== True?"}:::info

	CREATE_RESPONSE_OK["Response 生成<br/>data = Position.HOME_BUTTON<br/>result = Code.OK"]:::success
	CREATE_RESPONSE_ERROR["Response 生成<br/>data = Position.ERROR<br/>result = Code.SCREEN_ERROR"]:::error

	RETURN(["Response を返却"]):::success
	END(["処理完了"]):::success

	START --> CHECK_TOUCH
	CHECK_TOUCH -- yes --> TOUCH_IMG
	CHECK_TOUCH -- no --> NORMAL_IMG
	TOUCH_IMG --> BLIT
	NORMAL_IMG --> BLIT
	BLIT --> CHECK_ERROR
	CHECK_ERROR -- yes --> CREATE_RESPONSE_ERROR --> RETURN
	CHECK_ERROR -- no --> CREATE_RESPONSE_OK --> RETURN
	RETURN --> END



    
戻り値:

ホームボタンの位置を返す

戻り値の型:

Response

disp_init() Response

セーブ画面の初期表示を行う。

処理フロー図を確認する
        
flowchart TD
	%% ファイル: common/save/service/display.py
	%% クラス: Display
	%% メソッド: disp_init
	%% --- Common Styles ---
	classDef error fill:#f96,stroke:#333,stroke-width:2px
	classDef success fill:#9f9,stroke:#333,stroke-width:2px
	classDef info fill:#eee,stroke:#999,stroke-dasharray: 5 5

	START(["開始: disp_init"]):::info
	CREATE_DSM["DisplayScreenManager 生成<br/>screen, img_list[SAVE][0], (0, 0)"]:::info
	CALL_BLIT["error_flg = dsm.blit()"]:::info
	CREATE_RESPONSE["Display.__create_response(error_flg, (0, 0))"]:::info
	CHECK_ERROR{"error_flg == True?"}:::info
	RES_ERROR["Response<br/>data=Position.ERROR<br/>result=Code.SCREEN_ERROR"]:::error
	RES_OK["Response<br/>data=(0, 0)<br/>result=Code.OK"]:::success
	END(["処理完了"]):::success

	START --> CREATE_DSM --> CALL_BLIT --> CREATE_RESPONSE --> CHECK_ERROR
	CHECK_ERROR -- yes --> RES_ERROR --> END
	CHECK_ERROR -- no --> RES_OK --> END


    
戻り値:

初期表示の位置を返す

戻り値の型:

Response

disp_list(index: int) Response
セーブデータのリストを表示する。
  • index に対応するセーブデータのリストを表示する

処理フロー図を確認する
        
flowchart TD
	%% --- Common Styles ---
	classDef error fill:#f96,stroke:#333,stroke-width:2px
	classDef success fill:#9f9,stroke:#333,stroke-width:2px
	classDef info fill:#eee,stroke:#999,stroke-dasharray: 5 5

	START(["開始: disp_list"]):::info
	PARAM["パラメータ受け取り<br/>index: int"]:::info

	CREATE_DSM["DisplayScreenManager 生成<br/>img_list[LIST][0]<br/>CardPosition.CARD_LIST[index]"]:::info

	BLIT["Dsm.blit() で画面描画"]:::info
	CHECK_ERROR{"error_flg<br/>== True?"}:::info

	CREATE_RESPONSE_OK["Response 生成<br/>data = CardPosition.CARD_LIST[index]<br/>result = Code.OK"]:::success
	CREATE_RESPONSE_ERROR["Response 生成<br/>data = Position.ERROR<br/>result = Code.SCREEN_ERROR"]:::error

	RETURN(["Response を返却"]):::success
	END(["処理完了"]):::success

	START --> PARAM --> CREATE_DSM --> BLIT --> CHECK_ERROR
	CHECK_ERROR -- yes --> CREATE_RESPONSE_ERROR --> RETURN
	CHECK_ERROR -- no --> CREATE_RESPONSE_OK --> RETURN
	RETURN --> END



    
パラメータ:

index (int) -- 表示するリストのインデックス

戻り値:

リストの位置を返す

戻り値の型:

Response

disp_list_text(index: int) Response
セーブデータのリストにテキストを表示する。
  • index に対応するセーブデータのリストにテキストを表示する

処理フロー図を確認する
        
flowchart TD
	%% --- Common Styles ---
	classDef error fill:#f96,stroke:#333,stroke-width:2px
	classDef success fill:#9f9,stroke:#333,stroke-width:2px
	classDef info fill:#eee,stroke:#999,stroke-dasharray: 5 5

	START(["開始: disp_list_text"]):::info
	PARAM["パラメータ受け取り<br/>index: int"]:::info

	GET_DISP_LIST["self._disp_list[index] から取得<br/>flag, text = self._disp_list[index]"]:::info
	CHECK_FLAG{"flag<br/>== True?"}:::info

	SET_TEXT_DATA["disp_text = text"]:::success
	SET_TEXT_NO_DATA["disp_text = Text.NO_DATA"]:::info

	CREATE_DTM["DisplayTextManager 生成<br/>_screen, _font, _text, _pos を設定"]:::info
	BLIT["Dtm.blit() でテキスト描画<br/>error_flg を取得"]:::info

	CHECK_ERROR{"error_flg<br/>== True?"}

	CREATE_RESPONSE_ERROR["Response 生成<br/>data = disp_text<br/>result = Code.SCREEN_ERROR"]:::error
	CREATE_RESPONSE_OK["Response 生成<br/>data = disp_text<br/>result = Code.OK"]:::success

	RETURN(["Response を返却"]):::success
	END(["処理完了"]):::success

	START --> PARAM --> GET_DISP_LIST --> CHECK_FLAG
	CHECK_FLAG -- yes --> SET_TEXT_DATA --> CREATE_DTM
	CHECK_FLAG -- no --> SET_TEXT_NO_DATA --> CREATE_DTM
	CREATE_DTM --> BLIT --> CHECK_ERROR
	CHECK_ERROR -- yes --> CREATE_RESPONSE_ERROR --> RETURN
	CHECK_ERROR -- no --> CREATE_RESPONSE_OK --> RETURN
	RETURN --> END



    
パラメータ:

index (int) -- 表示するリストのインデックス

戻り値:

表示するテキストを返す

戻り値の型:

Response

disp_load_button(index: int) Response

ロードボタンを表示する。

処理フロー図を確認する
        
flowchart TD
	%% ファイル: common/save/service/display.py
	%% クラス: Display
	%% メソッド: disp_load_button
	%% --- Common Styles ---
	classDef error fill:#f96,stroke:#333,stroke-width:2px
	classDef success fill:#9f9,stroke:#333,stroke-width:2px
	classDef info fill:#eee,stroke:#999,stroke-dasharray: 5 5

	START(["開始: disp_load_button"]):::info
	PARAM["パラメータ受け取り<br/>index: int"]:::info

	GET_DISP_LIST["self._disp_list[index] から取得<br/>flag, text = self._disp_list[index]"]:::info
	CHECK_FLAG{"flag == True?"}:::info

	LOAD_ENABLED["ロードボタン有効<br/>セーブデータが存在"]:::success
	CHECK_TOUCH{"self._load_touch_list[index]<br/>== True?"}:::info

	TOUCH_IMG["DisplayScreenManager 生成<br/>SaveButtonIndex.LOAD_TOUCH"]:::info
	NORMAL_IMG["DisplayScreenManager 生成<br/>SaveButtonIndex.LOAD"]:::info

	BLIT_ENABLED["Dsm.blit() で画面描画<br/>error_flg を取得"]:::info

	LOAD_DISABLED["ロードボタン無効<br/>セーブデータが未存在"]:::error
	DISABLE_IMG["DisplayScreenManager 生成<br/>SaveButtonIndex.LOAD_DISABLE"]:::info
	BLIT_DISABLED["Dsm.blit() で画面描画<br/>error_flg を取得"]:::info

	CHECK_ERROR_ENABLED{"error_flg == True?"}:::info
	CREATE_RESP_ERR_EN["Display.__create_response<br/>(error_flg, Position.LOAD_BUTTON_LIST[index])"]:::error
	CREATE_RESP_OK_EN["Display.__create_response<br/>(error_flg, Position.LOAD_BUTTON_LIST[index])"]:::success

	CHECK_ERROR_DISABLED{"error_flg == True?"}:::info
	CREATE_RESP_ERR_DIS["Display.__create_response<br/>(error_flg, Position.DISABLE)"]:::error
	CREATE_RESP_OK_DIS["Display.__create_response<br/>(error_flg, Position.DISABLE)"]:::success

	RETURN(["Response を返却"]):::success
	END(["処理完了"]):::success

	START --> PARAM --> GET_DISP_LIST --> CHECK_FLAG
	CHECK_FLAG -- yes --> LOAD_ENABLED --> CHECK_TOUCH
	CHECK_TOUCH -- yes --> TOUCH_IMG
	CHECK_TOUCH -- no --> NORMAL_IMG
	TOUCH_IMG --> BLIT_ENABLED
	NORMAL_IMG --> BLIT_ENABLED
	BLIT_ENABLED --> CHECK_ERROR_ENABLED
	CHECK_ERROR_ENABLED -- yes --> CREATE_RESP_ERR_EN --> RETURN
	CHECK_ERROR_ENABLED -- no --> CREATE_RESP_OK_EN --> RETURN

	CHECK_FLAG -- no --> LOAD_DISABLED --> DISABLE_IMG --> BLIT_DISABLED --> CHECK_ERROR_DISABLED
	CHECK_ERROR_DISABLED -- yes --> CREATE_RESP_ERR_DIS --> RETURN
	CHECK_ERROR_DISABLED -- no --> CREATE_RESP_OK_DIS --> RETURN

	RETURN --> END



    
パラメータ:

index (int) -- 表示するリストのインデックス

戻り値:

ロードボタンの位置を返す

戻り値の型:

Response

disp_save_button(index: int) Response
セーブボタンを表示する。
  • タッチされている場合は、タッチされた状態の画像を表示する

処理フロー図を確認する
        
flowchart TD
	%% --- Common Styles ---
	classDef error fill:#f96,stroke:#333,stroke-width:2px
	classDef success fill:#9f9,stroke:#333,stroke-width:2px
	classDef info fill:#eee,stroke:#999,stroke-dasharray: 5 5

	START(["開始: disp_save_button"]):::info
	PARAM["パラメータ受け取り<br/>index: int"]:::info

	CHECK_INPUT{"self._input_data<br/>== Text.INIT_DATA?"}:::info

	SAVE_ENABLED["セーブボタン有効<br/>input_data が INIT_DATA でない"]:::success
	CHECK_TOUCH{"self._save_touch_list[index]<br/>== True?"}:::info

	TOUCH_IMG["DisplayScreenManager 生成<br/>SaveButtonIndex.SAVE_TOUCH"]:::info
	NORMAL_IMG["DisplayScreenManager 生成<br/>SaveButtonIndex.SAVE"]:::info

	BLIT_ENABLED["Dsm.blit() で画面描画<br/>error_flg を取得"]:::info

	SAVE_DISABLED["セーブボタン無効<br/>input_data == INIT_DATA"]:::error
	DISABLE_IMG["DisplayScreenManager 生成<br/>SaveButtonIndex.SAVE_DISABLE"]:::info
	BLIT_DISABLED["Dsm.blit() で画面描画<br/>error_flg を取得"]:::info

	CHECK_ERROR_ENABLED{"error_flg<br/>== True?"}
	CREATE_RESPONSE_ERROR_ENABLED["Display.__create_response<br/>(error_flg, Position.SAVE_BUTTON_LIST[index])"]:::error
	CREATE_RESPONSE_OK_ENABLED["Display.__create_response<br/>(error_flg, Position.SAVE_BUTTON_LIST[index])"]:::success

	CHECK_ERROR_DISABLED{"error_flg<br/>== True?"}
	CREATE_RESPONSE_ERROR_DISABLED["Display.__create_response<br/>(error_flg, Position.DISABLE)"]:::error
	CREATE_RESPONSE_OK_DISABLED["Display.__create_response<br/>(error_flg, Position.DISABLE)"]:::success

	RETURN(["Response を返却"]):::success
	END(["処理完了"]):::success

	START --> PARAM --> CHECK_INPUT
	CHECK_INPUT -- no --> SAVE_ENABLED --> CHECK_TOUCH
	CHECK_TOUCH -- yes --> TOUCH_IMG
	CHECK_TOUCH -- no --> NORMAL_IMG
	TOUCH_IMG --> BLIT_ENABLED
	NORMAL_IMG --> BLIT_ENABLED
	BLIT_ENABLED --> CHECK_ERROR_ENABLED
	CHECK_ERROR_ENABLED -- yes --> CREATE_RESPONSE_ERROR_ENABLED --> RETURN
	CHECK_ERROR_ENABLED -- no --> CREATE_RESPONSE_OK_ENABLED --> RETURN

	CHECK_INPUT -- yes --> SAVE_DISABLED --> DISABLE_IMG --> BLIT_DISABLED --> CHECK_ERROR_DISABLED
	CHECK_ERROR_DISABLED -- yes --> CREATE_RESPONSE_ERROR_DISABLED --> RETURN
	CHECK_ERROR_DISABLED -- no --> CREATE_RESPONSE_OK_DISABLED --> RETURN

	RETURN --> END



    
パラメータ:

index (int) -- 表示するリストのインデックス

戻り値:

セーブボタンの位置を返す

戻り値の型:

Response

class common.save.service.sound.Sound(request: SaveSoundRequest)

ベースクラス: object

セーブ画面のサウンド関連のサービスクラス。

リクエストを検証し、タッチ状態に基づいてサウンドの再生・停止を行い、結果を Response で返す。

注釈

このクラスはサウンド処理のビジネスロジックを担当し、結果を Response で返す。エラー時のログ記録は、再生開始(start)ではこのクラスが直接行い、停止(stop)では委譲先の SoundChannelManager が担う。実際のチャンネル制御は専用のマネージャークラスに委譲する。

start() Response

タッチ状態に応じて音声再生の開始可否を判定し、再生結果を Response で返す。

処理フロー図を確認する
        
flowchart TD
	%% ファイル: common/save/service/sound.py
	%% クラス: Sound
	%% メソッド: start
	%% --- Common Styles ---
	classDef error fill:#f96,stroke:#333,stroke-width:2px
	classDef success fill:#9f9,stroke:#333,stroke-width:2px
	classDef info fill:#eee,stroke:#999,stroke-dasharray: 5 5

	START(["開始: Sound.start"]):::info

	LOOP_TOUCH["_touch_list の各 touch を順に確認"]:::info
	CHECK_TOUCH{"touch == True?"}:::info
	NEXT_OR_END["次の touch へ / リストが終了"]:::info

	CHECK_BUSY_FLAG{"self._touch_busy_flag<br/>== True?"}:::info

	GET_BUSY_BUSY["is_channel_busy =<br/>self._channel.get_busy() if self._channel is not None else False"]:::info
	RETURN_DO_NOTHING_BUSY["Response 返却<br/>data=(False, is_channel_busy, self._channel)<br/>result=Code.DO_NOTHING"]:::info

	CHECK_CAN_START{"SoundChannelCheck<br/>.can_sound_start()?"}:::info

	TRY_PLAY["try: Channel(0) 生成<br/>Scm.start() で再生"]:::info
	PLAY_SUCCESS["再生成功<br/>LOG 出力"]:::success
	RETURN_OK["Response 返却<br/>data=(True, channel.get_busy(), channel)<br/>result=Code.OK"]:::success
	CATCH_PLAY_ERR["Exception 例外キャッチ<br/>ERROR_LOG 出力"]:::error
	RETURN_SOUND_ERROR["Response 返却<br/>data=(False, False, None)<br/>result=Code.SOUND_ERROR"]:::error

	LOG_PENDING["LOG 出力<br/>再生開始できなかった"]:::info
	GET_BUSY_PENDING["is_channel_busy =<br/>self._channel.get_busy() if self._channel is not None else False"]:::info
	RETURN_PENDING["Response 返却<br/>data=(False, is_channel_busy, self._channel)<br/>result=Code.SOUND_PENDING"]:::info

	GET_BUSY_NOTOUCHED["is_channel_busy =<br/>self._channel.get_busy() if self._channel is not None else False"]:::info
	RETURN_DO_NOTHING_NOTOUCHED["Response 返却<br/>data=(False, is_channel_busy, self._channel)<br/>result=Code.DO_NOTHING"]:::info

	END(["処理完了"]):::success

	START --> LOOP_TOUCH --> CHECK_TOUCH
	CHECK_TOUCH -- no --> NEXT_OR_END --> LOOP_TOUCH
	LOOP_TOUCH -- タッチなし全件確認済 --> GET_BUSY_NOTOUCHED --> RETURN_DO_NOTHING_NOTOUCHED --> END

	CHECK_TOUCH -- yes --> CHECK_BUSY_FLAG
	CHECK_BUSY_FLAG -- yes --> GET_BUSY_BUSY --> RETURN_DO_NOTHING_BUSY --> END

	CHECK_BUSY_FLAG -- no --> CHECK_CAN_START
	CHECK_CAN_START -- yes --> TRY_PLAY --> PLAY_SUCCESS --> RETURN_OK --> END
	TRY_PLAY -- Exception --> CATCH_PLAY_ERR --> RETURN_SOUND_ERROR --> END

	CHECK_CAN_START -- no --> LOG_PENDING --> GET_BUSY_PENDING --> RETURN_PENDING --> END


    
戻り値:

タッチ状態に応じた再生結果を含む Response オブジェクト

戻り値の型:

Response

static stop(channel: Channel | None) Response

指定チャンネルの再生停止を試みる。チャンネルが None の場合は何もしない。失敗時はチャンネルマネージャ内でログ出力のみ行う。

処理フロー図を確認する
        
flowchart TD
	%% ファイル: common/save/service/sound.py
	%% クラス: Sound
	%% メソッド: stop (staticmethod)
	%% --- Common Styles ---
	classDef error fill:#f96,stroke:#333,stroke-width:2px
	classDef success fill:#9f9,stroke:#333,stroke-width:2px
	classDef info fill:#eee,stroke:#999,stroke-dasharray: 5 5

	START(["開始: Sound.stop"]):::info
	PARAM["パラメータ受け取り<br/>channel: Channel または None"]:::info

	CHECK_CHANNEL{"channel<br/>is not None?"}:::info
	RETURN_DO_NOTHING["Response 返却<br/>data=None<br/>result=Code.DO_NOTHING"]:::info

	CALL_SCM["Scm(channel=channel).stop()<br/>失敗時はマネージャ内でログ出力"]:::info
	LOG_STOP["LOG 出力: 再生停止"]:::success
	RETURN_OK["Response 返却<br/>data=None<br/>result=Code.OK"]:::success

	END(["処理完了"]):::success

	START --> PARAM --> CHECK_CHANNEL
	CHECK_CHANNEL -- no --> RETURN_DO_NOTHING --> END
	CHECK_CHANNEL -- yes --> CALL_SCM --> LOG_STOP --> RETURN_OK --> END


    
パラメータ:

channel (Channel | None) -- 停止対象のサウンドチャンネル。None の場合は停止処理を行わない

戻り値:

チャンネルが None でない場合は Code.OK、None の場合は Code.DO_NOTHING を返す

戻り値の型:

Response

Component層

Validator系

class common.save.service.component.displayRequestValidator.RequestValidator(_request: SaveDisplayRequest)

ベースクラス: AbstractRequestValidator

リクエストの妥当性を検証するクラス。

パラメータ:

_request (SaveDisplayRequest) -- 検証対象のリクエスト

注釈

このクラスは dataclassfrozen=True として定義されており、作成後にフィールド値を変更することはできない。

raise_if_invalid() None

リクエストの妥当性を検証する。

処理フロー図を確認する
        
flowchart TD
	%% ファイル: common/save/service/component/displayRequestValidator.py
	%% クラス: RequestValidator
	%% メソッド: raise_if_invalid
	%% --- Common Styles ---
	classDef error fill:#f96,stroke:#333,stroke-width:2px
	classDef success fill:#9f9,stroke:#333,stroke-width:2px
	classDef info fill:#eee,stroke:#999,stroke-dasharray: 5 5

	START(["開始: raise_if_invalid"]):::info
	
	CHECK_BACK_BUTTON["back_button_touch 属性確認"]:::info
	BACK_BUTTON_HASATTR{"hasattr(request,<br/>back_button_touch)?"}
	BACK_BUTTON_MISSING["ERROR_LOG 出力<br/>属性が見つからない"]:::error
	RAISE_BACK_BUTTON["ValueError を raise"]:::error

	BACK_BUTTON_VALUE["back_button_touch の値を取得"]:::info
	BACK_BUTTON_NONE{"値が None?"}
	BACK_BUTTON_LOG_NONE["ERROR_LOG 出力<br/>値が None"]:::error
	RAISE_BACK_NONE["ValueError を raise"]:::error

	BACK_BUTTON_ISINSTANCE{"isinstance(値,<br/>bool)?"}
	BACK_BUTTON_LOG_TYPE["ERROR_LOG 出力<br/>型が bool でない"]:::error
	RAISE_BACK_TYPE["ValueError を raise"]:::error

	CHECK_HOME_BUTTON["home_button_touch 属性確認"]:::info
	HOME_BUTTON_HASATTR{"hasattr(request,<br/>home_button_touch)?"}
	HOME_BUTTON_MISSING["ERROR_LOG 出力<br/>属性が見つからない"]:::error
	RAISE_HOME_BUTTON["ValueError を raise"]:::error

	HOME_BUTTON_VALUE["home_button_touch の値を取得"]:::info
	HOME_BUTTON_NONE{"値が None?"}
	HOME_BUTTON_LOG_NONE["ERROR_LOG 出力<br/>値が None"]:::error
	RAISE_HOME_NONE["ValueError を raise"]:::error

	HOME_BUTTON_ISINSTANCE{"isinstance(値,<br/>bool)?"}
	HOME_BUTTON_LOG_TYPE["ERROR_LOG 出力<br/>型が bool でない"]:::error
	RAISE_HOME_TYPE["ValueError を raise"]:::error

	CHECK_SCREEN["screen 属性確認"]:::info
	SCREEN_HASATTR{"hasattr(request,<br/>screen)?"}
	SCREEN_MISSING["ERROR_LOG 出力<br/>属性が見つからない"]:::error
	RAISE_SCREEN["ValueError を raise"]:::error

	SCREEN_VALUE["screen の値を取得"]:::info
	SCREEN_NONE{"値が None?"}
	SCREEN_LOG_NONE["ERROR_LOG 出力<br/>値が None"]:::error
	RAISE_SCREEN_NONE["ValueError を raise"]:::error

	SCREEN_ISINSTANCE{"isinstance(値,<br/>Surface)?"}
	SCREEN_LOG_TYPE["ERROR_LOG 出力<br/>型が Surface でない"]:::error
	RAISE_SCREEN_TYPE["ValueError を raise"]:::error

	CHECK_FONT["font 属性確認"]:::info
	FONT_HASATTR{"hasattr(request,<br/>font)?"}
	FONT_MISSING["ERROR_LOG 出力<br/>属性が見つからない"]:::error
	RAISE_FONT["ValueError を raise"]:::error

	FONT_VALUE["font の値を取得"]:::info
	FONT_NONE{"値が None?"}
	FONT_LOG_NONE["ERROR_LOG 出力<br/>値が None"]:::error
	RAISE_FONT_NONE["ValueError を raise"]:::error

	CHECK_IMG_LIST["img_list 属性確認"]:::info
	IMG_LIST_HASATTR{"hasattr(request,<br/>img_list)?"}
	IMG_LIST_MISSING["ERROR_LOG 出力<br/>属性が見つからない"]:::error
	RAISE_IMG_LIST["ValueError を raise"]:::error

	IMG_LIST_VALUE["img_list の値を取得"]:::info
	IMG_LIST_NONE{"値が None?"}
	IMG_LIST_LOG_NONE["ERROR_LOG 出力<br/>値が None"]:::error
	RAISE_IMG_LIST_NONE["ValueError を raise"]:::error

	IMG_LIST_ISINSTANCE{"isinstance(値,<br/>list)?"}
	IMG_LIST_LOG_TYPE["ERROR_LOG 出力<br/>型が list でない"]:::error
	RAISE_IMG_LIST_TYPE["ValueError を raise"]:::error

	CHECK_INPUT_DATA["input_data 属性確認"]:::info
	INPUT_DATA_HASATTR{"hasattr(request,<br/>input_data)?"}
	INPUT_DATA_MISSING["ERROR_LOG 出力<br/>属性が見つからない"]:::error
	RAISE_INPUT_DATA["ValueError を raise"]:::error

	INPUT_DATA_VALUE["input_data の値を取得"]:::info
	INPUT_DATA_NONE{"値が None?"}
	INPUT_DATA_LOG_NONE["ERROR_LOG 出力<br/>値が None"]:::error
	RAISE_INPUT_DATA_NONE["ValueError を raise"]:::error

	INPUT_DATA_ISINSTANCE{"isinstance(値,<br/>str)?"}
	INPUT_DATA_LOG_TYPE["ERROR_LOG 出力<br/>型が str でない"]:::error
	RAISE_INPUT_DATA_TYPE["ValueError を raise"]:::error

	CHECK_SAVE_DISP_LIST["save_disp_list 属性確認"]:::info
	SAVE_DISP_LIST_HASATTR{"hasattr(request,<br/>save_disp_list)?"}
	SAVE_DISP_LIST_MISSING["ERROR_LOG 出力<br/>属性が見つからない"]:::error
	RAISE_SAVE_DISP_LIST["ValueError を raise"]:::error

	SAVE_DISP_LIST_VALUE["save_disp_list の値を取得"]:::info
	SAVE_DISP_LIST_NONE{"値が None?"}
	SAVE_DISP_LIST_LOG_NONE["ERROR_LOG 出力<br/>値が None"]:::error
	RAISE_SAVE_DISP_LIST_NONE["ValueError を raise"]:::error

	SAVE_DISP_LIST_ISINSTANCE{"isinstance(値,<br/>list)?"}
	SAVE_DISP_LIST_LOG_TYPE["ERROR_LOG 出力<br/>型が list でない"]:::error
	RAISE_SAVE_DISP_LIST_TYPE["ValueError を raise"]:::error

	CHECK_SAVE_TOUCH_LIST["save_touch_list 属性確認"]:::info
	SAVE_TOUCH_LIST_HASATTR{"hasattr(request,<br/>save_touch_list)?"}
	SAVE_TOUCH_LIST_MISSING["ERROR_LOG 出力<br/>属性が見つからない"]:::error
	RAISE_SAVE_TOUCH_LIST["ValueError を raise"]:::error

	SAVE_TOUCH_LIST_VALUE["save_touch_list の値を取得"]:::info
	SAVE_TOUCH_LIST_NONE{"値が None?"}
	SAVE_TOUCH_LIST_LOG_NONE["ERROR_LOG 出力<br/>値が None"]:::error
	RAISE_SAVE_TOUCH_LIST_NONE["ValueError を raise"]:::error

	SAVE_TOUCH_LIST_ISINSTANCE{"isinstance(値,<br/>list)?"}
	SAVE_TOUCH_LIST_LOG_TYPE["ERROR_LOG 出力<br/>型が list でない"]:::error
	RAISE_SAVE_TOUCH_LIST_TYPE["ValueError を raise"]:::error

	CHECK_LOAD_TOUCH_LIST["load_touch_list 属性確認"]:::info
	LOAD_TOUCH_LIST_HASATTR{"hasattr(request,<br/>load_touch_list)?"}
	LOAD_TOUCH_LIST_MISSING["ERROR_LOG 出力<br/>属性が見つからない"]:::error
	RAISE_LOAD_TOUCH_LIST["ValueError を raise"]:::error

	LOAD_TOUCH_LIST_VALUE["load_touch_list の値を取得"]:::info
	LOAD_TOUCH_LIST_NONE{"値が None?"}
	LOAD_TOUCH_LIST_LOG_NONE["ERROR_LOG 出力<br/>値が None"]:::error
	RAISE_LOAD_TOUCH_LIST_NONE["ValueError を raise"]:::error

	LOAD_TOUCH_LIST_ISINSTANCE{"isinstance(値,<br/>list)?"}
	LOAD_TOUCH_LIST_LOG_TYPE["ERROR_LOG 出力<br/>型が list でない"]:::error
	RAISE_LOAD_TOUCH_LIST_TYPE["ValueError を raise"]:::error

	CHECK_DELETE_TOUCH_LIST["delete_touch_list 属性確認"]:::info
	DELETE_TOUCH_LIST_HASATTR{"hasattr(request,<br/>delete_touch_list)?"}
	DELETE_TOUCH_LIST_MISSING["ERROR_LOG 出力<br/>属性が見つからない"]:::error
	RAISE_DELETE_TOUCH_LIST["ValueError を raise"]:::error

	DELETE_TOUCH_LIST_VALUE["delete_touch_list の値を取得"]:::info
	DELETE_TOUCH_LIST_NONE{"値が None?"}
	DELETE_TOUCH_LIST_LOG_NONE["ERROR_LOG 出力<br/>値が None"]:::error
	RAISE_DELETE_TOUCH_LIST_NONE["ValueError を raise"]:::error

	DELETE_TOUCH_LIST_ISINSTANCE{"isinstance(値,<br/>list)?"}
	DELETE_TOUCH_LIST_LOG_TYPE["ERROR_LOG 出力<br/>型が list でない"]:::error
	RAISE_DELETE_TOUCH_LIST_TYPE["ValueError を raise"]:::error

	ALL_VALID["全属性が有効"]:::success
	END(["検証完了<br/>(例外発生なし)"]):::success

	START --> CHECK_BACK_BUTTON --> BACK_BUTTON_HASATTR
	BACK_BUTTON_HASATTR -- no --> BACK_BUTTON_MISSING --> RAISE_BACK_BUTTON
	BACK_BUTTON_HASATTR -- yes --> BACK_BUTTON_VALUE --> BACK_BUTTON_NONE
	BACK_BUTTON_NONE -- yes --> BACK_BUTTON_LOG_NONE --> RAISE_BACK_NONE
	BACK_BUTTON_NONE -- no --> BACK_BUTTON_ISINSTANCE
	BACK_BUTTON_ISINSTANCE -- no --> BACK_BUTTON_LOG_TYPE --> RAISE_BACK_TYPE
	BACK_BUTTON_ISINSTANCE -- yes --> CHECK_HOME_BUTTON

	CHECK_HOME_BUTTON --> HOME_BUTTON_HASATTR
	HOME_BUTTON_HASATTR -- no --> HOME_BUTTON_MISSING --> RAISE_HOME_BUTTON
	HOME_BUTTON_HASATTR -- yes --> HOME_BUTTON_VALUE --> HOME_BUTTON_NONE
	HOME_BUTTON_NONE -- yes --> HOME_BUTTON_LOG_NONE --> RAISE_HOME_NONE
	HOME_BUTTON_NONE -- no --> HOME_BUTTON_ISINSTANCE
	HOME_BUTTON_ISINSTANCE -- no --> HOME_BUTTON_LOG_TYPE --> RAISE_HOME_TYPE
	HOME_BUTTON_ISINSTANCE -- yes --> CHECK_SCREEN

	CHECK_SCREEN --> SCREEN_HASATTR
	SCREEN_HASATTR -- no --> SCREEN_MISSING --> RAISE_SCREEN
	SCREEN_HASATTR -- yes --> SCREEN_VALUE --> SCREEN_NONE
	SCREEN_NONE -- yes --> SCREEN_LOG_NONE --> RAISE_SCREEN_NONE
	SCREEN_NONE -- no --> SCREEN_ISINSTANCE
	SCREEN_ISINSTANCE -- no --> SCREEN_LOG_TYPE --> RAISE_SCREEN_TYPE
	SCREEN_ISINSTANCE -- yes --> CHECK_FONT

	CHECK_FONT --> FONT_HASATTR
	FONT_HASATTR -- no --> FONT_MISSING --> RAISE_FONT
	FONT_HASATTR -- yes --> FONT_VALUE --> FONT_NONE
	FONT_NONE -- yes --> FONT_LOG_NONE --> RAISE_FONT_NONE
	FONT_NONE -- no --> CHECK_IMG_LIST

	CHECK_IMG_LIST --> IMG_LIST_HASATTR
	IMG_LIST_HASATTR -- no --> IMG_LIST_MISSING --> RAISE_IMG_LIST
	IMG_LIST_HASATTR -- yes --> IMG_LIST_VALUE --> IMG_LIST_NONE
	IMG_LIST_NONE -- yes --> IMG_LIST_LOG_NONE --> RAISE_IMG_LIST_NONE
	IMG_LIST_NONE -- no --> IMG_LIST_ISINSTANCE
	IMG_LIST_ISINSTANCE -- no --> IMG_LIST_LOG_TYPE --> RAISE_IMG_LIST_TYPE
	IMG_LIST_ISINSTANCE -- yes --> CHECK_INPUT_DATA

	CHECK_INPUT_DATA --> INPUT_DATA_HASATTR
	INPUT_DATA_HASATTR -- no --> INPUT_DATA_MISSING --> RAISE_INPUT_DATA
	INPUT_DATA_HASATTR -- yes --> INPUT_DATA_VALUE --> INPUT_DATA_NONE
	INPUT_DATA_NONE -- yes --> INPUT_DATA_LOG_NONE --> RAISE_INPUT_DATA_NONE
	INPUT_DATA_NONE -- no --> INPUT_DATA_ISINSTANCE
	INPUT_DATA_ISINSTANCE -- no --> INPUT_DATA_LOG_TYPE --> RAISE_INPUT_DATA_TYPE
	INPUT_DATA_ISINSTANCE -- yes --> CHECK_SAVE_DISP_LIST

	CHECK_SAVE_DISP_LIST --> SAVE_DISP_LIST_HASATTR
	SAVE_DISP_LIST_HASATTR -- no --> SAVE_DISP_LIST_MISSING --> RAISE_SAVE_DISP_LIST
	SAVE_DISP_LIST_HASATTR -- yes --> SAVE_DISP_LIST_VALUE --> SAVE_DISP_LIST_NONE
	SAVE_DISP_LIST_NONE -- yes --> SAVE_DISP_LIST_LOG_NONE --> RAISE_SAVE_DISP_LIST_NONE
	SAVE_DISP_LIST_NONE -- no --> SAVE_DISP_LIST_ISINSTANCE
	SAVE_DISP_LIST_ISINSTANCE -- no --> SAVE_DISP_LIST_LOG_TYPE --> RAISE_SAVE_DISP_LIST_TYPE
	SAVE_DISP_LIST_ISINSTANCE -- yes --> CHECK_SAVE_TOUCH_LIST

	CHECK_SAVE_TOUCH_LIST --> SAVE_TOUCH_LIST_HASATTR
	SAVE_TOUCH_LIST_HASATTR -- no --> SAVE_TOUCH_LIST_MISSING --> RAISE_SAVE_TOUCH_LIST
	SAVE_TOUCH_LIST_HASATTR -- yes --> SAVE_TOUCH_LIST_VALUE --> SAVE_TOUCH_LIST_NONE
	SAVE_TOUCH_LIST_NONE -- yes --> SAVE_TOUCH_LIST_LOG_NONE --> RAISE_SAVE_TOUCH_LIST_NONE
	SAVE_TOUCH_LIST_NONE -- no --> SAVE_TOUCH_LIST_ISINSTANCE
	SAVE_TOUCH_LIST_ISINSTANCE -- no --> SAVE_TOUCH_LIST_LOG_TYPE --> RAISE_SAVE_TOUCH_LIST_TYPE
	SAVE_TOUCH_LIST_ISINSTANCE -- yes --> CHECK_LOAD_TOUCH_LIST

	CHECK_LOAD_TOUCH_LIST --> LOAD_TOUCH_LIST_HASATTR
	LOAD_TOUCH_LIST_HASATTR -- no --> LOAD_TOUCH_LIST_MISSING --> RAISE_LOAD_TOUCH_LIST
	LOAD_TOUCH_LIST_HASATTR -- yes --> LOAD_TOUCH_LIST_VALUE --> LOAD_TOUCH_LIST_NONE
	LOAD_TOUCH_LIST_NONE -- yes --> LOAD_TOUCH_LIST_LOG_NONE --> RAISE_LOAD_TOUCH_LIST_NONE
	LOAD_TOUCH_LIST_NONE -- no --> LOAD_TOUCH_LIST_ISINSTANCE
	LOAD_TOUCH_LIST_ISINSTANCE -- no --> LOAD_TOUCH_LIST_LOG_TYPE --> RAISE_LOAD_TOUCH_LIST_TYPE
	LOAD_TOUCH_LIST_ISINSTANCE -- yes --> CHECK_DELETE_TOUCH_LIST

	CHECK_DELETE_TOUCH_LIST --> DELETE_TOUCH_LIST_HASATTR
	DELETE_TOUCH_LIST_HASATTR -- no --> DELETE_TOUCH_LIST_MISSING --> RAISE_DELETE_TOUCH_LIST
	DELETE_TOUCH_LIST_HASATTR -- yes --> DELETE_TOUCH_LIST_VALUE --> DELETE_TOUCH_LIST_NONE
	DELETE_TOUCH_LIST_NONE -- yes --> DELETE_TOUCH_LIST_LOG_NONE --> RAISE_DELETE_TOUCH_LIST_NONE
	DELETE_TOUCH_LIST_NONE -- no --> DELETE_TOUCH_LIST_ISINSTANCE
	DELETE_TOUCH_LIST_ISINSTANCE -- no --> DELETE_TOUCH_LIST_LOG_TYPE --> RAISE_DELETE_TOUCH_LIST_TYPE
	DELETE_TOUCH_LIST_ISINSTANCE -- yes --> ALL_VALID --> END


    
例外:

ValueError -- リクエストが無効な場合に発生

注釈

厳密な型チェックを行い、bool、Surface、listの型を正確に検証する。

Manager系

class common.save.service.component.displayScreenManager.DisplayScreenManager(_screen: Surface | None = None, _img: Surface | None = None, _pos: tuple[int, int] | None = None)

ベースクラス: AbstractScreenComponent

画面の描画を管理するクラス。

パラメータ:
  • _screen (Surface) -- 描画対象の画面

  • _img (Surface) -- 描画する画像

  • _pos (tuple[int, int]) -- 描画位置 (x, y)

blit() bool

画面に画像を描画する。

処理フロー図を確認する
        
flowchart TD
	%% ファイル: common/save/service/component/displayScreenManager.py
	%% クラス: DisplayScreenManager
	%% メソッド: blit
	%% --- Common Styles ---
	classDef error fill:#f96,stroke:#333,stroke-width:2px
	classDef success fill:#9f9,stroke:#333,stroke-width:2px
	classDef info fill:#eee,stroke:#999,stroke-dasharray: 5 5

	START(["開始: DisplayScreenManager.blit"]):::info

	CHECK_SCREEN{"self._screen<br/>== None?"}:::info
	LOG_SCREEN["ERROR_LOG 出力<br/>Screen is not set."]:::error
	RETURN_ERROR_SCREEN["True を返却<br/>(エラー)"]:::error

	CHECK_IMG{"self._img<br/>== None?"}:::info
	LOG_IMG["ERROR_LOG 出力<br/>Image is not set."]:::error
	RETURN_ERROR_IMG["True を返却<br/>(エラー)"]:::error

	CHECK_POS{"self._pos<br/>== None?"}:::info
	LOG_POS["ERROR_LOG 出力<br/>Position is not set."]:::error
	RETURN_ERROR_POS["True を返却<br/>(エラー)"]:::error

	TRY_BLIT["try: screen.blit(img, pos)"]:::info
	BLIT_SUCCESS["描画成功"]:::success
	RETURN_SUCCESS["False を返却<br/>(成功)"]:::success

	CATCH_PYGAME["pygame.error 例外キャッチ"]:::error
	TRY_PYGAME_HANDLER["try: _handle_pygame_error(e)"]:::info
	CHECK_PYGAME_RESULT{"handler result<br/>== True?"}:::info
	RETURN_PYGAME_ERROR["True を返却<br/>(エラー)"]:::error
	RETURN_PYGAME_SUCCESS["False を返却<br/>(成功)"]:::success
	RECOVERY_PYGAME["ハンドラ自体が例外 raise"]:::error
	LOG_RECOVERY_PYGAME["ERROR_LOG 出力<br/>recovery_error"]:::error
	RETURN_RECOVERY_PYGAME["True を返却<br/>(エラー)"]:::error

	CATCH_MEMORY["MemoryError 例外キャッチ"]:::error
	TRY_MEMORY_HANDLER["try: _handle_memory_error(e)"]:::info
	CHECK_MEMORY_RESULT{"handler result<br/>== True?"}:::info
	RETURN_MEMORY_ERROR["True を返却<br/>(エラー)"]:::error
	RETURN_MEMORY_SUCCESS["False を返却<br/>(成功)"]:::success
	RECOVERY_MEMORY["ハンドラ自体が例外 raise"]:::error
	LOG_RECOVERY_MEMORY["ERROR_LOG 出力<br/>recovery_error"]:::error
	RETURN_RECOVERY_MEMORY["True を返却<br/>(エラー)"]:::error

	CATCH_GENERAL["Exception 例外キャッチ"]:::error
	TRY_GENERAL_HANDLER["try: _handle_general_error(e)"]:::info
	CHECK_GENERAL_RESULT{"handler result<br/>== True?"}:::info
	RETURN_GENERAL_ERROR["True を返却<br/>(エラー)"]:::error
	RETURN_GENERAL_SUCCESS["False を返却<br/>(成功)"]:::success
	RECOVERY_GENERAL["ハンドラ自体が例外 raise"]:::error
	LOG_RECOVERY_GENERAL["ERROR_LOG 出力<br/>recovery_error"]:::error
	RETURN_RECOVERY_GENERAL["True を返却<br/>(エラー)"]:::error

	END(["処理完了"]):::success

	START --> CHECK_SCREEN
	CHECK_SCREEN -- yes --> LOG_SCREEN --> RETURN_ERROR_SCREEN --> END
	CHECK_SCREEN -- no --> CHECK_IMG

	CHECK_IMG -- yes --> LOG_IMG --> RETURN_ERROR_IMG --> END
	CHECK_IMG -- no --> CHECK_POS

	CHECK_POS -- yes --> LOG_POS --> RETURN_ERROR_POS --> END
	CHECK_POS -- no --> TRY_BLIT

	TRY_BLIT --> BLIT_SUCCESS --> RETURN_SUCCESS --> END
	TRY_BLIT -- pygame.error --> CATCH_PYGAME --> TRY_PYGAME_HANDLER
	TRY_PYGAME_HANDLER -- 正常完了 --> CHECK_PYGAME_RESULT
	TRY_PYGAME_HANDLER -- Exceptionが発生 --> RECOVERY_PYGAME --> LOG_RECOVERY_PYGAME --> RETURN_RECOVERY_PYGAME --> END
	CHECK_PYGAME_RESULT -- yes --> RETURN_PYGAME_ERROR --> END
	CHECK_PYGAME_RESULT -- no --> RETURN_PYGAME_SUCCESS --> END

	TRY_BLIT -- MemoryError --> CATCH_MEMORY --> TRY_MEMORY_HANDLER
	TRY_MEMORY_HANDLER -- 正常完了 --> CHECK_MEMORY_RESULT
	TRY_MEMORY_HANDLER -- Exceptionが発生 --> RECOVERY_MEMORY --> LOG_RECOVERY_MEMORY --> RETURN_RECOVERY_MEMORY --> END
	CHECK_MEMORY_RESULT -- yes --> RETURN_MEMORY_ERROR --> END
	CHECK_MEMORY_RESULT -- no --> RETURN_MEMORY_SUCCESS --> END

	TRY_BLIT -- Exception --> CATCH_GENERAL --> TRY_GENERAL_HANDLER
	TRY_GENERAL_HANDLER -- 正常完了 --> CHECK_GENERAL_RESULT
	TRY_GENERAL_HANDLER -- Exceptionが発生 --> RECOVERY_GENERAL --> LOG_RECOVERY_GENERAL --> RETURN_RECOVERY_GENERAL --> END
	CHECK_GENERAL_RESULT -- yes --> RETURN_GENERAL_ERROR --> END
	CHECK_GENERAL_RESULT -- no --> RETURN_GENERAL_SUCCESS --> END







    
戻り値:

描画処理が成功したかどうかを示すフラグ (True: エラー発生, False: 成功)

戻り値の型:

bool

class common.save.service.component.displayTextManager.DisplayTextManager(_screen: Surface | None, _font: Font | None, _text: str | None, _pos: tuple[int, int] | None)

ベースクラス: AbstractTextComponent

画面の描画を管理するクラス。

パラメータ:
  • _screen (Surface) -- 描画対象の画面

  • _font (Font) -- 描画に使用するフォント

  • _text (str) -- 描画するテキスト

  • _pos (tuple[int, int]) -- 描画位置 (x, y)

blit() bool

画面にテキストを描画する。

処理フロー図を確認する
        
flowchart TD
	%% ファイル: common/save/service/component/displayTextManager.py
	%% クラス: DisplayTextManager
	%% メソッド: blit
	%% --- Common Styles ---
	classDef error fill:#f96,stroke:#333,stroke-width:2px
	classDef success fill:#9f9,stroke:#333,stroke-width:2px
	classDef info fill:#eee,stroke:#999,stroke-dasharray: 5 5

	START(["開始: DisplayTextManager.blit"]):::info
	
	CHECK_SCREEN{"self._screen<br/>== None?"}:::info
	LOG_SCREEN["ERROR_LOG 出力<br/>Screen is not set."]:::error
	RETURN_ERROR_SCREEN["True を返却<br/>(エラー)"]:::error

	CHECK_FONT{"self._font<br/>== None?"}:::info
	LOG_FONT["ERROR_LOG 出力<br/>Font is not set."]:::error
	RETURN_ERROR_FONT["True を返却<br/>(エラー)"]:::error

	CHECK_TEXT{"self._text<br/>== None?"}:::info
	LOG_TEXT["ERROR_LOG 出力<br/>Text is not set."]:::error
	RETURN_ERROR_TEXT["True を返却<br/>(エラー)"]:::error

	CHECK_POS{"self._pos<br/>== None?"}:::info
	LOG_POS["ERROR_LOG 出力<br/>Position is not set."]:::error
	RETURN_ERROR_POS["True を返却<br/>(エラー)"]:::error

	TRY_UNPACK["try: x, y = self._pos"]:::info
	UNPACK_SUCCESS["座標を展開"]:::success

	TRY_RENDER["try: font.render(text)"]:::info
	RENDER["text_surface を取得"]:::success
	GET_RECT["text_rect = text_surface.get_rect<br/>(center=(x + width/2, y))"]:::success
	BLIT["screen.blit(text_surface, text_rect)"]:::success
	RETURN_SUCCESS["False を返却<br/>(成功)"]:::success

	CATCH_UNPACK["TypeError/ValueError<br/>例外キャッチ"]:::error
	LOG_UNPACK["ERROR_LOG 出力<br/>Invalid position"]:::error
	RETURN_ERROR_UNPACK["True を返却<br/>(エラー)"]:::error

	CATCH_PYGAME["pygame.error<br/>例外キャッチ"]:::error
	LOG_PYGAME["ERROR_LOG 出力<br/>Pygame error during rendering"]:::error
	RETURN_ERROR_PYGAME["True を返却<br/>(エラー)"]:::error

	CATCH_MEMORY["MemoryError<br/>例外キャッチ"]:::error
	LOG_MEMORY["ERROR_LOG 出力<br/>Memory error during rendering"]:::error
	RETURN_ERROR_MEMORY["True を返却<br/>(エラー)"]:::error

	CATCH_GENERAL["Exception<br/>例外キャッチ"]:::error
	LOG_GENERAL["ERROR_LOG 出力<br/>Unexpected error during rendering"]:::error
	RETURN_ERROR_GENERAL["True を返却<br/>(エラー)"]:::error

	END(["処理完了"]):::success

	START --> CHECK_SCREEN
	CHECK_SCREEN -- yes --> LOG_SCREEN --> RETURN_ERROR_SCREEN --> END
	CHECK_SCREEN -- no --> CHECK_FONT

	CHECK_FONT -- yes --> LOG_FONT --> RETURN_ERROR_FONT --> END
	CHECK_FONT -- no --> CHECK_TEXT

	CHECK_TEXT -- yes --> LOG_TEXT --> RETURN_ERROR_TEXT --> END
	CHECK_TEXT -- no --> CHECK_POS

	CHECK_POS -- yes --> LOG_POS --> RETURN_ERROR_POS --> END
	CHECK_POS -- no --> TRY_UNPACK

	TRY_UNPACK --> UNPACK_SUCCESS --> TRY_RENDER
	TRY_UNPACK -- TypeError/ValueError --> CATCH_UNPACK --> LOG_UNPACK --> RETURN_ERROR_UNPACK --> END

	TRY_RENDER --> RENDER --> GET_RECT --> BLIT --> RETURN_SUCCESS --> END
	TRY_RENDER -- pygame.error --> CATCH_PYGAME --> LOG_PYGAME --> RETURN_ERROR_PYGAME --> END
	TRY_RENDER -- MemoryError --> CATCH_MEMORY --> LOG_MEMORY --> RETURN_ERROR_MEMORY --> END
	TRY_RENDER -- Exception --> CATCH_GENERAL --> LOG_GENERAL --> RETURN_ERROR_GENERAL --> END


    
戻り値:

描画処理が成功したかどうかを示すフラグ (True: エラー発生, False: 成功)

戻り値の型:

bool

ENDモジュール

終了処理機能のAPI仕様です。

Controller層

Service層

class common.end.service.status.Status(request: EndStatusRequest)

ベースクラス: object

get_next_status()

共通モジュール

レイヤー間通信

class common.layer.response.response.Response(data: Any, result: Code)

ベースクラス: object

Represents a response with associated data and result code. .. attribute:: _data

The data associated with the response.

type:

Any

_result

The result code of the response.

Type:

Code

property data: Any

データを取得するプロパティ。 :returns: レスポンスに関連付けられたデータ。 :rtype: Any

is_argument_error() bool

「引数エラー」結果を示すかどうかをチェックするメソッド。 :returns: True if the result is ARGUMENT_ERROR, False otherwise. :rtype: bool

is_do_nothing() bool

「何もしない」結果を示すかどうかをチェックするメソッド。 :returns: True if the result is DO_NOTHING, False otherwise. :rtype: bool

is_not_ok() bool

「正常でない」結果を示すかどうかをチェックするメソッド。 :returns: True if the result is not OK and not DO_NOTHING, False otherwise. :rtype: bool

is_ok() bool

「正常」な結果を示すかどうかをチェックするメソッド。 :returns: True if the result is OK, False otherwise. :rtype: bool

is_screen_error() bool

「画面エラー」結果を示すかどうかをチェックするメソッド。 :returns: True if the result is SCREEN_ERROR, False otherwise. :rtype: bool

is_sound_error() bool

「サウンドエラー」結果を示すかどうかをチェックするメソッド。 :returns: True if the result is SOUND_ERROR, False otherwise. :rtype: bool

is_sound_pending() bool

「サウンド保留」結果を示すかどうかをチェックするメソッド。 :returns: True if the result is SOUND_PENDING, False otherwise. :rtype: bool

class common.layer.code.code.Code(value)

ベースクラス: Enum

Result codes for responses.

ARGUMENT_ERROR = '01'
DO_NOTHING = 'FF'
OK = '00'
SCREEN_ERROR = '05'
SOUND_ERROR = '03'
SOUND_PENDING = '04'
UNEXPECTED_BEHAVIOR = '02'

定数・列挙型

class common.config.constants.ButtonPosition

ベースクラス: object

Button positions for configuration screen.

BACK_BUTTON = (540, 670)
GO_BUTTON = [(50, 320), (260, 320)]
OK_BUTTON = (750, 670)
SLIDER = (50, 180)
STEP_BUTTON = [(50, 460), (260, 460)]
TAB = [(50, 100), (300, 100)]
TEST_BUTTON = (555, 140)
WAY_BUTTON = [(50, 180), (260, 180)]
class common.config.constants.ConfigButtonIndex(value)

ベースクラス: IntEnum

Config button indices for configuration screen.

TAB_SELECT = 0
TAB_TOUCH = 1
TAB_UNSELECT = 2
class common.config.constants.GoKeyTypes(value)

ベースクラス: IntEnum

Go key operation types.

MAX = 1
TYPE_1 = 0
TYPE_2 = 1
class common.config.constants.SetButtonIndex(value)

ベースクラス: IntEnum

Set button indices for configuration screen.

CANCEL = 8
CANCEL_TOUCH = 9
NOW_SELECT = 0
OK = 6
OK_DISABLE = 5
OK_TOUCH = 7
PLAYING = 12
TEST = 10
TEST_TOUCH = 11
TYPE1 = 1
TYPE1_TOUCH = 2
TYPE2 = 3
TYPE2_TOUCH = 4
class common.config.constants.SliderPosition

ベースクラス: object

Slider positions for configuration screen.

HEIGHT = 10
MAX = 100
MIN = 0
STEP = 1
WIDTH = 400
X = 50
Y = 195
class common.config.constants.StepKeyTypes(value)

ベースクラス: IntEnum

Step key operation types.

MAX = 1
TYPE_1 = 0
TYPE_2 = 1
class common.config.constants.TabTypes(value)

ベースクラス: IntEnum

Tab types for configuration screen.

MAX = 1
OPERATION = 0
SOUND = 1
class common.config.constants.TextContents

ベースクラス: object

Text constants for configuration screen.

GO_KEY_TYPE = '直進キー入力タイプ…'
OPERATION_LIST = ['スペース押下', 'エンター押下']
SE_VOLUME = 'SE VOLUME'
STEP_KEY_TYPE = '足踏み入力タイプ…'
WAY_KEY_TYPE = '方向キー入力タイプ…'
WAY_LIST = ['WASD操作', '方向キー操作']
class common.config.constants.TextPosition

ベースクラス: object

Text positions for configuration screen.

GO_KEY_TYPE = (50, 285)
SE_VOLUME = (50, 150)
STEP_KEY_TYPE = (50, 420)
VOLUME_COUNT = (475, 190)
WAY_KEY_TYPE = (50, 150)
class common.config.constants.VolumeSliderSize(value)

ベースクラス: IntEnum

Volume slider size and range.

DIV = 4
POS_X_MAX = 450
POS_X_MIN = 50
VOLUME_MAX = 100
VOLUME_MIN = 0
class common.config.constants.WayKeyTypes(value)

ベースクラス: IntEnum

Direction key operation types.

MAX = 1
TYPE_1 = 0
TYPE_2 = 1
class common.constants.ButtonIndex

ベースクラス: object

ボタンのインデックスを定義するクラス。 このクラスは、各種ボタンのインデックスを定数として提供します。

BACK = 14
BACK_TOUCH = 15
CONFIG = 10
CONFIG_TOUCH = 11
EXIT = 0
EXIT_TOUCH = 1
HOME = 4
HOME_TOUCH = 5
LOAD = 6
LOAD_TOUCH = 7
RETRY = 12
RETRY_TOUCH = 13
SAVE = 8
SAVE_TOUCH = 9
START = 2
START_TOUCH = 3
class common.constants.Colors

ベースクラス: object

色の定数を定義するクラス。 このクラスは、RGB形式で色を表す定数を提供します。

BLACK = (0, 0, 0)
GREEN = (0, 255, 0)
RED = (255, 0, 0)
WHITE = (255, 255, 255)
class common.constants.DefaultButtonSize

ベースクラス: object

ERROR_HEIGHT = 0
ERROR_WIDTH = 0
HEIGHT = 80
WIDTH = 200
class common.constants.SoundIndex

ベースクラス: object

サウンドのインデックスを定義するクラス。 このクラスは、各種サウンドのインデックスを定数として提供します。

CLICK = 0
SEARCH = 3
TEST = 1
WALK = 2
class common.constants.Text

ベースクラス: object

テキストの定数を定義するクラス。 このクラスは、各種テキストの定数を提供します。

BLANK = ''

共通機能

common.debug.debug.ERROR_LOG(text: str)
common.debug.debug.LOG(text: str)
common.debug.debug.init()