1. 開心消消樂有規律可循嗎
1、一般消除一下30分,連消每次+30,然後60,90,120這樣上去。
2、冰塊裡面消除一次1000,連消一次+1000,然後2000,3000,4000這樣上去。
3、5+4組合一下給2000,每個被變化動物200分,每射掉一個普通的動物15分,冰塊1500。
2. 畫風突變!上線七年的《開心消消樂》到底遭遇了什麼
一張神仙卷軸,開啟了一場仙庭盛宴。下面進行有獎競猜:下面的畫面是哪款 游戲 ?
提示:休閑三消,地鐵手機霸主,超8億注冊用戶。帶著提示,觀看下面的視頻,你會跟我們一樣,得到既合理,又略微驚訝的答案。
國風氛圍又不失Q萌特色的CG效果,演繹出一場仙界的開心傳奇。很難聯想到,這是開心消消樂品牌活動的視頻。試想這款上線7年,人氣和玩家認可度都非常高的 游戲 ,為什麼突然出現如此大的變化?
原來,這是《開心消消樂》為玩家創辦的第二屆專屬節日——開心消除節。今年品牌與上海美術電影製片廠實現夢幻聯動,創新 游戲 玩法,讓玩家與《大鬧天宮》《哪吒鬧海》《寶蓮燈》《葫蘆兄弟》的四大英雄IP在 游戲 內外一同完成一次不一樣的挑戰。
在 游戲 美術方面煥然一新的同時,破圈聯動牽動了更多圈層大神在 游戲 外紛紛發聲,也引導了玩家之間更廣范圍的分享及自發傳播,口碑一路上揚。很難想像《開心消消樂》是一款已經上線7年卻經久不衰的手機 游戲 ,尤其從各方面了解到,《開心消消樂》的數據還在持續穩健增長,可以看出其研發和運營功底深厚,同時作為手游觀察員,也有了新的領悟:重視用戶體驗、求新求變才能維持一款 游戲 根本的生命力。
游戲 造節的差異化競爭
第一屆開心消除節於2020年8月上線,聯動張含韻獻唱主題曲,並在 游戲 內設計9大全新消除關卡,贏得玩家的良好口碑,第二屆也如期而至。
造節,或許在互聯網時代已不是新詞。2009年,淘寶「雙11」交易額達到5200萬,從此之後11月11日不只是「光棍節」的代名詞,電商造節的潘多拉魔盒由此打開。「雙11」後,「雙12」、「618」、吃貨節、年貨節……各式各樣的互聯網節如浪潮般向用戶襲來。
不過,造節在電商領域是普遍行為,但在 游戲 圈,造節的屈指可數。起初,人們看到的暴雪嘉年華主要聚焦在玩家內部,而後也只有《王者榮耀》《和平精英》這類多人在線強社交屬性的重度 游戲 造節,如「五五開黑節」和「和平直播節」。
作為一款休閑類的三消 游戲 ,屬性完全不同的《開心消消樂》為什麼同樣選擇造節?有什麼實際意義?
在我看來,首先是在行業競爭中,與同類產品相比,《開心消消樂》希望通過造節刷新公眾對休閑 游戲 的固有認知,突出自身的品牌調性,實現差異化競爭。
自2015年起,越來越多的休閑 游戲 在市面上出現,到2018年,中國休閑 游戲 市場規模高達86.7億元,用戶量破4億,占手遊玩家群66.4%。Ohayoo公開數據所示,中國休閑 游戲 用戶規模已達2億日活,按照目前市場上0.5元-0.7元的ARPU值推算,這個市場將達300億-500億元規模。
這么大的利潤空間,導致許多休閑 游戲 新上線時,力圖追求短期刺激與效益,簡單粗暴的姿態一覽無余,利用買量等營銷手段獲取大量用戶後,玩法體驗卻無法匹配。被初期新鮮感吸引的玩家,很快就會面對 游戲 的點滴之中隱藏著的各種付費需求、消費陷阱,埋得雷越多,用戶的體驗越差。
當同類產品沉迷於以福利、廣告等手段拴住玩家時,追求長線生命力的老牌熱門 游戲 則截然相反,在用戶體驗上極為重視,《開心消消樂》同樣如此。曾經有玩家提及,手機里的消消樂一直不會刪除,就算換手機也會第一時間下載回來。這種與玩家的 情感 支撐,是舉辦消除節的基礎。
從產品自身發展出發考慮,面對層出不窮的新手游,如何進一步激活市場和用戶是重點,這就需要尋求玩法創新,實現更多流量入口。
這時候,真正考驗對運營本質思考的,是人文層面的關懷及 情感 價值的傳遞。舉辦消除節其實是能達到這一效果的方式之一。一是節日本身就會帶來儀式感,二是找到引發玩家共鳴的主題,可以打造出難以復刻的 游戲 記憶,喚起玩家的共鳴和認同,讓他們的忠誠度不再依靠福利,而以羈絆 情感 的方式被吸引。
這對於玩家來說,也是一次集體狂歡的享受,感受到節日氛圍和特別策劃帶來的新玩法、新體驗,同時能與產品進行更多互動,還能有機會和有著共同愛好的玩家交流。
破圈聯動上美影經典IP
開心消消樂品牌基於對雙方用戶分析與判斷後,第二屆消除節的主題選擇與上美影的IP進行聯動。出於對自身用戶的了解,他們既會對經典的「三消」玩法愛不釋手,也會渴望新鮮的內容,藉助上美影IP里的英雄技能擴充玩法可以打破固有消除模式,上美影的經典故事也可以快速獲取玩家的內容認同感,在 游戲 時更加沉浸。
另一方面,對IP的背景還原及與IP人物聯動,已成為當下不少 游戲 作品的標配。傳統文化要想被人喜歡,首先就是要用流行的方式,進行重新表達,而這恰恰是 游戲 的優勢。此次聯動則作出一次實踐創新,上美影的80、90後粉絲對這些英雄有童年偶像情懷,而讓傳統文化元素與 游戲 相融合,也形成國潮新風尚。
工作生活壓力大,休閑 游戲 已然成為一部分人解壓的方式。所以這次聯動,覆蓋 游戲 的視覺、音效、玩法、獎勵等多方面,讓用戶深深沉浸在這次聯動中,感受聯動中不斷傳遞的「開心」這一 情感 價值。
因此,此次聯動的主題定為「開心自有神技」,有兩層含義:其一體現在 游戲 中,有上美影神仙技能加持,讓闖關更容易,消除更開心;其二體現在精神支持上,通過 游戲 獲得的開心能量消除煩惱。這同樣與《開心消消樂》希望傳達的開心、放鬆、治癒、解壓的品牌 情感 一脈相承,也符合品牌2021年的「宇宙破次元,找回開心的自己」主題。
從 游戲 畫面來看,上美影神話本身帶有復古感,開心消除節藉此將站內打造成煥然一新的仙庭世界,整體設計以展開的長卷卷軸為主體,卷軸本身高低綿延,卷軸上是錯落的宮闕和仙山以及層層環繞的雲海。樓宇和仙山分別是玩家需要闖關的關卡,根據IP存在的世界觀進行設計。整體地圖的美術風格是可愛的國潮風,樓體和山體材質更偏向潮玩的樹脂質地,結構精煉,帶來特別的視覺效果。
在 游戲 玩法方面,開心消消樂結合上美影4大IP不同的故事背景,提煉出他們不同的特殊技能。分別設立四類主題關卡,參與完成不同關卡挑戰,就能攢齊4種代表不同精神力量的寶石,從而激發噴泉,獲得開心能量。不過,在以往的基礎玩法之上延展出了Plus甚至是Pro玩法,持續積累能量不僅可以消除障礙,更可以「召喚」出英雄神技,隨時引爆N*N連排絕殺。當玩家完成挑戰、全民闖關達到一定次數時,失去能量的寶石將重新被激活,回歸開心噴泉之中,最終讓噴泉重新煥發活力。
這一次 游戲 玩法的升級,可以看出《開心消消樂》的開放創新心態,真正做到了通過在 游戲 中融入IP更加植入IP內容屬性,來實現IP粉絲向 游戲 粉絲的轉化,進一步激活新老用戶,提升品牌認知度。
圈層大神自發造勢
此次破圈不僅止於 游戲 產品內的聯動,從當前的傳播效果來看,還體現在 游戲 外各個圈層大神出戰為開心消除節的造勢。
這次開心消除節主視頻十分驚艷,從內容上看,簡潔明了地交代了開心消除節的故事線,4大英雄IP與小動物們破圈同框,全力以赴喚醒4大神力;視覺呈現上,場景設計保留國畫古風造型和配色,還原上美影動畫世界的經典國風色彩,同時小動物的加入為片子增加了更多新鮮的趣味性。為觀眾送上一支生動有趣的CG動畫。
與神仙故事之境相匹配的,還有引發各界討論的開心消除節最新主題曲《仙旅·序章》。國樂大師吳彤利用《大鬧天宮》《哪吒鬧海》《寶蓮燈》《葫蘆兄弟》里最經典的神仙配樂,配合巴烏、竹笛、嗩吶、簫、高音笙等民樂,讓經典曲目在二次編曲後,融入高燃意境,1人演奏9種樂器一氣呵成,在這首主題曲里一次放送。
更多大神玩家則自發出戰,實際響應開心消除節的號召:神秘程序員大神、美術大神眠狼、國風舞蹈大神王一一、國風糖畫大神九月、Rap大神肥宅快樂雕、B站高燃音樂Up主玩音樂的EZ、揚琴架子鼓通通在手的官枋匚、鬼畜Up主焦大仙啊等齊上陣,用極具個人特色的技能詮釋不一樣的開心消消樂玩法。令人意想不到的是,大神們都是2000關+的贏家。通過大神的分享,輻射到更廣闊的圈層,玩家之間的自發傳播則完成了活躍的社交循環。
值得一提的是,本次開心消除節還有一大批自發帶 游戲 出圈的村民。這些村民是開心消消樂的常駐用戶,對他們來說,通過開心消除節不光可以玩到更爽的 游戲 ,更是一次把自己熱愛的 游戲 帶到更多人群面前的機會,傳遞開心是村民們的使命。他們在英雄IP的加持下,在出戰大神的帶領下,自發創作內容為開心消除節打造聲量。
通過第二屆開心消除節,不難看出,良好的玩家口碑背後,離不開品牌重視求新求變的戰略打法。即便自 2014 年上線以來,《開心消消樂》就一直活躍在國內休閑手游市場的第一梯隊中,並且長期穩居「三消」品類的龍頭寶座,但它的追求不止於此——不僅要把現有用戶攥牢,還希望滿足消費者多樣玩法的需求,進一步破圈圈粉。這也意味著,《開心消消樂》的玩法始終在不斷迭代進化,無論是 游戲 關卡、 游戲 地圖、 游戲 障礙還是 游戲 元素,都有著不同的形態和變化,同時互動感很強,使玩家可以沉浸其中,才能鞏固原有粉絲基礎,持續提升品牌。創新,是開心消消樂一直未變的主題。
在我看來,《開心消消樂》的這種長線運營規劃,還源於樂元素打磨精品 游戲 的初衷,傳遞開心,不斷創新出新鮮、有活力、簡單而又解壓的 娛樂 文化體驗。同時,以用戶作為前進的驅動力,把每一個產品當作生命體去運營。因此,《開心消消樂》才能擁有持續強勁的生命力,未來的新突破同樣值得各方期待。
3. Python實現消消樂小游戲
pre{overflow-x: auto} 實現 消消樂的構成主要包括三部分:游戲主體、計分器、計時器,下面來看一下具體實現。
先來看一下游戲所需 Python 庫。
import os import sys import time import pygame import random
定義一些常量,比如:窗口寬高、網格行列數等,代碼如下:
WIDTH = 400 HEIGHT = 400 NUMGRID = 8 GRIDSIZE = 36 XMARGIN = (WIDTH - GRIDSIZE * NUMGRID) // 2 YMARGIN = (HEIGHT - GRIDSIZE * NUMGRID) // 2 ROOTDIR = os.getcwd() FPS = 30
接著創建一個主窗口,代碼如下:
pygame.init() screen = pygame.display.set_mode((WIDTH, HEIGHT)) pygame.display.set_caption('消消樂')
看一下效果:
再接著在窗口中畫一個 8 x 8 的網格,代碼如下:
screen.fill((255, 255, 220)) # 游戲界面的網格繪制 def drawGrids(self): for x in range(NUMGRID): for y in range(NUMGRID): rect = pygame.Rect((XMARGIN+x*GRIDSIZE, YMARGIN+y*GRIDSIZE, GRIDSIZE, GRIDSIZE)) self.drawBlock(rect, color=(255, 165, 0), size=1 # 畫矩形 block 框 def drawBlock(self, block, color=(255, 0, 0), size=2): pygame.draw.rect(self.screen, color, block, size)
看一下效果:
再接著在網格中隨機放入各種拼圖塊,代碼如下:
while True: self.all_gems = [] self.gems_group = pygame.sprite.Group() for x in range(NUMGRID): self.all_gems.append([]) for y in range(NUMGRID): gem = Puzzle(img_path=random.choice(self.gem_imgs), size=(GRIDSIZE, GRIDSIZE), position=[XMARGIN+x*GRIDSIZE, YMARGIN+y*GRIDSIZE-NUMGRID*GRIDSIZE], downlen=NUMGRID*GRIDSIZE) self.all_gems[x].append(gem) self.gems_group.add(gem) if self.isMatch()[0] == 0: break
看一下效果:
再接著加入計分器和計時器,代碼如下:
# 顯示得分 def drawScore(self): score_render = self.font.render('分數:'+str(self.score), 1, (85, 65, 0)) rect = score_render.get_rect() rect.left, rect.top = (55, 15) self.screen.blit(score_render, rect) # 顯示加分 def drawAddScore(self, add_score): score_render = self.font.render('+'+str(add_score), 1, (255, 100, 100)) rect = score_render.get_rect() rect.left, rect.top = (250, 250) self.screen.blit(score_render, rect) # 顯示剩餘時間 def showRemainingTime(self): remaining_time_render = self.font.render('倒計時: %ss' % str(self.remaining_time), 1, (85, 65, 0)) rect = remaining_time_render.get_rect() rect.left, rect.top = (WIDTH-190, 15) self.screen.blit(remaining_time_render, rect)
看一下效果:
當設置的游戲時間用盡時,我們可以生成一些提示信息,代碼如下:
while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() if event.type == pygame.KEYUP and event.key == pygame.K_r: flag = True if flag: break screen.fill((255, 255, 220)) text0 = '最終得分: %s' % score text1 = '按 R 鍵重新開始' y = 140 for idx, text in enumerate([text0, text1]): text_render = font.render(text, 1, (85, 65, 0)) rect = text_render.get_rect() if idx == 0: rect.left, rect.top = (100, y) elif idx == 1: rect.left, rect.top = (100, y) y += 60 screen.blit(text_render, rect) pygame.display.update()
看一下效果:
說完了游戲圖形化界面相關的部分,我們再看一下游戲的主要處理邏輯。
我們通過滑鼠來操縱拼圖塊,因此程序需要檢查有無拼圖塊被選中,代碼實現如下:
def checkSelected(self, position): for x in range(NUMGRID): for y in range(NUMGRID): if self.getGemByPos(x, y).rect.collidepoint(*position): return [x, y] return None
我們需要將滑鼠連續選擇的拼圖塊進行位置交換,代碼實現如下:
def swapGem(self, gem1_pos, gem2_pos): margin = gem1_pos[0] - gem2_pos[0] + gem1_pos[1] - gem2_pos[1] if abs(margin) != 1: return False gem1 = self.getGemByPos(*gem1_pos) gem2 = self.getGemByPos(*gem2_pos) if gem1_pos[0] - gem2_pos[0] == 1: gem1.direction = 'left' gem2.direction = 'right' elif gem1_pos[0] - gem2_pos[0] == -1: gem2.direction = 'left' gem1.direction = 'right' elif gem1_pos[1] - gem2_pos[1] == 1: gem1.direction = 'up' gem2.direction = 'down' elif gem1_pos[1] - gem2_pos[1] == -1: gem2.direction = 'up' gem1.direction = 'down' gem1.target_x = gem2.rect.left gem1.target_y = gem2.rect.top gem1.fixed = False gem2.target_x = gem1.rect.left gem2.target_y = gem1.rect.top gem2.fixed = False self.all_gems[gem2_pos[0]][gem2_pos[1]] = gem1 self.all_gems[gem1_pos[0]][gem1_pos[1]] = gem2 return True
每一次交換拼圖塊時,我們需要判斷是否有連續一樣的三個及以上拼圖塊,代碼實現如下:
def isMatch(self): for x in range(NUMGRID): for y in range(NUMGRID): if x + 2 -2: for each in [res_match[1], res_match[1]+1, res_match[1]+2]: gem = self.getGemByPos(*[each, start]) if start == res_match[2]: self.gems_group.remove(gem) self.all_gems[each][start] = None elif start >= 0: gem.target_y += GRIDSIZE gem.fixed = False gem.direction = 'down' self.all_gems[each][start+1] = gem else: gem = Puzzle(img_path=random.choice(self.gem_imgs), size=(GRIDSIZE, GRIDSIZE), position=[XMARGIN+each*GRIDSIZE, YMARGIN-GRIDSIZE], downlen=GRIDSIZE) self.gems_group.add(gem) self.all_gems[each][start+1] = gem start -= 1 elif res_match[0] == 2: start = res_match[2] while start > -4: if start == res_match[2]: for each in range(0, 3): gem = self.getGemByPos(*[res_match[1], start+each]) self.gems_group.remove(gem) self.all_gems[res_match[1]][start+each] = None elif start >= 0: gem = self.getGemByPos(*[res_match[1], start]) gem.target_y += GRIDSIZE * 3 gem.fixed = False gem.direction = 'down' self.all_gems[res_match[1]][start+3] = gem else: gem = Puzzle(img_path=random.choice(self.gem_imgs), size=(GRIDSIZE, GRIDSIZE), position=[XMARGIN+res_match[1]*GRIDSIZE, YMARGIN+start*GRIDSIZE], downlen=GRIDSIZE*3) self.gems_group.add(gem) self.all_gems[res_match[1]][start+3] = gem start -= 1
之後反復執行這個過程,直至耗盡游戲時間,游戲結束。
最後,我們動態看一下游戲效果。
總結
本文我們使用 Python 實現了一個簡單的消消樂游戲,有興趣的可以對游戲做進一步擴展,比如增加關卡等。
到此這篇關於Python實現消消樂小游戲的文章就介紹到這了,希望大家以後多多支持!