こんにちは。
最近Pythonの勉強を始めたものです。
プログラミング力を上達させるには写経が大事
それも自分が楽しんでできるようなチュートリアルの方が良い
というアドバイスを頂いたので、以下のサイトのゲーム製作を試しているのですが、
記載されているコード通り写しているはずなのにエラーが出てしまいます。
なるべく自分の力で解決したかったのですが、合わせて質問させていただきたいこと
がありましたので、こちらのサイトを利用させていただきました。
まず1点目が、以下のコードのエラーはどうしたら直るのかということです。
エラーで言われていることは、数値でなく文字列でないとダメだみたいなことだと思うんですが、どこをどう直してよいかわからない状態です。
2点目は、写経したコードで理解できていない部分があるのですが、そういう場合は
理解できるまで何度も見直した方が良いのかということです。
理解に時間をかけるのではなく、どんどんコードを書いていった方が良いのでは?と
思ったため、このような質問をさせていただきました。
お手数おかけしますが、何卒よろしくお願い致します。
Traceback (most recent call last): File "/Users/user/pyworks/ms.py", line 231, in <module> m.run() File "/Users/use/pyworks/ms.py", line 114, in run self.hero.run() File "/Users/user/pyworks/ms.py", line 181, in run self.update() File "/Users/user/pyworks/ms.py", line 157, in update map_list.append(get_message_border(10)) File "/Users/user/pyworks/ms.py", line 143, in get_message_border return "#" + width + "\n" TypeError: must be str, not int
Python
1class Map: 2 def __init__(self, width, height): 3 self.width = width 4 self.height = height 5 #関数渡しで下記のメソッドを勇者インスタンスに渡し, マップ上での勇者を管理 6 self.hero = Hero(3, 3, self.is_movable, self.get_message, self.update) 7 self.CityPeople = [] 8 self.CityPeople.append(CityPerson(3, 1, "K", "I'm King.")) 9 self.CityPeople.append(CityPerson(1, 5, "S", "I'm Soldier1.")) 10 self.CityPeople.append(CityPerson(5, 5, "S", "I'm Soldier2.")) 11 self.CityPeople.append(CityPerson(2, 6, "S", "I'm Soldier3.")) 12 13 def run(self): 14 self.hero.run() 15 16 def is_movable(self, x, y): 17 if(x < 0): 18 return False 19 elif(self.width-1 < x): 20 return False 21 elif(y < 0): 22 return False 23 elif(self.height-1 < y): 24 return False 25 26 for CityPerson in self.CityPeople: 27 if(x == CityPerson.x and y == CityPerson.y): 28 return False 29 30 return True 31 32 #画面上に現在の状態を描画 33 def update(self, message=""): 34 characters = {} 35 for CityPerson in self.CityPeople: 36 characters[(CityPerson.x, CityPerson.y)] = CityPerson.icon 37 #位置情報のタプルに方向を示すアイコンを代入 38 characters[(self.hero.x, self.hero.y)] = self.hero.icon 39 40 def get_top_bottom_text(): 41 return "+" + "-" * self.width + "+\n" 42 def get_message_border(width): 43 return "#" + width + "\n" 44 45 map_list = [] 46 map_list.append(get_top_bottom_text()) 47 for y in range(0, self.height): 48 map_list.append("|") 49 for x in range(0, self.width): 50 if((x, y) in characters): 51 map_list.append(characters[(x, y)]) 52 else: 53 map_list.append(" ") 54 map_list.append("|\n") 55 map_list.append(get_top_bottom_text()) 56 57 map_list.append(get_message_border(10)) 58 map_list.append(message + "\n") 59 map_list.append(get_message_border(10)) 60 61 print("".join(map_list)) 62 63 def get_message(self, x, y): 64 for CityPerson in self.CityPeople: 65 if(x == CityPerson.x and y == CityPerson.y): 66 return CityPerson.message 67 return "no one exits.." 68 69class Hero: 70 def __init__(self, x, y, is_movable, get_message, update): 71 self.x = 0 72 self.y = 0 73 self.icon = "^" 74 self.is_movable = is_movable 75 self.get_message = get_message 76 self.update = update 77 78 def run(self): 79 print("W:UP A:LEFT S:RIGHT Z:DOWN") 80 print("E:EXIT") 81 self.update() 82 83 while True: 84 key = input() 85 if key == "e": 86 print("Exit") 87 break 88 elif key == "w": 89 self.icon = "^" 90 if(self.is_movable(self.x, self.y-1)): 91 self.y -= 1 92 elif key == "a": 93 self.icon = "<" 94 if(self.is_movable(self.x-1, self.y)): 95 self.x -= 1 96 elif key == "s": 97 self.icon = ">" 98 if(self.is_movable(self.x+1, self.y)): 99 self.x += 1 100 elif key == "z": 101 self.icon = "v" 102 if(self.is_movable(self.x, self.y+1)): 103 self.y += 1 104 elif key == "d": 105 self.talk() 106 continue 107 self.update() 108 109 def talk(self): 110 if(self.icon == "^"): 111 message = self.get_message(self.x, self.y-1) 112 elif(self.icon == "<"): 113 message = self.get_message(self.x-1, self.y) 114 elif(self.icon == ">"): 115 message = self.get_message(self.x+1, self.y) 116 elif(self.icon == "<"): 117 message = self.get_message(self.x, self.y+1) 118 else: 119 print("Error") 120 exit() 121 self.update(message) 122 123class CityPerson: 124 def __init__(self, x, y, icon, message): 125 self.x = x 126 self.y = y 127 self.icon = icon 128 self.message = message 129 130m = Map(7, 7) 131m.run() 132
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/05/20 08:30