|
論壇說明 |
歡迎您來到『史萊姆論壇』 ^___^ 您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的! 請點擊這裡:『註冊成為我們的一份子!』 |
|
主題工具 | 顯示模式 |
2019-03-21, 11:47 PM | #1 | |
版區管理員
|
灌水 - 挑戰接近魔術程式的程式魔術
這些程式設計已經有一年多了
從最簡單的不見的牌,到最近的程式,小王子都一直在挑戰讓程式更接近表演的感受 老實說在畫面上顯示這段字還真有點心虛 引用:
語法:
if(Card1->Tag==0) return; PanelClick(Sender); TImage *Images=(TImage *) Sender; Card1->Tag=0; CardPanel1->Visible=false; // Tag=-1; for(int i=0;i<52;i++) if(Order[i]==Images->Tag) { Panel->Tag=i; Tag=0; break; } CardClick(); 然後最後在比對這個號碼,就可以知道觀眾選的牌了 語法:
Panel1->Caption="最後這是我找的牌\""+Card[Order[Panel2->Tag]]->Hint+"\"..."; 就是在反覆展現洗牌的動作下造成記牌的困擾 語法:
p=0; while(1){ rr=random(3)+1; if(kr+rr>26) rr=26-kr; for(int i=0;i<rr;i++){ Card[Order[kr]]->Left = Card[Order[kr]]->Left+60; Card[Order[kr]]->Top=Loc2+p; Card[Order[kr]]->SendToBack(); kr++; p++; } if(p==52) break; rl=random(3)+1; if(kl+rl>52) rl=52-kl; for(int i=0;i<rl;i++){ Card[Order[kl]]->Left = Card[Order[kl]]->Left-60; Card[Order[kl]]->Top=Loc2+p; Card[Order[kl]]->SendToBack(); kl++; p++; } if(p==52) break; } 最嚴重的就是牌的順序,當然現實表演,魔術師本來就不可能會知道牌的順序 但程式設計上卻必須知道才能控制秀牌的畫面 所以就有了這段程式 語法:
Order[0]=Order[51]; for(int i=1;i<52;i++) { for(int j=0;j<52;j++) { if(Card[j]->Top==Card[Order[0]]->Top+i) { Order[i]=j; break; } } } 只是小王子沒想到最後竟然可以用這種方式處理 語法:
for(int i=0;i<52;i++) if(Card[Order[i]]->Transparent) Panel->Tag=i; Card[Order[Panel->Tag]]->Top=Loc3; Delay(1000); Card[Order[Panel->Tag]]->Left=Screen->Width/2; GetCard(Order[Panel->Tag]); 很感謝論壇給我這個機會分享,也感謝設計期間提供許多寶貴意見的朋友們 謝謝大家 |
|
__________________ 『唸金母心咒:嗡。金母。悉地。吽。』 持此咒者,可免一切瘟疫,一切瘟神抱頭四散。 魔術就是欣賞神奇的效果 如果魔術的秘密被破解了 那魔術就失去欣賞的價值 |
||
送花文章: 1533,
|
2019-04-01, 09:10 PM | #2 (permalink) |
版區管理員
|
自我挑戰,翻牌的動態效果分享給大家
https://drive.google.com/file/d/1eOn...ew?usp=sharing 只是測試,所以並沒有任何防護 除了第一次會正反各翻一次 接著會再翻5張牌 |
送花文章: 1533,
|
向 魔術王子 送花的會員:
|
mini (2019-04-01)
感謝您發表一篇好文章 |
2019-04-20, 08:49 PM | #3 (permalink) |
版區管理員
|
"馬戲團騙術",一個撲克牌的生活魔術,跟上一個魔術運用同樣的關鍵牌的原理
只不過裡面加入"趣味性謊言" 程式已經盡量用魔術的表演方式設計,若有懂得程式語言的朋友,麻煩幫小弟檢查一下程式碼,是否有利用程式語言作弊的地方,或看起來是使用道具表演的 下面是連結:https://drive.google.com/file/d/1F5V...ew?usp=sharing |
送花文章: 1533,
|
2019-04-21, 03:32 PM | #4 (permalink) |
管理版主
|
沒有安裝開發軟體
這類互動式程式真的很難去有效了解 不過還是花了點時間去追了下程式碼步驟 幸好有關鍵台詞可了解關鍵點程式碼 感覺這個魔術是以~ 前一張牌為魔術師記憶牌 (不知對不對?) 那至於有沒有用程式碼作弊? 作弊的地方是記憶牌 並非最後直接把選定的牌 用變數直接替換 亮出 也不是用程式先記憶其序號,再用if比對 亮出 所以... 因為魔術手法就是技巧性作弊? 但作弊手法必須用程式碼變數來實現 所以...嚴格來講不能說有用程式直接作弊亮牌 這是個認知問題 沒有相當的魔術認知 與 對這個程式的設計理念了解 可能沒有幾個人能給魔王明確答覆 沒有用開發軟體追蹤程式 更是如此 不過認為 如能把 Panel4->Tag 好好地解說其設計理念是何 應該比較能釋疑...是否作弊 |
送花文章: 2013,
|
向 mini 送花的會員:
|
魔術王子 (2019-04-21)
感謝您發表一篇好文章 |
2019-04-21, 10:28 PM | #5 (permalink) | |
版區管理員
|
引用:
其實有人願意下載測試就已經足夠了 對程式設計者來說,當觀眾選擇一張牌,最重要的下一步就是記住物件的陣列號碼 但這就等於是現實表演魔術時,在撲克牌上面做了記號 當然啦如果設計過程中,在任何的控制都沒使用這個機制,那是還好,因為這麼做可以便於控制畫面的繪製 所以,我一直盡量避開這種邏輯 但相信仍就會有習慣或便於設計的念頭,讓我用類似超能力的手段來設計控制牌的程式碼 所以如果真有人好奇,看了一下程式碼,畢竟有些人會想知道這樣的魔術究竟是如何進行的程式碼如何設計,如果真有人這麼做,就是希望他們可以嚴謹的找出程式裡面無法在現實生活中做到的效果 小弟的意思大概是這樣,謝謝 |
|
送花文章: 1533,
|
向 魔術王子 送花的會員:
|
mini (2019-04-21)
感謝您發表一篇好文章 |