C语言实现纸牌游戏之小猫钓鱼算法

本文实例为大家分享了C语言实现小猫钓鱼算法的具体代码,供大家参考,具体内容如下

星期天小哼和小哈约在一起玩桌游,他们正在玩一个非常古怪的扑克游戏——“小猫钓鱼”。游戏的规则是这样的:将一副扑克牌平均分成两份,每人拿一份。小哼先拿出手中的第一张扑克牌放在桌上,然后小哈也拿出手中的第一张扑克牌,并放在小哼刚打出的扑克牌的上面,就像这样两人交替出牌。出牌时,如果某人打出的牌与桌上某张牌的牌面相同,即可将两张相同的牌及其中间所夹的牌全部取走,并依次放到自己手中牌的末尾。当任意一人手中的牌全部出完时,游戏结束,对手获胜。(用两个队列和一个栈完成)

代码如下:

#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>
#include <stdlib.h>

/*
* 游戏规则是这样的,将一副扑克牌平均分成两份,每人拿一份。小哼先拿出手中的第一张扑克牌放桌上,然后小哈也拿出手中的第一张扑克牌,并放在小哼刚打出的扑克牌的上面,就像这样两个人交替出牌。出牌时,如果某人打出的牌与桌上某张牌的牌面相同,即可将两张相同的牌及中间的牌全部拿走,并依次放到自己手中的牌的末尾。当任意一个人手上的牌全部打完时,另一个人获胜
* 郭文峰
* 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];

 //初始化队列
 q1.head = 1;
 q1.tail = 1;
 q2.head = 1;
 q2.tail = 1;

 //初始化栈
 s.top = 0;

 for (i = 0; i < 10; i++)
 {
 book[i] = 0;
 }

 //依次向队列插入6个数
 //给小哼6张牌
 for (i = 1; i <= 6; i++)
 {
 scanf("%d", &q1.data[q1.tail]);
 q1.tail++;
 }

 //依次向队列插入6个数
 //给小哈6张牌
 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)//表明桌上没有牌面为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;
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • C语言实现纸牌计算24点小游戏

    利用系统时间设定随机种子生成4个随机数,并对4个数字之间的运算次序以及运算符号进行枚举,从而计算判断是否能得出24,以达到程序目的.程序主要功能已完成,目前还有部分细节未处理,待完成ing...对于代码中的错误,恳请批评指正. 游戏描述: A-10:分别代表数字 1-10. J,Q,K:均代表数字1. 考虑到部分地方的规则,J,Q,K 也可以当成10 ,或者直接代表本身所代表的数字,即11.12.13来运算. 使用加减乘除,能得出24者为赢,存在无解情况. 游戏开始得分为1000分,每一秒钟减少

  • C语言实现随机抽取纸牌

    利用数组实现从一副牌中随机抽取纸牌,供大家参考,具体内容如下 一.项目要求 本程序负责发一副标准纸牌,每张标准纸牌都有一种花色(梅花.方块.黑桃.红桃)和一个等级(2,3,4,5,6-K,A).程序需要用户指明手机有几张牌,格式为: Enter number of cards in hand:____ your hand: _____ 二.原理 1.使用库函数 time函数返回当前时间,用一个数表示,srand函数初始化C语言的随机数生成器.通过把time函数返回值传递给srand可以避免程序每

  • C语言实现纸牌24点小游戏

    本文实例为大家分享了C语言纸牌24点小游戏的具体实现代码,供大家参考,具体内容如下 此程序参考C语言实现经典24点纸牌益智游戏,并做出一些改进. 一.题目要求: 24点游戏规则: 从扑克中每次取出4张牌.使用加减乘除,第一个能得出24者为赢.(其中,J代表11,Q代表12,K代表13,A代表1),按照要求编程解决24点游戏. 基本要求: 随机生成4个代表扑克牌牌面的数字字母,程序自动列出所有可能算出24的表达式,用擅长的语言(C/C++/Java或其他均可)实现程序解决问题. 1.程序风格良好(

  • C语言实现经典24点纸牌益智游戏

    一.常见游戏规则 从扑克中每次取出4张牌.使用加减乘除,第一个能得出24者为赢.(其中,J代表11,Q代表12,K代表13,A代表1),按照要求编程解决24点游戏. 基本要求: 随机生成4个代表扑克牌牌面的数字字母,程序自动列出所有可能算出24的表达式,用擅长的语言(C/C++/Java或其他均可)实现程序解决问题. 1.程序风格良好(使用自定义注释模板) 2.列出表达式无重复. 二.具体代码 #include<iostream> #include<stdlib.h> #inclu

  • C语言实现纸牌游戏之小猫钓鱼算法

    本文实例为大家分享了C语言实现小猫钓鱼算法的具体代码,供大家参考,具体内容如下 星期天小哼和小哈约在一起玩桌游,他们正在玩一个非常古怪的扑克游戏--"小猫钓鱼".游戏的规则是这样的:将一副扑克牌平均分成两份,每人拿一份.小哼先拿出手中的第一张扑克牌放在桌上,然后小哈也拿出手中的第一张扑克牌,并放在小哼刚打出的扑克牌的上面,就像这样两人交替出牌.出牌时,如果某人打出的牌与桌上某张牌的牌面相同,即可将两张相同的牌及其中间所夹的牌全部取走,并依次放到自己手中牌的末尾.当任意一人手中的牌全部出

  • C语言实现纸牌游戏(小猫钓鱼)

    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 的队列 s

  • java实现纸牌游戏之小猫钓鱼算法

    星期天小哼和小哈约在一起玩桌游,他们正在玩一个非常古怪的扑克游戏--"小猫钓鱼".游戏的规则是这样的:将一副扑克牌平均分成两份,每人拿一份.小哼先拿出手中的第一张扑克牌放在桌上,然后小哈也拿出手中的第一张扑克牌,并放在小哼刚打出的扑克牌的上面,就像这样两人交替出牌.出牌时,如果某人打出的牌与桌上某张牌的牌面相同,即可将两张相同的牌及其中间所夹的牌全部取走,并依次放到自己手中牌的末尾.当任意一人手中的牌全部出完时,游戏结束,对手获胜. 假如游戏开始时,小哼手中有 6 张牌,顺序为 2 4

  • C语言编程之扫雷小游戏空白展开算法优化

    目录 写代码前,扫雷需要什么 进行主函数文件的代码 game文件以及函数步骤 在主函数文件中使用game函数 布值棋盘(雷盘和玩家棋盘) 打印棋盘函数 玩家排雷 计算雷数的函数 空白递归算法 写代码前,扫雷需要什么 1,游戏需要初始选择菜单 2,需要布置两个棋盘,一个布置雷,一个展示给玩家看 3,打印棋盘 4,玩家要输入选择的坐标,并且可以多次输入游戏坐标 5,每次输入后打印棋盘,同时判断是否继续还是输赢. 6,玩家每次输入坐标,都进行一次递归展开. 进行主函数文件的代码 void option

  • C语言实战之纸牌游戏

    目录 1. 基本要求 2. 运行界面 3. 代码解释  1. 基本要求 一副没有花牌(J.Q.K.A.大小王)的扑克牌,两个人进行纸牌游戏,其中一个人为用户,另一个人为计算机; 每轮每人各发5张牌,各自以这5张牌建立二叉排序树: 由用户先出,轮流出牌,每次只能出一张并且要比别人出的大,如:用户出3,计算机则要出比3大的牌,没有则选择不出: 最先出完的人获胜. 2. 运行界面 1. 首页面 2. 游戏说明 3. 开始游戏 4. 开始出牌 5. 游戏结束 3. 代码解释  #include<stdi

  • java实现24点纸牌游戏

    本文题目为大家分享了java实现24点纸牌游戏的具体代码,供大家参考,具体内容如下 题目 24点游戏是经典的纸牌益智游戏. 常见游戏规则: 从扑克中每次取出4张牌.使用加减乘除,第一个能得出24者为赢.(其中,J代表11,Q代表12,K代表13,A代表1),按照要求编程解决24点游戏. 基本要求: 随机生成4个代表扑克牌牌面的数字字母,程序自动列出所有可能算出24的表达式,用擅长的语言(C/C++/Java或其他均可)实现程序解决问题. 分析 用穷举法列出四个数加上三个运算符号所构成的表达式所有

  • C语言实现扫雷游戏详解

    本文实例为大家分享了C语言实现扫雷游戏的具体代码,供大家参考,具体内容如下 功能设计 扫雷大家应该都玩过,这是一个十分经典的游戏,今天我将给大家讲解如何用C语言实现扫雷,我的这个扫雷有如下几个功能: 1.显示该点周围雷的个数 2.第一次下子,不炸死 3.坐标周围没雷,可以实现展开 4.游戏结束后展示玩家用时 效果展示 话不多说,先附上效果图: 设计思路 我们只要输入坐标就可以扫雷了,是不是很有趣? 其实要想实现这也不难,我们要用几个算法模块来模拟游戏规则,需要用函数来调用各个模块使游戏跑起来.

  • C语言实现数独游戏

    本文实例为大家分享了C语言实现数独游戏的具体代码,供大家参考,具体内容如下 目标 写一个数独游戏,有以下功能: 1:能随机产生题目并给出答案. 2:求解输入的题目并输出答案. 实现说明 参照百度百科等资料可以知道求解数独的主要算法是:1.通过行.列和宫格确定可填数字.2.所有可行数字逐一填入得到结果.本程序求解数独部分也采用这样的算法.而生成题目的算法是: 随机产生一个长度为9的一维数组,元素是随机产生的1到9的不同数字.比如为root = [1, 4, 3, 5, 6 ,7, 8 ,9, 2]

  • 使用C语言实现扫雷游戏

    目录 一.游戏介绍 二.实现模块 三.实现原理 四.实现逻辑 五.全部代码 六.运行结果 本文实例为大家分享了C语言实现扫雷游戏的具体代码,供大家参考,具体内容如下 一.游戏介绍 扫雷游戏是在一个指定的二维空间里,随机布置雷,把不是雷的位置都找出来,在你点一个位置的时候它会显示它周围全部雷的个数,根据这个线索去找 ,会更容易赢. 二.实现模块 文件名                作用clear_mine.h      三子棋的函数声明,头文件声明等clear_mine.c      三子棋函数

随机推荐