遊戲中的定時重新整理實現方式

2022-04-11 07:41:11 字數 2889 閱讀 5619

情景1:現在有乙個道具商店,共有10個道具可購買。玩家可使用某道具或鑽石重新整理道具商店中的道具,或者系統會每隔2小時贈送一次重新整理次數。

問題1:如何實現間隔2小時實時重新整理?

from datetime import

datetime

defcal_count(timestamp):

now_dt =datetime.now()

base_dt =datetime.fromtimestamp(0)

last_dt =datetime.fromtimestamp(timestamp)

count = ((now_dt.date() - base_dt.date()).days*12 + now_dt.hour/2) -\

((last_dt.date() - base_dt.date()).days*12 + last_dt.hour/2)

return

count

if__name__ == "

__main__":

last_ts = 1433000132

print cal_count(last_ts)

view code

問題2:重新整理後,如何隨機出新的10個道具?(注:items=[10001, 10002, 10003, ...], 對應的weight=[1, 2, 3, ...])

import

random

import

time

import

sysdef

func1(items, weight, times):

total_weight =sum(weight)

rand_items ={}

all_items =dict(zip(items, weight))

for _idx in

range(0, times):

count =0

rand = random.randint(0, total_weight-1)

for _item, _weight in

all_items.iteritems():

count +=_weight

if rand

rand_items[(_item, _weight)] = rand_items.setdefault((_item, _weight), 0) + 1

break

return

rand_items

deffunc2(items, weight, times):

'''len(items) == len(weight)

'''_now =time.time()

ifnot

items:

return

rand_pools =

rand_items ={}

total_weight =sum(weight)

for _idx, _item in

enumerate(items):

rand_pools.extend([_item]*weight[_idx])

for _idx in

range(0, times):

item =random.choice(rand_pools)

key =(item, weight[items.index(item)])

rand_items[key] = rand_items.setdefault(key, 0) + 1

return

rand_items

def pprint(args, debug=false):

ifdebug:

print

args

if__name__ == "

__main__":

debug =true

times = 10 #

rand times

items = range(1001, 2001)

weight = range(100, 100100, 100)

if len(items) !=len(weight):

pprint(

'data error.

', debug )

sys.exit()

pprint(

'\ntotal items:%s, random times: %s.

'%(len(items), times), debug )

_now =time.time()

rand_items =func1(items, weight, times)

pprint(

"\nfunc 1 total cost %s seconds.

"%(time.time()-_now), debug )

pprint(

'\nresult:%s.

' % sorted(rand_items.iteritems(), key=lambda dt:dt[0], reverse=true) )

_now =time.time()

rand_items =func2(items, weight, times)

pprint(

"\nfunc 2 total cost %s seconds.

"%(time.time()-_now), debug )

pprint(

'\nresult:%s

'% sorted(rand_items.iteritems(), key=lambda dt:dt[1], reverse=true) )

view code

遊戲中掉落效果的實現

1.計算運動引數 運動特徵 豎直方向受到重力作用,水平方向有空氣阻力作用 第一種情況 起拋點位置和掉落點位置處於同一水平面中。已知開始拋起的點位置和掉落目標位置,由此可以求出兩點之間的距離 distance 運動軌跡如下所示 根據rand 函式產生出 0,1 之間的數值,作為運動總的時間。並且hei...

遊戲中的指令碼

現在遊戲裡流行的指令碼有python 和lua 例如魔獸世界就是用lua指令碼來驅動邏輯的。我們為什麼用指令碼,而不是純用c 呢?當然,這與團隊協作以及工作效率有關。c 編譯速度不佳,當乙個專案達到比較龐大的乙個規模時,編譯的時間往往會讓人憤怒了。於是,python出現了。一些重要的演算法實現,圖形...

遊戲中的音效

1.遊戲中的即時音效 soundpool類 public int load context context,int resid,int priority 架子啊音訊檔案 context 該引數為應用程式的上下文 resid 該引數為要載入的音效資源的id priority 優先順序 例項 初始化聲音...