/*
时间: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=
C++实现24点游戏
最新推荐文章于 2025-06-20 10:06:32 发布