0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

_

Posted at

新RPGの目次

ここにコードの概要があります

コードの概要
1.インポート:star:
 import pygame
 from pygame import *
 import sys
 import time
 import random
 

2.関数:hammer_pick:
 部分一致で値を取得する関数 改行してテキストを描画する関数
 2列×3行のテキストを描画する関数
 BGMの関数 ステータスウィンドウ描画の関数

3.セットアップ:gear:
 パス 名前 カーソル テキスト上昇 ウィンドウのフラグ 
 インデックス フェーズ ダメージエフェクト 
 まほう キャラ アイテム レクト コマンドテキスト 勇者のステータス
 ステータステキスト モンスター関連

4.描画:art:
 ステータスウィンドウ モンスター画像 コマンドウィンドゥ
 魔物選択ウィンドゥ キャラの選択ウィンドゥ まほうの選択ウィンドゥ 
 アイテム選択ウィンドゥ バトルメッセージウィンドゥ

 プレイヤーのダメージエフェクト + 敗北判定
 モンスターのダメージエフェクト + 倒したかどうかの判定

 まほう(色付き半透明レクト)

5.キーハンドラー:keyboard:
 Zキー:
 (あらわれた! たたかうコマンド まほうコマンド アイテムコマンド 
 コマンドの登録と初期化 コマンドの登録とフラグ こうげきメッセージ
 まほうメッセージ ガードメッセージ アイテムメッセージ 
 にげるメッセージ ターン終了  MP判定
 モンスターへ与えるこうげきダメージ計算
 モンスターへ与えるまほうダメージ計算 まほう回復 アイテム回復
 倒した時の処理と自動送り プレイヤーに与えるダメージ計算
 ワンテンポ置くとテキスト上昇のループとレベルアップのループ
 経験値とお金 レベルアップ ステータス上昇 画面を閉じる) 

 方向キー:
 (コマンドの方向キー、魔物選択の方向キー 
 キャラ選択の方向キー まほう選択の方向キー
 アイテム選択の方向キー)

ここに変数の説明があります

1.lines
 バトルメッセージのリスト

2.text_up
 テキスト上昇のフラグ

3.up_num
 テキスト上昇値

4.all_select
 戦闘準備の終了フラグ
 if not all_select:の内側の処理を一度だけ実行するため

5.turn_num
 ターン数を数える
 status_data += player_dataを一度だけ実行するため

6.cmd_chara_index
 コマンド入力の順番

7.status_x_dict
 ステータスウィンドウx座標
 player_data{"x"}も同じ

8.player_data{"attack_on"}
 自動送りの調整
 まだ攻撃してないプレイヤーのmon_select_indexを調整
 これがないと選択したのとは別のモンスターを攻撃してしまう。

 ターン終了条件を満たす
 行動後に倒された場合、actor_index -= 1にするため。

9.level_up_index
 各レベルの必要経験値を取得

10.level_up_chara_num
 レベルアップの順番

11.hit and miss
 各種ステータスに適用
 0ならステータスアップ
 1ならそのまま

12.status_names
 テキスト表示用のステータスの名称

13.status_names_dict
 ステータスの名称を辞書player_dataのキーに置き換えるための辞書

14.up_list
 ステータス上昇値のリスト

15.mon_group_list2
 変更しないモンスターの名前リスト
 この名前を使って経験値やお金の値を取得

16.status_data"attack_on"
 モンスターが攻撃した後にそのモンスターがプレイヤーに倒された場合、
 actor_indexを調整
 これがないとターンの終了条件が満たされない

17.player_select_list
 魔物がターゲットを決めるインデックスリスト

18.player_select_index
 魔物がターゲットを決めたインデックス

ここにコードの説明があります

1ステータスウィンドウの描画
 player_select_indexがまだないからphaseを分ける 


2player_data[cmd_chara_index]["masic_list"][player_data[cmd_chara_index]["masic_index"]]["masic_type"]

player_data

