我正在通过制作基于文本的游戏来学习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
答案 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协议/网络内容,并且可以专注于游戏本身。
玩得开心!