我需要做什么/学习如何让用户通过互联网访问基于文本的Python游戏

时间:2013-10-09 01:57:04

标签: python game-development mud

我正在通过制作基于文本的游戏来学习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

2 个答案:

答案 0 :(得分:0)

一旦你有一个单人游戏命令行版本的游戏运行,我认为下一步将是一个很好的连接到一个telnet接口。您仍然可以在计算机上轻松地在本地播放它(通过telnet到localhost),但您也可以学习设置服务器的基础知识,以便您和您的朋友可以远程播放它。您可以从朋友那里获得服务器空间,通过在某处找到一个免费的shell帐户,让您运行像服务器这样长时间运行的进程(例如,在Mudconnector或Mudbytes等泥浆论坛上),或者每月支付几美元对于廉价的VPS(你可以在lowendbox上找到)。

我认为最好的简单Python telnet库是Miniboa。你可以在这里找到它,https://code.google.com/p/miniboa/

我认为@ Calum的想法也很好,但Django比Miniboa要复杂得多,所以你需要学习更多东西(Django的学习曲线不一定更长,只是更长,可能会分散你的注意力在此刻)。

答案 1 :(得分:0)

这实际上取决于你想要去兔洞的距离。我会假设MUD并且说MUD很多,因为那是带给我的标签:)

您想要了解的基础将是套接字编程和telnet protcol(http://en.wikipedia.org/wiki/Telnet#Related_RFCs)。一个很棒的网站是http://www.beej.us/guide/bgnet/。 Python有一个非常好的套接字使用接口,虽然本指南非常注重所有概念。这将使您的MUD能够通过网络(例如互联网)发送和接收数据。

这对大多数MUD实施的telnet协议的所有细节都不会得到。有颜色代码,转义字符,用于检测播放器屏幕大小的例程以及相应的文本格式调整。

MCCP是值得研究的另一件事。这是大多数MUD客户端理解的压缩协议。与现在使用互联网的方式相比,在基于文本的游戏中推送的网络数据量确实不是那么大,但只要他们拥有cputime,就会有点压缩从不伤害任何人:)

老实说,这是学习和实施所有有趣的东西,如果你真的想从头开始,你会想知道它。

正如其他答案所述,现有的telnet库也是如此。这样做的好处是你不必处理所有的telnet协议/网络内容,并且可以专注于游戏本身。

玩得开心!