//工作模拟器1.3
#include <iostream>
#include <string>
#include <cstdlib>
#include <vector>
#include <ctime>
#include <bits/stdc++.h>
#include<windows.h>
// 替换Windows特定功能
#ifdef _WIN32
#include <windows.h>
#else
// 提供Linux/macOS的替代实现
#endif
#include <fstream>
#define ll long long
using namespace std;
int math_ability = 0;
int language_ability = 0;
int science_ability = 0;
int art_ability = 0;
int programming_ability = 0;
int economics_ability = 0;
bool can_teach_math = false;
bool can_teach_language = false;
bool can_teach_science = false;
bool can_teach_art = false;
bool can_teach_programming = false;
struct GameData {
int money;
int tired;
int knowledge;
int work;
int bank_savings;
int bank_loan;
int loan_term;
int interest_rate;
int loan_rate;
};
namespace gongjv {
inline void cd(int x) {
Sleep(x);
system("cls");
}
void ggb() {
HWND hwnd = GetConsoleWindow();
LONG style = GetWindowLong(hwnd, GWL_STYLE);
style &= ~(WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_THICKFRAME);
SetWindowLong(hwnd, GWL_STYLE, style);
SetWindowPos(hwnd, HWND_TOP, 0, 0, 0, 0,
SWP_NOMOVE | SWP_NOSIZE | SWP_FRAMECHANGED);
}
bool SetWindowTopMost(HWND hWnd, bool topmost, bool noActivate = true) {
if (!IsWindow(hWnd)) return false;
UINT flags = SWP_NOMOVE | SWP_NOSIZE;
if (noActivate) flags |= SWP_NOACTIVATE; // 关键:置顶但不抢焦点
return SetWindowPos(hWnd,
topmost ? HWND_TOPMOST : HWND_NOTOPMOST,
0, 0, 0, 0,
flags);
}
bool axj(long long key) {
return (GetKeyState(key) < 0) ? (true) : (false);
}
struct hl {
long long h,l;
};
inline void de(int x) {
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),x);
}
int djde1(int x) {
int y=0;
switch(x) {
case 1:
y=7;
break;
case 2:
y=15;
break;
case 3:
y=2;
break;
case 4:
y=10;
break;
case 5:
y=3;
break;
case 6:
y=11;
break;
case 7:
y=9;
break;
case 8:
y=14;
break;
case 9:
y=12;
break;
}
return y;
}
void pzde2(int x) {
int y=0;
switch(x) {
case 1:
y=15;
break;
case 2:
y=10;
break;
case 3:
y=11;
break;
case 4:
y=14;
break;
case 5:
y=4;
break;
}
de(y);
}
int pzde1(int x) {
int y=0;
switch(x) {
case 1:
y=15;
break;
case 2:
y=10;
break;
case 3:
y=11;
break;
case 4:
y=14;
break;
case 5:
y=4;
break;
}
return y;
}
void djde2(int x) {
int y=0;
switch(x) {
case 1:
y=7;
break;
case 2:
y=15;
break;
case 3:
y=2;
break;
case 4:
y=10;
break;
case 5:
y=3;
break;
case 6:
y=11;
break;
case 7:
y=9;
break;
case 8:
y=14;
break;
case 9:
y=12;
break;
}
de(y);
}
bool ax(long long key) {
return (GetKeyState(key) < 0) ? (true) : (false);
}
hl wz(bool x = 1, bool n = 1) {
HANDLE hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
HWND h = GetForegroundWindow();
CONSOLE_FONT_INFO consoleCurrentFont;
hl hl;
POINT p;
if (x) {
GetCursorPos(&p);
ScreenToClient(h, &p);
} else {
GetCursorPos(&p);
}
if (n) {
GetCurrentConsoleFont(hOutput, FALSE, &consoleCurrentFont);
p.x /= consoleCurrentFont.dwFontSize.X;
p.y /= consoleCurrentFont.dwFontSize.Y;
}
hl.h = p.y + 1;
hl.l = p.x + 1;
return hl;
}
hl GetActiveWindowSize() {
HWND hwnd = GetForegroundWindow();
RECT rect;
if (GetClientRect(hwnd, &rect)) {
int clientWidth = rect.right - rect.left;
int clientHeight = rect.bottom - rect.top;
hl sas= {clientWidth /8,clientHeight /16};
return sas;
}
}
void ycbj() {
HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE);
DWORD mode;
GetConsoleMode(hStdin, &mode);
mode &= ~ENABLE_QUICK_EDIT_MODE;
SetConsoleMode(hStdin, mode);
return;
}
void ycgb() {
CONSOLE_CURSOR_INFO cursor;
cursor.bVisible = FALSE;
cursor.dwSize = sizeof(cursor);
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorInfo(handle, &cursor);
return;
}
inline void ydgb(long long h, long long l) {
h-=1;
l-=1;
COORD pos = { (short)l,(short)h };
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hOut, pos);
return;
}
inline void ydgb_zj_sc(int x,string zt) {
ll s1=GetActiveWindowSize().h/2;
ll s2=zt.size()/2;
ydgb(x,s1-s2);
cout<<zt;
}
inline void ydgb_zj(int x,string zt) {
ll s1=GetActiveWindowSize().h/2;
ll s2=zt.size()/2;
ydgb(x,s1-s2);
}
inline void ydgb_zj(int x,int zt) {
ll s1=GetActiveWindowSize().h/2;
ll s2=zt/2;
ydgb(x,s1-s2);
}
inline hl ydgb_zj_hl(string zt) {
ll s1=GetActiveWindowSize().h/2;
ll s2=zt.size()/2;
hl z= {s1-s2,s1+s2};
return z;
}
inline bool pdbj(int y,int x,int x1,int x2,int ys,string zt) {
ycgb();
ycbj();
hl z=wz(1,1);
bool a=0;
if(z.h==y&&z.l>=x1&&z.l<=x2) {
ydgb(y,x);
de(ys*16);
cout<<zt;
de(ys);
if(axj(VK_LBUTTON)) {
a=1;
}
} else {
ydgb(y,x);
de(ys);
cout<<zt;
}
de(15);
return a;
}
inline bool pddj_zj(int h,int ys,string zt) {
int s1=GetActiveWindowSize().h/2;
int s2=zt.size()/2;
if(pdbj(h,s1-s2,s1-s2,s2+s1,ys,zt)) {
return 1;
} else {
return 0;
}
}
inline bool pddj_zj_kh(int h,int ys,string zt,string z1="",string z2="") {
int s1=GetActiveWindowSize().h/2;
int s2=zt.size()/2;
ydgb(h,s1-s2-z1.size()-1);
cout<<z1<<"[";
ydgb(h,s1+s2);
cout<<"]"<<z2;
if(pdbj(h,s1-s2,s1-s2,s2+s1,ys,zt)) {
return 1;
} else {
return 0;
}
}
inline bool pddj_kh(int h,int x,int ys,string zt,string z1="",string z2="") {
int s2=zt.size();
ydgb(h,x);
cout<<z1<<"[";
ydgb(h,x+z1.size()+s2+1);
cout<<"]"<<z2;
if(pdbj(h,x+z1.size()+1,x+z1.size()+1,s2+x+z1.size(),ys,zt)) {
return 1;
} else {
return 0;
}
}
inline string wjcc(string x, string y) {
std::string full_path = x + "\\" + y;
// 只创建目录,不创建文件
std::string command = "if not exist " + x + " mkdir " + x;
int ret = system(command.c_str());
return full_path;
}
inline string in_str(ll x) {
string y="";
const string z[]= {"0","1","2","3","4","5","6","7","8","9"};
while(x) {
y+=z[x%10];
x/=10;
}
reverse(y.begin(),y.end());
return y;
}
};
using namespace gongjv;
int tired=50,work;
int money=200;
int knowledge = 0;/////////////////////////////////////
int study;
void kaoshi(){
knowledge+=20;
return ;
}
int learn() {
Sleep(100);
if(knowledge==10||knowledge==30||knowledge==100||knowledge==150){
kaoshi();
return 0;
}
while(1) {
if(pdbj(1,1,1,20,3,"图书馆自学:免费")) {
return 1;
}
if(pdbj(2,1,1,20,2,"必修课:50元,专业导师")) {
return 2;
}
}
}
int study_(){
int man=learn();
if(man==1&&tired>=30){
tired-=30;
} else if(man==2&&tired>=1){
money-=50;
tired-=1;
}
}
int job() {
Sleep(100);
while(1) {
if(pdbj(1,1,1,33,6,"服徭役,全民皆须")) {
return 1;
}
if(pdbj(2,1,1,33,1,"有人招拉货工人")) {
return 2;
}
}
}
string knowledge_level(int knowledge) {
string x;
if(knowledge <= 10) {
x="初学者";
} else if(knowledge <= 30) {
x="中学士";
} else if(knowledge <= 100) {
x="大学士";
} else if(knowledge <= 150) {
x="状元";
} else {
x="以汝才学,可为官";
}
return x;
}
void gongchang() {
int zs=0;
while(1) {
ydgb(1,1);
cout<<"=====拉动横杠"<<endl;
if(pdbj(1,1,1,1,1,"=")) {
while(1) {
system("cls");
ydgb(1,1);
cout<<"=====";
system("cls");
if(pdbj(1,2,2,2,1,"=")) {
while(1) {
system("cls");
ydgb(1,1);
cout<<"=====";
if(pdbj(1,3,3,3,1,"=")) {
while(1) {
system("cls");
ydgb(1,1);
cout<<"=====";
if(pdbj(1,4,4,4,1,"=")) {
while(1) {
system("cls");
ydgb(1,1);
cout<<"=====";
if(pdbj(1,5,5,5,1,"=")) {
break;
}
}
break;
}
}
break;
}
}
break;
}
}
zs++;
tired--;
}
cout<<endl;
cout<<"可得钱"<<zs;
if(pdbj(3,1,1,4,15,"下工")) {
break;
}
if(tired<=0) {
cout<<"饿倒了";
Sleep(1000);
break;
}
}
system("cls");
cout<<"本次工资:"<<zs;
money+=zs;
Sleep(1000);
return ;
}
void banzhuan() {
system("cls");
bool fl=1;
int zs=0;
int h,l;
while(1) {
ydgb(1,1);
cout<<"___________________________________________________"<<endl;
cout<<"| |"<<endl;
cout<<"| |"<<endl;
cout<<"| |"<<endl;
cout<<"| |"<<endl;
cout<<"| |"<<endl;
cout<<"| |"<<endl;
cout<<"| |"<<endl;
cout<<"| |"<<endl;
cout<<"| |"<<endl;
cout<<"| |"<<endl;
cout<<"|_________________________________________________|"<<endl;
cout<<" 已运砖数:"<<zs;
if(fl) {
h=rand()%30+2;
l=rand()%10+2;
fl=0;
}
const int h1=h;
const int l1=l;
if(pdbj(l1,h1,h1,h1+2,6,"砖")) {
zs++;
fl=1;
tired--;
system("cls");
continue;
}
if(pdbj(16,1,1,4,15,"下工")) {
break;
}
if(tired==0) {
system("cls");
cout<<"你快饿扁了!"<<endl;
break;
}
}
Sleep(500);
system("cls");
cout<<"本次工资:"<<zs;
money+=zs;
Sleep(500);
return ;
}
//民以食为天
string bdje(int tired) {
string x;
if(tired < 10) {
x="为了你的生命安全,还是吃饭吧!";
} else if(tired < 30) {
x="非常饥饿,要吃饭";
} else if(tired < 50) {
x="比较饿";
} else if(tired == 50) {
x="肚子不算饿";
} else if(tired < 80) {
x="饱了";
} else if(tired < 90) {
x="很饱";
} else {
x="太撑了,吃不下了!";
}
return x;
}
void chifan() {
system("cls");
Sleep(1000);
cout << "=== 长安街巷 ===" << endl;
cout << "当前状态:";
bdje(tired);
cout << endl;
cout << "此街酒楼甚多:" << endl;
cout << "1. 胡之餐饮 (10钱可买)" << endl;
cout << "2. 黑面包铺(30钱一斤)" << endl;
cout << "3. 炙羊 (80钱半只)" << endl;
cout << "4. 宫廷御宴 (150文钱)" << endl;
cout << "按ESC返回" << endl;
int selected_option = 0;
while(1) {
// 显示选项按钮
if(pdbj(4,1,1,20,2,"1. 胡之餐饮 (10钱可买)")) {
selected_option = 1;
break;
}
if(pdbj(5,1,1,20,3,"2. 黑面包铺(30钱一斤)")) {
selected_option = 2;
break;
}
if(pdbj(6,1,1,20,4,"3. 炙羊 (80钱半只)")) {
selected_option = 3;
break;
}
if(pdbj(7,1,1,20,5,"4. 宫廷御宴 (150文钱)")) {
selected_option = 4;
break;
}
if(axj(VK_ESCAPE)) {
return;
}
}
Sleep(100);
system("cls");
// 处理选择的餐饮方式
switch(selected_option) {
case 1: // 胡饼与浊酒
if(money < 10) {
cout << "囊中羞涩,胡食难购!" << endl;
Sleep(1000);
return;
}
if(tired > 90) {
cout << "腹中已满,难以食!" << endl;
Sleep(1000);
return;
}
money -= 10;
tired += 20;
cout << "胡饼香脆,浊酒虽浊,足以果腹。" << endl;
break;
case 2: // 汤饼与素菜
if(money < 30) {
cout << "银两甚少!" << endl;
Sleep(1000);
return;
}
if(tired > 80) {
cout << "腹中尚饱,少食为宜!" << endl;
Sleep(1000);
return;
}
money -= 30;
tired += 50;
cout << "面包虽恶,亦可食" << endl;
if(tired > 100) {
tired = 100;
}
break;
case 3: // 炙羊肉与清酒
if(money < 80) {
cout << "银钱不足,无法享炙羊之美!" << endl;
Sleep(1000);
return;
}
if(tired > 50) {
cout << "腹中充实,不宜再食大餐!" << endl;
Sleep(1000);
return;
}
money -= 80;
tired += 80;
cout << "炙羊肉香气扑鼻,清酒甘醇,快哉!" << endl;
break;
case 4: // 宫廷御宴
if(money < 150) {
cout << "银钱不足,实在无法享用!" << endl;
Sleep(1000);
return;
}
if(tired > 20) {
cout << "腹中尚有食,岂能再享盛宴?" << endl;
Sleep(1000);
return;
}
money -= 150;
tired = 100; // 直接恢复满体力
cout << "驼峰炙、鲤鲙、玉露团... 此乃天子之享!" << endl;
break;
}
// 确保体力不超过上限
if(tired > 100) {
cout << "食物没吃完,放行囊中备着吧。" << endl;
}
Sleep(2000);
}
//
void shangban(int wk) {
if(tired <= 0) {
cout << "先吃饭吧";
Sleep(1000);
return;
}
if(wk == 1) {
banzhuan();
} else if(wk == 2) {
gongchang();
}else {
cout << "你还未有职务";
}
Sleep(1000);
return;
}
string ctjb(int work) {
string x;
if(work==1) {
x="服徭役";
} else if(work==2) {
x="拉货工";
} else {
x="无业游民";
}
return x;
}
int main() {
system("mode con cols=150 lines=50");
srand(time(0));
/*
cout<<"======================================================================================================================================================"<<endl;
cout<<" 欢迎来到莫尔德帝国,你要在这里生活下去了"<<endl;
Sleep(1000);
cout<<" 我先给你200,等你钱够多了我再来找你哦~"<<endl;
Sleep(5000);
system("cls");
cout<<"那人是谁?算了不管了,这个地方——算了不管了,先解决温饱吧";
Sleep(5000);
system("cls");*/
while(money>=0) {
// 在工作、学习、吃饭函数结束时调用
if(money>=100000000) {
system("cls");
cout<<"你成为了全帝国数一数二的富翁,资产上亿";
return 0;
}
if(knowledge>=500) {
system("cls");
cout<<"你通过努力学习,成为了一名教授!";
return 0;
}
ydgb_zj_sc(1,"行囊中有"+in_str(money)+"钱币,"+bdje(tired));
ydgb_zj_sc(2,"当前职业:"+ctjb(work)+" 学历:"+knowledge_level(knowledge));
//ctjb(work);
//cout<<" 学历:";
//knowledge_level(knowledge);
if(pddj_zj_kh(3,15,"选择职业")) {
system("cls");
work=job();
system("cls");
Sleep(100);
}
if(pddj_zj_kh(4,15,"工作")) {
system("cls");
shangban(work);
system("cls");
Sleep(100);
}
if(pddj_zj_kh(5,15,"吃饭")) {
system("cls");
chifan();
system("cls");
Sleep(100);
}
}
system("cls");
cout<<"你破产了,流浪街头……";
return 0;
}