質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

419閲覧

python初心者本に載っている処理について理解が出来ません…

akame

総合スコア14

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2018/12/02 16:49

coords、以下のコードの処理が中々理解できません。

12歳から始めるゼロからのpythonゲームプログラミングとゆう書籍を読みながら勉強している初心者です。
迷路ゲームを作りながら習っていくのですが、その中で主人公が一歩進む処理に以下のコードを書くのですが、これが理解出来ないのです。
これがわからな過ぎて中々前に進めません。62×62
def draw_map():
for y in range(0,MAX_HEIGHT):
for x in range(0,MAX_WIDHT):
p = map_data[y][x]
if p >=5:
p = 5
canvas.create_image(x62+31, y62+31, image=images[p])

   主人公表示
canvas.create_image(brave_x62+31,brave_y62+31,image=images[4],tag="brave")
brave_x = 1
brave_y = 0
def check_move(x,y):
global brave_x,brave_y,flag_key
if x>=0 and x<MAX_WIDHT and y>=0 and y<MAX_HEIGHT:
p = map_data[y][x]
if p == 1:
return
elif p == 3:
flag_key = True
map_data[y][x] = 0
canvas.delete("all")
draw_map()
elif p == 2:
if flag_key == True:
ending()
return
else:
return
elif p >= 5:
fightmanager.fight_start(map_data,x,y,brave)
brave_x = x
brave_y = y
draw_map()

上ボタンが押された
def click_button_up():
check_move(brave_x, brave_y-1)
下ボタンが押された
def click_button_down():
check_move(brave_x,brave_y+1)
左ボタンが押された
def click_button_left():
check_move(brave_x-1,brave_y)
右ボタンが押された
def click_button_right():
check_move(brave_x+1,brave_y)
です。
#####62×62の画像を動かすのですが、素人考えだと、左ボタンが押されたの箇所で0×62+31、‐1×62⁺31で画像が中心を原点に動くとなると、何故xだけ動くはずなのに、yも動いてしまうのか?が、わかりません

以下、ソースコード全文です。
ちょっと質問の仕方もかなり稚拙なので、伝わるの不安ですが、よろしくお願いいたしますm(__)m

python

import

