C语言实现小猫钓鱼游戏

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

#include<stdio.h>
#include<time.h>
#include<string.h>
#include<stdlib.h>
#include<windows.h>

typedef struct
{
 int data[3600];
 int col[3600];
 int top;
} stack;

typedef struct
{
 int data[3600];
 int col[3600];
 int head;
 int tail;
} queue;

queue p1, p2;
stack table;

void printmenu();
void deal();
void printp1();
void printtable();
void printzzz();
void judge(int a, int player);
void game();
void ask();

int main()
{
 while(1)
 {
  char ch;
  printmenu();
  scanf("%c",&ch);
  switch(ch)
  {
  case '1':
   game();
   break;

  case '2':
   exit(0);

  default:
   system("cls");
   break;
  }
 }

 return 0;
}

void printmenu()
{
 printf("*****************************\n");
 printf("*       *\n");
 printf("*       *\n");
 printf("*   金钩钓鱼   *\n");
 printf("*       *\n");
 printf("*       *\n");
 printf("*       *\n");
 printf("*****************************\n");
 printf("\n\n\n");
 printf("游戏规则:\n");
 printf("每人各拿一半的牌,然后你放1张牌,\n");
 printf("他放一张牌,如跟上面的牌一样,\n");
 printf("即可把当中的牌全部吃掉,\n");
 printf("直至对手手上无牌为止。\n\n\n");
 printf("输入1开始游戏\n");
 printf("输入2退出程序\n");
}

void deal()
{
 p1.head = 1;
 p1.tail = 1;
 p2.head = 1;
 p2.tail = 1;
 table.top = 0;
 int i, card, book[60];
 srand((unsigned)time(0));
 memset(book, 0, sizeof(book));
 for(i = 1; i <= 27;)
 {
  card = rand()%55;
  if(card == 0)
   continue;
  else if(card >= 1 && card <= 13 && book[card] == 0)
  {
   p1.data[p1.tail] = card;
   p1.col[p1.tail] = 1;
   p1.tail++;
   book[card]=1;
   i++;
  }
  else if(card >= 14 && card <= 26 && book[card] == 0)
  {
   p1.data[p1.tail] = card - 13;
   p1.col[p1.tail] = 2;
   p1.tail++;
   book[card]=1;
   i++;
  }
  else if(card >= 27 && card <= 39 && book[card] == 0)
  {
   p1.data[p1.tail] = card - 26;
   p1.col[p1.tail] = 3;
   p1.tail++;
   book[card]=1;
   i++;
  }
  else if(card >= 40 && card <= 52 && book[card] == 0)
  {
   p1.data[p1.tail] = card - 39;
   p1.col[p1.tail] = 4;
   p1.tail++;
   book[card]=1;
   i++;
  }
  else if(card == 53)
  {
   p1.data[p1.tail] = card;
   p1.col[p1.tail] = 5;
   p1.tail++;
   book[card]=1;
   i++;
  }
  else if(card == 54)
  {
   p1.data[p1.tail] = card;
   p1.col[p1.tail] = 5;
   p1.tail++;
   book[card]=1;
   i++;
  }
 }
 for(i = 1; i <= 27;)
 {
  card = rand()%55;
  if(card == 0)
   continue;
  else if(card >= 1 && card <= 13 && book[card] == 0)
  {
   p2.data[p2.tail] = card;
   p2.col[p2.tail] = 1;
   p2.tail++;
   book[card]=1;
   i++;
  }
  else if(card >= 14 && card <= 26 && book[card] == 0)
  {
   p2.data[p2.tail] = card - 13;
   p2.col[p2.tail] = 2;
   p2.tail++;
   book[card]=1;
   i++;
  }
  else if(card >= 27 && card <= 39 && book[card] == 0)
  {
   p2.data[p2.tail] = card - 26;
   p2.col[p2.tail] = 3;
   p2.tail++;
   book[card]=1;
   i++;
  }
  else if(card >= 40 && card <= 52 && book[card] == 0)
  {
   p2.data[p2.tail] = card - 39;
   p2.col[p2.tail] = 4;
   p2.tail++;
   book[card]=1;
   i++;
  }
  else if(card == 53 && book[card] == 0)
  {
   p2.data[p2.tail] = card;
   p2.col[p2.tail] = 5;
   p2.tail++;
   book[card]=1;
   i++;
  }
  else if(card == 54 && book[card] == 0)
  {
   p2.data[p2.tail] = card;
   p2.col[p2.tail] = 5;
   p2.tail++;
   book[card]=1;
   i++;
  }
 }

 return;
}

