用c++写一个简单的钓鱼(集卡)程序

因为我们C++的老师要求我们写一个面向对象的C++程序,要求是扑克牌游戏:
1、分花色,牌值表示能显示一副完整的牌
2、洗牌,分牌
3、出牌(游戏规则自己定,可以是争上游,斗地主或抽乌龟等等)
但是因为本人只会玩钓鱼和斗地主,加上技术不佳,所以就只写了这个钓鱼游戏,规则十分简单,这个游戏还是我在小学一二年纪玩的,哈哈。下面就来分享一下。
这个钓鱼游戏的玩法是这样的:我们取一副扑克牌,去掉大小王,只留下A~K的部分,也就是52张普通牌,并且玩的时候只需要关注牌值,花色不做设计。游戏支持两个人玩,首先我们将52张牌随机打乱,然后两个人依次抽牌按顺序排好,当出现相同牌的时候,将两张相同牌之间的牌都收入该次出牌玩家手中。这样知道最后将牌堆的牌抽空的时候,统计谁收集的牌多,牌多的玩家获胜。
源代码:

#include <iostream>
using namespace std;
#include<stdlib.h>
#include<time.h>
#include<stdio.h>
char initial[52] = {'A','A','A','A','2','2','2','2','3','3','3','3',
'4','4','4','4','5','5','5','5','6','6','6','6','7','7','7','7','8',
'8','8','8','9','9','9','9','1','1','1','1','J','J','J','J','Q',
'Q','Q','Q','K','K','K','K' };             //这里用“1”代替10,因为char类型的ASCALL码表里没有10,//如想要表示10,可定义一个字符指针数组,每一个牌面定为字符串便可
class Pile          //牌堆类:包含牌堆的初始化和洗牌
{public:friend class StartGame;Pile(char initial[52]);         //洗牌构造函数
private:char cards[52];         //牌数组
};
Pile::Pile(char initial[52])
{char cardstemp[52] = { '\0'};char check;for (int i = 0; i < 52; i++){cards[i] = initial[i];}cout << "pile initial..." << endl;for (int i = 0; i < 52; i++){cout << cards[i] << " ";}cout<<endl;srand((unsigned int)time(NULL));for (int i = 0; i < 52; i++){int postn;postn= rand() % 52;while (cardstemp[postn] != 0){postn++;if(postn>=52){postn = 0;}}cardstemp[postn] = cards[i];}for(int i=0;i<52;i++){cards[i] = cardstemp[i];}cout << "是否查看当前牌堆:按C查看,按N跳过" << endl;       //提供确认洗牌结果的接口cin>>check;if (check=='c'||check=='C'){for(int i=0;i<52;i++){cout<<cards[i]<<"  ";}}cout<<endl;
}class StartGame         //游戏运行类;包含了游戏终止判断和游戏运行
{public:void GameCircal(StartGame &s);     //游戏终止判断int GameRun();                     //游戏单次运行函数
};
int StartGame::GameRun()
{char checkcontinue;         //输入继续游戏检验位int count=0 ,earncards=0, playerorder=0;        //单次游戏结束判断位,玩家卡牌计数位,玩家顺序确定位int postn=0,pilepostn=0,playerpostn=0,p1postn=0,p2postn=0;      //出牌堆定位,牌堆定位,玩家定位,玩家存牌定位char *p1,*p2;                       //先后手char player1[20],player2[20];       //玩家信息记录char cardsshow[16]={'\0'};          //出牌数组char p1cards[52]={'\0'},p2cards[52]={'\0'};     //存牌数组Pile pile(initial);                             //单次洗牌cout<<"please enter 1P's name"<<endl;       //信息录入,确定先后手cin>>player1;cout<<"please enter 2P's name"<<endl;cin>>player2;srand(time(NULL));playerorder=rand()%2;if(playerorder==0){p1=player1;p2=player2;cout<<player1<<"  先手"<<endl;}else{p1=player2;p2=player1;cout<<player2<<"  先手"<<endl;}while(count<52)     //单次运行{int temppostn=0,flag=0;        //重牌定位,重牌标志位if(playerpostn%2==0)           //抽牌{cout<<endl<<p1<<"  抽牌:按Enter确认"<<endl;fflush(stdin);getchar();}else{cout<<endl<<p2<<"  抽牌:按Enter确认"<<endl;fflush(stdin);getchar();}cardsshow[postn]=pile.cards[pilepostn];cout<<"当前牌序:"<<endl;for(int i=0;i<=postn;i++)          //显示出牌堆{cout<<cardsshow[i]<<"  ";}cout<<endl;for(int i=0;i<postn;i++)           //判断有无重牌{if(cardsshow[i]==cardsshow[postn]){temppostn=i;flag=1;cout<<endl<<"^-^ 你钓到"<<cardsshow[i]<<"啦 ^-^ "<<endl;break;}}if(flag==1&&playerpostn%2==0)      //重牌存入玩家牌堆{int temp=temppostn;for(int i=0;i<(postn-temppostn+1);i++){p1cards[p1postn]=cardsshow[temp];temp++;p1postn++;}}if(flag==1&&playerpostn%2!=0){int temp=temppostn;for(int i=0;i<(postn-temppostn+1);i++){p2cards[p2postn]=cardsshow[temp];temp++;p2postn++;}}if(flag==1)            //重新定位出牌堆活动位{postn=temppostn;}if(flag==0){postn++;}pilepostn++;playerpostn++;count++;}cout<<endl<<"游戏结束  "<<"玩家挣取牌数:"<<endl;      //单轮结算cout<<p1<<":"<<endl;for(int i=0;i<52;i++){if(p1cards[i]>0){cout<<p1cards[i]<<"  ";earncards++;}}cout<<endl<<"赢牌数:"<<earncards<<endl;cout<<p2<<":"<<endl;earncards=0;for(int i=0;i<52;i++){if(p2cards[i]>0){cout<<p2cards[i]<<"  ";earncards++;}}cout<<endl<<"赢牌数:"<<earncards<<endl;cout<<"是否继续游戏:按1继续,按2结束"<<endl;do{cin>>checkcontinue;if(checkcontinue=='1')              //继续游戏判断,返回值给GameCircal{return 1;}if(checkcontinue=='2'){return 0;}}while((checkcontinue!='1')&&(checkcontinue!='2'));
}
void StartGame::GameCircal(StartGame &s)        //游戏继续判断
{int i=0;do{i=s.GameRun();}while(i);
}
int main()
{StartGame startgame;startgame.GameCircal(startgame);cout<<endl<<"感谢参与"<<endl;return 0;
}

