python3 專案開發-中級篇

響神發表於2018-06-10

這個是學習python的中期專案,由一個團隊完成的,團隊人數為5-8人。我們團隊是6個人。

首先,聊天室是由團隊每個 人都要編寫的,這個是通訊基礎。

24點遊戲規則比較簡單,只需要將可行的24點組合提前存入到資料庫,然後在適當的時候呼叫一個查詢語句,隨機出來一個組合,顯示給所有使用者,然後接收使用者輸入,判斷表示式是否運算結果為24,如果是則提示正確,不是不做處理,當作正常聊天資訊即可,這樣使用者可以自己想玩就玩,不想玩可以繼續聊天。此部分程式碼由一個人來完成。

然後是天黑請閉眼遊戲,該遊戲稍微複雜一些,主要需要處理以下幾個情景:(程式碼2人完成)

1:分牌給10位玩家,系統儲存記錄玩家的身份資訊

2,while group == 魏國 or  魏國全部出局: #迴圈判斷在遊戲中的所有玩家是否只有一個陣營的

    1, 天黑時,魏國3人可以輸入訊息和接收訊息,選擇攻擊目標,此時其他玩家接收不到訊息,也無法傳送訊息,這樣實現了天黑請閉眼的效果,攻擊目標出局。異常輸入處理:有且只有一個出局。

n=fun() -> return number

online.remove(n)

    2,魏國3人完成之後,這3人無法收到訊息,3個蜀國的玩家可以選擇查驗一位玩家的身份,原則上是檢視3位以外的玩家的身份資訊,系統會告知3人被查驗的人身份資訊。 此時呼叫的函式和前面是基本一樣的。有且只能查一個人身份。

    3,天亮了,系統提示步驟1情況下,被攻擊目標出局的訊息給的所有人,出局者此時被遮蔽掉任何訊息。

    4,所有在遊戲中的人自由討論,此時所有在遊戲中玩家可以接收任何訊息,討論時間為150s。

    5,時間到了,系統給每個客戶端彈框,單選一個認定需要出局的人員,如果前沒有任何玩家比其他玩家票數都高,則無人出局,否則票數最高者出局。

    6,如果有出局者,則此時出局者發表遺言,其他人全部不能傳送訊息,只能接收到出局者的遺言訊息。

else:

    列印勝利的組的資訊,以及原始人員的身份資訊。

24點程式碼如下:

class TwentyFour:
        def __init__:
            pass
        def createCard(self):
            """store some tight group of 24"""
            pass
        def getFourCard(self,*args): -> return a sequence of 4 card
            1,create 4 card which can make up 24 by some math operation
        def showCards(self):
            """print 4 cards"""
        def getInputResult(self,*args):  -> return  result 
            2,get input expression,return it's result
            eg: 6*8+(7-5) -> 24
        def AnswerRight(self,result):
            result True if result == 24 else False
    if __name__ == "__main__":
        tf = TwentyFour()
        tf.xxx()
        tf.xxx()

天黑請閉眼程式碼如下:

