0

テキストベースのゲームを作ることでPythonを学んでいます。このゲームをオンラインにするにはどうすればよいですか? 明らかに、それは非常に開発が進んでおらず、プレイすることさえできません。しかし、正しい方向に進んで学ぶことができるように、早い段階で知りたかっただけです。

#object = [x, y, z, name, armor rating, weapon 1]

user= [100, 100, 100, "Wing Zero", 250, 50]

mothership=[100, 100, 50, 'mothership']
enemy1 = [100, 100, 105, "leo1", 100, 20]
enemy2 = [100, 100, 110, "leo2", 100, 20]
enemy3 = [100, 100, 115, "leo3", 100, 20]


nearbyships=[] #List of ships by player for printing purposes
truenearbyships=[]#List of ships near player for calculating purposes
listofships=[mothership, enemy1, enemy2, enemy3] #Overall ships in game

target = 'r'#Placecholder var

def radar(listofships, user):
                for i in listofships:
                    if user[0] + 50 > i[0] and user[1] + 50 > i[1] and user[2] + 50 > i[2]:
                        nearbyships.append("space object (%s) detected at coordinates (%s, %s, %s)" % (i[3], i[0], i[1], i[2]))
                        truenearbyships.append(('%s') % (i[3]))
                    else:
                        print('no ships detected')



def target(ship, user):
    print("You target ship")



while(True):
    print('\n Current coordinates: (%s, %s, %s)' % (user[0], user[1], user[2]))

    i=str(raw_input())
    if i == 'radar':
        radar(listofships, user)
        for i in nearbyships:
            print(i)
        nearbyships=[]


    elif i == 'l':
        print("You are sitting in a Leo cockpit")

    elif i == 'nearby':
        print(truenearbyships)

    elif 'target' in i:
        radar(listofships, user)
        targetlist=i
        targetlist=targetlist.split()

      #  target list is text taken from player input 'target object'. targetlist[-1] is the space object in game



        if targetlist[-1] in truenearbyships:
            print("You begin locking in on %s space object" % (i[-1]))
            print('target confirmed')
            currenttarget=targetlist[-1]
        else:
            print('ship not detected')


    elif i == 'fire weapon1':
        if currenttarget:
             print("You fire your buster rifle at %s and hit it directly" %(currenttarget)) #Insert probability of hit and damage

        else:#Check if there is a target set
            print("You are not targeting anything")



    else:
        print("Please input a valid command from the manual below \n'radar'\n'target (object)'")


#Movement system? Timed flight
#Combat
#Hyperspace
#multiple people
#Docking
4

2 に答える 2

0

このゲームのシングル プレイヤー コマンド ライン バージョンを実行したら、次のステップとして、それを telnet インターフェイスに接続することをお勧めします。コンピューターでローカルに簡単に再生することもできますが (localhost に telnet 接続することにより)、サーバーのセットアップの基本を学んで、自分や友達がリモートで再生できるようにすることもできます。サーバーのような長期実行プロセスを実行できる無料のシェル アカウントをどこか (たとえば、Mudconnector や Mudbytes などのマッド フォーラム) で見つけることによって、または月に数ドルを支払うことによって、友人からサーバー スペースを取得できます。安価な VPS (lowendbox で見つけることができます) の場合。

最もシンプルな Python telnet ライブラリは Miniboa だと思います。https://code.google.com/p/miniboa/で見つけることができます。

@Calum のアイデアも良いと思いますが、Django は Miniboa よりもはるかに複雑なので、学ぶべきことがたくさんあります (学習曲線は Django で必ずしも急勾配であるとは限らず、長くなるだけであり、この時点で気を散らす可能性があります) )。

于 2013-10-09T03:47:27.100 に答える
0

それは、ウサギの穴のどこまで行きたいかによって異なります。それが私をここに連れてきたタグなので、私はMUDを想定してMUDをたくさん言います:)

理解したいことのベースは、ソケット プログラミングと telnet プロトコル ( http://en.wikipedia.org/wiki/Telnet#Related_RFCs ) です。優れたサイトはhttp://www.beej.us/guide/bgnet/です。Python にはソケットを使用するための非常に優れたインターフェイスがあり、このガイドはかなり C に焦点を当てていますが、すべての概念が適用されます。これにより、MUD がインターネットなどのネットワーク経由でデータを送受信できるようになります。

これで得られないのは、ほとんどの MUD が実装する telnet プロトコルの詳細です。カラー コード、エスケープ文字、プレーヤー画面のサイズを検出し、それに応じてテキスト形式を調整するためのルーチンがあります。

MCCP も検討する価値があります。これは、ほとんどの MUD クライアントで認識される圧縮プロトコルです。テキストベースのゲームでプッシュされるネットワークデータの量は、最近のインターネットの使用方法と比較してそれほど大きくはありませんが、CPU時間があれば、少し圧縮しても誰も害を及ぼすことはありません:)

正直なところ、これはすべて学習して実装するのが楽しいものであり、本当にゼロから始めたい場合は、知りたいと思うものです.

他の回答で述べたように、既存の telnet ライブラリもあります。これの利点は、すべての telnet プロトコル/ネットワーク処理を処理する必要がなく、ゲーム自体に集中できることです。

楽しむ!

于 2014-08-19T17:12:47.860 に答える