2016-04-01 28 views
0

Oyunumda bir kayıt sistemi olarak, değişken olarak bilgi okuduğum bir metin dosyası var. Sorun şu ki, belirli bir çizgiyi okumak ve yazmak için belgesine ihtiyacım var, ilk yazılanı okuyor ve okuyor, ancak ikinci kez önce bir satır yukarı çıkmış ve "İndeks menzilden çıkmıyorum" çünkü çizgi I ' Yazmaya/okumaya çalışıyorum boş. Değişkenler metin dosyalarına yazarken neden çizgileri değiştiriyor?

enter image description here

benim kod üzerinden baktım ve sorunu bulmak için görünmüyor olabilir

First Read Write

..
gold=(60) 
goldtxt=(str(gold) + 'gp') 
inventory=['empty','empty','empty','empty','empty','empty','empty','empty','empty','empty',] 

def ItemAdd(event): 
    gamestatus = linecache.getline('C:Location', 2).rstrip() 
    if gamestatus == 'gamestatus1':  
     gameinfo1[7] = (inventory[(-1)]).strip('empty') + ' ' 
     gameinfo1[9] = goldtxt + '    ' 
     with open('C:Location', 'w') as active: 
     active.writelines(gameinfo1) 
     RefreshTexts() 

def RefreshTexts(): 
    with open('C:Location', 'r') as file: 
     datatemplate = file.readlines() 
    with open('C:Location', 'r') as file: 
     gameinfo1 = file.readlines() 
    with open('C:Location', 'r') as file: 
     gameinfo2 = file.readlines() 
    with open('C:Location', 'r') as file: 
     gameinfo3 = file.readlines() 
    with open('C:Location', 'r') as file: 
     activeinfo = file.readlines() 

Bin hatları biraz üzerinde var, ama Bunun bir sorunun olması durumunda sorunun nerede olacağını düşünün.

+0

Veri yapınızı neden bir ['JSON'] (https://docs.python.org/3/library/json.html) dosyası olarak kaydedemediniz? –

+0

Yeni satırları yanlış ekliyor ya da kaldırıyorsunuz –

+0

@AnttiHaapala Python için nispeten yeniyim, bu yüzden .JSON dosyaları ile çalışma tecrübem yok. – Daijoubu

cevap

2

Hataların, satırların sonundaki yeni satır karakterlerini soran bir yerdeyken rstrip kullanıyor olmanızdan kaynaklandığına inanıyorum; ya da linecache kullanarak ab siz olabilirsiniz; içten optimize etmeye çalışırken

linecache modülü tek bir Python kaynak dosyası herhangi hattını ulaşmasını sağlar,: Python 2 dokümantasyon dokümantasyon açıkça belirtmektedir Python 3'te genel linewise rastgele erişim hakkında bir şey söylüyor olsa bile Bir satır kullanarak, , birçok satırın tek bir dosyadan okunduğu ortak durum. Bu, traceback modülü tarafından biçimlendirilmiş traceback'e eklenecek kaynak satırlarını almak için kullanılır. linecache dosyalar değişmez varsayar, ancak Savefiles değiştiririm çünkü linecache, sizin kullanım durumu için çok kötü bir maç kullanarak herhangi bir durumda

; ve kaydettikten sonra onları yeniliyorsun.

import json 

def save_game(game_data): 
    with open('mysavedgame', 'w') as save_file: 
     json.dump(game_data, save_file) 

def load_game(): 
    with open('mysavedgame', 'r') as save_file: 
     return json.load(save_file) 

def new_game(): 
    return { 
     'items': [], 
     'money': 0 
    } 

# when starting a new game 
game_data = new_game() 

# adding items, money: 
game_data['items'].append('Crystal sword') 
game_data['money'] += 60 

# when saving a game, use 
save_game(game_data) 

# and load the data with 
game_data = load_game() 
print(game_data) 

programı baskılar

{'money': 60, 'items': ['Crystal sword']} 
Koşu: Ben kaydedip ve benzeri json.load ve json.dump

Something kullanarak tek sözlükten oyun devlet veri yüklemek istiyorum tavsiye ederim

ve mysavegame içeriği

{"money": 60, "items": ["Crystal sword"]} 
+0

, jsonun burada doğru çözüm olduğuna karar verdi. Bu metin dosyalarının garip davranışı, kötü çözümün sadece bir belirtisidir. –

İlgili konular