纸牌游戏程序设计(用c语言做卡牌游戏教程)

技术怎样用C语言实现纸牌游戏今天就跟大家聊聊有关怎样用C语言实现纸牌游戏,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1. 基本要求一副没有花牌(J、Q、K、A、

今天跟大家聊聊如何用C语言实现卡牌游戏。很多人可能不太了解。为了让大家更好的了解,边肖为大家总结了以下内容。希望你能从这篇文章中有所收获。

00-1010一副不带扑克牌的扑克牌(J、Q、K、A、大、小王),其中两个人玩纸牌游戏,一个是用户,一个是电脑;

每轮发给每人五张卡片,用这五张卡片建立二进制排序树。

用户先打牌,轮流打牌。一次只能打一张牌,比别人的牌大。比如用户打3张牌,电脑会打大于3张的牌,不打就不能选。

第一个完成的人会赢。

1. 基本要求

1.主页

怎样用C语言实现纸牌游戏

2.游戏描述

怎样用C语言实现纸牌游戏

开始游戏

怎样用C语言实现纸牌游戏

4.开始打牌

怎样用C语言实现纸牌游戏

5.游戏结束

怎样用C语言实现纸牌游戏

2. 运行界面

# includes dio . h

# includestdlib.h

#includewindows.h

#includetime.h

int card[5][2];//标记玩家和用户分别发牌的牌。

int player card[5];//玩家的手

int computer card[5];//计算机的手卡

char bhu ase[5];

charchuase[5];

typedefstructnode

{

intdata

structnode * LChild

struct node * archild;

}节点;

typedefstructure tree

{

intdata

structnode * LChild

struct node * archild;

}树;

//游戏描述

voidPlayingCardsyxsm()

{

Printf('每回合每位玩家将获得五张牌,每位玩家将建立一个包含五张牌的二叉树。用户会先打牌,然后轮流。\ n ');

Printf('一次只能发行一张纸,比其他纸大'。\ n ');

printf’(比如用户给3,电脑会出大于3的卡,没有卡就不选;\ n ');

第一个完成的人会赢。\ n ');

}

//发牌

voidPlayingCardsfp()

{

intplayer

intcomputer

//玩家和电脑每人发五张牌。

for(inti=0;i5;I){ 0

player=rand()% 9 2;

Printf('玩家卡:%d\n ',玩家);

玩家;

computer=rand()% 9 2;

Printf('来自计算机的卡:%d\n ',计算机);

计算机卡[I]=计算机;

}

}

//播放nbs

p;
void PlayingCardscp()
{
int player = 0; // 玩家当前回合出的牌 
int computer = 0; // 电脑当前回合出的牌 
int playercount = 0; // 玩家的出牌数 
int computercount = 0; // 电脑的出牌数 
bool flag = false; 
// 当每次都出现最大值时,游戏同样最多进行5回合 
for(int m = 0; m < 5; m ++ )
{
// 在双方都有牌出的时候,一共最多进行5回合出牌 
for(int k = 0; k < 5; k ++ )
{
for(int j = 0; j < 5; j ++ )
{
// 确定当前牌可以出,大于对方的出牌,且自己没有出过这张牌 
if(playercard[j] > computer && card[j][0] == 0)
{
printf("玩家出牌%c%d\n", bhuase[j],playercard[j]);
playercount ++ ;  // 玩家出牌数+1 
// 标记玩家已经出过这张牌了 
card[j][0] = 1;
player = playercard[j]; 
Sleep(800); // 在头函数#include <windows.h>中,起到休眠程序的作用 
break;
}
}

// 若果玩家已经出完5张牌,则玩家获胜,退出循环 
if(playercount == 5)
{
printf("玩家赢了!"); 
flag = true;
break;
}

for(int j = 0; j < 5; j ++ )
{
// 确定当前牌可以出,大于对方的出牌,且自己没有出过这张牌 
if(computercard[j] > player && card[j][1] == 0)
{
printf("电脑出牌%c%d\n", chuase[j],computercard[j]);
computercount ++ ;  // 电脑出牌数+1 
// 标记电脑已经出过这张牌了 
card[j][1] = 1;
computer = computercard[j];
Sleep(800);
break;
}
}

// 若果电脑已经出完5张牌,则电脑获胜,退出循环 
if(computercount == 5)
{
printf("电脑赢了!"); 
flag = true;
break;
}
}

// 如果玩家的牌大于电脑的最大牌后,将电脑当前回合的牌值重置为0,继续进行下一回合 
if(player > computer) computer = 0;
// 如果电脑的牌大于玩家的最大牌后,将玩家当前回合的牌值重置为0,继续进行下一回合 
if(computer > player) player = 0;

if(flag) break;

}
}

// 发完牌后玩家的手牌 
void PlayingCardsxswj()
{
printf("玩家\n");
printf("   %d   %d   %d   %d   %d\n", playercard[0], playercard[1], playercard[2], playercard[3], playercard[4], playercard[5]);
}

// 发完牌后电脑的手牌 
void PlayingCardsxsdn()
{
printf("电脑\n");
printf("   %d   %d   %d   %d   %d\n", computercard[0], computercard[1], computercard[2], computercard[3], computercard[4], computercard[5]);
}

// 初始化树的头结点为空 
void treechushihua(node *t)
{
t = NULL;

// 建立平衡二叉树 
node *treecharu(node *t, int key)
{
// 如果头结点为空,就将当前节点设置为根节点 
if(t == NULL)
{
node *p;
p = (node*)malloc(sizeof(node));
p->data = key;
p->LChild = NULL;
p->RChild = NULL;
t = p;
}
// 如果头结点不为空,则进行平衡二叉树的插入操作 
else
{
// 插入结点的值小于根节点,则插入左子树 
if(key < t->data)
t->LChild = treecharu(t->LChild, key);
// 插入结点的值大于等于根节点,则插入右子树 
else
t->RChild = treecharu(t->RChild, key);
}
return t;
}

// 将玩家手牌存储到平衡二叉树中 
node *jianlib(node *t)  
{
int i, key;
for(i = 0; i < 5; i ++ )
{
key = playercard[i];
t = treecharu(t, key);
}
return t;

// 将电脑手牌存储到平衡二叉树中 
node *jianlic(node *t)  
{
int i, key;
for(i = 0; i < 5; i ++ )
{
key = computercard[i];
t = treecharu(t, key);
}
return t;

// 顺序输出玩家或电脑手牌 
void treepaixu1(node *t)  
{
if(t != NULL)
{
treepaixu1(t->LChild);
printf("%d ", t->data);
treepaixu1(t->RChild);
}

// 先序遍历玩家平衡二叉树 
void treepaixu2(node *t, int *p)  
{
if(t == NULL) return;
else
{
// 先序遍历,将玩家手牌有序化 
treepaixu2(t->LChild,  p);
playercard[(*p) ++ ] = t->data;
treepaixu2(t->RChild, p);
}
}

// 先序遍历电脑平衡二叉树 
void treepaixu3(node *t, int *p)  
{
if(t == NULL) return;
else
{
// 先序遍历,将电脑手牌有序化 
treepaixu3(t->LChild, p);
computercard[(*p) ++ ] = t->data;
treepaixu3(t->RChild, p);
}
}  

// 主函数 
int main()
{
int k = 0;
// 随机函数,通过时间种子来获取随机数种子,获得随机数 
srand((unsigned)time(NULL));
int n = 0;
// 选择菜单 
while(k != -1)
{
puts("");
puts("");
puts(""); 
printf("\t\t\t ****纸牌游戏****\n");
printf("\t\t\t****1.游戏说明****\n");
printf("\t\t\t****2.开始游戏****\n");
printf("\t\t\t****3.开始出牌****\n");
printf("\t\t\t****4.游戏结束****\n");
printf("\t\t\t******************\n");
puts("");
printf("\t\t**********************************\n");
printf("\t\t**********************************\n");
puts("");
printf("\t\t\t请输入(1、2、3、4):\n");
scanf("%d", &k);
switch(k){
// 游戏说明 
case 1: PlayingCardsyxsm(); break;
// 发牌阶段 
case 2:{
// 发牌 
   PlayingCardsfp();
  
   // 建立玩家二叉树 
   node *t1 = NULL;
t1 = jianlib(t1);
printf("玩家手牌为:"); 
   treepaixu1(t1);
  
   // 建立电脑二叉树 
   node *t2 = NULL;
t2 = jianlic(t2);
puts("");
printf("电脑手牌为:"); 
treepaixu1(t2);

// 玩家手牌有序化 
   n = 0;
   treepaixu2(t1, &n);
  
   // 电脑手牌有序化 
n = 0;
   treepaixu3(t2, &n);
  
   puts("");
   // 输出玩家和电脑的手牌 
   PlayingCardsxswj();
   PlayingCardsxsdn();
  break;
   }
   // 出牌阶段 
case 3:{
PlayingCardscp();
break;
  }
  // 退出游戏  
case 4:k=-1; break;
}
}
return 0;
}

看完上述内容,你们对怎样用C语言实现纸牌游戏有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/151261.html

(0)

相关推荐

  • Mysql数据库多实例配置的示例分析

    技术Mysql数据库多实例配置的示例分析小编给大家分享一下Mysql数据库多实例配置的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!二进制安装:
    [root@lufengcentos ~]# m

    攻略 2021年11月18日
  • 省略的拼音,举例说明ü上两点的省略规律

    技术省略的拼音,举例说明ü上两点的省略规律y和u不会相遇,ü遇到y要去两点,读音不变!ü遇到j、q、x、y去掉上面的点。拼读规则:ü行的韵母跟声母j,q,x拼的时候,写成ju,qu,xu,jue,que,xue,ü上两点

    生活 2021年10月23日
  • vspherewebclient虚拟机怎么使用(在虚拟机中怎么克隆系统)

    技术怎样在vSpere Client上克隆虚拟机本篇文章给大家分享的是有关怎样在vSpere Client上克隆虚拟机,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来

    攻略 2021年12月21日
  • Spring中接口注入的三种方式分别是什么

    技术Spring中接口注入的三种方式分别是什么本篇文章为大家展示了Spring中接口注入的三种方式分别是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Spring中 接口注入

    攻略 2021年10月27日
  • Redis如何删除1.2亿指定前缀的key

    技术Redis如何删除1.2亿指定前缀的key这篇文章主要为大家展示了“Redis如何删除1.2亿指定前缀的key”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Redis如何

    攻略 2021年12月1日
  • 怎么让APP永不崩溃

    技术怎么让APP永不崩溃本篇内容介绍了“怎么让APP永不崩溃”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!让我的APP永

    攻略 2021年10月21日