canvas - みる会図書館


検索対象: 12歳からはじめるゼロからのPythonゲームプログラミング教室
62件見つかりました。

1. 12歳からはじめるゼロからのPythonゲームプログラミング教室

刈 ( ト : をサ” V 鴛 u ゞし当心 [ od を 移動向へルプ 編第 ) 第 ( 5 ) を示 N) イル デバッグト Py を 0 chap76ght-py ー等め秋 tkinter 2 ー等め「 ! chap7fight 宿マップの画 4 イ or• y in r ヨ ng を ( 8. uX_HEIGHT): 6 fO 「一一 0 r ヨ nge ( 6. を HIDTH): 7 8 9 6 刄◇④回 ゲームのウインドウが 表示されたらそのまま ゲームを進める 1 当 . es[pl) ′ダンジョン & バイソン ロ X 0000000000 0 0 90 % 0 00 000 0 0 0 00 0 00000030 0000000000 プレークポイントを設定した行までプログラムが進行すると、 また一時停止します。 ここから一行ずつじっくり試していきましよう。くステッブオーバー〉をクリックする と一行進みます。 ( hap7. ・ python ・Ⅵ謝 5 ⅳ dio ( od を ヘルプ ( H ) ファイル編集 ( E ) 沢 ( 5 ) 表示Ⅳ ) 移動 ( G ) デバッグ py' 0 ・ 〔h3P7. py ↓ 凵則 ( 印い 51 、 凵 U 区き ht E “を当 : h307-3 X chap7fight.py 、日にーしに、しに 0 に ^ 〒よ くステッブオーバー〉 # 工ン丁インク表示 def ending(): をクリック ( anvas. d212t2 ( " a11 " ) canvas. create rectangle(), 9 , 629 , 434 , fill="black") canvas. create_text(3Ø0, 299 , fill="white", font=("MS ゴシック " 15 ) , text = " " " ゴールおめでとう。 プログラムを進めるボタンには、他にくステップイン〉とくステップアウト〉があります。 くステップイン〉は現在の関数が呼び出している関数の中まで一行ずつ実行します。くス テップアウト〉は関数の最後まで一気に進みます。今回はくステッブオーバー〉だけで十 分です。 特に問題なさそうに感じますが、しばらくステッブオーバーで進めていくと、やがて ending 関数が終了して、呼び出し元の check ー move 関数に進みます。 0 月◇〇 <tkinter . Canva. - 》 canvas : 54 button up: <tkinter . B - 5 5 but ton down: <tkinter . 5 7 button left: <tkinter . 58 button right : <tkinter. - 59 240 Chapter

2. 12歳からはじめるゼロからのPythonゲームプログラミング教室

本番の戦闘画面き作成しよう一 7 - 4 ( h ~ p7. - python ・Ⅵ Stu&•oCode ヘルプ ( H ) ファイル ( F ) 集 ( E ) 選択 ( 5 ) 表示 (V) 移動向 デバッグ py' 0 匚・ chap7. py X chap7fight .py image-images[4], tag-•・ brave") 15 16 17 物移動先のチェック MAX WIDTH: 19 def check move(), y): 18 global brave x, brave_y, flag_key 19 HAX HEIGHT: 7 if X>=e and x く MAX WIDTH and Y>=e and Y<MAX_HEIGHT: 29 map_data: [ [ 1 , ø, 1 , 1... p = map-data[y][x] 21 flag_key: True if p 第 1 : ト ( a れ as : <tkinter . Canva— retu rn draw map: <function d 「 .- elif p 24 ending: <function endi— fl ag_key 第 T rue 》 fightmanager: <chap7fi.- map-data[y][xl = 6 26 canvas. delete( " a11 つ 27 brave: く ( ト ap7fight.8 「 & - draw_map( ) 28 brave メ : 5 elif p = 29 if flag key = 第 True: 39 ・ウォッチ式 ending() 31 3 3 34 コールスタック 5 種 0 で一嚀に 3 5 ( lick button left 37 ( a11 38 imt_. py -12 〃ー 39 ma in 100P 40 ( h ョ p7. 物 24 ( mod リ le 〉 6 月◇〇 elif p 〉 = 5 : fightmanager. fight_start(map_data, x, め brave) brave X = X brave—y 第 y draw_map( ) # canvas . coords("brave" 上ホタンが押された brave x ・ 62 + 31 , brave_y*62 + 31 《 hap 市「 7 カンのいい人はここで気付いたかもしれませんね。 ending 関数を呼び出したあと、少 し先で d 「 aw ー map 関数が呼び出されています。つまり、エンディング画面を描画したあ と、それが更新される前にマップ画面を描画しているのです。そういえば P. 214 でここ に d 「 aw ー map 関数の呼び出しを追加したのでした。すっかり忘れていましたね。 ending 関数の呼び出し後に d 「 aw ー map 関数が呼び出されないようにするために、直 後に「 etu 「 n 文を追加してみましよう。 chap7. py eli f p if flag_key ending() 「 e t u 「 n @2 9 @ 3 @ @31 @3 2 @3 3 @ 3 4 T 「 u e : e 1 S e : 「 e t u 「 n もう一回プログラムを試してみると、今度はエンディング画面を見ることができまし 241

3. 12歳からはじめるゼロからのPythonゲームプログラミング教室

シナリオの命令き解読す 8 - 2 背景表示の e [ if 文のあとに e [ if 文を追加し、キャラクターの読み込み処理を追加します。 chap8. py # 分岐 i f い ne [ 田 ! = message["text"] 1 i ne elif params[@] " # b a c k ” ( a n v a 5 . d e 1 e t e ( " a 11 " ) bgimg tkinter . PhotoImage(fiIe=params[1]) canvas . create_image(45@, 23e , image=bgimg) elif params[O] "#putChar" if params[2] canvas . delete("left") lcharimg tkinter . PhotoImage(file=params[1]) canvas . create_image(200, 160 , image=lcharimg, @ 1 3 @ 14 @ 1 5 @ 1 6 @ 1 7 @ 18 @ 1 9 0 2@ @2 1 @ 2 2 @ 2 3 @2 4 tag="left") pa 「 ams [ O ] が # putCha 「ならキャラクター表示です。 pa 「 ams [ 2 ] が大文字の L のと きは左に表示するので、キャンバスから [ eft というタグを持つ画像を削除し、その後厄代 というタグ付きで画像を表示します。これで以前左にキャラクターが表示されていたら、 それを消してから新しい画像を表示できます。 20 ~ 24 行をコピーして修正し、右と中央にも表示できるようにしましよう。 ( hap 「 8 chap8. py elif params[@] "#putChar" i f pa 「 am 5 [ 2 ] ( a n v a s . d e 1 e t e ( " 1 e f t ” ) lcharimg tkinter . PhotoImage(fi1e=params[1]) canvas . create_image(2@@, 160 , image=lcharimg, @21 @ 2 2 @ 2 3 @2 4 @2 5 @ 2 6 @ 2 7 @2 8 @2 9 @ 3 1 @3 2 tag="left") elif params[2J canvas . delete("right") rcharimg tkinter. PhotoImage(fiIe=params[1]) canvas . create_image(700, 160 , image=rcharimg, tag="right") else: canvas . delete("center") ccharimg tkinter . PhotoImage(fiIe=params[I]) canvas . create_image(450, 160 , image=ccharimg, tag="center") 261

4. 12歳からはじめるゼロからのPythonゲームプログラミング教室

@ 2 6 @ 2 7 @ 2 8 @ 2 9 @31 @3 2 @3 3 @3 4 @3 5 @3 6 @3 7 @ 3 8 @3 9 041 @4 2 @4 3 044 045 e46 047 048 049 @51 @5 3 @ 5 4 @5 5 @5 6 @ 5 7 @ 5 8 @5 9 @61 @6 2 @ 6 3 @ 6 4 @ 6 5 # 入力ボックス配置 entry= tkinter . Entry(width=12) d e f b t n ( 1 i ( k ( ) : # ボタンクリックイベント関数 button . pIace(x=38@, y = 35 の b u t t 0 n tkinter . Button(text=" 決定 ") # ボタン配置 entry . place(x=2@@, y=35@) if val float(entry . get()) val image=monsterB_img, tkinter . LabeI(text= ”魔物 B が仲間になりました。” ) image=monsterA_img, tkinter . Label(text=" 魔物 A が仲間になりました。 " ) image=king_img, tkinter . LabeI(text=" 王様が仲間になりました。” ) else: canvas . delete("illust") res_text . place(x=160, y = 60 ) 「 es text = tag="illust") canvas . create_image(320, 220 , canvas . delete("illust") 「 es text . pIace(x=200, y=60) 「 e 5 t ex t 3 : elif val tag="illust") canvas . create_image(320, 220 , canvas . delete("illust ” ) res_text . place(x=200, y = 60 ) 「 es text 2 : elif val tag="illust") canvas . create_image(320, 220 , canvas . delete("illust") res_text . place(x=200, y = 60 ) 「 e 5 t e x t tkinte 「 . Label ( text = " 誰も仲間になりませんでした。 " ) button["state"] entry["state"l ” d i 5 a b 1 e d ” ” d i 5 a b 1 ed ” # ボタンクリックイベントと関数の関連付け button["command"l b t n ( 1 i ( k 「 00t . mainloop ( ) 第条件分岐でフロワラに判断せまっ

5. 12歳からはじめるゼロからのPythonゲームプログラミング教室

4-2 もっと複雑な条件分岐に挑戦しよう if 文の「 gold > = 5000 」が真であればインデントが増やされた 2 つ目の if 文に進み、 2 つ目の if 文の「 gold > = 1 OOOOO 」が真であれば勇者が尻込みする処理が、偽なら else の勇者が志願する処理が実行されます。ソースコードに流れ図をつけるとこんな感じに なります。 i f 01 d i f 01 d > = 勇者が尻込みする処理 47 ~ 49 行目はすでに書いてあった勇者が志願する処理ですが、 2 つ目の if 文の e [ se 文に入るため、インデントを増やさないといけません。入力済みの行のインデントを増 やす場合は、キー + 国 / 国キーで範囲選択してからキーを押すとまとめて インデントを増やせます。インデントを減らしたいときはキー + キーを押し ます。 e 1 5 e : ^ hap 「 4 e 15 e : if gold 》 = 5608 : if gold 〉 = 5 : if gold 〉 = 19969e : if gold 》 = 16969e : canvas. delete("illust") canvas . delete("illust ・・ ) canvas. create_image( ( 32e , 22e ) , ima canvas . create_image( ( 329 , 229 ) , ima serihuText["text"J serihuText["text"] " 者「そんな大金、よっぽど過なん " 者「そんな大金、よっぽど過酷なん 、 n 関わらないでおこう。」 " \ n 関わらないておこう。」 " else: canvas. delete(' ・ illust") ( an as. d212t2Ci11u5t つ canvas. create_image( ( 329 , 22e ) , ima canvas. create_image((320, 229 ) , image— serihuTextL"text"J ・ " 第者「よーし、 serihuTextL"text"J , " 第者「よーし , 私に serihuText["text"] = " 志騨者は誰も来ませ serihuText["text"] = " 志騨者は誰も来ませ sysText. destroy( ) sysText . destroy( ) button ” state" button ” state ” "disabled" 0 選択していた行すへてのインテントが 1 つ 0 インテントを増やしたい行を選択状態にし て司キーを押す 増える 215 e : else: e152 : "disabled ” 複数行のインデントを 一気に増やしたり減らしたり てき 3 ら楽ちんだね !

6. 12歳からはじめるゼロからのPythonゲームプログラミング教室

きないので、注意しましよう。 画像を表示するには、 tkinte 「のキャンバス (Canvas) という機能を使います。 chap3. py の 8 行目以降に、キャンバスを作るコードを入力してみましよう。 chap3 . py @@ 1 @@ 5 @ 11 @ 1 2 @13 import tkinter # ウインドウ作成 t k i n t e 「 . Tk ( ) 「 00t r 00 t . t i t 1 e ( " リリーにしつもん” ) r 00 t . m i n 5 i z e ( 640 , 48@) # 画像表示 tkinter . Canvas(bg="black" ( a nv a 5 canvas . place(x=O, y= の # メインループ 「 00t . mainloop ( ) width=640, height=48 の 入力したコードを実行すると、次のウインドウが表示されます。ウインドウの色がタ イトルバーを除いて真っ黒になりました。 ′リリ - にしつもん ロ 0 ウインドウの色が黒くなった 60 Chapter は、キーワード引数でないと指定することができません。ちなみにキーワード引数は、順 前 = 値」のような形式で指定する引数のことをキーワード引数といいます。一部の引数 指定している値は引数ですが、これまでとは少し違う書き方になっていますね。この「名 「 tkinte 「 . Canvas 」は、「 tkinte 「 . Tk 」と同じくオプジェクトを作る命令です。 ( ) 内で

7. 12歳からはじめるゼロからのPythonゲームプログラミング教室

定義する前に使おうとしているので「定義されていません」というエラーが出てしまい ました。工ラーメッセージをよく見ると、エラー発生行は 27 行目となっていますね。 このエラーを解決するには d 「 aw ー g 「 aph 関数が使われる前に定義するしかありませ ん。ソースコードの d 「 aw ー g 「 aph 関数の定義部分を再びカット & ペーストで移動しま しよう。 chap5-3. py @@ 5 (G) 9 @11 @ 1 2 @ 1 3 @ 14 @ 1 5 @ 1 6 1 7 @ 1 8 @ 1 9 @21 @2 2 @2 3 @2 4 @2 5 @2 6 @ 2 7 @ 2 8 @2 9 @31 @ 3 2 @ 3 3 1 5 イ import tkinter i mpo r t t i me # グラフ表示関数 def draw_graph() : 5 t a 「 t x X 「00t . update() time . sIeep(O . 5) canvas . delete("graph") fo 「 i i n 1 i 5 t : canvas . create rectangle(), y, x + i ☆ width_px, Y y + height_px, fill="blue" 0 u t 1 i n e = ” b 1 ue ” tag="graph") y + height_px + distance_px di sp + st 「い ) + # print(disp) # ウインドウ作成 t k i n t e 「 . Tk ( ) r 00 t root . title ( " 棒グラフをソートして表示する " ) # キャンバス配置 tkinter . Canvas(root.width=64@.height=48@) ( a n V a S canvas . create_rectangIe(4@, 4@, 6e0 , 440 , fill canvas . pack() 'gray78") # クラフ用変数 6@ s t a 「 t x 6@ start_y width_px 5 height_px distance_px # リスト 4

8. 12歳からはじめるゼロからのPythonゲームプログラミング教室

同し処理き決まった回数繰り返そう第 5 - 1 chap5 ・ py import tkinter # ウインドウ作成 t k i n t e 「 . T k ( ) 「 00 t 「 00t . title ( " 王様をいつばい表示 " ) 「00t . minsize(1600, 800 ) # キャンバス配置 tkinter . Canvas(root,width=1600,height=800) ( a nv a S canvas . pack() tkinter . PhotoImage(file # 繰り返し処理 @ 1 @ for i in range(7): @ 11 canvas . create__image(100 + i @ 1 2 「 00 t . m a i n 100 p ( ) @13 "img4/chap4-1-1. png") 200 , 180 + i ☆ 50 , image=img) ( hap 「 5 ′ー・阯ムを 0 今度は王様のイラストが右に 200 ビクセルすっ、下に 50 ビクセルすっすれて 7 枚表示された ルーフ内の処理では カウン 9 変数の i をつまく使おう。 これを使いこなすことが fo 「ルーフ習得の第一歩だ 1 23

9. 12歳からはじめるゼロからのPythonゲームプログラミング教室

3 - 2 ウインドウに画像き表示しよう 240PX 移動 ′リリ - にしつもん ロ 《 hap 「 3 320PX 移動 0 横方向 ( x 座標 ) に 320 ビクセル、縦方向に 240 ビクセル移動すると、画像全体が表示できる つまり c 「 eate ー image 関数の引数は、 x 座標を「 320 」、 y 座標を「 240 」に設定すれば よいのです。次のようにコードを修正し、プログラムを実行してみましよう。 chap3. py import tkinter # ウインドウ作成 t k i n t e r . Tk ( ) 「 00 t 「 00 t . t i t 1 e ( ”リリーにしつもん " ) r 00 t . m i n 5 i z e ( 640 , 480 ) # 画像表示 tkinter . Canvas(bg="bIack" ( a n V a S @ 1 @ canvas . place(x=@, y=@) @ 11 tkinter . PhotoImage(file="img3/chap3-back . png") lmg @ 12 canvas . create_image(320, 240 , image=img) @ 13 # メインループ @ 14 @ 1 5 「 00t . mainloop ( ) width=64@, height=48@)

10. 12歳からはじめるゼロからのPythonゲームプログラミング教室

# 工ンディング表示 def ending() : canvas . delete("all") canvas . create_rectangle((), 0 , 620 , 434 , fill="black") canvas . create_text(300, 200 , @ 5 9 @5 8 @ 5 6 @ 5 5 @ 5 4 f i 11 = ” w h i t e ” @51 049 @4 8 047 t e x t = font=("MS ゴシック " , 15 ) , ”ゴールおめでとう。 だが、君の戦いはまだ始まったばかりだ。 # ウインドウ作成 Chapter 190 ・ みにくくなるかもしれません。 使いようによっては便利ですが、 Python ではインデントが重要なので、ちょっと読 方をヒアドキュメントという呼び方をすることもあります。 つまり、エスケープシーケンスを使わなくても、複数行の文章を書けるのです。この書き は三連クオートといい、普通の文字列と違って、 " " と " " の間で改行することができます。 今回は引数 text に指定する文字列を、 " " ( ダブルクオート 3 つ ) で囲んでいます。これ fill = " 色を表すキーワード " , font = ( " フォント名 " , 文字サイズ ) ) キャンバス . create_text(x 座標 , y 座標 , text = " 表示する文字列 " *create_text 関数の使い方 ここで新たに使用しているのは、キャンバス上に文字を描く create text 関数です。 クリエイトテキスト 明済みですね。 キャンバスから部品を消す de [ ete 関数と、長方形を描く c 「 eate- 「 ectangle 関数は説