2017-12-07 9 views
-1

私が作ったゲームを終えていたので、ファイルに保存する保存ボタンを作った。ゲームが開くと、ファイルが読み込まれ、その行が変数として保存されます。私はそうしますが、整数でなければならないことがわかりますので、int()を使用します。しかし、変数が"0"の代わりに"0\n"であるため、動作しません。私は他の多くの質問をチェックしましたが、同じ質問をしたり答えたりしません。最後に nを付けずに読み込む方法は? (Python)

最終的に\nを除いてreadlines()に行く方法があるのでしょうか?または変数を自動的にバックスペースできる方法はありますか?ここに私のコードです:

import tkinter as tk 
from PIL import Image, ImageTk 

# --- functions --- 
def eggvalue_change(): 
    global eggvalue, eggvalueupgrade, money, eggz 
    if money > int(round(eggvalueupgrade)): 
     eggz -= eggvalueupgrade/eggvalue 
     eggvalue+=0.2 
     eggvalueupgrade += int(round(eggvalueupgrade + (eggvalueupgrade/7))) 
def moar_eggz(): 
    global eggzps, chookz 
    chookz += 1 
def saving(): 
    savedfile.write(money) 
    savedfile.write(eggvalueupgrade) 
    savedfile.write(eggzps) 
    savedfile.write(chookz) 
    savedfile.write(eggvalue) 
    savedfile.write(eggz) 
def main_loop(): 
    global eggz, eggzps, money 
    eggzps = chookz/100.0 
    money = eggz * eggvalue 

    try: 
     openbutton2.config(text="Egg Value: " + str(eggvalue) + " --> " + str(eggvalue+0.2) + " ($" + str(eggvalueupgrade) + ")", command=eggvalue_change) 
     label2.config(text="Money: $" + str(int(round(money))), font=("Terminal", 50), borderwidth=5, relief="ridge", bg="black", foreground="white",pady=10, padx=498) 
     if eggzps >= 10: 
      label1.config(text="| Chickens: " + str(chookz)+" | Eggs: " + str(int(round(eggz)))+" | Eggs Per Second: " + str(int(round(eggzps)))+" | Egg Value: $" + str(eggvalue) + " |", font=("Terminal", 20), borderwidth=4, relief="ridge", bg="black", foreground="red",pady=10, padx=498) 
     elif eggzps < 10: 
      label1.config(text="| Chickens: " + str(chookz)+" | Eggs: " + str(int(round(eggz)))+" | Eggs Per Second: " + str(eggzps)+" | Egg Value: $" + str(eggvalue)+ " |", font=("Terminal", 20), borderwidth=4, relief="ridge", bg="black", foreground="red",pady=10, padx=498) 
     if money < int(round(eggvalueupgrade)): 
      openbutton2.config(fg="gray") 
     elif money > int(round(eggvalueupgrade)): 
      openbutton2.config(fg="white") 
    except Exception as e: 
     print(e) # display exception to see problem 
    root.after(20, main_loop) 
def update_eggz(): 
    global eggz 
    try: 
     eggz += eggzps 
    except Exception as e: 
     print(e) # display exception to see problem 

    # repeat it after 1000ms 
    root.after(1000, update_eggz) 

# --- main --- 

root = tk.Tk() 
root.title("Chicken Clicker") 

savedfile = open("savedata\\mainsave.txt", "a+") 
savedlines = savedfile.readlines() 
print savedlines 


if savedlines == []: 
    eggz = 0 
    eggvalue = 0.2 
    chookz = 0 
    eggzps = 0.0 
    eggvalueupgrade = 100 
    money = eggz * eggvalue 

eggz = int(savedlines[0]) 
eggvalue = int(savedlines[1]) 
chookz = int(savedlines[2]) 
eggzps = int(savedlines[3]) 
eggvalueupgrade = int(savedlines[4]) 
money = int(savedlines[5]) 

savedfile.close() 

# empty labels - `update_labels` will add text 

label2 = tk.Label(root) 
label1 = tk.Label(root) 

label2.pack() 
label1.pack() 

chickencnv = Image.open("img\\1.png") 
chicken = ImageTk.PhotoImage(chickencnv) 
openbutton3 =tk.Button(root, bg="black", fg="white", font=("Terminal", 13), command=saving) 
openbutton2= tk.Button(root, bg="black", fg="gray", font=("Terminal", 15)) 
openbutton1= tk.Button(root, image=chicken, width=500, height=500, command=moar_eggz, bg="black") 

openbutton1.pack() 
openbutton2.pack() 
openbutton3.pack() 


# run it first time at once 
update_eggz() 
main_loop() 


root.mainloop() 

回答がない場合は、私はあなたのコメントや回答には問題ありません。

答えて

3

まず、あなたのコードには論理的なバグがあります。

if savedlines == []: 
    eggz = 0 
    eggvalue = 0.2 
    chookz = 0 
    eggzps = 0.0 
    eggvalueupgrade = 100 
    money = eggz * eggvalue 

eggz = int(savedlines[0]) 
eggvalue = int(savedlines[1]) 
chookz = int(savedlines[2]) 
eggzps = int(savedlines[3]) 
eggvalueupgrade = int(savedlines[4]) 
money = int(savedlines[5]) 

savedlinesは空のリストですし、それに応じていくつかの値を設定しwheterかを確認。しかし、これが真であれば、あなたのリストは空であるので、次の行はIndexErrorで失敗します。これを次のように変更する必要があります。

if savedlines == []: 
    eggz = 0 
    eggvalue = 0.2 
    chookz = 0 
    eggzps = 0.0 
    eggvalueupgrade = 100 
    money = eggz * eggvalue 
else: 
    eggz = int(savedlines[0]) 
    eggvalue = int(savedlines[1]) 
    chookz = int(savedlines[2]) 
    eggzps = int(savedlines[3]) 
    eggvalueupgrade = int(savedlines[4]) 
    money = int(savedlines[5]) 

ここで質問に対処してください。行後:

savedlines = [line.rstrip("\n") for line in savedlines] 
1
In [17]: fff = open('/somefile', 'r') 

In [18]: ss = fff.readlines() 

In [19]: ss 
Out[19]: ['qqq\n', 'www\n', 'aaa\n'] 

In [20]: ss = [ww.strip('\n') for ww in ss] 

In [21]: ss 
Out[21]: ['qqq', 'www', 'aaa'] 

savedlines = savedfile.readlines() 

あなたはラインの端から\nを除去します次の行を追加する必要があります

関連する問題