void printp1()
{
 int i;
 printf("您的牌有: \n");
 for(i = p1.tail-1; i >= p1.head; i--)
 {
  if(p1.col[i] == 1)
  {
   printf("方片");
  }
  else if(p1.col[i] == 2)
  {
   printf("红桃");
  }
  else if(p1.col[i] == 3)
  {
   printf("黑桃");
  }
  else if(p1.col[i] == 4)
  {
   printf("梅花");
  }
  if(p1.data[i] == 11)
  {
   printf("J ");
  }
  else if(p1.data[i] == 12)
  {
   printf("Q ");
  }
  else if(p1.data[i] == 13)
  {
   printf("K ");
  }
  else if(p1.data[i] == 53)
  {
   printf("小王 ");
  }
  else if(p1.data[i] == 54)
  {
   printf("大王 ");
  }
  else
   printf("%d ", p1.data[i]);
 }
 printf("\n\n");
 return;
}

void printtable()
{
 int i;
 printf("桌上的牌有:\n");
 if(table.top == 0)
 {
  printf("(无)\n");
 }
 for(i = 1; i <= table.top; i++)
 {
  if(table.col[i] == 1)
  {
   printf("方片");
  }
  else if(table.col[i] == 2)
  {
   printf("红桃");
  }
  else if(table.col[i] == 3)
  {
   printf("黑桃");
  }
  else if(table.col[i] == 4)
  {
   printf("梅花");
  }
  if(table.data[i] == 11)
  {
   printf("J ");
  }
  else if(table.data[i] == 12)
  {
   printf("Q ");
  }
  else if(table.data[i] == 13)
  {
   printf("K ");
  }
  else if(table.data[i] == 53)
  {
   printf("小王 ");
  }
  else if(table.data[i] == 54)
  {
   printf("大王 ");
  }
  else
   printf("%d ", table.data[i]);
 }
 printf("\n\n\n");
 return;
}

void printzzz()
{
 system("cls");
 Sleep(400);
 printf("正 ");
 Sleep(400);
 printf("在 ");
 Sleep(400);
 printf("出 ");
 Sleep(400);
 printf("牌 ");
 Sleep(400);
 printf(". ");
 Sleep(400);
 printf(". ");
 Sleep(400);
 printf(". ");
 Sleep(800);
 judge(table.data[table.top], 1);
 system("cls");
 printf("玩家2 开始回合!!\n\n\n\n");
 printtable();
 table.top++;
 table.data[table.top] = p2.data[p2.head];
 table.col[table.top] = p2.col[p2.head];
 p2.head++;
 Sleep(600);
 printf("玩 ");
 Sleep(400);
 printf("家 ");
 Sleep(400);
 printf("2 ");
 Sleep(400);
 printf("正 ");
 Sleep(400);
 printf("在 ");
 Sleep(400);
 printf("出 ");
 Sleep(400);
 printf("牌 ");
 Sleep(400);
 printf(". ");
 Sleep(400);
 printf(". ");
 Sleep(400);
 printf(". ");
 Sleep(1000);
 judge(table.data[table.top], 2);
 return;
}