[{'type': 'player', 'name': 'ゆうしゃ', 'Max_HP': 53, 'HP': 53, 'Max_MP': 5, 'MP': 5, 'strength': 33, 'defence': 2, 'quickness': 6, 'level': 1, 'first_letter': 'ゆ', 'x': 20, 'masic_list': [{'masic_name': 'ホイムン', 'MP': 3, '数値': 30, 'masic_effect': 2, 'masic_type': '補助まほう', 'surface': }, {'masic_name': 'ダメラ', 'MP': 2, '数値': 10, 'masic_effect': 1, 'masic_type': '攻撃まほう', 'surface': }], 'item_list': ['やくそう', 'げんきのかけら', 'まほうのしずく', 'ひかりのたま'], 'item_effect': 0, 'cmd_index': 0, 'masic_index': 0, 'mon_select_index': 0, 'item_index': 0, 'chara_index': 0, 'attack_on': 0},
{'type': 'player', 'name': 'せんし', 'Max_HP': 42, 'HP': 42, 'Max_MP': 0, 'MP': 0, 'strength': 3, 'defence': 6, 'quickness': 3, 'level': 1, 'first_letter': 'せ', 'x': 140, 'masic_list': [], 'item_list': ['やくそう'], 'item_effect': 0, 'cmd_index': 0, 'masic_index': 0, 'mon_select_index': 0, 'item_index': 0, 'chara_index': 0, 'attack_on': 0},
{'type': 'player', 'name': 'まどうし', 'Max_HP': 36, 'HP': 36, 'Max_MP': 10, 'MP': 10, 'strength': 2, 'defence': 3, 'quickness': 5, 'level': 1, 'first_letter': 'ま', 'x': 260, 'masic_list': [{'masic_name': 'ダメラ', 'MP': 2, '数値': 10, 'masic_effect': 1, 'masic_type': '攻撃まほう', 'surface': }], 'item_list': ['やくそう', 'せいすい', 'まほうのしずく'], 'item_effect': 0, 'cmd_index': 0, 'masic_index': 0, 'mon_select_index': 0, 'item_index': 0, 'chara_index': 0, 'attack_on': 0},
{'type': 'player', 'name': 'そうりょ', 'Max_HP': 30, 'HP': 30, 'Max_MP': 9, 'MP': 9, 'strength': 1, 'defence': 2, 'quickness': 4, 'level': 1, 'first_letter': 'そ', 'x': 380, 'masic_list': [{'masic_name': 'ホイムン', 'MP': 3, '数値': 30, 'masic_effect': 2, 'masic_type': '補助まほう', 'surface': }], 'item_list': ['やくそう', 'まほうのしずく'], 'item_effect': 0, 'cmd_index': 0, 'masic_index': 0, 'mon_select_index': 0, 'item_index': 0, 'chara_index': 0, 'attack_on': 0}]

player_data[cmd_chara_index]

{'type': 'player', 'name': 'ゆうしゃ', 'Max_HP': 53, 'HP': 53, 'Max_MP': 5, 'MP': 5, 'strength': 33, 'defence': 2, 'quickness': 6, 'level': 1, 'first_letter': 'ゆ', 'x': 20, 'masic_list': [{'masic_name': 'ホイムン', 'MP': 3, '数値': 30, 'masic_effect': 2, 'masic_type': '補助まほう', 'surface': }, {'masic_name': 'ダメラ', 'MP': 2, '数値': 10, 'masic_effect': 1, 'masic_type': '攻撃まほう', 'surface': }], 'item_list': ['やくそう', 'げんきのかけら', 'まほうのしずく', 'ひかりのたま'], 'item_effect': 0, 'cmd_index': 0, 'masic_index': 0, 'mon_select_index': 0, 'item_index': 0, 'chara_index': 0, 'attack_on': 0}

player_data[cmd_chara_index]["masic_list"]

[{'masic_name': 'ホイムン', 'MP': 3, '数値': 30, 'masic_effect': 2, 'masic_type': '補助まほう', 'surface': }, {'masic_name': 'ダメラ', 'MP': 2, '数値': 10, 'masic_effect': 1, 'masic_type': '攻撃まほう', 'surface': }]

player_data[cmd_chara_index]["masic_list"][player_data[cmd_chara_index]["masic_index"]]

{'masic_name': 'ホイムン', 'MP': 3, '数値': 30, 'masic_effect': 2, 'masic_type': '補助まほう', 'surface': }

player_data[cmd_chara_index]["masic_list"][player_data[cmd_chara_index]["masic_index"]]["masic_type"]

補助まほう


3
if player_data[cmd_chara_index]["item_list"]:
player_data[cmd_chara_index]["item_index"] = item_index
player_data[cmd_chara_index]["item_effect"] = item_effect
none_key = item_data.get(player_data[cmd_chara_index]["item_list"][player_data[cmd_chara_index]["item_index"]]) # 存在しない場合は None
if none_key is not None:
item_effect = item_data[player_data[cmd_chara_index]["item_list"][player_data[cmd_chara_index]["item_index"]]]["item_effect"]
elif none_key == None:
item_effect = 1

