C++实现24点游戏

这是一个使用C++编写的24点游戏程序,通过栈存储多项式,递归算法解决计算问题。程序包括数值栈和字符栈的管理,运算符优先级处理,以及用户输入表达式的计算功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*
	时间:2017年4月8日
	作者:靳程煜
	实现功能:24点游戏
	实现方法:用C++完成,用到栈存储多项式,用文件保存玩家的信息,计算玩家输入的多项式答案用到了递归算法,
	          用栈存储用户输入的多项式 
*/
#include<iostream>
#include <stack>
#include <string.h>
#include<time.h>
#include<stdlib.h>
#include<math.h>

#define SIZE 40
#define MaxSize 32 

using namespace std;

const double LING = 1E-6;         //用这个来判断结果是不是24 
const int    VALUE=24;            //最后的答案,定义为const 
const int    COUNT=4;             //四个数字 

//存放用户信息 
struct player
{
	int          mark;                //记录成绩
	char         playername[20];          //玩家名  	
}user,userdisplay; 
//定义结点,存放字符
struct node                       
{
	char *base;
	char *top;        
	int size;
}m;                   

//数值结点定义
struct list                   
{
	float *base;
	float *top;
	int size;
}n;

class Game24
{
	double       number[COUNT];       //要计算数字的int型 
	string       expression[COUNT];   //要计算数字的字符型
	string       ShowAnswers[50];     //答案存储在这个数组中 
	
	public:
		int   FINDNUM;   
		bool  Judge;         //判定 
		int   NUM;
	
		void ValuePush(list& S,float e);  //将数值放入栈中的算法
		void CharPush(node& S,char e);   //字符栈 
		float ValuePop(list& S);   //数值出栈
		char CharPop(node& S);   //字符出栈
		void InitCharStack(node& S);   //初始化字符栈,用于存储表达式中的符号
		void InitValueStack(list& S);   //初始化数值栈,用于存储表达式中的数字
		//解决比较优先级的时候如何处理运算符的值的大小,进而进入下一步的运算
		int Prior(char c);
		int Prior2(char c);
		float Compute(char* str);     //计算用户输入的表达式 并将结果返回
		void JudgeAnswer();
		//n为运算数的个数,当n为1时,达到递归的终止条件,此时第一位保存的就是运算结果
		void Find(int n);
		void Compute();//随机生成四个数字
		void lefts();   //输出所有的答案
}; 
//数据的存储控制函数 
class Data_Check
{
	public:
		int control1,control2;               //控制检测用户是否存在的进行
		void check();
		void ReadFile();
		void WriteFile();
};  
//读取文件中的玩家信息 
void Data_Check::ReadFile()
{
	char mar[6];
	cout<<"                玩家"<<"    "<<"成绩"<<endl; 
	FILE *fp;
	fp=fopen("data.txt","r");
	if(!fp)
    {
	   cout<<"\n打开文件data.txt失败!";

    }
    
    while(fscanf(fp,"%s %s",userdisplay.playername,mar)==2)
    {	
    	userdisplay.mark = atoi(mar);
	  	printf("%20s%8d\n",userdisplay.playername,userdisplay.mark);
    }
	fclose(fp); 
 }
 
 //将玩家的信息写入文件中 
 void Data_Check:: WriteFile()
 {
 	FILE *fp;
 	fp=
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值