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),但您也可以学习设置服务器的基础知识,以便您和您的朋友可以远程播放它。您可以从朋友那里获得服务器空间,方法是在某个地方找到一个免费的 shell 帐户,让您可以像服务器一样运行长时间运行的进程(例如,在 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 客户端都理解的压缩协议。与当今使用互联网的方式相比,在基于文本的游戏中推送的网络数据量实际上并没有那么大,但是只要有 cputime,一点压缩就不会伤害任何人:)

老实说,这些都是值得学习和实施的有趣的东西,如果你真的想从头开始,这是你想知道的东西。

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

玩得开心!

于 2014-08-19T17:12:47.860 回答