Pythonのゲームの作り方を書いていきます!
3DモデルAIを作成中。下のURLからファイルをダウンロードできます。
https://drive.google.com/file/d/104N806Q81EaZ3EV9aM5lBjFSxyZ4oX4C/view?usp=sharing
言語作成中。メモをする。
F5を押してデバッグ用VSコードウィンドウ表示
色の割り当てコード書き方 name
| 例 | スコープ | 色 | |
|---|---|---|---|
| コメント | # コメント | comment.line.number-sign.mylang | 緑 #00FF00 |
| 演算子 | + – * / | keyword.operator.mylang | 赤 #FF0000 |
| 数字 | 123 | constant.numeric.mylang | 青 #0000FF |
| キーワード | if, else, for | keyword.control.mylang | 紫 #800080 |
| 文字列 | “Hello” | string.quoted.double.mylang | オレンジ #FFA500 |
| 関数名 | print() | entity.name.function.mylang | 水色 #00CED1 |
色の割り当てコードの書き方 match
| タイプ | 例 | match(正規表現) | 説明 |
|---|---|---|---|
| コメント | # コメント | #.*$ | # で始まる行全体をマッチ |
| コメント | / コメント | /.*$ | / で始まる行全体をマッチ |
| 演算子 | + - * / | `\+ | \- |
| 数字(整数) | 123 | \\b\\d+\\b | 単語境界内の整数にマッチ |
| 数字(小数含む) | 3.14 | \\b\\d+(\\.\\d+)?\\b | 整数または小数にマッチ |
| キーワード | if, else, for | `\b(if | else |
| 文字列 | "Hello" | "\".*?\"" | ダブルクォート内の文字列にマッチ(最短マッチ) |
| 関数名 | print() | \\b[a-zA-Z_][a-zA-Z0-9_]*\\s*(?=\\() | 後ろに ( がある単語(関数名)にマッチ |
色の割り当てコードの書き方 fontStyle
| 値 | 説明 |
|---|---|
"italic" | 斜体にする |
"bold" | 太字にする |
"underline" | 下線を付ける |
"bold italic" | 太字+斜体 |
空文字 ("") | 標準の文字 |
色の割り当てコードの書き方 foreground
| 色 | foreground の書き方 |
|---|---|
| 赤 | "#FF0000" |
| 緑 | "#00FF00" |
| 青 | "#0000FF" |
| 紫 | "#800080" |
| オレンジ | "#FFA500" |
| 水色 | "#00CED1" |
サンプルコード
{
"editor.tokenColorCustomizations": {
"textMateRules": [
{
"scope": "comment.line.slash.mylang",
"settings": {
"foreground": "#00FF00",
"fontStyle": "italic"
}
},
{
"scope": "constant.numeric.mylang",
"settings": {
"foreground": "#0000FF"
}
},
{
"scope": "keyword.operator.mylang",
"settings": {
"foreground": "#FF0000"
}
},
{
"scope": "punctuation.parenthesis.mylang",
"settings": {
"foreground": "#800080"
}
}
]
}
}
Tkinterについて
=============================================================================
Tkinterライブラリ読み込み
=============================================================================
import tkinter
from tkinter import messagebox
=============================================================================
ウィンドウの作成と基本設定
=============================================================================
ウィンドウ作成と、Tkinterオブジェクト取得
window = tkinter.Tk()
ウィンドウにタイトルを設定
window.title("Tkinterを使ってみましょう!!")
ウィンドウのサイズと位置を設定
geometry("<横幅>x<高さ>++")
window.geometry("900x600+0+0")
ウィンドウの背景色を設定
window.config(bg="#FFDDDD")
ウィンドウの透明度を設定
window.attributes("-alpha", 0.7)
ウィンドウのアイコンを設定
window.iconbitmap(r"note_icon.ico")
App Essentials の Design Shots (16 アイコン)で見れる
拡張子が「ico」になっているものだけ
ウィンドウのサイズ変更を禁止
window.resizable(False, False) # 幅、高さの両方を固定
window.resizable(True, False) # 幅のみ変更可能
=============================================================================
ウインドウのサイズと座標を取得
=============================================================================
window.update_idletasks() # mainloopの前に設定値の更新 必ず入れる
ウィンドウ全体の情報を取得
print("ウィンドウのサイズと座標:", window.winfo_geometry())
ウインドウサイズだけ取得
print("ウィンドウの横幅:", window.winfo_width())
print("ウィンドウの高さ:", window.winfo_height())
ウインドウの座標だけを取得
print("親ウィンドウのx座標:", window.winfo_x())
print("親ウィンドウのy座標:", window.winfo_y())
print("ディスプレイ上のx座標:", window.winfo_rootx())
print("ディスプレイ上のy座標:", window.winfo_rooty())
=============================================================================
ラベル(Label)- 文字や画像を表示
=============================================================================
基本的なラベル
label1 = tkinter.Label(window, text="これはラベルです")
label1.pack()
オプション付きラベル
label2 = tkinter.Label(
window,
text="装飾されたラベル",
font=("メイリオ", 16, "bold"), # フォント名、サイズ、スタイル
fg="blue", # 文字色
bg="yellow", # 背景色
width=20, # 幅(文字数)
height=2, # 高さ(行数)
relief="ridge", # 枠のスタイル
bd=3 # 枠の太さ
)
label2.pack()
relief オプション:flat, raised, sunken, groove, ridge
=============================================================================
ボタン(Button)- クリック可能なボタン
=============================================================================
クリック時に実行される関数を定義
def button_click():
print("ボタンがクリックされました!")
messagebox.showinfo("通知", "ボタンがクリックされました!")
基本的なボタン
btn1 = tkinter.Button(window, text="【 1 】", command=button_click)
btn1.pack()
オプション付きボタン
btn2 = tkinter.Button(
window,
text="装飾されたボタン",
font=("游ゴシック", 14),
fg="white", # 文字色
bg="#4CAF50", # 背景色
activeforeground="yellow", # クリック時の文字色
activebackground="#45a049", # クリック時の背景色
width=15, # 幅
height=2, # 高さ
relief="raised", # 枠のスタイル
bd=3, # 枠の太さ
command=button_click
)
btn2.pack(pady=10) # 上下に余白を追加
ボタンの有効/無効を切り替え
def toggle_button():
if btn2["state"] == "normal":
btn2["state"] = "disabled" # 無効化
else:
btn2["state"] = "normal" # 有効化
btn3 = tkinter.Button(window, text="ボタンの有効/無効", command=toggle_button)
btn3.pack()
=============================================================================
エントリー(Entry)- 1行の文字入力
=============================================================================
基本的なエントリー
entry1 = tkinter.Entry(window)
entry1.pack()
入力された値を取得する関数
def get_entry_value():
value = entry1.get()
print("入力された値:", value)
messagebox.showinfo("入力値", f"入力された値: {value}")
btn_entry = tkinter.Button(window, text="入力値を取得", command=get_entry_value)
btn_entry.pack()
オプション付きエントリー
entry2 = tkinter.Entry(
window,
font=("メイリオ", 12),
width=30,
bg="#f0f0f0",
fg="black",
relief="solid",
bd=2
)
entry2.pack(pady=5)
entry2.insert(0, "初期値を設定") # 初期値を設定
パスワード入力用エントリー(文字を隠す)
entry_password = tkinter.Entry(window, show="*", width=30)
entry_password.pack(pady=5)
=============================================================================
テキスト(Text)- 複数行の文字入力
=============================================================================
基本的なテキストウィジェット
text1 = tkinter.Text(
window,
width=40,
height=5,
font=("メイリオ", 10),
bg="white",
fg="black",
relief="solid",
bd=1
)
text1.pack(pady=10)
テキストに初期値を設定
text1.insert("1.0", "ここに複数行のテキストを\n入力できます。")
テキストの内容を取得する関数
def get_text_value():
value = text1.get("1.0", "end-1c") # "1.0"=先頭、"end-1c"=最後(改行除く)
print("入力されたテキスト:", value)
messagebox.showinfo("テキスト", value)
btn_text = tkinter.Button(window, text="テキストを取得", command=get_text_value)
btn_text.pack()
=============================================================================
チェックボタン(Checkbutton)- チェックボックス
=============================================================================
チェック状態を保存する変数
check_var1 = tkinter.BooleanVar()
check_var2 = tkinter.BooleanVar()
check1 = tkinter.Checkbutton(
window,
text="オプション1",
variable=check_var1,
font=("メイリオ", 10)
)
check1.pack()
check2 = tkinter.Checkbutton(
window,
text="オプション2",
variable=check_var2,
font=("メイリオ", 10)
)
check2.pack()
チェック状態を取得する関数
def get_check_values():
print("オプション1:", check_var1.get())
print("オプション2:", check_var2.get())
msg = f"オプション1: {check_var1.get()}\nオプション2: {check_var2.get()}"
messagebox.showinfo("チェック状態", msg)
btn_check = tkinter.Button(window, text="チェック状態を取得", command=get_check_values)
btn_check.pack()
=============================================================================
ラジオボタン(Radiobutton)- 選択肢から1つ選択
=============================================================================
選択された値を保存する変数
radio_var = tkinter.IntVar()
radio_var.set(1) # 初期選択
radio1 = tkinter.Radiobutton(
window,
text="選択肢1",
variable=radio_var,
value=1,
font=("メイリオ", 10)
)
radio1.pack()
radio2 = tkinter.Radiobutton(
window,
text="選択肢2",
variable=radio_var,
value=2,
font=("メイリオ", 10)
)
radio2.pack()
radio3 = tkinter.Radiobutton(
window,
text="選択肢3",
variable=radio_var,
value=3,
font=("メイリオ", 10)
)
radio3.pack()
選択された値を取得する関数
def get_radio_value():
value = radio_var.get()
print("選択された値:", value)
messagebox.showinfo("選択値", f"選択された値: {value}")
btn_radio = tkinter.Button(window, text="選択値を取得", command=get_radio_value)
btn_radio.pack()
=============================================================================
リストボックス(Listbox)- リストから選択
=============================================================================
listbox1 = tkinter.Listbox(
window,
width=30,
height=5,
font=("メイリオ", 10),
selectmode="single" # single=1つ選択、multiple=複数選択
)
listbox1.pack(pady=10)
リストに項目を追加
items = ["りんご", "バナナ", "オレンジ", "ぶどう", "いちご"]
for item in items:
listbox1.insert("end", item)
選択された項目を取得する関数
def get_listbox_value():
selection = listbox1.curselection()
if selection:
value = listbox1.get(selection[0])
print("選択された項目:", value)
messagebox.showinfo("選択項目", f"選択された項目: {value}")
btn_listbox = tkinter.Button(window, text="選択項目を取得", command=get_listbox_value)
btn_listbox.pack()
=============================================================================
スケール(Scale)- スライダー
=============================================================================
scale1 = tkinter.Scale(
window,
from_=0, # 最小値
to=100, # 最大値
orient="horizontal", # horizontal=横、vertical=縦
length=300,
label="音量",
font=("メイリオ", 10)
)
scale1.pack(pady=10)
スケールの値を取得する関数
def get_scale_value():
value = scale1.get()
print("スケールの値:", value)
messagebox.showinfo("スケール値", f"スケールの値: {value}")
btn_scale = tkinter.Button(window, text="スケール値を取得", command=get_scale_value)
btn_scale.pack()
=============================================================================
ウィジェットの配置方法
=============================================================================
1. pack メソッド - 順番に配置
"""
btn1.pack()
btn2.pack(side=tkinter.LEFT) # 左から配置
btn3.pack(side=tkinter.TOP) # 上から配置
btn4.pack(side=tkinter.RIGHT) # 右から配置
btn5.pack(side=tkinter.BOTTOM) # 下から配置
btn6.pack(padx=10, pady=10) # 余白を追加
"""
2. grid メソッド - 格子状に配置
"""
label1.grid(row=0, column=0) # 0行0列
entry1.grid(row=0, column=1) # 0行1列
btn1.grid(row=1, column=0, columnspan=2) # 2列分の幅
"""
3. place メソッド - 座標で配置
"""
btn1.place(x=100, y=50) # x=100, y=50の位置に配置
btn2.place(relx=0.5, rely=0.5, anchor="center") # 中央に配置
"""
=============================================================================
メッセージボックス
=============================================================================
情報表示
messagebox.showinfo("タイトル", "メッセージ")
警告表示
messagebox.showwarning("警告", "これは警告です")
エラー表示
messagebox.showerror("エラー", "エラーが発生しました")
はい/いいえ
result = messagebox.askyesno("確認", "実行しますか?")
OK/キャンセル
result = messagebox.askokcancel("確認", "続行しますか?")
リトライ/キャンセル
result = messagebox.askretrycancel("エラー", "再試行しますか?")
=============================================================================
ウィンドウのループ処理
=============================================================================
このループでウィンドウが表示され続ける
window.mainloop()