苏州大学数据结构课程实践 实验3:小猫钓鱼纸牌游戏

课程实践实验3:小猫钓鱼纸牌游戏

问题描述及要求

A和B两个同学玩简单的纸牌游戏,每人手里有n张牌,两人轮流出牌并依次排列在桌面上,每次出掉手里的第1张牌,出牌后如果发现桌面上有跟刚才打出的牌的数字相同的牌,则把从相同的那张牌开始的全部牌按次序放在自己手里的牌的末尾。当一个人手中的牌先出完时,游戏结束,对方获胜。
如n为5,A手里的牌依次为2 3 5 6 1,B手里的牌依次为1 5 4 2 9;
A出2;
B出1;
A出3;
B出5;
A出5,发现前面有一张5,则把两个5都拿掉,这时他手里有6 1 5 5;
桌子上的牌依次为2 1 3;
B出4;
A出6;
B出2,发现前面有一张2,则把从2开始的牌全部拿掉,这时他手里有9 2 1 3 4 6 2;
桌子上没有牌了;
A出1;
B出9;
A出5;
B出2;
依次类推,直到某人先出完牌为止,则对方是胜者。
编写程序,利用栈和队列,判断谁是胜者。

概要设计

(1) 对实验内容的理解和二次概括。
本实验可利用栈和队列的功能,由于玩家的手牌是从头部出牌,向尾部加牌,符合队列的定义,可将两个玩家的手牌定义为A,B两个队列,然后由于桌上的牌是从尾部加牌,也从尾部收牌,可将桌上的牌定义为一个table栈。通过队列和栈的功能实现本游戏。
(2) 系统的功能列表
输入两个玩家的手牌,可自动进行游戏流程,给出每一轮玩家的手牌,出牌情况和桌上的牌,以及收牌的情况。
(3) 程序运行的界面设计
(4) 确定总体设计思路,采用何种数据结构,设计哪些类,各类的作用 ,类方法的介绍,类之间的关系描述
设计玩家A,B两个队列,代表他们手上的手牌,可用push收回手牌,用pop出牌,另外定义一个table栈,代表桌上的牌,可用push把玩家出的牌压入栈中,也可用pop把桌上的牌收回玩家手中。
(5) 程序结构设计,包括:对已有程序的使用,自己将设计哪些程序文件,各部分关系描述。
设计一个initialize函数用于初始化两个玩家的手牌,读入键盘输入的字符。
main_process函数代表整个游戏流程。
check函数用于检查当前玩家是否符合收牌条件。
playcards是玩家出牌或手牌的过程。
showcards用于输出当前玩家的手牌。

详细设计

流程图
附代码:

#include <queue>
#include <iostream>
#include <cstdio>
#include <string>
#include <stack>

using namespace std;


void initialize(queue<char> &p)
{
   
	string s;
	int i = 0,flag=1;
	while (flag)
	{
   
		getline(cin, s);
		for (i = 0; i < s.size(); i++)
		{
   
			if (!(isdigit(s[i]) || s[i] == 'J' || s[i] == 'K' || s[i] == 'Q' || s[i] == 'A'
  • 1
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值