C語言實(shí)現(xiàn)紙牌游戲之小貓釣魚算法
本文實(shí)例為大家分享了C語言實(shí)現(xiàn)小貓釣魚算法的具體代碼,供大家參考,具體內(nèi)容如下
星期天小哼和小哈約在一起玩桌游,他們正在玩一個非常古怪的撲克游戲——“小貓釣魚”。游戲的規(guī)則是這樣的:將一副撲克牌平均分成兩份,每人拿一份。小哼先拿出手中的第一張撲克牌放在桌上,然后小哈也拿出手中的第一張撲克牌,并放在小哼剛打出的撲克牌的上面,就像這樣兩人交替出牌。出牌時,如果某人打出的牌與桌上某張牌的牌面相同,即可將兩張相同的牌及其中間所夾的牌全部取走,并依次放到自己手中牌的末尾。當(dāng)任意一人手中的牌全部出完時,游戲結(jié)束,對手獲勝。(用兩個隊(duì)列和一個棧完成)
代碼如下:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
/*
* 游戲規(guī)則是這樣的,將一副撲克牌平均分成兩份,每人拿一份。小哼先拿出手中的第一張撲克牌放桌上,然后小哈也拿出手中的第一張撲克牌,并放在小哼剛打出的撲克牌的上面,就像這樣兩個人交替出牌。出牌時,如果某人打出的牌與桌上某張牌的牌面相同,即可將兩張相同的牌及中間的牌全部拿走,并依次放到自己手中的牌的末尾。當(dāng)任意一個人手上的牌全部打完時,另一個人獲勝
* 郭文峰
* 2018/9/29
*/
struct queue
{
int data[1000];
int head;
int tail;
};
struct stack
{
int data[10];
int top;
};
int main(void)
{
struct queue q1, q2;
struct stack s;
int i = 0;
int t = 0;
int book[10];
//初始化隊(duì)列
q1.head = 1;
q1.tail = 1;
q2.head = 1;
q2.tail = 1;
//初始化棧
s.top = 0;
for (i = 0; i < 10; i++)
{
book[i] = 0;
}
//依次向隊(duì)列插入6個數(shù)
//給小哼6張牌
for (i = 1; i <= 6; i++)
{
scanf("%d", &q1.data[q1.tail]);
q1.tail++;
}
//依次向隊(duì)列插入6個數(shù)
//給小哈6張牌
for (i = 1; i <= 6; i++)
{
scanf("%d", &q2.data[q2.tail]);
q2.tail++;
}
//當(dāng)隊(duì)列不為空的時候執(zhí)行循環(huán)
while (q1.head < q1.tail && q2.head < q2.tail)
{
t = q1.data[q1.head];//小哼出一張牌
//判斷小哼打出的牌是否能贏
if (book[t] == 0)//表明桌上沒有牌面為t 的牌
{
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)
{
book[s.data[s.top]] = 0;
q1.data[q1.tail] = s.data[s.top];
q1.tail++;
s.top--;
}
}
t = q2.data[q2.head];//小哈出一張牌
//判斷小哈打出的牌是否能贏
if (book[t] == 0)//表明桌上沒有牌面為t 的牌
{
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--;
}
}
}
if (q2.head == q2.tail)
{
printf("小哼WIN\n");
printf("小哼手上還剩的牌為:");
for (i = q1.head; i <= q1.tail - 1; i++)
{
printf(" %d", q1.data[i]);
}
if (s.top > 0)
{
printf("\n桌上的牌是:");
for (i = 1; i <= s.top; i++)
{
printf(" %d", s.data[i]);
}
}
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 > 0)
{
printf("\n桌上的牌是:");
for (i = 1; i <= s.top; i++)
{
printf(" %d", s.data[i]);
}
}
else
{
printf("桌上沒有牌了!\n");
}
}
system("pause");
return 0;
}
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C++實(shí)現(xiàn)圖像目標(biāo)區(qū)裁剪ImageCropping
本文主要介紹了C++實(shí)現(xiàn)圖像目標(biāo)區(qū)裁剪ImageCropping,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06
C++實(shí)現(xiàn)雷霆戰(zhàn)機(jī)可視化小游戲
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)雷霆戰(zhàn)機(jī)可視化小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-11-11
c++實(shí)現(xiàn)一個簡易的網(wǎng)絡(luò)緩沖區(qū)的實(shí)踐
這篇文章主要介紹了c++實(shí)現(xiàn)一個簡易的網(wǎng)絡(luò)緩沖區(qū)的實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-12-12

