1. 程式人生 > 其它 >SAM+線段樹合併模板

SAM+線段樹合併模板

目錄

1、引入

假如我們是《英雄聯盟》這款遊戲的開發人員,我們現在要創造幾個英雄(流浪法師·瑞茲、卡牌大師·崔斯特、探險家·伊澤瑞爾)、幾個怪獸(大龍、小龍)

1.1、按照面向過程的想法


1、定義瑞茲

def Ryze():
    data={
        'nick':'流浪法師',
        'name':'瑞茲',
        'hp':1000,
        'ap':80
    }
    print (data)

Ryze()

# {'nick': '流浪法師', 'name': '瑞茲', 'hp': 1000, 'ap': 80}

2、定義卡牌

def Twisted():
    data={
        'nick':'卡牌大師',
        'name':'崔斯特',
        'hp':600,
        'ap':80
    }
    print (data)

Twisted()

# {'nick': '卡牌大師', 'name': '崔斯特', 'hp': 600, 'ap': 80}

3、定義ez

def Ezreal():
    data={
        'nick':'探險家',
        'name':'伊澤瑞爾',
        'hp':700,
        'ap':80
    }
    print (data)
Ezreal()

# {'nick': '探險家', 'name': '伊澤瑞爾', 'hp': 700, 'ap': 80}

4、定義大龍

def Bigdargon():
    data={
        'name':'大龍',
        'hp':2000,
        'ad':30
    }
    print (data)
Bigdargon()

# {'name': '大龍', 'hp': 2000, 'ad': 30}

5、定義小龍

def Littledargon():
    data={
        'name':'小龍',
        'hp':1000,
        'ad':20
    }
    print (data)
Littledargon()

# {'name': '小龍', 'hp': 1000, 'ad': 20}

如果有更多的英雄或者怪獸,就要這麼一直持續下去,非常的麻煩


1.2、按照面向物件的想法


1、定義一個英雄的模板(模子)

def hero(nick,name,hp,ad):
    data={
        'nick':nick,
        'name':name,
        'hp':hp,
        'ad':ad
    }
    print (data)

2、根據這個英雄的模板(模子)建立瑞茲(例項化成具體的英雄)

Ryze=hero('流浪法師','瑞茲',1000,800)

# {'nick': '流浪法師', 'name': '瑞茲', 'hp': 1000, 'ad': 800}

3、建立卡牌

Twisted=hero('卡牌大師','崔斯特',600,80)

# {'nick': '卡牌大師', 'name': '崔斯特', 'hp': 600, 'ad': 80}

4、建立EZ

Ezreal=hero('探險家','伊澤瑞爾',700,80)

# {'nick': '探險家', 'name': '伊澤瑞爾', 'hp': 700, 'ad': 80}

5、定義一個怪獸的模板(模子)

def monster(name,hp,ad):
    data={
        'name':name,
        'hp':hp,
        'ad':ad
    }
    print (data)

6、根據這個怪獸的模板(模子)建立大龍(例項化成具體的怪獸)

Bigdargon=monster('大龍',2000,30)

# {'name': '大龍', 'hp': 2000, 'ad': 30}

7、建立小龍

Littledargon=monster('小龍',1000,20)

# {'name': '小龍', 'hp': 1000, 'ad': 20}

以上就是面向過程與面向物件一個對比。但是在實際的程式中,我們不會用函式來完成這個模板,而是用**類**來完成這個模板。