2012-04-26 5 views
1

私はかなり長い間同じ戦艦ゲームで作業しており、最終段階に入っています。今度は、ゲームにdef saveScore関数を使って上位5つのスコアをテキストファイルに保存させる必要があります。私は今作成したファイルを読んで、ファイルのオープンとクローズを除いてtryを使ってスコアをpythonコードに出力する必要があります。私はその唯一のローカルを信じているので、私の変数のスコアを認識するためにPythonを取得する方法を知りません。ここに私が持っているものがあります。私はピクルスの使い方を知らない。Pythonで戦艦ゲーム用のテキストファイルを作成して保存する

def main(): 
    board=createBoard() 
    printBoard(board) 
    s = [[21,22,23,24,25], 
    [45,55,65,75], 
    [1,2,3], 
    [85,86,87], 
    [5,15], 
    [46,56]] 
    playBattleship(s,board) 
main() 

答えて

1

おそらく最も簡単な方法は、Pickleを使用することです。 「ロード」および「ダンプ」機能を使用すると、スコアオブジェクトを簡単に保存/ロードできます。ピクルスを使用

http://docs.python.org/library/pickle.html

import pickle 

def saveScore(score): 
    pickle.dump(score, 'topfive2.txt') 

def loadScore(): 
    return pickle.load('topfive2.txt') 
+0

このコードは私にとってはあまりにも進んでいます私はちょうど固定したものを投稿させてくれるのですか? – user1329880

+0

"def createBoard"の上のPythonファイルの先頭に "import"ステートメントを入れてあなたの "saveScore"を私が投稿したものに置き換えてください。 – Developer

+0

複数のスコアのためにこの例を説明しなければならないかもしれません。 OPsの 'score'はintです。これは単一のものを保存するだけです。リストを保存してリコールする方法をOPに表示することがありますか? – jdi

1

ファイルへうちPythonオブジェクトをシリアル化し、次にオブジェクトに再びフォーマットを読み取る低レベルの方法です。あなたが自然に使いやすい上位レベルのインターフェイスがほしい場合は、モジュールを見てみてください。http://docs.python.org/library/shelve.html#example

あなたは辞書のように扱い、スコアを追加して保存することができます。それはフードの下で酸っぱくすることによってファイルに保存されます。

import shelve 

# open a shelve file. writeback=True makes it save 
# on the fly 
d = shelve.open('temp.file', writeback=True) 
if not d.has_key('scores'): 
    d['scores'] = [] 

print d['scores'] 
# [] 

# add some score values 
d['scores'].append(10) 
d['scores'].append(20) 
d.close() 

# next time, open the file again. It will have 
# the 'scores' key. Though you should probably check 
# for it each time in case its a first run. 
d = shelve.open('temp.file', writeback=True) 
print d['scores'] 
#[10, 20] 

# sort the list backwards and take the first 5 top scores 
topScores = sorted(d['scores'], reverse=True)[:5] 
+0

ヒントを教えていただきありがとうございます。 – twaddington

+0

@twaddington:そうです。私はあまりにも広く使われているとは思わない。そのほとんどは、必要に応じて自分のオブジェクトを漬け込むことを避けるための便利さです。 – jdi

+0

唯一の問題は、tryとexceptを使用して、このコードを使用できないということです。私が投稿したものを見て、あなたがそれを知ることができるかどうかを見ることができますか? – user1329880

1

読書とPythonでファイルを書き込むには、pretty straightforwardです:

# Opening a file for writing will return the file handle f 
f = open('/tmp/workfile', 'w') 

# You can then write to the file using the 'write' method 
f.write('Hello world!\n') 

# To read your data back you can use the 'read' or 'readlines' methods 

# Read the entire file 
str = f.read() 

# Read the file one line at a time 
line = f.readline() 

# Read the file into a list 
list = f.readlines() 

あなただけの最後のスコアより多くのデータを保存したい場合は、SQLite3のデータベースを作成することを検討することがあります。 PythonはSQLite3のために良いbuilt-in supportを持っています。これは、クロスプラットフォームのファイルシステムデータベースです。データベースはディスク上の通常のテキストファイルですが、データベースから期待される多くのSQL操作をサポートしています。

+0

今私はスコアを保存しているが、私はそれらを自分の行に入れて欲しい。これで助けてくれますか? – user1329880

+1

@ user1329880: 'f.write("%s \ n "%score)' – jdi

+0

「\ n」は、次の項目がそれ自身の行にあることを示す特別な改行文字です。実際に目に見えない改行文字を挿入している "return"キーまたは "enter"キーを押すと、リンク先がリンクしていると考えてください。http://en.wikipedia.org/wiki/Newline – twaddington

関連する問題