void judge(int a, int player)
{
 int i, j, sum = 2;
 if(player == 1)
 {
  for(i = table.top-1; i >= 1; i--, sum++)
  {
   if(a == table.data[i] || ((a == 53 || a == 54) && (table.data[i] == 53 || table.data[i] == 54)))
   {
    for(j = table.top; j >= i; j--)
    {
     p1.data[p1.tail] = table.data[table.top];
     p1.col[p1.tail] = table.col[table.top];
     p1.tail++;
     table.top--;
    }
    break;
   }
  }

  if(i != 0)
  {
   system("cls");
   Sleep(400);
   printf("玩 ");
   Sleep(400);
   printf("家 ");
   Sleep(400);
   printf("1 ");
   Sleep(400);
   printf("赢 ");
   Sleep(400);
   printf("了 ");
   Sleep(400);
   printf("%d ", sum);
   Sleep(400);
   printf("张");
   Sleep(400);
   printf("牌 ");
   Sleep(400);
   printf("! ");
   Sleep(400);
   printf("! ");
   Sleep(400);
   printf("! ");
   Sleep(2000);
   system("cls");
  }
 }
 else if(player == 2)
 {
  for(i = table.top-1; i >= 1; i--, sum++)
  {
   if(a == table.data[i] || ((a == 53 || a == 54) && (table.data[i] == 53 || table.data[i] == 54)))
   {
    for(j = table.top; j >= i; j--)
    {
     p2.data[p2.tail] = table.data[table.top];
     p2.col[p2.tail] = table.col[table.top];
     p2.tail++;
     table.top--;
    }
    break;
   }
  }

  if(i != 0)
  {
   system("cls");
   Sleep(400);
   printf("玩 ");
   Sleep(400);
   printf("家 ");
   Sleep(400);
   printf("2 ");
   Sleep(400);
   printf("赢 ");
   Sleep(400);
   printf("了 ");
   Sleep(400);
   printf("%d ", sum);
   Sleep(400);
   printf("张");
   Sleep(400);
   printf("牌 ");
   Sleep(400);
   printf("! ");
   Sleep(400);
   printf("! ");
   Sleep(400);
   printf("! ");
   Sleep(2000);
   system("cls");
  }
 }
 return;
}

void game()
{
 deal();
 getchar();

 while(p1.head != p1.tail && p2.head != p2.tail)
 {
  system("cls");
  int i;
  printf("玩家1 开始回合!!\n\n\n\n");
  printp1();
  printtable();
  printf("按回车来出牌\n");
  getchar();
  table.top++;
  table.data[table.top] = p1.data[p1.head];
  table.col[table.top] = p1.col[p1.head];
  p1.head++;
  printzzz();
 }

 if(p1.head == p1.tail)
 {
  printf("恭喜您取得了胜利!!!\n");
  printf("感谢使用本程序\n");
  system("pause");
 }
 else
 {
  printf("你没有牌了!");
  printf("不好意思,您输了。。。\n");
  printf("不要灰心,可以再来一局!!\n");
  system("pause");
 }
 return;
}

void ask()
{
 char ch;

 system("cls");
 printf("你确定要退出?\n");
 printf("(输入y确认对出)\n");
 printf("Y/N\n");
 scanf("%c", &ch);

 if(ch == 'y' || ch == 'Y')
 {
  exit(0);
 }
 else
 {
  return;
 }
}

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

(0)

