中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用C語言實現紙牌游戲

發布時間:2020-10-28 19:34:40 來源:億速云 閱讀:181 作者:Leah 欄目:開發技術

使用C語言實現紙牌游戲?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

C語言:

//紙牌游戲--小貓釣魚--隊列 棧--(所謂的拉火車) 
#include <stdio.h>

struct queue     //隊列 
{
 int data[1000];
 int head;
 int tail;
}; 
struct stack     //棧 
{
 int data[10];
 int top;
};

int main(void)
{
 struct queue q1, q2;  //小哼 q1 和小哈 q2 的隊列 
 struct stack s;    //棧 
 int book[10];     //記錄,判斷是否第二次出現 
 int i, t;
 
 q1.head = 1, q1.tail = 1;   //初始化隊列 
 q2.head = 1, q2.tail = 1; 
 
 s.top = 0;         //初始化棧 
 
 for(i = 1;i <= 9;i++)   //初始化出現次數為 0 
 book[i] = 0;
 
 for(i = 1; i <= 6; i++) {    //這里給定一個人 6 張牌 
 scanf("%d", &q1.data[q1.tail]);
 q1.tail++;
 }
 for(i = 1;i <= 6;i++) {
 scanf("%d", &q2.data[q2.tail]);
 q2.tail++;
 } 
 
 while(q1.head < q1.tail && q2.head < q2.tail ) {    //當隊列不為空的時候執行循環 
 t = q1.data[q1.head];     //小哼(先)出牌 
 if(book[t] == 0){       //當桌上無此牌時 
  q1.head++;        //將此牌出隊
  //s.top++;
  s.data[++s.top] = t;   //將打出的牌入棧 
  book[t] = 1;       //標記此牌桌上已有 
 }else{            //此牌桌上已有,小哼能贏
  q1.head++;        //將打出的此牌出隊
  q1.data[q1.tail] = t;  //將此牌入隊尾 
  q1.tail++;
  
  while(s.data[s.top] != t) {  //把桌子上贏的牌收回去, 此處沒有收最后一根牌 t 
  book[s.data[s.top]] = 0;      //取消標記
  q1.data[q1.tail] = s.data[s.top]; //依次放在隊尾 
  q1.tail++;
  s.top--;              //棧中少了一張牌,所以- 1 
  }
  //收回桌上的 t 牌 
  book[t] = 0;
  q1.data[q1.tail] = t;
  q1.tail++;
  s.top--; 
 }
 
 if(q1.head == q1.tail )     //如果小哼牌打完了,游戲結束 
  break; 
  
 //輪到小哈出牌了,和小哼一樣判斷 
 t = q2.data[q2.head];
 if(book[t] == 0) {
  q2.head++;
  s.top++;
  s.data[s.top] = t;
  book[t] = 1;
 } 
 else {
  q2.head++;
  q2.data[q2.tail] = t;
  q2.tail++;
  
  while(s.data[s.top] != t) {
  book[s.data[s.top]] = 0;
  q2.data[q2.tail] = s.data[s.top];
  q2.tail++;
  s.top--;
  } 
  
  book[t] = 0;
  q2.data[q2.tail] = t;
  q2.tail++;
  s.top--;
 } 
 } 
 
 if(q2.head == q2.tail ) {
 printf("小哼 win \n");
 printf("小哼當前手中的牌是 ");
 for(i = q1.head;i < q1.tail;i++)
  printf(" %d",q1.data[i]);
  
 if(s.top) {    //如果桌子上有牌的話 
  printf("\n桌子的牌是");
  for(i = 1;i <= s.top;i++)
  printf(" %d",s.data[i]);
  printf("\n"); 
 }
 else
  printf("\n桌子上已經沒有牌了");
 } else {
 printf("小哈 win \n");
 printf("小哈當前手中的牌是 ");
 for(i = q2.head;i <= q2.tail-1;i++)
  printf(" %d", q2.data[i]);
  
 if(s.top) {    //如果桌子上有牌的話 
  printf("\n桌子的牌是");
  for(i = 1;i <= s.top;i++)
  printf(" %d",s.data[i]);
  printf("\n"); 
 } else
  printf("\n桌子上已經沒有牌了");
 } 
 
 return 0;
} 
/*Code Running Results
1 2 3 4 5 6
3 2 1 5 2 6
小哈 win
小哈當前手中的牌是 5 6 2 3 1 3 2 5 2
桌子的牌是 4 6 1
*/

該程序使用隊列來實現玩家的手中的牌(玩家的牌只能前面出牌,贏得牌依次放后面),用棧實現桌子上的牌(出牌放在末端,贏牌也是從末端拿走)。

看完上述內容,你們掌握使用C語言實現紙牌游戲的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

修武县| 黄梅县| 嵩明县| 宁南县| 六枝特区| 博白县| 横峰县| 桓仁| 柳州市| 磴口县| 岑溪市| 手游| 富源县| 伊金霍洛旗| 邵武市| 巴东县| 兰州市| 龙游县| 修武县| 义马市| 潮安县| 岚皋县| 三都| 社会| 乌鲁木齐县| 鹰潭市| 连江县| 河间市| 嘉定区| 新竹市| 噶尔县| 武冈市| 遵化市| 彭山县| 霍邱县| 阿坝| 沾化县| 太谷县| 随州市| 晋中市| 舞阳县|