#include<iostream>
#include<iomanip>
#include<cmath>
#include<windows.h>
#include<conio.h>
using namespace std;
unsigned long long M=0, m=1, lm=0, K=0,a,sbcs;
void sanb(int as){
if(!as)return;
sanb(as/16);
if(as%16<10)cout<<as%16;
else cout<<char(as%16-10+'A');
return;
}
int sans(char c) {
if(c>='0' && c<='9') return c-'0';
if(c>='A' && c<='F') return c-'A'+10;
if(c>='a' && c<='f') return c-'a'+10;
return 0;
}
struct Item {
string name;
string desc;
unsigned long long base;
unsigned long long cnt;
unsigned long long add;
unsigned long long p;
};
int main(){
Item items[10];
items[1] = {"mouse", "+1 per click", 25, 0, 1, 25};
items[2] = {"cow", "+5 per click", 1000, 0, 5, 1000};
items[3] = {"farm", "+20 per click", 12000, 0, 20, 12000};
items[4] = {"mine", "+100 per click", 90000, 0, 100, 90000};
items[5] = {"factory", "+666 per click", 450000, 0, 666, 450000};
items[6] = {"quantum cow", "+1650 per click", 2000000, 0, 1550, 2000000};
items[7] = {"laboratory", "+5500 per click", 32000000, 0, 4444, 32000000};
items[8] = {"recursion", "+19999 per click", 666666666, 0, 19999, 666666666};
system("cls");
cout << "Milky Clicker" << endl;
cout << "1. 开始" << endl;
cout << "2. 加载存档" << endl;
cout << "3. 说明(已更新2.0)" << endl;
char c=_getch();
while(c!= '1'&&c!='2'&&c!='3')c=_getch();
if(c=='3') {
system("cls");
cout<<"按任意键生产Milk"<<'\n'<<"按1~8购买建筑(需解锁)"<<'\n'<<"按'Q'获取存档代码(会退出游戏!)"<<'\n'<<"给吔生产尽量多的Milk吧!"<<'\n'<<'\n';
cout<<"如何复制存档代码?"<<'\n';
cout<<"右键窗顶部口边缘->编辑(E)->全选(S)->按Enter复制"<<'\n'<<'\n';
cout<<"如何粘贴存档代码?"<<'\n';
cout<<"右键窗顶部口边缘->编辑(E)->全选(S)->粘贴(P)"<<'\n'<<'\n';
cout<<"想开挂就开挂吧,懒得管了"<<'\n';
cout<<"游戏是给人玩的,而不是开挂狗玩的";
Sleep(2000);
return 0;
}
if(c=='2') {
string h1,h2;
system("cls");
cout<<"输入存档代码:"<<endl;
cin>>h1;
if(h1.size()!=16) return 0;
unsigned long long totalAdd = 0;
for(int i=1;i<=8;i++){
int high = sans(h1[2*(i-1)]);
int low = sans(h1[2*(i-1)+1]);
items[i].cnt = high*16 + low;
totalAdd += items[i].cnt * items[i].add;
}
m = 1 + totalAdd;
for(int i=1;i<=8;i++){
items[i].p = (unsigned long long)(items[i].base * pow(1.2, items[i].cnt));
}
cin>>h2;
if(h2.size()!=16) return 0;
M=0;
for(int i=0;i<16;i++){
int val = sans(h2[i]);
M = M*16 + val;
}
cin>>sbcs;
if(sbcs!=(M+items[1].cnt)){
for(int i=1;i<=50;i++){
cout<<"臭cs开挂狗"<<endl;
}
return 0;
}
lm = M;
}
system("cls");
cout<<"游戏开始!"<< endl;
Sleep(1000);
while(1) {
system("cls");
cout<<"Milk: " << M << endl;
cout<<"=========================" << endl;
for(int i=1; i<=8; i++) {
if(lm>=items[i].base || items[i].cnt) {
cout<<"________________________\n|"
<<items[i].name << setw(22 - items[i].name.length())
<<(int)items[i].p << "|\n|"
<<items[i].desc << setw(22 - items[i].desc.length())
<<items[i].cnt << "|\n|______________________|\n";
}
}
DWORD inputStart=GetTickCount();
a=1;
while(GetTickCount()-inputStart < 100) {
if(a && _kbhit()) {
char c=_getch();
if(c=='q' || c=='Q'){
system("cls");
for(int i=1;i<=8;i++){
unsigned long long cnt = items[i].cnt;
unsigned char high = (cnt >> 4) & 0xF;
unsigned char low = cnt & 0xF;
cout << char(high<10? high+'0': high-10+'A');
cout << char(low<10? low+'0': low-10+'A');
}
cout << endl;
for(int i=15; i>=0; i--){
unsigned char digit = (M >> (4*i)) & 0xF;
cout << char(digit<10? digit+'0': digit-10+'A');
}
cout << endl;
cout<<M+items[1].cnt;
Sleep(50000);
return 0;
}
if(c>='1' && c<='8') {
int i=c-'0';
if(M >= items[i].p) {
items[i].cnt++;
m += items[i].add;
M -= (unsigned long long)items[i].p;
items[i].p = (unsigned long long)(items[i].base * pow(1.2, items[i].cnt));
}
}
else {
M += m;
lm += m;
a=0;
cout<<"+"<<m;
}
}
Sleep(1);
}
if(K==5){
M += m;
lm += m;
K=0;
} else K++;
while(_kbhit()) _getch();
Sleep(5);
}
return 0;
}