相关推荐

  • C语言实现Flappy Bird小游戏

    本文实例为大家分享了C语言实现Flappy Bird小游戏的具体代码,供大家参考,具体内容如下 #include<stdio.h> #include<stdlib.h> #include<conio.h> #include<time.h> #include<Windows.h> /********函数变量声明********/ #define PR_Box printf("■") #define PR_Gold printf(

  • C语言结构体数组同时赋值的另类用法

    说到C语言结构体数组的同时赋值,许多人一想就会想到用以下的这种方法,咱们来写一个例子: #include <stdio.h> struct student { int a; int b ; int c ; }; struct student array1[1000] ; int main(void) { int i ; for(i = 0 ; i < 1000 ; i++) { array[i].a = 1 ; array[i].b = 2 ; array[i].c = 3 ; } fo

  • C语言利用模板实现简单的栈类

    本文实例为大家分享了C语言利用模板实现简单的栈类(数组和单链表),供大家参考,具体内容如下 主要的功能是实现一个后进先出的列表,有入栈.出栈.返回大小.判空等基本功能 #pragma once using namespace std; const int MAXSIZE = 0xfff; template<class type> class Class_Linkstack { int top; type* my_s; int max_size; public: Class_Linkstack(

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

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

  • C语言实现2048游戏(ege图形库版)

    这几天看到我们班上一个大神写了一个2048出来,我自己也想尝试一下,经过几天自己尝试努力下,自己终于写出来了.现在和大家分享一下,也希望能得到大神的指点. 实现的效果如图 先来讲一下我的思路吧 1.首先肯定是要一个4X4的二维数组来存放数字存放0.2.4-- 2.游戏开始与过程中需要随机出现2或者4,所以需要调用time.h这个库 3.游戏开始时,假如当获取字符为'w'则先用循环判定这个数字的下方有无和它相等的数字.如无则跳过,如有相加.然后在判定是否可以向上移动 下面是我的代码 (我本来是还要

  • C语言数组栈实现模板

    本文实例为大家分享了C语言数组栈实现模板的具体代码,供大家参考,具体内容如下 SeqStack.h #pragma once #define MAX_SIZE 1024 typedef struct SEQSTACK { void* data[MAX_SIZE]; int size; }SeqStack; SeqStack* Init_SeqStack(); // 初始化栈 void Push_SeqStack(SeqStack* stack, void* data); // 入栈 void*

  • C语言实现学生成绩管理系统实战教学

    趁着放假无事,开始用C语言开发一些小的项目,巩固基础知识的同时学习新的知识. 学生成绩管理系统实现的功能有:成绩录入.学生成绩查询.删除.修改.通过文件保存等. 开发这样一个系统需要具备的知识:线性表(链表).文件操作.排序(如果需要成绩排序). 开发环境为VS2015:在Linux下没有conio.h的头文件,需要修改与getch()函数相关的代码. #include <stdio.h> #include <stdlib.h> #include <string.h>

  • C语言简易版flappy bird小游戏

    假期在家无聊,想随便码点东西,故有此简陋的小游戏诞生.觉着可能对初学C语言的小伙伴练习有点帮助,故写此博客.游戏界面如下: 首先,先画出整个小游戏实现的流程图,如下: 思路很简单,整个游戏界面是由一个大的char类型数组构成,更新数组的值然后不停的打印出来就形成了动态效果. 由上图看,大循环是保证游戏一直不断的进行下去,小循环是让小鸟的速度大于游戏界面里背景(由#构成的柱子)的速度(小鸟动四下柱子才动一下). 下面是具体代码(水平有限大家多多见谅,但是效果还是有的!) Bird.c文件 #inc

  • C语言如何在指针中隐藏数据详解

    前言 编写 C 语言代码时,指针无处不在.我们可以稍微额外利用指针,在它们内部暗中存储一些额外信息.为实现这一技巧,我们利用了数据在内存中的自然对齐特性. 内存中的数据并非保存在任意地址.处理器通常按照其字大小相同的块读取内存数据:那么考虑到效率因素,编译器会按照块大小的整数倍对内存中的实体进行地址对齐.因此在 32 位的处理器上,一个 4 字节整型数据肯定存放在内存地址能被4整除的地方. 下面,假设系统中整型数据和指针大小均为 4 字节. 现在有一个指向整型的指针.如上所述,整型数据可以存放在

  • 如何写出优美的C语言代码

    面向对象的语言更接近人的思维方式,而且在很大程度上降低了代码的复杂性,同时提高了代码的可读性和可维护性,传统的 C 代码同样可以设计出比较易读,易维护,复杂度较低的优美代码,本文将通过一个实际的例子来说明这一点. 基础知识 结构体 除了提供基本数据类型外,C 语言还提供给用户自己定制数据类型的能力,那就是结构体,在 C 语言中,你可以用结构体来表示任何实体.结构体正是面向对象语言中的类的概念的雏形,比如: typedef struct{ float x; float y; }Point; 定义了

随机推荐