item_effectで、キャラ選択ウィンドウや魔物選択ウィンドゥを
表示非表示を判定するためのコード


4
if player_data[player_select_index]["HP"] <= 0:
if player_data[player_select_index]["attack_on"] == 1:
actor_index -= 1

行動した後に倒されたら、actor_indexを減らす。
ターンの終了条件を満たすため。


5
del status_data[player_select_index_list.index(player_select_index) + len(mon_group_list)]
del player_select_index_list[player_select_index_list.index(player_select_index)]

キャラが死亡したら
status_dataから削除。行動しなくなる。
player_select_indexから削除。モンスターから狙われなくなる。

.index()で値を指定して、その値のインデックスを取得。

player_select_index_list = [0,1,2,3]
player_select_index_list.index(player_select_index)
player_select_indexが2なら2


6
elif phase == 1 and cmd_index == 1 and chara_group_list[cmd_chara_index] != "せんし":
player_data[cmd_chara_index]["masic_index"] = masic_index

魔物選択ウィンドゥかキャラ選択ウィンドウのどちらを開くかの判定のため。
インデックスを登録。


7
if command:
for i, item in enumerate(player_data):
if i <= cmd_chara_index:
continue
if item["HP"] == 0:
cmd_chara_index += 1
else:
break

先頭から生存者の間までの、死亡したキャラのコマンド表示をしない。


8
if cmd_chara_index < len(chara_group_list) - 1:
player_data[cmd_chara_index]["cmd_index"] = cmd_index
player_data[cmd_chara_index]["mon_select_index"] = mon_select_index
player_data[cmd_chara_index]["chara_index"] = chara_index
cmd_chara_index += 1
mon_select_index = 0
masic_index = 0
item_index = 0
masic_phase = 0
item_phase = 0
masic_effect = 0
item_effect = 0
chara_index = 0
cmd_index, cmd_num1,cmd_num2 = 0, 0, 0
sound.play()
battle_message, command, masic_select, item_select, cmd_cursor, mon_select = False, True, False, False, True, False
phase = 1

全てのキャラのコマンド入力が終わってなければ、
インデックスを登録したあと、インデックスなどを初期化して次のキャラへ。


9
if not all_select:
player_data[cmd_chara_index]["cmd_index"] = cmd_index
player_data[cmd_chara_index]["masic_index"] = masic_index
player_data[cmd_chara_index]["mon_select_index"] = mon_select_index
player_data[cmd_chara_index]["chara_index"] = chara_index
if turn_num <= 1:
status_data += player_data

最後尾のキャラのインデックスの登録。
status_dataにplayer_dataを一度だけ追加。


10
for item in player_data:
if item["HP"] == 0:
cmd_chara_index += 1
else:
break

途中にいる死亡キャラのコマンドを表示しない。


11
#自動送り
for data in status_data2:
if data["type"] == "player":
# 範囲外を防ぐ
if data["mon_select_index"] > len(mon_group_list) - 1:
data["mon_select_index"] = len(mon_group_list) - 1
# ターゲットがズレるのを防ぐ
elif data["attack_on"] == 0:
if current_actor["mon_select_index"] < data["mon_select_index"]:
data["mon_select_index"] -= 1

末尾のインデックスを指定していたが、攻撃前に別のキャラに倒されたとき、
インデックスをずらす。

範囲がを防ぐ 例)
data["mon_select_index"]が2
len(mon_group_list) が3、モンスター3体
len(mon_group_list) -1が2、モンスター3体の末尾のインデックス

モンスターが倒されてモンスター数が変更

len(mon_group_list) が2、モンスター2体
len(mon_group_list) -1が1、モンスター2体の末尾のインデックス

data["mon_select_index"] = len(mon_group_list) - 1
data["mon_select_index"] = 1


攻撃前に別のキャラが、前のインデックスを指定したモンスターを倒した時、インデックスをずらす。

elif data["attack_on"] == 0:
まだ攻撃してないキャラ。

current_actor["mon_select_index"]
敵を倒したキャラの魔物選択のインデックス。
ex) 0

data["mon_select_index"]
まだ攻撃してない魔物選択のインデックス。
ex) 1

data["mon_select_index"] -= 1
ex) 1 - 1 で 0


0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?