2013-10-09 36 views
0

我正在通過製作基於文本的遊戲來學習Python。我需要做什麼才能讓這個遊戲在線?顯然它極不發達,甚至無法播放。但我只是想盡早知道,所以我可以朝正確的方向前進並學習。我需要做什麼/學習如何使我的基於文本的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 
+1

我認爲一個很好的開始就是看看django https://www.djangoproject.com/,它是一個python的web框架,有一個非常好的教程,讓你開始(實際上它可能需要你重寫你的遊戲的大部分) 如果你只是學習python,我會建議你只是堅持用桌面遊戲開始。 – Calum

回答

0

一旦你有這個遊戲運行的一個單人遊戲的命令行版本,我認爲一個良好的下一步將是把它掛到Telnet接口。您仍然可以在計算機上本地輕鬆地播放它(通過telneting到localhost),但您也可以學習設置服務器的基本知識,以便您和您的朋友可以遠程播放它。你可以從朋友那裏獲得服務器空間,通過在某個地方找到一個免費的shell帳戶,讓你運行一個像服務器一樣的長時間運行的進程(例如,在一個泥漿論壇,比如Mudconnector或Mudbytes),或者每月支付幾美元一個便宜的VPS(你可以在lowendbox上找到)。

我認爲最好的簡單的Python遠程登錄庫是Miniboa。你可以在這裏找到它,https://code.google.com/p/miniboa/

我覺得@ Calum的想法也很好,但是Django比Miniboa複雜得多,所以你需要學習更多東西(學習曲線並不一定與Django相比更陡峭,只是更長,並且可能分散注意力你在這一點上)。

0

這實際上取決於你想要走多遠的兔子洞。我會假設MUD,並說MUD很多,因爲這是把我帶到這裏的標籤:)

你想了解的基礎將是套接字編程和telnet協議(http://en.wikipedia.org/wiki/Telnet#Related_RFCs)。一個很棒的網站是http://www.beej.us/guide/bgnet/。 Python對套接字的使用有非常好的接口,而本指南非常適合所有概念。這將使您的MUD能夠通過網絡(例如互聯網)發送和接收數據。

這不會給你帶來什麼是大多數MUD實現的telnet協議的所有細節。有顏色代碼,轉義字符,用於檢測播放器屏幕大小和相應地調整文本格式的例程。

MCCP是值得研究的另一件事。這是大多數MUD客戶端都能理解的壓縮協議。與基於文本的遊戲推送的網絡數據量相比,現在的互聯網使用方式實際上並不是那麼大,但只要有cputime,只要稍微壓縮就不會傷害任何人:)

誠實地這是學習和實施的所有有趣的東西,如果你真的想從頭開始,它是你想知道的東西。

正如在其他答案中提到的,還有現有的telnet庫。此外,您不必處理所有的telnet協議/網絡資料,並可專注於遊戲本身。

玩得開心!

相關問題