以上源程序可在code-blocks里正常运行,他只是实现了一部分的老师要求;关于牌值花色的设计见网上资料:https://wenku.baidu.com/view/485a3d1114791711cc79174a.html
还有分牌功能就由聪明的你自行设计了。
后面如果会写斗地主的话,我会将这些功能都加上,感谢阅读 ^ - ^

用c++写一个简单的钓鱼(集卡)程序相关推荐

  1. 家里亲戚开复印店的!让我给写一个简单的打印店计费程序!实用!

    小姨家开复印店的,有时候生意太好,老师算错账!就很苦恼,今天跟我抱怨的时候提到了这个,然后我就琢磨着给她写个程序,自动计费的,这样省了去计算时间了,虽然都是一两块的算错,但是蚊子再小也是肉啊!我这样的 ...

  2. 用Go写一个简单的Selpg命令行程序

    设计说明 [程序简介] Selpg从标准输入或从作为命令行参数给出的文件名读取文本输入.它允许用户指定来自该输入并随后将被输出的页面范围,然后输出到标准输出或是文件中. 对Selpg的详细介绍请参考h ...

  3. java写一个简单的浪漫代码_程序员的浪漫弹窗表白,圣诞节给Ta惊喜吧(附源码,简单易学哦)...

    不要以为程序员都是木讷的,浪漫起来也会让很多妹子心动的.而程序员的表白方式也很不一般,通过一堆代码,无限释放浪漫.今天教给大家通过改写脚本语言,利用弹窗可充分自由发挥,用来表白或者恶搞都是不错的选择. ...

  4. PHP充值怎么打折,教大家如何用PHP语言写一个简单的商品打折小程序!

    注:php是嵌套在html里面使用的,本文仅是商品打折小程序的代码 效果图: 代码:html> 宗波尘客php代码演示P17 请输入商品折扣价: 折扣: 九折 八折 七折 六折 五折 $Orig ...

  5. 小白教程——Windows下用PHP写一个简单的登录注册页面(二)

    哈喽,看到这里希望小伙伴们都把wampserver环境安装好了,如果还没有安装或创建数据表就移步去看我上一篇文章吧.OK~接下我们将进入代码实现部分,首先我们需要一个文本编辑器,可以是电脑自带的not ...

  6. 用java做一个简单记事本_用记事本写一个简单的java程序

    用记事本写一个简单的java程序 第一步: 安装好jdk,并设置好环境变量. 桌面-计算机(右键)-属性-高级系统设置-环境变量-path-在变量值后加上:和jdk安装路径加上(路径即为C:\Prog ...

  7. 如何搭建python框架_从零开始:写一个简单的Python框架

    原标题:从零开始:写一个简单的Python框架 Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发. 你为什么想搭建一个Web框架?我想有下面几个原因: 有一个 ...

  8. ipad php mysql_如何用PHP/MySQL为 iOS App 写一个简单的web服务器(译) PART1

    原文:http://www.raywenderlich.com/2941/how-to-write-a-simple-phpmysql-web-service-for-an-ios-app 作为一个i ...

  9. python123程序设计题说句心里话_用c++写一个简单的计算器程序

    // 050305.cpp : 定义控制台应用程序的入口点. // // 050304.cpp : 定义控制台应用程序的入口点. // //四则运算 #include "stdafx.h&q ...

最新文章

  1. 不止JDK7的HashMap,JDK8的ConcurrentHashMap也会造成CPU 100%
  2. jupyter python版本_Ubuntu Desktop 16.04 LTS 下成功配置Jupyter的两个python内核版本(2.7x,3.5x)...
  3. Neo4j 导入动态类型关系
  4. python企业级框架_Python六大开源框架对比:Web2py略胜一筹
  5. 面试题25:合并两个排序的链表
  6. 表格存储TableStore全新升级,打造统一的在线数据存储平台!
  7. access订单明细表怎么做_图书销售订单明细表 (4)
  8. javascript脚本语言_10分钟快速掌握Javascript核心特性
  9. 大数据技术应用有哪些特点
  10. UVA12897 - Decoding Baby Boos
  11. gif透明背景动画_汉服美女表情包(PS做GIF动图简易教程分享)
  12. java-ActiveXComponent调用com组件
  13. Unity中的Compute Shader
  14. MySQL如何避免幻读
  15. Python作业:公鸡5元/只,母鸡3元/只,小鸡1元3只。问100元怎么买到100只。
  16. HDwiki模板说明
  17. harbor离线包下载(百度网盘)
  18. 使用 Kprobes 调试内核
  19. 软考和 PMP考哪个比较好?各自的价值是什么?
  20. CentOS 7 不显示ip

热门文章

  1. 【百度小程序模板】百度小程序模板怎么制作
  2. 论Flutter开发如何改善套娃地狱问题
  3. 便签内容如何从旧手机转到新手机?
  4. Outlook邮箱开源许可-android
  5. 理解快速排序 | 打通算法学习的任督二脉
  6. 参考文献为外文文献时应该采用什么格式啊?
  7. 蓝牙耳机南卡和vivo哪个好用?南卡与vivo实际评测!
  8. pygame战棋游戏制作之战棋地图绘制(一)
  9. STM32单片机开发实例 基于STM32单片机的温室大棚监测系统
  10. python抓取google搜索结果