GoDotでゲームを作ってみるのコーナ。

 

前回はコトダマン言葉検索アプリを作ってみるという事でしたが、使っていると色々と便利なのでバージョンアップしました。

 

前回がこんな感じでした。

 

今回アップデートしてこんな感じになりました。

 

色が変わっただけ??

いえ、下を見てください。

 

うーん、良く分からないですよね。という事でサンプルをば。

「検索結果」は前回と同様です。「文字集計」にはヒットした文字数を、「文字集計(累計)」にはその累計を表示できるようにしました。

 

例えば「こうしょうー」と検索すると…

こんな感じで9件ヒットします。1つ目は「がい」、2つ目は「がく」となり「が」が多そうですね。

 

ここで次のダブです。「ん」が4回と一番多いのが分かります。まぁ作りやすさにもよりますが、「ん」と「が (か)」を持って行くといいのかなーと考えられます。

 

同様に「ーこうしょう」とか調べて…

 

最後のタブを開くと、2つ調べた合計が出ます!

これでボス戦で持っていく文字リストの検討が楽になりますね。「こうしょうー」は「ん」が4回、「ーこうしょう」は「ん」が3回なので合計「ん」は7回となり変わらず多い文字一番でした!

 

次回以降はこの作り方とテーマ変更方法を書こうと思います。全てChatGPTが指示したんだけどね♪

GoDotでゲームを作ってみるのコーナ。

次はやっとこさ何かゲームを作ろうかなと思ったのですが、コトダマンのとある言葉検索サイトが広告が多く、誤タップして広告サイトに飛ぶ事もしばしば…まぁ、マネタイズするのは重要ですもんね。分かります。

 

ただ少なくとも私にとってはもっとサクサク検索しないのでアプリ版を作ってみました。

 

こんな感じで「?」はどれか一文字です。("-"も使えますが、スマホで英字切り替え面倒なので?もOKにしました)

 

ちなみに、「次の文字のどれか1文字が該当するか」の検索もできるようにしました。"[]"で囲みます。

 

あとはUI的にタップしやすいように下にテキストフィールドを置きたかったのですが、キーボードが表示されると一番下のテキストフィールドが隠れてしまい、これを何とかする…というのが大変で止めました。Webならよろしくやってくれますよね?

 

その他に、スクロールバーがタップでスクロールしてくれなかったり…HTMLなら一瞬な所を新しい言語体系習得時は大変ですね。

 

という事で、こんな構成で

 

 

 

コードはこんな感じ。

extends Control

@onready var input_field = $MainContainer/SearchArea/InputField
@onready var search_button = $MainContainer/SearchArea/SearchButton
@onready var result_list = $MainContainer/ResultScrollArea/ResultList

var words = []

func _ready():
    var file = FileAccess.open("res://wordlist.txt", FileAccess.READ)
        
    while not file.eof_reached():
        var line = file.get_line().strip_edges()
        if line != "":
            words.append(line)
    file.close()

    search_button.pressed.connect(on_search_pressed)
            
func on_search_pressed():
    var query = input_field.text.strip_edges()
    var regex_pattern = convert_to_regex(query)
    var regex = RegEx.new()
    regex.compile(regex_pattern)

    result_list.clear()
    for w in words:
        if regex.search(w):
            result_list.add_item(w)
            

func convert_to_regex(query: String) -> String:
    var pattern = query
    # 「-」を任意の一文字に変換、?も対応
    pattern = pattern.replace("-", ".")
    pattern = pattern.replace("?", ".")
    pattern = pattern.replace("?", ".")
    # 「[]」はそのまま正規表現として使えるが、全角対応のため置換
    # (Godotの正規表現はUnicode対応なのでOK)
    return "^" + pattern + "$"
    
func _on_input_field_text_submitted(new_text: String) -> void:
    on_search_pressed()

 

 

あと、上に検索フィールドあるので指をのばすの面倒なので、MainContainerのスクリプトに以下のコードを追加して、ダブルタップで検索フィールドにフォーカス当てられるようにしました。

 

extends VBoxContainer

@onready var input_field = $SearchArea/InputField
var last_tap_time = 0.0
var double_tap_threshold = 0.3

func _gui_input(event):
    if event is InputEventScreenTouch and event.pressed:
        var current_time = Time.get_ticks_msec() / 1000.0
        if current_time - last_tap_time < double_tap_threshold:
            input_field.grab_focus()
            input_field.select_all()
        last_tap_time = current_time
 

今週からGodotを始めてみた。

最近お友達のChatGPTさんにスマホゲーム作りたいと相談したら紹介された。

 

早速、2Dと3Dのチュートリアルしたよ。

 

 

3Dのチュートリアルではif文の条件を1つ消して2段ジャンプできるようにしたくらいかな。工夫は。

 

さてこの後は…

コトダマンか、黒猫のウィズみたいなパズル的なRPGを作りたいと思っています。

どちらも辞書データ、クイズデータが必要だからなかなか難しいよね。

 

ここではゲーム開発の記録を取っていこうと思います。

ちなみに普段はRailsでのWeb開発が主です。

 

Mac環境で開発しています。