精華區beta GameDesign 關於我們 聯絡資訊
※ 引述《horngsh (foreman)》之銘言: : 各位大大好: : 不知有哪位高手曾寫過大老二撲克遊戲的程式呢? 可以用pseudo code, : 或貼程式碼和大家分享呢? 其中的人工智慧部分, 應如何去找資料呢? : 感恩不盡! 選單那邊應該不用說了,下面直接假設人機對戰部份@@a 也就是只有妳是玩(不仿假設你的index為 0),電腦操控其他三家的牌 void GameMain()//只考慮一回合情況 { Deal(); //發牌副程式 index = WhoHaveClub3(); //檢查誰有梅花三,這裡一個小回圈加判斷式就好 do { if(index==0) AtPlayerRank(); //簡單判斷誰的回合 else AtComputerRank(); WhoWin = DetNumOfCard(); //簡單檢查剩餘卡片數,這裡也很容易 //如果沒人贏就回傳個 0~3以外數字,比方說5 (index++)%=4; }while(WhoWin==5); } Deal():這邊應該不用說吧,只是一個資料處理問題:) 比方你用一個結構陣列表示每一張撲克牌 Ex. struct sCard { char pattern; //花色 int point; //點數 int WhoHaveIt;//屬於誰 }card[52]; 發牌只要隨機指定WhoHaveIt就好 當然要注意每個人分配數量要一樣 AtPlayerRank() 這部份比起人工智慧部分算是簡單啦@@a 首先你要先停止迴圈前進,因此這裡必須是Blocking的(你可以用一個do迴圈blocking) 等到玩家決定出哪張牌 接著你必須提供一個介面讓玩家選擇要出什麼牌、或是要Pass 他可能包含下面三個程序:   偵測玩家動作(鍵盤或滑鼠@@a 看你想怎麼設計介面)     ↓         玩家是否決定出牌或喊Pass?  否回上一步,是的話往下一步前進     ↓ 偵測玩家出的牌型是否合法   否則回第一步,是的話結束本副函式 比較麻煩的應該再第三個程序@@a 檢查合法部份 你可以用下面資料型態儲存牌桌上的牌型: struct sCardOnTheTable { Struct WhatCard[5]; //最多五張 int TypeOfCard; //我真的建議再出牌時候就檢查牌型啦@@ }*CardOnTheTable; //宣告為動態陣列,或是乾脆宣告為52維陣列XD //當然你需要有個引數表示最上面的牌。 那這樣的話,只要偵測 1.玩家出的牌組是否為正確牌型  一張、一對、葫蘆、順子、鐵枝、同花順 (if...if...很多個if解決XD,在這裡同時要回傳牌型) 2.玩家出的牌是否大於牌桌上的牌組 這裡要作牌型大小判斷,很直觀想法可以把所有牌型總數定義在一個表裏面  比方說3鐵枝、7葫蘆、梅花尾牌K同花順(估計不會超過100種牌型啦XD) 然後要找出牌型,則去查表得一數字、要比較大小只要簡單檢查該數字就好 最後,如果是的話,就要更新牌桌上的牌組 順便讓CardOnTheTable陣列引數+1 最後,稍微說一下電腦人工智慧部份 其實光是大老二的話,似乎只要用蠻簡單的應對守則即可 比如說:1.盡可能出僅比抬桌上牌型多一點點的牌型      (比方說抬桌上是4,有5和J、則出5)    2.記住現階段最大牌型是什麼,比方說單張時候可能是2      或因為2被打光則最大牌型是A         當電腦審定自己身上有五張型、或很多對子      則電腦會在輪到自己回合打出大牌      否則即使可以出大牌來壓也會先保留(Pass)    以上兩個都是迴圈加決策就寫得出來    但已經足以寫出個肉腳大老二智慧了(更進階的當然還要擬定出牌次序的策略啦) 以上,希望能幫助你^^ -- 遊戲設計團隊等待你的加入與支持: /\●/\ ))  http://220.132.66.21/phpbb2/portal.php  (( / /▲\ \    PTT GameDesign板 PTT2 DreamYeh板 歡迎你圓夢 \\      巴哈姆特好像才是我大本營XD~讓我們一起Kuso吧               想了解更多DreamYeh嗎?歡迎來無名P_DreamYeh板 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.168.184.60
BiaoMIN:推 06/01 04:56