class ThreeCountry:
        """game description:
            this game usual palyed by 10 players,3 of them belong to 'wei',
            3 of them belong to 'shu',orher 4 player belong to 'wu'.
            'shu' group and 'wu' group fight against to 'wei',but all of them 
            don't each other belong to which country,so they need comunicate.
            one turn:
                1,wei group decide which player out game(for example p1 out),meanwhile other player will not recv any message,timeout 15s,if no choice,default out the first player which not belong to wei.
                2,shu group decide which player to be shown,and the system will tell them the player belong to which group.meanwhile other player will not recv any message,timeout 15s,if no choice,default out the first player which not belong to shu
                3,system msg: player 1 out to all player,and player 1 cant send any msg to others.
                4,online player can send and recv any msg ,they can say anything,timeout 150s
                5,decide one player out game,player input the choice,server count the vote result ,and decide one player out. 
                Exception situation:
                    p1 = 4 p2 = 4, result is no player out
                    p1 no vote , this vote is 0,count other vote. 
            game over:
                1:wei group offline -> shu and wu win the game
                2:shu group and wu group offline  -> wei win the game
        """
        def __init__(self):
            pass

        def sendMsgtoWei(self):
            pass

        def recvResultFromWei(self):
            """return tuple('1','5',5')"""
            pass

        def defaultNoResultFromWei(self):
            """if goal is not sure,return a current default value"""

        def defaultFirstResultFromWei(self):
            """
                if goal is 5,1,7, return 5
                if goal is 7,1,5, return 7
            """

        def outPlayer(self,*args):
            """outPlayer('1','5',5') --> online.remove(5)"""
            """outPlayer('1') --> online.remove('1')"""
            pass

        def timeout(self,times):
            """set timeout time,unit= second(s)"""

        def sendMsgtoShu(self):
            pass

        def recvResultFromShu(self):
            """return tuple('1','5',5')"""
            pass

        def defaultNoResultFromShu(self):
            """if goal is not sure,return a current default value"""

        def defaultFirstResultFromShu(self):
            """
                if goal is 5,1,7, return 5
                if goal is 7,1,5, return 7
            """ 

        def vote(self):
            """
            return sequence of vote result
            format:("1","2","5","8","9"...)
            """

亮點內容來了:

    自動閱卷考試系統:

    1,進入考試系統前提示使用者,考試期間不允許切屏,如果切屏3次則立即交卷處理

        此處需要編寫函式

        a,不允許切屏函式,將介面全屏或者設定焦點不能改變

        b,計數函式,累計切屏次數

        c,切屏3次情況下,獲取當前已選題目的結果,然後將介面關閉,將該使用者從伺服器端暫時拉黑掉。

    2,賬號登陸 註冊等,此處新增加密演算法,實現攔截其他非法使用者進行登陸註冊等,避免洩露題目和答案,給使用伺服器端公司帶來損失。

    3,完全進入考試環境

        a,主介面用網頁的方式開啟,裡面的內容使用一個函式來得到funName(singleList,dualList)

        b,函式funName(singleList,dualList)的功能是獲取到題目,singleList傳入的是一個隨機數生成的列表,表示從資料庫題庫裡面去取出這些資料,長度為30. dualList引數傳入的是多選題的序號,這個序號用來從資料庫的另外一張表裡獲取題目和答案,答案存入到一個答案列表裡面,所以返回值是單選題的答案和多選題答案的兩個列表。

        c,編寫函式獲取每個題目答案的方法

        d,編寫提交試卷時,迴圈50次呼叫c中的方法,給到伺服器端進行處理

        e,伺服器接收到提交的答案之後,對答案進行解析,然後和funName返回的答案進行比對,得到最後的分數,以及提供一個介面函式,如果使用者需要檢視詳細答案資訊,可以檢視到,但是不檢視時只顯示分數。

        f,設定答案給出的時間,必須是在考試設定的時間結束之後,所以使用者考試都結束了,使用者才能得到自己的分數和答案詳細解釋。

    說明:此程式需要大量的題目,所以這個工作量還是比較大的,但是為了開發和擴充套件,還需要編寫能夠批量匯入資料的函式,這個函式能夠根據指定的格式解析題目內容,答案和詳細解釋,分別存到資料庫表中的欄位裡面,這樣在後期資料量大的時候就可以批量的去增加,刪除和修改資料了,便於資料庫的維護。

    另外,資料庫的查詢語句也可以編寫成為一些資料庫的函式,這樣在需要的時候直接呼叫這些函式即可。

    資料安全性方面一定要做好,資料的維護的工作量是很大的,所以這些前期的函式都要寫的安全可靠,封裝起來,後面維護的時候就直接呼叫,而不是每次都去使用基礎的資料庫語句了。


相關文章