2016-12-19 6 views
0

私は自分のスキルをPythonで構築しようとしており、リスクスタイルのゲームを作成しようとしています。Tkinterで危険なスタイルのゲームを構築しようとしています

私はクラスとTkinterを手に入れようとしているので、今はそれほど遠くはありません。

私の最初の試行は、異なる国の代わりになる一連のボタンを作成することです。私は、これらのボタンをクリックして国の軍隊の数を更新したいと思っています。

これまで私が作成したクラスから生成するマップを取得することができ、ボタンはクリック可能です。ボタンをクリックすると、軍隊の数は更新されますが、常に最後のボタンが更新されます。

ボタンをクリックして最新のものではなく最新のものをクリックするようにするにはどうすればよいですか?

私は完全に間違った方法でこれを行ったことがありますか?このように

Button(window, text=territories[0].current_armies,... command=click1(territories, 0)... 

、あなたは常にあなたの参考として最初の領土を使用しているので、あなたがそので、各領土を初期化するべきである:あなたのdef button(self):...あなたは常にterritories[0]を参照しているに

from tkinter import * 
import random 

class territory: 
    def __init__ (self, country, player = "1", current_armies = 0, x=0, y=0): 
     self.country = country 
     self.current_armies = current_armies 
     self.player = player 
     self.y = y 
     self.x = x 

    def get_armies(self): 
     print(self.country + " has " + str(self.current_armies)+ " armies.") 

    def add_armies (self, armies): 
     self.current_armies += armies 

    def roll_dice (self, dice=1): 
     rolls = [] 
     for i in range(0, dice): 
      rolls.append(random.randint(1,6)) 
     rolls.sort() 
     rolls.reverse() 
     print (self.country + " has rolled " + str(rolls)) 
     return rolls 

    def owner(self): 
     print (self.country + " is owned by " + self.player) 

    def get_country(self): 
     print(country) 

    def button (self): 
     Button(window, text = territories[0].current_armies, width = 10, command =  click1(territories, 0)).grid(row=y,column=x) 

window = Tk() 

def create_territories(): 
    countries = ["UK", "GER", "SPA", "RUS"] 
    terr_pos = [[1,0],[2,0],[1,5],[4,1]] 
    sta_arm = [1,1,1,1] 
    terr = [] 
    player = "1" 
    for i in range(len(countries)): 

     terr.append(territory(countries[i],player, sta_arm [i] , terr_pos[i][0],terr_pos[i][1])) 
     if player == "1": 
      player = "2" 
     else: 
      player = "1" 
    return terr 

def click1(territory, i): 
    territory[i].current_armies += 1 
    build_board(territory) 


def build_board(territories): 
    for i in range(0,4): 
     Button(window, text = territories[i].country+"\n"+str(territories[i].current_armies), width = 10, command = lambda: click1(territories, i)).grid(row=territories[i].y,column=territories[i].x) 

territories = create_territories() 




window.title ("Domination") 
create_territories() 
build_board(territories) 

window.mainloop() 

答えて

0

インデックスはterritories[]になりますので、Buttonコンストラクタに渡すことができます。あなたの質問に


ありますが、それは、(我々は壊れたコードを修正し、彼らは臭いのコードに対処)自分のドメインのより多くのだから、「完全に間違った方法、」私は個人的に、CodeReviewの上でその質問を送信したいです重大な重複。しかし、質問ごとに1つの質問が優先され、「この全体が間違っていますか? StackOverflowのための少し広いです。

関連する問題