扑克牌24点小游戏

题目要求

基本要求

    随机生成4个代表扑克牌牌面的数字字母,程序自动列出所有可能算出24的表达式,用擅长的语言(C/C++/Java或其他均可)实现程序解决问题。
      1.程序风格良好(使用自定义注释模板)
      2.列出表达式无重复。

提高要求

   用户初始生命值为一给定值(比如3),初始分数为0。随机生成4个代表扑克牌牌面的数字或字母,由用户输入包含这4个数字或字母的运算表达式(可包含括号),如果表达式计算结果为24则代表用户赢了此局。
     1. 程序风格良好(使用自定义注释模板)
     2.使用计时器要求用户在规定时间内输入表达式,如果规定时间内运算正确则加分,超时或运算错误则进入下一题并减少生命值(不扣分)。
     3.所有成绩均可记录在TopList.txt文件中。

算法设计

在这里插入图片描述

程序代码

/*************************************************

Copyright:XUST

Author:   高雪峰

email:    1456913441@qq.com

Date:     2019-04-14

Description:实现24点游戏(提高)。

**************************************************/
#include <stack>
#include <iostream>
#include <string>
#include <algorithm>
#include <iterator>
#include<stdlib.h>
#include<time.h>

using namespace std;
class TFpoint {
   
   
protected:
	int num[1][4];//存放随机数
	string str;//存放用户输入的表达式
	string answer;//记录所有能算出24的算法
	//string oc[24];
	int n = 0;//记录有多少组算法

public:
	TFpoint() {
   
           //初始化对象并向用户提供四个随机数,获取用户的表达式
		int temp=0;
		//srand((unsigned)time(NULL));
		while (temp == 0) {
   
   
			num[n][0]= (rand() % (14 - 1)) + 1;
			num[n][1] = (rand() % (14 - 1)) + 1;
			num[n][2] = (rand() % (14 - 1)) + 1;
			num[n][3] = (rand() % (14 - 1)) + 1;
			if (cal(num[n][0], num[n][1], num[n][2], num[n][3]))
				temp++;
		}
		cout << num[0][0] << " " << num[0][1] << " " << num[0][2] << " " << num[0][3] << endl;
		//print();
		cout << "请输入:";
		cin >> str;
	}
	/*void print() {
		for(int i=n-1;i>=0;i--)
		cout << num[i][0] << " " << num[i][1] << " " << num[i][2] << " " << num[i][3]<<endl;
	}*/
	int cal(int x, int y, int z, int w) //运算表达式的所有情况
	{
   
   
		//cout << "a";
		//int m = 0;
		if (x + y + z + w == 24) {
   
    
			answer += "x + y + z + w == 24#";
			//oc[n] += x; oc[n] += '+'; oc[n] += y; oc[n] += '+'; oc[n] += z; oc[n] += '+'; oc[n] += w;
		    n++;
			//cout << x << "+" << y << "+" << z << "+" << w << "=24" << endl;
		} 
		 if (x + y + z - w == 24) {
   
   
			 answer += "x + y + z - w == 24#";
			//oc[n] += x; oc[n] += '+'; oc[n] += y; oc[n] += '+'; oc[n] += z; oc[n] += '-'; oc[n] += w;
			n++;
			//cout << x << "+" << y << "+" << z << "-" << w << "=24" << endl;
		} 
		 if ((x + y)*(z + w) == 24) {
   
   
			 answer += "(x + y)*(z + w) == 24#";
			//oc[n] += '('; oc[n] += x; oc[n] += '+'; oc[n] += y; oc[n] = ')'; oc[n] = '*'; oc[n] += '('; oc[n] += z; oc[n] += '+'; oc[n] += w; oc[n] += ')';
			n++;
			//cout << "(" << x << "+" << y << ")*(" << z << "+" << w << ")=24" << endl;
		}
		 if ((x - y)*(z + w) == 24) {
   
   
			 answer += "(x - y)*(z + w) == 24#";
			//oc[n] += '('; oc[n] += x; oc[n] += '-'; oc[n] += y; oc[n] = ')'; oc[n] = '*'; oc[n] += '('; oc[n] += z; oc[n] += '+'; oc[n] += w; oc[n] += ')';
			n++;
			//cout << "(" << x << "-" << y << ")*(" << z << "+" << w << ")=24" << endl;
		} 
		 if ((x - y)*(z - w) == 24) {
   
   
			 answer += "(x - y)*(z - w) == 24#";
			//oc[n] += '('; oc[n] += x; oc[n] += '-'; oc[n] += y; oc[n] = ')'; oc[n] = '*
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值