1.10
開發(fā)的初衷是閑來無事開了把寵物連連看,然后發(fā)現(xiàn)打了幾遍第一關(guān)都過不去,于是想自己寫個,這樣就可以任意使用提示次數(shù)了(bushi。其實今天正好是老媽生日,問了下老媽她竟然還玩連連看,還ak了orz。于是乎,想寫個上強度版給老媽作生日禮物2333
1.12
昨天出去玩了,今天開工。邊玩游戲邊寫效率實在不高,找了素材,到晚上才寫完30%的ui、
界面用的QGraphicsView,QGraphicsScene,QGraphicsPixmapItem這一套寫的,不太熟當(dāng)練習(xí)了。
1.13
主要寫了一下消除的算法。
連連看消除的規(guī)則是,對于兩個要消除的元素,判斷它們之間是否存在一條折角不超過三次的路徑。
代碼實現(xiàn)上,對于選中的兩個元素的坐標(biāo)(a,b)和(c,d),先考慮折角次數(shù)為三的情況,我們?nèi)ッ杜e中間那個線段。

比方上圖,就是去枚舉第二類線段,然后判斷一下線段2兩端是否能直達(dá)兩個目標(biāo)點。思考一下,可以發(fā)現(xiàn)需要枚舉的第二類線段,有一些特點,首先一定是直的(廢話233),這樣它的兩個端點的橫或縱坐標(biāo)必有一個相同,再者兩端的坐標(biāo)(u0,v0),(u1,v1),對于(u0,v0),u0和v0至少有一折=者等于a/b/c/d。
折角次數(shù)為三的情況解決了,其實折角次數(shù)為二的,可以看成其中兩個個點重合了。
設(shè)地圖為n*m的矩陣,有用的端點大概是2(n+m)個,有用線段大概是個,check一條線段暴力的話是(n+m)的(就模擬走一遍是不是通的),可以用樹狀數(shù)組維護(hù)前綴和優(yōu)化到O(logn+logm),不過n,m很小就沒必要優(yōu)化了(主要太懶了233)??偟囊淮闻袛嗍欠裼薪?,大概是
,一般n,m大概都是在[10,20]間,跑起來很快,100ms綽綽有余。(寫許久算法題,已經(jīng)形成了寫什么都要控制在1s內(nèi)的習(xí)慣了2333)。
講個思路,代碼又丑又長就不貼了。。。
感覺主要是ui和一些交互費點功夫,需要查資料實現(xiàn),算法甚至不用優(yōu)化233.
1.14
先貼個進(jìn)度吧,截止到昨天,非常丑陋的框架。。

昨晚寫完消除的算法后,就想了好一會對于選中圖案的顯示問題,果然是被交互干爛了。今天用QPainter試了好久發(fā)現(xiàn)一直顯示不了選中框,查了下發(fā)現(xiàn)QPainter只能在窗口上繪畫,而我選用的是Scence那一套。后來發(fā)現(xiàn)Scence有自帶的addline。
改進(jìn)了一下ui,按鈕背景原來可以改透明的。。。
改進(jìn)了下消除算法,昨天寫的有bug,現(xiàn)在版本是優(yōu)先輸出折角點最少的合法方案。否則可以兩個點,非要三個點(含重疊點),輸出的方案很奇怪。
提示功能,本質(zhì)上也是枚舉所有可行方案,如果純暴力的話,n*m的矩陣,有對坐標(biāo)要檢查,檢查的復(fù)雜度上面提過,大概是
, 這樣總的復(fù)雜度是
,n=100就爆炸了,要跑10秒(雖然n=100很少見),反正看這個復(fù)雜度很不爽,于是乎思考一下優(yōu)化。
對面每個位置(x,y),維護(hù)四個數(shù)組,分別是(x,y)向左/右/上/下可以無障礙延伸哪里

如上圖,對于打星的檸檬,上面是青蘋果,左邊是洋蔥,右邊是檸檬,下面是菠蘿,每個位置都維護(hù)這么一個信息。這是的。
對于一條線段的情況,只要對每個位置看右邊和下面的元素,是否和自己相同。這是O(nm)的
對于兩條線段的情況,也就是一個"L"的情況,我們枚舉拐角點,然后判斷上左、上右、下左、下右元素是否有相同的情況。

對面三條線段的情況,如上圖。我們枚舉中間的線段(即黑線),然后合法的情況,只能上面兩個點匹配下面兩個點,這是的,主要瓶頸是枚舉中間線段。
這樣總復(fù)雜度,少了一層n/m,雖然沒優(yōu)化多少。。。感覺這能出成題啊2333
對于scence界面的維護(hù)很麻煩,需要維護(hù)界面上每個東西的指針。。如果這個scence(要一直用的話).
ok,今天就到這里。大的東西還剩倒計時,roll牌,關(guān)卡間的聯(lián)通,還有些ui的優(yōu)化,還有交互,明天再說。
1.17
update on 4:14 am
逃課一天+回家一天(剛到家

貼一下,目前進(jìn)度,已經(jīng)具備雛形了。右邊有提示、洗牌和倒計時,還有通關(guān)成功、通關(guān)失敗的畫面。
倒計時用QPainter和QTimer畫的,洗牌的話就是重新隨機初始化一遍圖,不過u1s1隨機出兩個相鄰且相同的元素的可能性有點高啊,理論上概率是,算了一下n = 15時候,概率差不多為52%,那似乎是正常的。。。
試了下難度,時限1min,圖案種類21種,10*10的矩陣,我還開了無限次roll,都過不了???大概還剩十幾個塊,老年手速,沒道具的話感覺非常困難啊。
顏色相差比較大,眼睛一掃就能把某種給都觀察到,比如這里面的藍(lán)莓的顏色就很鮮明;對比檸檬、菠蘿、香蕉還有梨,就不容易一眼掃完233。
想起來音效和背景音樂還沒弄??,進(jìn)度--(悲。
啊這,下午在搞關(guān)卡模式,順便測了一下,又發(fā)現(xiàn)消除算法和提示算是寫了兩個神筆錯誤QAQ。
關(guān)卡變動影響矩陣各種參數(shù)(大小、圖案種類等),一開始把level當(dāng)做參數(shù)傳給各部分包括ui,的方法,然后還是那個問題,在scence上創(chuàng)建的窗口似乎沒有直接函數(shù)可以刪掉,所以我每次的界面其實覆蓋在上次的界面上,然后按鈕很奇怪,對于相同的按鈕,最先創(chuàng)建的是在上面的,然后每次實際點擊的按鈕都是第一關(guān)的。。??税胩欤缓髶Q方法了——把level當(dāng)做static變量,這樣無論是按鈕覆蓋或者按鈕是初始化一次,都可以解決上面出現(xiàn)的問題。比較懶,就寫了每次重新new一個按鈕覆蓋到界面上了,^^。
發(fā)現(xiàn)沒裝多媒體模塊->下載器需要升級->不搞了。。
到這就完工了233.
貼一下效果圖吧,可以自動檢測死局情況,關(guān)卡參數(shù)都是能改的,下圖地圖是比較easy的情關(guān)卡。文章來源:http://www.zghlxwxcb.cn/news/detail-426549.html





已上傳gitee,鏈接:https://gitee.com/z1033093940/other.git文章來源地址http://www.zghlxwxcb.cn/news/detail-426549.html
到了這里,關(guān)于【開發(fā)Log】C++QT連連看的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!