1import chap7fight 2import time 3#マップの描画 4def draw_map(): 5 for y in range(0,MAX_HEIGHT): 6 for x in range(0,MAX_WIDHT): 7 p = map_data[y][x] 8 if p >=5: 9 p = 5 10 canvas.create_image(x*62+31, y*62+31, image=images[p]) 11 12 #主人公表示 13 canvas.create_image(brave_x*62+31,brave_y*62+31,image=images[4],tag="brave") 14#移動先のチェック 15def check_move(x,y): 16 global brave_x,brave_y,flag_key 17 if x>=0 and x<MAX_WIDHT and y>=0 and y<MAX_HEIGHT: 18 p = map_data[y][x] 19 if p == 1: 20 return 21 elif p == 3: 22 flag_key = True 23 map_data[y][x] = 0 24 canvas.delete("all") 25 draw_map() 26 elif p == 2: 27 if flag_key == True: 28 ending() 29 return 30 else: 31 return 32 elif p >= 5: 33 fightmanager.fight_start(map_data,x,y,brave) 34 brave_x = x 35 brave_y = y 36 draw_map() 37 #canvas.coords("brave",brave_x*62+31,brave_y*62+31) 38#上ボタンが押された 39def click_button_up(): 40 check_move(brave_x, brave_y-1) 41#下ボタンが押された 42def click_button_down(): 43 check_move(brave_x,brave_y+1) 44#左ボタンが押された 45def click_button_left(): 46 check_move(brave_x-1,brave_y) 47#右ボタンが押された 48def click_button_right(): 49 check_move(brave_x+1,brave_y) 50 51#エンディング表示 52def ending(): 53 canvas.delete("all") 54 canvas.create_rectangle(0,0,620,434,fill="black") 55 canvas.create_text(300,200, 56 fill ="white",font=("MSゴシック",15), 57 text="""ゴールおめでとう。 58 59 だが、君の戦いはまだ始まったばかりだ。 60                       61 .....続く?""") 62 #ボタン無効化 63 button_up["state"] = "disabled" 64 button_down["state"] = "disabled" 65 button_left["state"] = "disabled" 66 button_right["state"] ="disabled" 67 68#ウィンドウ作成 69root = tkinter.Tk() 70root.title("ダンジョン&パイソン") 71root.minsize(840,434) 72root.option_add("*font", ["メイリオ"], 14) 73 74#キャンバス作成 75canvas = tkinter.Canvas(width=620, height=434) 76canvas.place(x=10,y=10) 77canvas.create_rectangle(0,0,620,434, fill = "gray", tag="drawField") 78 79#ボタン配置 80button_up = tkinter.Button(text="↑") 81button_up.place(x=720,y=150) 82button_up["command"] = click_button_up 83 84button_down = tkinter.Button(text="↓") 85button_down.place(x=720,y=210) 86button_down["command"] = click_button_down 87 88button_left = tkinter.Button(text="←") 89button_left.place(x=660,y=180) 90button_left["command"] = click_button_left 91 92button_right = tkinter.Button(text="→") 93button_right.place(x=780,y=180) 94button_right["command"] = click_button_right 95 96#画像データを読み込み 97images = [tkinter.PhotoImage(file= "img6/chap6-mapfield.png"),#画像番号0 道 98 tkinter.PhotoImage(file= "img6/chap6-mapwall.png"), #画像番号1 岩 99 tkinter.PhotoImage(file= "img6/chap6-mapgoal.png"), #画像番号2 ゴール 100 tkinter.PhotoImage(file= "img6/chap6-mapkey.png"), #画像番号3 鍵 101 tkinter.PhotoImage(file= "img6/chap6-mapman.png"), #画像番号4 主人公 102 tkinter.PhotoImage(file= "img6/chap7-mapmonster.png")]#画像番号5 モンスター  103#マップデータ 104MAX_WIDHT = 10 105MAX_HEIGHT = 7 106map_data =[[1,0,1,1,1,1,1,1,1,1], 107 [1,0,0,1,2,0,6,1,3,1], 108 [1,1,0,1,1,1,0,1,0,1], 109 [1,0,0,5,0,0,0,1,0,1], 110 [1,0,1,1,1,1,1,1,6,1], 111 [1,0,6,0,0,0,0,0,0,1], 112 [1,1,1,1,1,1,1,1,1,1]] 113#主人公の位置 114brave_x = 1 115brave_y = 0 116brave = chap7fight.Brave() 117print(brave.get_atk()) 118#鍵取得フラグ 119flag_key = False 120#戦闘画面の準備 121fightmanager = chap7fight.FightManager() 122 123draw_map() 124 125root.mainloop() 126ソースコード

試したこと

+31等は要らないと思い消したりしました。

補足情報

python 3.6

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

「brave_x62+31,brave_y62+31」の部分は、マップ(map_data)の座標を画面(Canvas)の座標に変換しているだけで、主人公の位置は変更していません。
マップの1マスが画面の62x62dotに対応するので、マップのx,yに62を掛けると画面の座標になります。(原点は左上)
さらにcanvas.create_image()のx,yには、指定した画像の中心を置く位置を指定する必要があるので、画像62x62dotの半分の31dot分をずらす必要があります。

投稿2018/12/02 22:43

hichon

総合スコア5737

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

akame

2018/12/04 10:23

ありがとうございます♪初期位置を変換しているだけで位置は変更されていないのですね、ようやく理解出来ました。 31ドットずらすのも理解出来ました。感謝しますm(^_^)m
guest

0

よくわかりませんが、基本的にプログラミングの座標は左上から(x, y)と動きますよ。

投稿2018/12/02 21:30

編集2018/12/02 22:32
Nerd_run.

総合スコア60

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

akame

2018/12/06 11:40

回答ありがとうございましたm(__)m
Nerd_run.

2018/12/06 11:48

いえいえ、お役に立てなくてすみません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問