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 的队列
 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
*/

该程序使用队列来实现玩家的手中的牌(玩家的牌只能前面出牌,赢得牌依次放后面),用栈实现桌子上的牌(出牌放在末端,赢牌也是从末端拿走)。

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

(0)

相关推荐

  • 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语言实现纸牌24点小游戏

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

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

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

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

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

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

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

  • 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语言实战之纸牌游戏

    目录 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语言实现五子棋游戏的方法,代码备有比较完整的注释,可以帮助读者更好的加以理解. 五子棋游戏代码如下: /* * 使用键盘的上下左右键移动棋盘,空格键表示下棋,ESC键退出程序 */ #include <stdio.h> #include <stdlib.h> #include <bios.h> #include <graphics.h> #include<malloc.h> /* * 对应键盘键的十六进制数字 */ #defi

  • C语言对对碰游戏源码分享

    本文实例为大家分享了C语言对对碰游戏的具体代码,供大家参考,具体内容如下 //////////////////////////////////////// //画素材的x和y都是反的,因为x表示行,但是画出来x表示列,y同 //////////////////////////////////////// #include <graphics.h> #include <fstream> #include <strstream> #include <iomanip&g

  • C#编写控制台程序纸牌游戏

    本文实例为大家分享了C#编写纸牌游戏的具体代码,供大家参考,具体内容如下 using System; using System.Collections.Generic; using System.Text; using System.Threading; namespace ConsoleApplication2 { class Game { string[] str = new string[52]; int[] number = new int[52]; int i = 0; int[] a

  • C语言实现扫雷游戏及其优化

    本文实例为大家分享了C语言实现扫雷游戏及其优化的具体代码,供大家参考,具体内容如下 关于扫雷优化 1.核心思想:使用两个二维数组进行设计,一个用于显示,一个用于后台雷的布置. 2.使用宏常量,后期可以任意修改游戏难度. 3.关于扫雷拓展模块,目前使用的方法比较low,若周围均没有,则全部显示. 4.剩余位置数使用全局变量count,必须考虑拓展之后count变化. 有待改进之处 1.需设计标记雷的步骤,增加用户体验. 2.拓展方式有待改进. 3.界面布局仍需要进行优化. 扫雷游戏代码 #incl

随机推荐