@保护建国同志 - 游戏编程 🕹️ (233tw.com)请不要抄袭
1.0.3.1564 (更新:2021.11.17)
新增水力网和电力网查看
#include<bits/stdc++.h>
#include<ctime>
#include<windows.h>
#include<stdio.h>
#include<conio.h>
#include<iostream>
#include<cstdio>
#include<time.h>
#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0)
CONSOLE_FONT_INFO consoleCurrentFont;
using namespace std;
long long money=100000,people=0,light=3;
int l_x=100,l_y=100,xx=100,yy=100;
string b_n[11]={};
int b_n_t[11]={},b_num[11]={},b_p[11]={},b_where[11][3]={},b_work=0;
struct
{
void color(int all){SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),all);}
void wait(int all){Sleep(all);}
void cls(){system("cls");}
void b(short hz,double time){Beep(hz,time);}
void gt(int x,int y)
{
COORD coord;
coord.X=y;//Here, the order is reversed, otherwise, the output pointer is moved to Y row and X column
coord.Y=x;
HANDLE a=GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(a,coord);
}
}basic;
struct
{
struct
{
short m[5][200][200]={};
bool a[5][200][200]={};
double p[200][200]={};
}map;
struct
{
string photo[50][5]={
{"金","金","金","金","金"}, //0
{"│ ","--","□","◎"/*信号灯-绿*/,"◎"/*信号灯-红*/},
{"■","■","■","■","错"},
{"工","工","工","工","错"},
{"◆","◆","◆","◆","错"},
{"●","●","●","●","错"},//5
{"●","●","●","●","错"},
};
short color[50][5]={
{170,170,170,170,170}, //0
{143,143,143,130,132},
{167,165,164,166,79},
{143,143,143,143,79},
{167,165,164,166,79},
{161,161,161,161,79},//5
{175,175,175,175,79},
{175,175,175,175,79},
};
}library;
struct
{
string building_name[100]={};
short building_in_people[100]={};
short need_money[100]={};
short need_time[100]={};//秒
int new_building(int number,string building_name_,short many_people,short need_money_,short build_need_time)
{
building_in_people[number]=many_people,building_name[number]=building_name_,need_money[number]=need_money_,need_time[number]=build_need_time;
}
int start_game()
{
new_building(0,"荒地",0,0,0);
new_building(1,"公路",0,0,0);
new_building(2,"住宅",10,5000,20);
new_building(3,"工地",0,0,0);
new_building(4,"公寓",20,9000,40);
new_building(5,"供水站",0,1000,60);
new_building(6,"发电站",0,1000,60);
}
std::string get_name(int number)
{
string a=building_name[number]+" 价格:"+to_string(need_money[number]) +" 所需时间:"+to_string(need_time[number])+"秒";
if(building_in_people[number]!=0)a=a+" 增加人口:"+to_string(building_in_people[number])+" 需要一些基础设施,如:供水站,发电站";
return a;
}
}building;
}m;
int o_check(int number,int x,int y)
{
basic.cls();
b_work=1;
basic.color(15) ;
printf("正在联系光城建设五局.\n");
basic.wait(100) ;
printf("正在询问对方能否承包%s项目.\n",m.building.building_name[number].c_str());
basic.wait(100) ;
printf("对方正在研讨承包%s项目的问题.\n",m.building.building_name[number].c_str());
basic.wait(100) ;
if(money<=m.building.need_money[number]+1)
{
printf("对方拒绝承包%s项目\n原因:市财政局无法支付其承包费用\n",m.building.building_name[number].c_str() );
system("pause") ;
}
else
{
bool ok=true;
for(int i=0;i<=10;i++)
{
if(b_n[i]=="")
{
ok=false;
m.map.m [1][xx][yy]=3;
printf("对方接受承包%s项目\n市财政局已经对光城建设五局支付了此项目的费用%i元\n",m.building.building_name[number].c_str(),m.building.need_money[number]);
system("pause") ;
b_n[i]=m.building.building_name[number],b_where[i][1]=x,b_where[i][2]=y,b_n_t[i]=m.building.need_time[number],b_num[i]=number,money=money-m.building.need_money[number],b_p[i]=m.building.building_in_people[number];
break;
}
}
if(ok)
{
printf("对方拒绝承包%s项目\n原因:对方工程设施不足,无法承包此项目\n",m.building.building_name[number].c_str());
system("pause") ;
}
}
b_work=0;
basic.cls();
}//*/
DWORD WINAPI making_building(LPVOID lpParamter)
{
while(1)
{
if(light==3)light=4;
else light=3;
for(int c=0;c<=5;c++)
{
if(b_work!=0)continue;
Sleep(1000);
for(int i=0;i<=10;i++)
{
if(b_n[i]!="")
{
if(b_n_t[i]<=0)
{
b_n[i]="",b_n_t[i]=0;
m.map.m[1][b_where[i][1]][b_where[i][2]]=b_num[i],m.map.m[2][b_where[i][1]][b_where[i][2]]=rand()%3,people=people+b_p[i];
b_where[i][1]=0,b_where[i][2]=0,b_num[i]=0,b_p[i]=0;
}
else b_n_t[i]--;
}
}
}
}
}
//bool find start
bool find_street(int wich,int x,int y,bool t_f) //电力,水...扩散函数
{
short i=wich,arrow=0;
if(m.map.m[1][x+1][y]==1)m.map.a[i][x+1][y]=t_f,arrow++;
if(m.map.m[1][x-1][y]==1)m.map.a[i][x-1][y]=t_f,arrow++;
if(m.map.m[1][x][y+1]==1)m.map.a[i][x][y+1]=t_f,arrow++;
if(m.map.m[1][x][y-1]==1)m.map.a[i][x][y-1]=t_f,arrow++;
bool z=false;
if(arrow>=1)z=true;//附近有公路返回真,反之返回假
return z;
}
bool home_check(int wich,int x,int y)// 居民获取水力电力...函数
{
bool z=false;
short i=wich,arrow=0;
if(m.map.m[1][x+1][y]==1&&m.map.a[i][x+1][y]) arrow++;
if(m.map.m[1][x-1][y]==1&&m.map.a[i][x-1][y]) arrow++;
if(m.map.m[1][x][y+1]==1&&m.map.a[i][x][y+1]) arrow++;
if(m.map.m[1][x][y-1]==1&&m.map.a[i][x][y-1]) arrow++;
if(arrow>=1)z=true;//附近的公路链接水利电力...则返回真,反之返回假
return z;
}
//bool find end
DWORD WINAPI trafic_working(LPVOID lpParamter)
{
while(1)
{
int p_=0;
for(int x=1;x<=199;x++)
{
for(int y=1;y<=199;y++)
{
p_=p_+m.building.building_in_people[m.map.m[1][x][y]];
if(m.map.m[1][x][y]==1)
{
for(int i=0;i<=4;i++)
{
if(m.map.a[i][x][y]) find_street(i,x,y,true);
}
if((m.map.m[1][x+1][y]==1||m.map.m[1][x-1][y]==1)&&(m.map.m[1][x][y+1]!=1&&m.map.m[1][x][y-1]!=1))m.map.m[2][x][y]=0;
else if((m.map.m[1][x][y+1]==1||m.map.m[1][x][y-1]==1)&&(m.map.m[1][x+1][y]!=1&&m.map.m[1][x-1][y]!=1))m.map.m[2][x][y]=1;//else if((m.map.m[1][x][y+1]==1&&m.map.m[1][x+1][y]==1)||(m.map.m[1][x][y+1]==1&&m.map.m[1][x-1][y]==1)||(m.map.m[1][x][y-1]==1&&m.map.m[1][x+1][y]==1)||(m.map.m[1][x][y-1]==1&&m.map.m[1][x-1][y]==1))m.map.m[2][x][y]=2;
else
{
int arror=0;
if(m.map.m[1][x+1][y]==1)arror++;
if(m.map.m[1][x-1][y]==1)arror++;
if(m.map.m[1][x][y+1]==1)arror++;
if(m.map.m[1][x][y-1]==1)arror++;
if(arror>=3)m.map.m[2][x][y]=light;
else m.map.m[2][x][y]=2;
}
}
else if(m.map.m[1][x][y]==2||m.map.m[1][x][y]==4)
{
if(home_check(1,x,y)&&home_check(2,x,y))
{
m.map.m[2][x][y]=1;
}
else
{
m.map.m[2][x][y]=4;
}
}
else if(m.map.m[1][x][y]==5||m.map.m[1][x][y]==6)
{
if(find_street(m.map.m[1][x][y]-4,x,y,true))m.map.m[2][x][y]=1;
else m.map.m[2][x][y]=4;
}
}
}
people=p_;
}
}
struct
{
LONG x=-1,y=-1,lest_x=-1,lest_y=-1;
double real_x,real_y;
POINT pt= {0,0};
CONSOLE_FONT_INFO l_z;
HANDLE hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_FONT_INFO x_z;
int do_=1;
void get_real_mouse()
{
basic.cls();printf("鼠标校正,请用鼠标点击右下角的\"Hi\"");
int x=rand()%10+35,y=rand()%10+75;
basic.gt(x,y);printf("Hi");
while(1)
{
GetCursorPos(&pt); //获取鼠标当前位置
ScreenToClient(FindWindow("ConsoleWindowClass", NULL), &pt);
if(KEY_DOWN(VK_LBUTTON)&&MessageBox(0,"您确定您点击了\"Hi\"吗?\n如果您没有点击此点可能会导致程序错乱.","鼠标校正",4)==IDYES)
{
real_x=pt.x/y,real_y=pt.y/x;
break;
}
}
basic.wait(500); basic.cls();
}
void mouse()
{
GetCurrentConsoleFont(hOutput, FALSE, &x_z);
if(do_==1)do_=0;
else if((do_==0)&&(l_z.dwFontSize.X!=x_z.dwFontSize.X||l_z.dwFontSize.Y!=x_z.dwFontSize.Y))
{
do_=1;
basic.color(15) ;
basic.cls();
printf("检测到您在修改字体!\n请您修改完字体后按任意键/点击进行强制鼠标校正");
while(1)
{
if(_kbhit()||KEY_DOWN(VK_LBUTTON)||KEY_DOWN(VK_RBUTTON))break;
}
basic.cls();
get_real_mouse();
}
l_z.dwFontSize.X=x_z.dwFontSize.X,l_z.dwFontSize.Y=x_z.dwFontSize.Y;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),15);
GetCursorPos(&pt); //获取鼠标当前位置
ScreenToClient(FindWindow("ConsoleWindowClass", NULL), &pt);
pt.y=pt.y/real_y,pt.x=(pt.x/real_x);
lest_y=y,lest_x=x;
x=pt.x,y=pt.y;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),7);
}
}mouse;
struct
{//移动库
int num_get()
{
int num=0,ans=1,fu=0;
int life[10]={};
short now_key,key,lk;
for(int i=1;i<=5;i++)
{
now_key=(int)getch()-48;
key=now_key+48;
if(key==13)break;
else if(now_key==-40)
{
if(lk!=49)
{
i=0,ans=0,num=0,fu=0;
for(int q=0;q<=9;q++)life[q]=0;
printf("(重新输入)");
}
}
else if(key==45){ fu=1,i--;printf("(此数已经设定为负数)");}
else if(now_key>9||now_key<0)i--;
else printf("%i",now_key);
lk=now_key;
life[i]=now_key,ans++;
}
int d=1;
//for(int i=1;i<=ans;i++)d=d*10;
for(int i=ans;i>=1;i--)
{
num=num+life[i]*d;
d=d*10;
}
if(fu==1)num=num*-1;
return num/10;
}
string whats[10]={},title="",about_things="null";
int ai_choose(void)
{
basic.cls();
short how_long=0,wait_=1;
for(int i=1;i<=9;i++)
{
if(whats[i]!="")how_long++;
else break;
}
int choose;
while(1)
{
choose=-1;
basic.gt(1,0);
mouse.mouse();
if(mouse.y==1)choose=1;
printf("%s",title.c_str());
if(choose==1){basic.color(16+7);printf("(?)\n");}
else {basic.color(7);printf(" \n");}
short x=1;
for(int i=1;i<=how_long;i++)
{
x++;
if(mouse.y==x)choose=x;
if(choose==i+1)basic.color(16*15);
else basic.color(7);
printf("%s\n",whats[i].c_str());
}
basic.color(0) ;
printf("\n金鹏游戏") ;
if(wait_==1){basic.wait(500);wait_=0;}
if(KEY_DOWN(VK_LBUTTON)&&choose>1)break;
else if(KEY_DOWN(VK_LBUTTON)&&choose==1)
{
string about="关于"+title;
if(about!="null")MessageBox(0,about_things.c_str(),about.c_str(),MB_OK);
}
}
for(int i=1;i<=9;i++)whats[i]="";
title="",about_things="null";
basic.cls();
return choose-1;
}
}choose;
int make_do()
{
basic.cls();
while(1)
{
choose.about_things="null",choose.title="建造建筑物",choose.whats[1]="取消", choose.whats[2]="住房", choose.whats[3]="基础建设";
short c=choose.ai_choose();
basic.cls();
if(c==1)break;
else if(c==2)
{
choose.about_things="null",choose.title="住房",choose.whats[1]="取消", choose.whats[2]=m.building.get_name(2) , choose.whats[3]=m.building.get_name(4);
c=choose.ai_choose();
if(c==2) o_check(2,xx,yy);
else if(c==3) o_check(4,xx,yy);
if(c!=1)break;
}
else if(c==3)
{
choose.about_things="null",choose.title="基础建设",choose.whats[1]="取消", choose.whats[2]=m.building.get_name(5), choose.whats[3]=m.building.get_name(6);
c=choose.ai_choose();
if(c==2) o_check(5,xx,yy);
else if(c==3) o_check(6,xx,yy);
if(c!=1)break;//*/
}
basic.cls();
}
basic.cls();
}
int look_do()
{
basic.cls();
while(1)
{
basic.gt(0,0) ;
printf("工程进度 E 返回主界面\n");
for(int i=0,w=0;i<=10;i++)
{
if(b_n[i]!="")
{
w++;
printf("第%i个工程:%s 坐标(%i,%i)剩余完工时间%i秒 \n",w,b_n[i].c_str(),b_where[i][1],b_where[i][2],b_n_t[i]);
}
}
for(int i=0;i<=4;i++) printf(" \n") ;
if(GetAsyncKeyState((int)'E'))break;
}
basic.cls();
}
int out_m()
{
basic.gt(0,0) ;
short color=0;
for(int m_x=l_x-10,x=0;m_x<=l_x+10;m_x++,x++)
{
for(int m_y=l_y-10,y=0;m_y<=l_y+10;m_y++,y++)
{
if(m.library.color[m.map.m[1][m_x][m_y]][m.map.m[2][m_x][m_y]]!=color)
{
basic.color(m.library.color[m.map.m[1][m_x][m_y]][m.map.m[2][m_x][m_y]]);
color=m.library.color[m.map.m[1][m_x][m_y]][m.map.m[2][m_x][m_y]];
}
printf("%s",m.library.photo[m.map.m[1][m_x][m_y]][m.map.m[2][m_x][m_y]].c_str() );
}
printf("\n");
}
basic.color(15) ;
printf("x-%i,y-%i,see_x-%i,see_y-%i \n城市人口:%lld 市财政局还有%lld元 \n提示:AWSD 移动视角 Q 取消当前操作 U 查看电/水等网络\nP 放置公路 L 摧毁建筑物/公路 O 查看建造进度\nI 在当前光标处修建建筑物",yy,xx,l_x,l_y,people,money);
}
int mover()
{
if(GetAsyncKeyState((int)'D')&&l_y<189)l_y++;
else if(GetAsyncKeyState((int)'A')&&l_y>11)l_y--;
else if(GetAsyncKeyState((int)'S')&&l_x<189)l_x++;
else if(GetAsyncKeyState((int)'W')&&l_x>11)l_x--;
}
int monator(int see)
{
while(1)
{
basic.gt(0,0);
for(int m_x=l_x-10,x=0;m_x<=l_x+10;m_x++,x++)
{
for(int m_y=l_y-10,y=0;m_y<=l_y+10;m_y++,y++)
{
if(m.map.m[1][m_x][m_y]==1)
{
if(m.map.a[see][m_x][m_y]) basic.color(170);
else basic.color(79);
}
else basic.color(0);
printf(" ");
}
printf("\n");
}
basic.color(7) ;
printf("x-%i y-%i E 退出 ",yy,xx);
mover();
if(GetAsyncKeyState((int)'E'))break;
}
}
int message_clean()
{
for(int x=1;x<=199;x++)
{
for(int y=1;y<=199;y++)
{
for(int z=0;z<=5;z++)
m.map.a[z][x][y]=false;
}
}
}
int game()
{
CreateThread(NULL,0,trafic_working,NULL,0,NULL);
CreateThread(NULL,0,making_building,NULL,0,NULL);
int doing=0;//0无操作 1放置公路 2摧毁建筑物
while(1)
{
out_m();
mouse.mouse();
if(mouse.y<=21&&mouse.x<=21*2)yy=(mouse.x/2)+l_y-10,xx=mouse.y+l_x-10;
mover();
if(GetAsyncKeyState((int)'P')) doing=1;
else if(GetAsyncKeyState((int)'L')) doing=2;
else if(GetAsyncKeyState((int)'Q')) doing=0;
else if(GetAsyncKeyState((int)'O')) look_do();
else if(GetAsyncKeyState((int)'U'))
{
while(1)
{
basic.cls();
choose.about_things="null",choose.title="查看网",choose.whats[1]="取消",choose.whats[2]="电力网",choose.whats[3]="水力网";
int a=choose.ai_choose();
a--;
if(a>=1) monator(a);
else break;
basic.cls();
}
}
else if(GetAsyncKeyState((int)'I'))
{
if(m.map.m[1][xx][yy]==0)
{
int arror=0;
if(m.map.m[1][xx+1][yy]==1)arror++;
if(m.map.m[1][xx-1][yy]==1)arror++;
if(m.map.m[1][xx][yy+1]==1)arror++;
if(m.map.m[1][xx][yy-1]==1)arror++;
if(arror>=1)make_do();
else MessageBox(0,"请在公路旁建造建筑物","提示",MB_OK);
}
else MessageBox(0,"您不能在其它建筑物/公路上建造建筑物","提示",MB_OK);
}
if(KEY_DOWN(VK_LBUTTON))
{
if(doing==1&&m.map.m[1][xx][yy]==0)m.map.m[1][xx][yy]=1;
else if(doing==2&&m.map.m[1][xx][yy]!=0)
{
m.map.m[1][xx][yy]=0;
message_clean();
}
else
{
string what="这个建筑物缺少:\n",why="废弃的建筑物-"+m.building.building_name[m.map.m[1][xx][yy]]+"-废弃原因";
if(m.map.m[1][xx][yy]<=2&&m.map.m[2][xx][yy]==4)
{
if(!find_street(1,xx,yy,false))what=what+"·没有公路网连接\n";
else
{
if(!home_check(1,xx,yy)) what=what+"·没有电力网连接\n";
if(!home_check(2,xx,yy)) what=what+"·没有水力网连接\n";
}
MessageBox(0,what.c_str(),why.c_str(),MB_OK);
}
}
}
}
}
int main()
{
system("mode con cols=150 lines=40");
printf("loading...");
m.building.start_game();
HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE);
DWORD mode;
GetConsoleMode(hStdin, &mode);
mode &= ~ENABLE_QUICK_EDIT_MODE; //移除快速编辑模式
mode &= ~ENABLE_INSERT_MODE; //移除插入模式
mode &= ~ENABLE_MOUSE_INPUT;
SetConsoleMode(hStdin, mode);
CONSOLE_CURSOR_INFO cursor_info={1,0};
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);
basic.cls() ;
system("title 城市之光3"); basic.color(15); basic.gt(3,6);printf("made by heveral(白.)");basic.wait(500);basic.cls();mouse.get_real_mouse();
while(1)
{
choose.about_things="开始界面选择",choose.title="城市之光3",choose.whats[1]="开始游戏", choose.whats[2]="打开金鹏游戏官网", choose.whats[3]="关闭游戏";
short a=choose.ai_choose();
if(a==1)game();
else if(a==2)system("start http://jinpeng-game.ys168.com/");
else if(a==3) break;
}
}
V1.0.2.1092(更新:2021.11.14)
更新内容:新增电力和水力系统.
#include<bits/stdc++.h>
#include<ctime>
#include<windows.h>
#include<stdio.h>
#include<conio.h>
#include<iostream>
#include<cstdio>
#include<time.h>
#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0)
CONSOLE_FONT_INFO consoleCurrentFont;
using namespace std;
long long money=100000,people=0,light=3;
int l_x=100,l_y=100,xx=100,yy=100;
string b_n[11]={};
int b_n_t[11]={},b_num[11]={},b_p[11]={},b_where[11][3]={},b_work=0;
struct
{
void color(int all){SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),all);}
void wait(int all){Sleep(all);}
void cls(){system("cls");}
void b(short hz,double time){Beep(hz,time);}
void gt(int x,int y)
{
COORD coord;
coord.X=y;//Here, the order is reversed, otherwise, the output pointer is moved to Y row and X column
coord.Y=x;
HANDLE a=GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(a,coord);
}
}basic;
struct
{
struct
{
short m[5][200][200]={};
bool a[5][200][200]={};
double p[200][200]={};
}map;
struct
{
string photo[50][5]={
{"金","金","金","金","金"}, //0
{"│ ","--","□","◎"/*信号灯-绿*/,"◎"/*信号灯-红*/},
{"■","■","■","■","错"},
{"工","工","工","工","错"},
{"◆","◆","◆","◆","错"},
{"●","●","●","●","错"},//5
{"●","●","●","●","错"},
};
short color[50][5]={
{170,170,170,170,170}, //0
{143,143,143,130,132},
{167,165,164,166,79},
{143,143,143,143,79},
{167,165,164,166,79},
{161,161,161,161,79},//5
{175,175,175,175,79},
{175,175,175,175,79},
};
}library;
struct
{
string building_name[100]={};
short building_in_people[100]={};
short need_money[100]={};
short need_time[100]={};//秒
int new_building(int number,string building_name_,short many_people,short need_money_,short build_need_time)
{
building_in_people[number]=many_people,building_name[number]=building_name_,need_money[number]=need_money_,need_time[number]=build_need_time;
}
int start_game()
{
new_building(0,"荒地",0,0,0);
new_building(1,"公路",0,0,0);
new_building(2,"住宅",10,5000,20);
new_building(3,"工地",0,0,0);
new_building(4,"公寓",20,9000,40);
new_building(5,"供水站",0,1000,60);
new_building(6,"发电站",0,1000,60);
}
std::string get_name(int number)
{
string a=building_name[number]+" 价格:"+to_string(need_money[number]) +" 所需时间:"+to_string(need_time[number])+"秒";
if(building_in_people[number]!=0)a=a+" 增加人口:"+to_string(building_in_people[number])+" 需要一些基础设施,如:供水站,发电站";
return a;
}
}building;
}m;
int o_check(int number,int x,int y)
{
basic.cls();
b_work=1;
basic.color(15) ;
printf("正在联系光城建设五局.\n");
basic.wait(100) ;
printf("正在询问对方能否承包%s项目.\n",m.building.building_name[number].c_str());
basic.wait(100) ;
printf("对方正在研讨承包%s项目的问题.\n",m.building.building_name[number].c_str());
basic.wait(100) ;
if(money<=m.building.need_money[number]+1)
{
printf("对方拒绝承包%s项目\n原因:市财政局无法支付其承包费用\n",m.building.building_name[number].c_str() );
system("pause") ;
}
else
{
bool ok=true;
for(int i=0;i<=10;i++)
{
if(b_n[i]=="")
{
ok=false;
m.map.m [1][xx][yy]=3;
printf("对方接受承包%s项目\n市财政局已经对光城建设五局支付了此项目的费用%i元\n",m.building.building_name[number].c_str(),m.building.need_money[number]);
system("pause") ;
b_n[i]=m.building.building_name[number],b_where[i][1]=x,b_where[i][2]=y,b_n_t[i]=m.building.need_time[number],b_num[i]=number,money=money-m.building.need_money[number],b_p[i]=m.building.building_in_people[number];
break;
}
}
if(ok)
{
printf("对方拒绝承包%s项目\n原因:对方工程设施不足,无法承包此项目\n",m.building.building_name[number].c_str());
system("pause") ;
}
}
b_work=0;
basic.cls();
}//*/
DWORD WINAPI making_building(LPVOID lpParamter)
{
while(1)
{
if(light==3)light=4;
else light=3;
for(int c=0;c<=5;c++)
{
if(b_work!=0)continue;
Sleep(1000);
for(int i=0;i<=10;i++)
{
if(b_n[i]!="")
{
if(b_n_t[i]<=0)
{
b_n[i]="",b_n_t[i]=0;
m.map.m[1][b_where[i][1]][b_where[i][2]]=b_num[i],m.map.m[2][b_where[i][1]][b_where[i][2]]=rand()%3,people=people+b_p[i];
b_where[i][1]=0,b_where[i][2]=0,b_num[i]=0,b_p[i]=0;
}
else b_n_t[i]--;
}
}
}
}
}
//bool find start
bool find_street(int wich,int x,int y,bool t_f) //电力,水...扩散函数
{
short i=wich,arrow=0;
if(m.map.m[1][x+1][y]==1)m.map.a[i][x+1][y]=t_f,arrow++;
if(m.map.m[1][x-1][y]==1)m.map.a[i][x-1][y]=t_f,arrow++;
if(m.map.m[1][x][y+1]==1)m.map.a[i][x][y+1]=t_f,arrow++;
if(m.map.m[1][x][y-1]==1)m.map.a[i][x][y-1]=t_f,arrow++;
bool z=false;
if(arrow>=1)z=true;//附近有公路返回真,反之返回假
return z;
}
bool home_check(int wich,int x,int y)// 居民获取水力电力...函数
{
bool z=false;
short i=wich,arrow=0;
if(m.map.m[1][x+1][y]==1&&m.map.a[i][x+1][y]) arrow++;
if(m.map.m[1][x-1][y]==1&&m.map.a[i][x-1][y]) arrow++;
if(m.map.m[1][x][y+1]==1&&m.map.a[i][x][y+1]) arrow++;
if(m.map.m[1][x][y-1]==1&&m.map.a[i][x][y-1]) arrow++;
if(arrow>=1)z=true;//附近的公路链接水利电力...则返回真,反之返回假
return z;
}
//bool find end
DWORD WINAPI trafic_working(LPVOID lpParamter)
{
while(1)
{
for(int x=1;x<=199;x++)
{
for(int y=1;y<=199;y++)
{
if(m.map.m[1][x][y]==1)
{
for(int i=0;i<=4;i++)
{
if(m.map.a[i][x][y]) find_street(i,x,y,true);
}
if((m.map.m[1][x+1][y]==1||m.map.m[1][x-1][y]==1)&&(m.map.m[1][x][y+1]!=1&&m.map.m[1][x][y-1]!=1))m.map.m[2][x][y]=0;
else if((m.map.m[1][x][y+1]==1||m.map.m[1][x][y-1]==1)&&(m.map.m[1][x+1][y]!=1&&m.map.m[1][x-1][y]!=1))m.map.m[2][x][y]=1;//else if((m.map.m[1][x][y+1]==1&&m.map.m[1][x+1][y]==1)||(m.map.m[1][x][y+1]==1&&m.map.m[1][x-1][y]==1)||(m.map.m[1][x][y-1]==1&&m.map.m[1][x+1][y]==1)||(m.map.m[1][x][y-1]==1&&m.map.m[1][x-1][y]==1))m.map.m[2][x][y]=2;
else
{
int arror=0;
if(m.map.m[1][x+1][y]==1)arror++;
if(m.map.m[1][x-1][y]==1)arror++;
if(m.map.m[1][x][y+1]==1)arror++;
if(m.map.m[1][x][y-1]==1)arror++;
if(arror>=3)m.map.m[2][x][y]=light;
else m.map.m[2][x][y]=2;
}
}
else if(m.map.m[1][x][y]==2||m.map.m[1][x][y]==4)
{
if(home_check(1,x,y)&&home_check(2,x,y))
{
m.map.m[2][x][y]=1;
}
else
{
m.map.m[2][x][y]=4;
}
}
else if(m.map.m[1][x][y]==5||m.map.m[1][x][y]==6)
{
if(find_street(m.map.m[1][x][y]-4,x,y,true))m.map.m[2][x][y]=1;
else m.map.m[2][x][y]=4;
}
}
}
}
}
struct
{
LONG x=-1,y=-1,lest_x=-1,lest_y=-1;
double real_x,real_y;
POINT pt= {0,0};
CONSOLE_FONT_INFO l_z;
HANDLE hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_FONT_INFO x_z;
int do_=1;
void get_real_mouse()
{
basic.cls();printf("鼠标校正,请用鼠标点击右下角的\"Hi\"");
int x=rand()%10+35,y=rand()%10+75;
basic.gt(x,y);printf("Hi");
while(1)
{
GetCursorPos(&pt); //获取鼠标当前位置
ScreenToClient(FindWindow("ConsoleWindowClass", NULL), &pt);
if(KEY_DOWN(VK_LBUTTON)&&MessageBox(0,"您确定您点击了\"Hi\"吗?\n如果您没有点击此点可能会导致程序错乱.","鼠标校正",4)==IDYES)
{
real_x=pt.x/y,real_y=pt.y/x;
break;
}
}
basic.wait(500); basic.cls();
}
void mouse()
{
GetCurrentConsoleFont(hOutput, FALSE, &x_z);
if(do_==1)do_=0;
else if((do_==0)&&(l_z.dwFontSize.X!=x_z.dwFontSize.X||l_z.dwFontSize.Y!=x_z.dwFontSize.Y))
{
do_=1;
basic.color(15) ;
basic.cls();
printf("检测到您在修改字体!\n请您修改完字体后按任意键/点击进行强制鼠标校正");
while(1)
{
if(_kbhit()||KEY_DOWN(VK_LBUTTON)||KEY_DOWN(VK_RBUTTON))break;
}
basic.cls();
get_real_mouse();
}
l_z.dwFontSize.X=x_z.dwFontSize.X,l_z.dwFontSize.Y=x_z.dwFontSize.Y;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),15);
GetCursorPos(&pt); //获取鼠标当前位置
ScreenToClient(FindWindow("ConsoleWindowClass", NULL), &pt);
pt.y=pt.y/real_y,pt.x=(pt.x/real_x);
lest_y=y,lest_x=x;
x=pt.x,y=pt.y;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),7);
}
}mouse;
struct
{//移动库
int num_get()
{
int num=0,ans=1,fu=0;
int life[10]={};
short now_key,key,lk;
for(int i=1;i<=5;i++)
{
now_key=(int)getch()-48;
key=now_key+48;
if(key==13)break;
else if(now_key==-40)
{
if(lk!=49)
{
i=0,ans=0,num=0,fu=0;
for(int q=0;q<=9;q++)life[q]=0;
printf("(重新输入)");
}
}
else if(key==45){ fu=1,i--;printf("(此数已经设定为负数)");}
else if(now_key>9||now_key<0)i--;
else printf("%i",now_key);
lk=now_key;
life[i]=now_key,ans++;
}
int d=1;
//for(int i=1;i<=ans;i++)d=d*10;
for(int i=ans;i>=1;i--)
{
num=num+life[i]*d;
d=d*10;
}
if(fu==1)num=num*-1;
return num/10;
}
string whats[10]={},title="",about_things="null";
int ai_choose(void)
{
basic.cls();
short how_long=0,wait_=1;
for(int i=1;i<=9;i++)
{
if(whats[i]!="")how_long++;
else break;
}
int choose;
while(1)
{
choose=-1;
basic.gt(1,0);
mouse.mouse();
if(mouse.y==1)choose=1;
printf("%s",title.c_str());
if(choose==1){basic.color(16+7);printf("(?)\n");}
else {basic.color(7);printf(" \n");}
short x=1;
for(int i=1;i<=how_long;i++)
{
x++;
if(mouse.y==x)choose=x;
if(choose==i+1)basic.color(16*15);
else basic.color(7);
printf("%s\n",whats[i].c_str());
}
basic.color(0) ;
printf("\n金鹏游戏") ;
if(wait_==1){basic.wait(500);wait_=0;}
if(KEY_DOWN(VK_LBUTTON)&&choose>1)break;
else if(KEY_DOWN(VK_LBUTTON)&&choose==1)
{
string about="关于"+title;
if(about!="null")MessageBox(0,about_things.c_str(),about.c_str(),MB_OK);
}
}
for(int i=1;i<=9;i++)whats[i]="";
title="",about_things="null";
basic.cls();
return choose-1;
}
}choose;
int make_do()
{
basic.cls();
while(1)
{
choose.about_things="null",choose.title="建造建筑物",choose.whats[1]="取消", choose.whats[2]="住房", choose.whats[3]="基础建设";
short c=choose.ai_choose();
basic.cls();
if(c==1)break;
else if(c==2)
{
choose.about_things="null",choose.title="住房",choose.whats[1]="取消", choose.whats[2]=m.building.get_name(2) , choose.whats[3]=m.building.get_name(4);
c=choose.ai_choose();
if(c==2) o_check(2,xx,yy);
else if(c==3) o_check(4,xx,yy);
if(c!=1)break;
}
else if(c==3)
{
choose.about_things="null",choose.title="基础建设",choose.whats[1]="取消", choose.whats[2]=m.building.get_name(5), choose.whats[3]=m.building.get_name(6);
c=choose.ai_choose();
if(c==2) o_check(5,xx,yy);
else if(c==3) o_check(6,xx,yy);
if(c!=1)break;//*/
}
basic.cls();
}
basic.cls();
}
int look_do()
{
basic.cls();
while(1)
{
basic.gt(0,0) ;
printf("工程进度 E 返回主界面\n");
for(int i=0,w=0;i<=10;i++)
{
if(b_n[i]!="")
{
w++;
printf("第%i个工程:%s 坐标(%i,%i)剩余完工时间%i秒 \n",w,b_n[i].c_str(),b_where[i][1],b_where[i][2],b_n_t[i]);
}
}
for(int i=0;i<=4;i++) printf(" \n") ;
if(GetAsyncKeyState((int)'E'))break;
}
basic.cls();
}
int out_m()
{
basic.gt(0,0) ;
short color=0;
for(int m_x=l_x-10,x=0;m_x<=l_x+10;m_x++,x++)
{
for(int m_y=l_y-10,y=0;m_y<=l_y+10;m_y++,y++)
{
if(m.library.color[m.map.m[1][m_x][m_y]][m.map.m[2][m_x][m_y]]!=color)
{
basic.color(m.library.color[m.map.m[1][m_x][m_y]][m.map.m[2][m_x][m_y]]);
color=m.library.color[m.map.m[1][m_x][m_y]][m.map.m[2][m_x][m_y]];
}
printf("%s",m.library.photo[m.map.m[1][m_x][m_y]][m.map.m[2][m_x][m_y]].c_str() );
}
printf("\n");
}
basic.color(15) ;
printf("x-%i,y-%i,see_x-%i,see_y-%i \n城市人口:%lld 市财政局还有%lld元 \n提示:AWSD 移动视角 Q 取消当前操作\nP 放置公路 L 摧毁建筑物/公路 O 查看建造进度\nI 在当前光标处修建建筑物",yy,xx,l_x,l_y,people,money);
}
int message_clean()
{
for(int x=1;x<=199;x++)
{
for(int y=1;y<=199;y++)
{
for(int z=0;z<=5;z++)
m.map.a[z][x][y]=false;
}
}
}
int game()
{
CreateThread(NULL,0,trafic_working,NULL,0,NULL);
CreateThread(NULL,0,making_building,NULL,0,NULL);
int doing=0;//0无操作 1放置公路 2摧毁建筑物
while(1)
{
out_m();
mouse.mouse();
if(mouse.y<=21&&mouse.x<=21*2)yy=(mouse.x/2)+l_y-10,xx=mouse.y+l_x-10;
if(GetAsyncKeyState((int)'D')&&l_y<189)l_y++;
else if(GetAsyncKeyState((int)'A')&&l_y>11)l_y--;
else if(GetAsyncKeyState((int)'S')&&l_x<189)l_x++;
else if(GetAsyncKeyState((int)'W')&&l_x>11)l_x--;
else if(GetAsyncKeyState((int)'P')) doing=1;
else if(GetAsyncKeyState((int)'L')) doing=2;
else if(GetAsyncKeyState((int)'Q')) doing=0;
else if(GetAsyncKeyState((int)'O')) look_do();
else if(GetAsyncKeyState((int)'I'))
{
if(m.map.m[1][xx][yy]==0)
{
int arror=0;
if(m.map.m[1][xx+1][yy]==1)arror++;
if(m.map.m[1][xx-1][yy]==1)arror++;
if(m.map.m[1][xx][yy+1]==1)arror++;
if(m.map.m[1][xx][yy-1]==1)arror++;
if(arror>=1)make_do();
else MessageBox(0,"请在公路旁建造建筑物","提示",MB_OK);
}
else MessageBox(0,"您不能在其它建筑物/公路上建造建筑物","提示",MB_OK);
}
if(KEY_DOWN(VK_LBUTTON))
{
if(doing==1&&m.map.m[1][xx][yy]==0)m.map.m[1][xx][yy]=1;
else if(doing==2&&m.map.m[1][xx][yy]!=0)
{
m.map.m[1][xx][yy]=0;
message_clean();
}
else
{
string what="这个建筑物缺少:\n",why="废弃的建筑物-"+m.building.building_name[m.map.m[1][xx][yy]]+"-废弃原因";
if(m.map.m[1][xx][yy]<=2&&m.map.m[2][xx][yy]==4)
{
if(!find_street(1,xx,yy,false))what=what+"·没有公路网连接\n";
else
{
if(!home_check(1,xx,yy)) what=what+"·没有电力网连接\n";
if(!home_check(2,xx,yy)) what=what+"·没有水力网连接\n";
}
MessageBox(0,what.c_str(),why.c_str(),MB_OK);
}
}
}
}
}
int main()
{
system("mode con cols=150 lines=40");
printf("loading...");
m.building.start_game();
HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE);
DWORD mode;
GetConsoleMode(hStdin, &mode);
mode &= ~ENABLE_QUICK_EDIT_MODE; //移除快速编辑模式
mode &= ~ENABLE_INSERT_MODE; //移除插入模式
mode &= ~ENABLE_MOUSE_INPUT;
SetConsoleMode(hStdin, mode);
CONSOLE_CURSOR_INFO cursor_info={1,0};
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);
basic.cls() ;
system("title 城市之光3"); basic.color(15); basic.gt(3,6);printf("made by heveral(白.)");basic.wait(500);basic.cls();mouse.get_real_mouse();
while(1)
{
choose.about_things="开始界面选择",choose.title="城市之光3",choose.whats[1]="开始游戏", choose.whats[2]="打开金鹏游戏官网", choose.whats[3]="关闭游戏";
short a=choose.ai_choose();
if(a==1)game();
else if(a==2)system("start http://jinpeng-game.ys168.com/");
else if(a==3) break;
}
}
V1.0.1.890 (更新:2021.11.10)
#include<bits/stdc++.h>
#include<ctime>
#include<windows.h>
#include<stdio.h>
#include<conio.h>
#include<iostream>
#include<cstdio>
#include<time.h>
#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0)
CONSOLE_FONT_INFO consoleCurrentFont;
using namespace std;
long long money=100000,people=0,light=3;
int l_x=100,l_y=100,xx=100,yy=100;
string b_n[11]={};
int b_n_t[11]={},b_num[11]={},b_p[11]={},b_where[11][3]={},b_work=0;
struct
{
void color(int all){SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),all);}
void wait(int all){Sleep(all);}
void cls(){system("cls");}
void b(short hz,double time){Beep(hz,time);}
void gt(int x,int y)
{
COORD coord;
coord.X=y;//Here, the order is reversed, otherwise, the output pointer is moved to Y row and X column
coord.Y=x;
HANDLE a=GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(a,coord);
}
}basic;
struct
{
struct
{
short m[5][200][200]={};
bool a[5][200][200]={};
double p[200][200]={};
}map;
struct
{
string photo[50][5]={
{"金","金","金","金","金"}, //0
{"│ ","--","□","◎"/*信号灯-绿*/,"◎"/*信号灯-红*/},
{"■","■","■","■","错"},
{"工","工","工","工","错"},
{"◆","◆","◆","◆","错"},
{"●","●","●","●","错"},//5
{"●","●","●","●","错"},
};
short color[50][5]={
{170,170,170,170,170}, //0
{143,143,143,130,132},
{167,165,164,166,79},
{143,143,143,143,79},
{167,165,164,166,79},
{161,161,161,161,79},//5
{175,175,175,175,79},
{175,175,175,175,79},
};
}library;
struct
{
}tools;
}m;
int o_check(int need_money,int out,int x,int y,int need_time,int need_people,string name)
{
basic.cls();
b_work=1;
basic.color(15) ;
printf("正在联系光城建设五局.\n");
basic.wait(100) ;
printf("正在询问对方能否承包%s项目.\n",name.c_str());
basic.wait(100) ;
printf("对方正在研讨承包%s项目的问题.\n",name.c_str());
basic.wait(100) ;
if(money<=need_money+1)
{
printf("对方拒绝承包%s项目\n原因:市财政局无法支付其承包费用\n",name.c_str());
system("pause") ;
}
else
{
bool ok=true;
for(int i=0;i<=10;i++)
{
if(b_n[i]=="")
{
ok=false;
m.map.m [1][xx][yy]=3;
printf("对方接受承包%s项目\n市财政局已经对光城建设五局支付了此项目的费用%i元\n",name.c_str(),need_money);
system("pause") ;
b_n[i]=name,b_where[i][1]=x,b_where[i][2]=y,b_n_t[i]=need_time,b_num[i]=out,money=money-need_money,b_p[i]=need_people;
break;
}
}
if(ok)
{
printf("对方拒绝承包%s项目\n原因:对方工程设施不足,无法承包此项目\n",name.c_str());
system("pause") ;
}
}
b_work=0;
basic.cls();
}//*/
DWORD WINAPI making_building(LPVOID lpParamter)
{
while(1)
{
if(light==3)light=4;
else light=3;
for(int c=0;c<=5;c++)
{
if(b_work!=0)continue;
Sleep(1000);
for(int i=0;i<=10;i++)
{
if(b_n[i]!="")
{
if(b_n_t[i]<=0)
{
b_n[i]="",b_n_t[i]=0;
m.map.m[1][b_where[i][1]][b_where[i][2]]=b_num[i],m.map.m[2][b_where[i][1]][b_where[i][2]]=rand()%3,people=people+b_p[i];
b_where[i][1]=0,b_where[i][2]=0,b_num[i]=0,b_p[i]=0;
}
else b_n_t[i]--;
}
}
}
}
}
bool find_street(int wich,int x,int y,bool t_f) //扩散函数
{
short i=wich,arrow=0;
if(m.map.m[1][x+1][y]==1)m.map.a[i][x+1][y]=t_f,arrow++;
if(m.map.m[1][x-1][y]==1)m.map.a[i][x-1][y]=t_f,arrow++;
if(m.map.m[1][x][y+1]==1)m.map.a[i][x][y+1]=t_f,arrow++;
if(m.map.m[1][x][y-1]==1)m.map.a[i][x][y-1]=t_f,arrow++;
bool z=false;
if(arrow>=1)z=true;//附近有公路返回真,反之返回假
return z;
}
DWORD WINAPI trafic_working(LPVOID lpParamter)
{
while(1)
{
for(int x=1;x<=198;x++)
{
for(int y=1;y<=198;y++)
{
if(m.map.m[1][x][y]==1)
{
for(int i=0;i<=4;i++)
{
if(m.map.a[i][x][y]) find_street(i,x,y,true);
}
if((m.map.m[1][x+1][y]==1||m.map.m[1][x-1][y]==1)&&(m.map.m[1][x][y+1]!=1&&m.map.m[1][x][y-1]!=1))m.map.m[2][x][y]=0;
else if((m.map.m[1][x][y+1]==1||m.map.m[1][x][y-1]==1)&&(m.map.m[1][x+1][y]!=1&&m.map.m[1][x-1][y]!=1))m.map.m[2][x][y]=1;//else if((m.map.m[1][x][y+1]==1&&m.map.m[1][x+1][y]==1)||(m.map.m[1][x][y+1]==1&&m.map.m[1][x-1][y]==1)||(m.map.m[1][x][y-1]==1&&m.map.m[1][x+1][y]==1)||(m.map.m[1][x][y-1]==1&&m.map.m[1][x-1][y]==1))m.map.m[2][x][y]=2;
else
{
int arror=0;
if(m.map.m[1][x+1][y]==1)arror++;
if(m.map.m[1][x-1][y]==1)arror++;
if(m.map.m[1][x][y+1]==1)arror++;
if(m.map.m[1][x][y-1]==1)arror++;
if(arror>=3)m.map.m[2][x][y]=light;
else m.map.m[2][x][y]=2;
}
}
else if(m.map.m[1][x][y]==5||m.map.m[1][x][y]==6)
{
if(find_street(m.map.m[1][x][y]-4,x,y,true))m.map.m[2][x][y]=1;
else m.map.m[2][x][y]=4;
}
}
}
}
}
struct
{
LONG x=-1,y=-1,lest_x=-1,lest_y=-1;
double real_x,real_y;
POINT pt= {0,0};
CONSOLE_FONT_INFO l_z;
HANDLE hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_FONT_INFO x_z;
int do_=1;
void get_real_mouse()
{
basic.cls();printf("鼠标校正,请用鼠标点击右下角的\"Hi\"");
int x=rand()%10+35,y=rand()%10+75;
basic.gt(x,y);printf("Hi");
while(1)
{
GetCursorPos(&pt); //获取鼠标当前位置
ScreenToClient(FindWindow("ConsoleWindowClass", NULL), &pt);
if(KEY_DOWN(VK_LBUTTON)&&MessageBox(0,"您确定您点击了\"Hi\"吗?\n如果您没有点击此点可能会导致程序错乱.","鼠标校正",4)==IDYES)
{
real_x=pt.x/y,real_y=pt.y/x;
break;
}
}
basic.wait(500); basic.cls();
}
void mouse()
{
GetCurrentConsoleFont(hOutput, FALSE, &x_z);
if(do_==1)do_=0;
else if((do_==0)&&(l_z.dwFontSize.X!=x_z.dwFontSize.X||l_z.dwFontSize.Y!=x_z.dwFontSize.Y))
{
do_=1;
basic.color(15) ;
basic.cls();
printf("检测到您在修改字体!\n请您修改完字体后按任意键进行强制鼠标校正");getch();
basic.cls();
get_real_mouse();
}
l_z.dwFontSize.X=x_z.dwFontSize.X,l_z.dwFontSize.Y=x_z.dwFontSize.Y;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),15);
GetCursorPos(&pt); //获取鼠标当前位置
ScreenToClient(FindWindow("ConsoleWindowClass", NULL), &pt);
pt.y=pt.y/real_y,pt.x=(pt.x/real_x);
lest_y=y,lest_x=x;
x=pt.x,y=pt.y;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),7);
}
}mouse;
struct
{//移动库
int num_get()
{
int num=0,ans=1,fu=0;
int life[10]={};
short now_key,key,lk;
for(int i=1;i<=5;i++)
{
now_key=(int)getch()-48;
key=now_key+48;
if(key==13)break;
else if(now_key==-40)
{
if(lk!=49)
{
i=0,ans=0,num=0,fu=0;
for(int q=0;q<=9;q++)life[q]=0;
printf("(重新输入)");
}
}
else if(key==45){ fu=1,i--;printf("(此数已经设定为负数)");}
else if(now_key>9||now_key<0)i--;
else printf("%i",now_key);
lk=now_key;
life[i]=now_key,ans++;
}
int d=1;
//for(int i=1;i<=ans;i++)d=d*10;
for(int i=ans;i>=1;i--)
{
num=num+life[i]*d;
d=d*10;
}
if(fu==1)num=num*-1;
return num/10;
}
string whats[10]={},title="",about_things="null";
int ai_choose(void)
{
basic.cls();
short how_long=0,wait_=1;
for(int i=1;i<=9;i++)
{
if(whats[i]!="")how_long++;
else break;
}
int choose;
while(1)
{
choose=-1;
basic.gt(1,0);
mouse.mouse();
if(mouse.y==1)choose=1;
printf("%s",title.c_str());
if(choose==1){basic.color(16+7);printf("(?)\n");}
else {basic.color(7);printf(" \n");}
short x=1;
for(int i=1;i<=how_long;i++)
{
x++;
if(mouse.y==x)choose=x;
if(choose==i+1)basic.color(16*15);
else basic.color(7);
printf("%s\n",whats[i].c_str());
}
basic.color(0) ;
printf("\n金鹏游戏") ;
if(wait_==1){basic.wait(500);wait_=0;}
if(KEY_DOWN(VK_LBUTTON)&&choose>1)break;
else if(KEY_DOWN(VK_LBUTTON)&&choose==1)
{
string about="关于"+title;
if(about!="null")MessageBox(0,about_things.c_str(),about.c_str(),MB_OK);
}
}
for(int i=1;i<=9;i++)whats[i]="";
title="",about_things="null";
basic.cls();
return choose-1;
}
}choose;
int make_do()
{
basic.cls();
while(1)
{
choose.about_things="null",choose.title="建造建筑物",choose.whats[1]="取消", choose.whats[2]="住房", choose.whats[3]="基础建设";
short c=choose.ai_choose();
basic.cls();
if(c==1)break;
else if(c==2)
{
choose.about_things="null",choose.title="住房",choose.whats[1]="取消", choose.whats[2]="住宅 1000元 30秒 10人", choose.whats[3]="公寓 5000元 60秒 50人";
c=choose.ai_choose();
if(c==2) o_check(1000,2,xx,yy,63,10,"住宅");
else if(c==3) o_check(5000,4,xx,yy,60,50,"公寓");
if(c!=1)break;
}
else if(c==3)
{
choose.about_things="null",choose.title="基础建设",choose.whats[1]="取消", choose.whats[2]="供水站 1000元 65秒 水力+10", choose.whats[3]="发电站 1000元 65秒 电力+10";
c=choose.ai_choose();
if(c==2) o_check(1000,5,xx,yy,65,0,"供水站");
else if(c==3) o_check(2000,6,xx,yy,65,0,"发电站");
if(c!=1)break;//*/
}
basic.cls();
}
basic.cls();
}
int look_do()
{
basic.cls();
while(1)
{
basic.gt(0,0) ;
printf("工程进度 E 返回主界面\n");
for(int i=0,w=0;i<=10;i++)
{
if(b_n[i]!="")
{
w++;
printf("第%i个工程:%s 坐标(%i,%i)剩余完工时间%i秒 \n",w,b_n[i].c_str(),b_where[i][1],b_where[i][2],b_n_t[i]);
}
}
for(int i=0;i<=4;i++) printf(" \n") ;
if(GetAsyncKeyState((int)'E'))break;
}
basic.cls();
}
int out_m()
{
basic.gt(0,0) ;
short color=0;
for(int m_x=l_x-10,x=0;m_x<=l_x+10;m_x++,x++)
{
for(int m_y=l_y-10,y=0;m_y<=l_y+10;m_y++,y++)
{
if(m.library.color[m.map.m[1][m_x][m_y]][m.map.m[2][m_x][m_y]]!=color)
{
basic.color(m.library.color[m.map.m[1][m_x][m_y]][m.map.m[2][m_x][m_y]]);
color=m.library.color[m.map.m[1][m_x][m_y]][m.map.m[2][m_x][m_y]];
}
printf("%s",m.library.photo[m.map.m[1][m_x][m_y]][m.map.m[2][m_x][m_y]].c_str() );
}
printf("\n");
}
basic.color(15) ;
printf("x-%i,y-%i,see_x-%i,see_y-%i \n城市人口:%lld 市财政局还有%lld元 \n提示:AWSD 移动视角 Q 取消当前操作\nP 放置公路 L 摧毁建筑物/公路 O 查看建造进度\nI 在当前光标处修建建筑物",yy,xx,l_x,l_y,people,money);
}
int game()
{
CreateThread(NULL,0,trafic_working,NULL,0,NULL);
CreateThread(NULL,0,making_building,NULL,0,NULL);
int doing=0;//0无操作 1放置公路 2摧毁建筑物
while(1)
{
out_m();
mouse.mouse();
if(mouse.y<=21&&mouse.x<=21*2)yy=(mouse.x/2)+l_y-10,xx=mouse.y+l_x-10;
if(GetAsyncKeyState((int)'D')&&l_y<189)l_y++;
else if(GetAsyncKeyState((int)'A')&&l_y>11)l_y--;
else if(GetAsyncKeyState((int)'S')&&l_x<189)l_x++;
else if(GetAsyncKeyState((int)'W')&&l_x>11)l_x--;
else if(GetAsyncKeyState((int)'P')) doing=1;
else if(GetAsyncKeyState((int)'L')) doing=2;
else if(GetAsyncKeyState((int)'Q')) doing=0;
else if(GetAsyncKeyState((int)'O')) look_do();
else if(GetAsyncKeyState((int)'I'))
{
if(m.map.m[1][xx][yy]==0)
{
int arror=0;
if(m.map.m[1][xx+1][yy]==1)arror++;
if(m.map.m[1][xx-1][yy]==1)arror++;
if(m.map.m[1][xx][yy+1]==1)arror++;
if(m.map.m[1][xx][yy-1]==1)arror++;
if(arror>=1)make_do();
else MessageBox(0,"请在公路旁建造建筑物","提示",MB_OK);
}
else MessageBox(0,"您不能在其它建筑物/公路上建造建筑物","提示",MB_OK);
}
if(KEY_DOWN(VK_LBUTTON))
{
if(doing==1&&m.map.m[1][xx][yy]==0)m.map.m[1][xx][yy]=1;
else if(doing==2)m.map.m[1][xx][yy]=0;
}
}
}
int main()
{
system("mode con cols=150 lines=40");
HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE);
DWORD mode;
GetConsoleMode(hStdin, &mode);
mode &= ~ENABLE_QUICK_EDIT_MODE; //移除快速编辑模式
mode &= ~ENABLE_INSERT_MODE; //移除插入模式
mode &= ~ENABLE_MOUSE_INPUT;
SetConsoleMode(hStdin, mode);
CONSOLE_CURSOR_INFO cursor_info={1,0};
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);
system("title 城市之光3"); basic.color(15); basic.gt(3,6);printf("made by heveral(白.)");basic.wait(500);basic.cls();mouse.get_real_mouse();
while(1)
{
choose.about_things="开始界面选择",choose.title="城市之光3",choose.whats[1]="开始游戏", choose.whats[2]="打开金鹏游戏官网", choose.whats[3]="关闭游戏";
short a=choose.ai_choose();
if(a==1)game();
else if(a==2)system("start http://jinpeng-game.ys168.com/");
else if(a==3) break;
}
}
V1.0.0.883
原创游戏-版权所有,侵权必究
免编译下载网址
www.jinpeng-game.ys168.com
//游戏仍在更新!
#include<bits/stdc++.h>
#include<ctime>
#include<windows.h>
#include<stdio.h>
#include<conio.h>
#include<iostream>
#include<cstdio>
#include<time.h>
#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0)
CONSOLE_FONT_INFO consoleCurrentFont;
using namespace std;
long long money=100000,people=0,light=3;
int l_x=100,l_y=100,xx=100,yy=100;
string b_n[11]={};
int b_n_t[11]={},b_num[11]={},b_p[11]={},b_where[11][3]={},b_work=0;
struct
{
void color(int all){SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),all);}
void wait(int all){Sleep(all);}
void cls(){system("cls");}
void b(short hz,double time){Beep(hz,time);}
void gt(int x,int y)
{
COORD coord;
coord.X=y;//Here, the order is reversed, otherwise, the output pointer is moved to Y row and X column
coord.Y=x;
HANDLE a=GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(a,coord);
}
}basic;
struct
{
struct
{
short m[5][200][200]={};
bool a[5][200][200]={};
double p[200][200]={};
}map;
struct
{
string photo[50][5]={
{"金","金","金","金","金"},
{"│ ","--","□","◎"/*信号灯-绿*/,"◎"/*信号灯-红*/},
{"■","■","■","■","■"},
{"工","工","工","工","工"},
{"◆","◆","◆","◆","◆"},
};
short color[50][5]={
{170,170,170,170,170},
{143,143,143,130,132},
{167,165,164,166,169},
{143,143,143,143,143},
{167,165,164,166,169},
};
}library;
struct
{
}tools;
}m;
int o_check(int need_money,int out,int x,int y,int need_time,int need_people,string name)
{
basic.cls();
b_work=1;
basic.color(15) ;
printf("正在联系光城建设五局.\n");
basic.wait(100) ;
printf("正在询问对方能否承包%s项目.\n",name.c_str());
basic.wait(100) ;
printf("对方正在研讨承包%s项目的问题.\n",name.c_str());
basic.wait(100) ;
if(money<=need_money+1)
{
printf("对方拒绝承包%s项目\n原因:市财政局无法支付其承包费用\n",name.c_str());
system("pause") ;
}
else
{
bool ok=true;
for(int i=0;i<=10;i++)
{
if(b_n[i]=="")
{
ok=false;
m.map.m [1][xx][yy]=3;
printf("对方接受承包%s项目\n市财政局已经对光城建设五局支付了此项目的费用%i元\n",name.c_str(),need_money);
system("pause") ;
b_n[i]=name,b_where[i][1]=x,b_where[i][2]=y,b_n_t[i]=need_time,b_num[i]=out,money=money-need_money,b_p[i]=need_people;
break;
}
}
if(ok)
{
printf("对方拒绝承包%s项目\n原因:对方工程设施不足,无法承包此项目\n",name.c_str());
system("pause") ;
}
}
b_work=0;
basic.cls();
}//*/
DWORD WINAPI making_building(LPVOID lpParamter)
{
while(1)
{
if(light==3)light=4;
else light=3;
for(int c=0;c<=5;c++)
{
if(b_work!=0)continue;
Sleep(1000);
for(int i=0;i<=10;i++)
{
if(b_n[i]!="")
{
if(b_n_t[i]<=0)
{
b_n[i]="",b_n_t[i]=0;
m.map.m[1][b_where[i][1]][b_where[i][2]]=b_num[i],m.map.m[2][b_where[i][1]][b_where[i][2]]=rand()%4+1,people=people+b_p[i];
b_where[i][1]=0,b_where[i][2]=0,b_num[i]=0,b_p[i]=0;
}
else b_n_t[i]--;
}
}
}
}
}
DWORD WINAPI trafic_working(LPVOID lpParamter)
{
while(1)
{
for(int x=1;x<=198;x++)
{
for(int y=1;y<=198;y++)
{
if(m.map.m[1][x][y]==1)
{
for(int i=0;i<=4;i++)
{
if(m.map.a[i][x][y])
{
if(m.map.m[i][x+1][y]==1)m.map.a[i][x+1][y]=true;
if(m.map.m[i][x-1][y]==1)m.map.a[i][x-1][y]=true;
if(m.map.m[i][x][y+1]==1)m.map.a[i][x][y+1]=true;
if(m.map.m[i][x][y-1]==1)m.map.a[i][x][y-1]=true;
}
}
if((m.map.m[1][x+1][y]==1||m.map.m[1][x-1][y]==1)&&(m.map.m[1][x][y+1]!=1&&m.map.m[1][x][y-1]!=1))m.map.m[2][x][y]=0;
else if((m.map.m[1][x][y+1]==1||m.map.m[1][x][y-1]==1)&&(m.map.m[1][x+1][y]!=1&&m.map.m[1][x-1][y]!=1))m.map.m[2][x][y]=1;//else if((m.map.m[1][x][y+1]==1&&m.map.m[1][x+1][y]==1)||(m.map.m[1][x][y+1]==1&&m.map.m[1][x-1][y]==1)||(m.map.m[1][x][y-1]==1&&m.map.m[1][x+1][y]==1)||(m.map.m[1][x][y-1]==1&&m.map.m[1][x-1][y]==1))m.map.m[2][x][y]=2;
else
{
int arror=0;
if(m.map.m[1][x+1][y]==1)arror++;
if(m.map.m[1][x-1][y]==1)arror++;
if(m.map.m[1][x][y+1]==1)arror++;
if(m.map.m[1][x][y-1]==1)arror++;
if(arror>=3)m.map.m[2][x][y]=light;
else m.map.m[2][x][y]=2;
}
}
}
}
}
}
struct
{
LONG x=-1,y=-1,lest_x=-1,lest_y=-1;
double real_x,real_y;
POINT pt= {0,0};
CONSOLE_FONT_INFO l_z;
HANDLE hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_FONT_INFO x_z;
int do_=1;
void get_real_mouse()
{
basic.cls();printf("鼠标校正,请用鼠标点击右下角的\"Hi\"");
int x=rand()%10+35,y=rand()%10+75;
basic.gt(x,y);printf("Hi");
while(1)
{
GetCursorPos(&pt); //获取鼠标当前位置
ScreenToClient(FindWindow("ConsoleWindowClass", NULL), &pt);
if(KEY_DOWN(VK_LBUTTON)&&MessageBox(0,"您确定您点击了\"Hi\"吗?\n如果您没有点击此点可能会导致程序错乱.","鼠标校正",4)==IDYES)
{
real_x=pt.x/y,real_y=pt.y/x;
break;
}
}
basic.wait(500); basic.cls();
}
void mouse()
{
GetCurrentConsoleFont(hOutput, FALSE, &x_z);
if(do_==1)do_=0;
else if((do_==0)&&(l_z.dwFontSize.X!=x_z.dwFontSize.X||l_z.dwFontSize.Y!=x_z.dwFontSize.Y))
{
do_=1;
basic.color(15) ;
basic.cls();
printf("检测到您在修改字体!\n请您修改完字体后按任意键进行强制鼠标校正");getch();
basic.cls();
get_real_mouse();
}
l_z.dwFontSize.X=x_z.dwFontSize.X,l_z.dwFontSize.Y=x_z.dwFontSize.Y;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),15);
GetCursorPos(&pt); //获取鼠标当前位置
ScreenToClient(FindWindow("ConsoleWindowClass", NULL), &pt);
pt.y=pt.y/real_y,pt.x=(pt.x/real_x);
lest_y=y,lest_x=x;
x=pt.x,y=pt.y;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),7);
}
}mouse;
struct
{//移动库
int num_get()
{
int num=0,ans=1,fu=0;
int life[10]={};
short now_key,key,lk;
for(int i=1;i<=5;i++)
{
now_key=(int)getch()-48;
key=now_key+48;
if(key==13)break;
else if(now_key==-40)
{
if(lk!=49)
{
i=0,ans=0,num=0,fu=0;
for(int q=0;q<=9;q++)life[q]=0;
printf("(重新输入)");
}
}
else if(key==45){ fu=1,i--;printf("(此数已经设定为负数)");}
else if(now_key>9||now_key<0)i--;
else printf("%i",now_key);
lk=now_key;
life[i]=now_key,ans++;
}
int d=1;
//for(int i=1;i<=ans;i++)d=d*10;
for(int i=ans;i>=1;i--)
{
num=num+life[i]*d;
d=d*10;
}
if(fu==1)num=num*-1;
return num/10;
}
string whats[10]={},title="",about_things="null";
int ai_choose(void)
{
basic.cls();
short how_long=0,wait_=1;
for(int i=1;i<=9;i++)
{
if(whats[i]!="")how_long++;
else break;
}
int choose;
while(1)
{
choose=-1;
basic.gt(1,0);
mouse.mouse();
if(mouse.y==1)choose=1;
printf("%s",title.c_str());
if(choose==1){basic.color(16+7);printf("(?)\n");}
else {basic.color(7);printf(" \n");}
short x=1;
for(int i=1;i<=how_long;i++)
{
x++;
if(mouse.y==x)choose=x;
if(choose==i+1)basic.color(16*15);
else basic.color(7);
printf("%s\n",whats[i].c_str());
}
basic.color(0) ;
printf("\n金鹏游戏") ;
if(wait_==1){basic.wait(500);wait_=0;}
if(KEY_DOWN(VK_LBUTTON)&&choose>1)break;
else if(KEY_DOWN(VK_LBUTTON)&&choose==1)
{
string about="关于"+title;
if(about!="null")MessageBox(0,about_things.c_str(),about.c_str(),MB_OK);
}
}
for(int i=1;i<=9;i++)whats[i]="";
title="",about_things="null";
basic.cls();
return choose-1;
}
}choose;
int make_do()
{
basic.cls();
while(1)
{
choose.about_things="null",choose.title="建造建筑物",choose.whats[1]="取消", choose.whats[2]="住房", choose.whats[3]="基础建设";
short c=choose.ai_choose();
basic.cls();
if(c==1)break;
else if(c==2)
{
choose.about_things="null",choose.title="住房",choose.whats[1]="取消", choose.whats[2]="住宅 1000元 60秒 10人", choose.whats[3]="公寓 5000元 200秒 50人";
c=choose.ai_choose();
if(c==2) o_check(1000,2,xx,yy,60,10,"住宅");
else if(c==3) o_check(5000,4,xx,yy,200,50,"公寓");
if(c!=1)break;
}
else if(c==3)
{
/*choose.about_things="null",choose.title="基础建设",choose.whats[1]="取消", choose.whats[2]="住宅 1000元 60秒 10人", choose.whats[3]="公寓 5000元 200秒 50人";
c=choose.ai_choose();
if(c==2) o_check(1000,2,xx,yy,60,10,"住宅");
else if(c==2) o_check(5000,2,xx,yy,60,50,"住宅");
if(c!=1)break;*/
}
basic.cls();
}
basic.cls();
}
int look_do()
{
basic.cls();
while(1)
{
basic.gt(0,0) ;
printf("工程进度 E 返回主界面\n");
for(int i=0,w=0;i<=10;i++)
{
if(b_n[i]!="")
{
w++;
printf("第%i个工程:%s 坐标(%i,%i)剩余完工时间%i秒 \n",w,b_n[i].c_str(),b_where[i][1],b_where[i][2],b_n_t[i]);
}
}
for(int i=0;i<=4;i++) printf(" \n") ;
if(GetAsyncKeyState((int)'E'))break;
}
basic.cls();
}
int out_m()
{
basic.gt(0,0) ;
short color=0;
for(int m_x=l_x-10,x=0;m_x<=l_x+10;m_x++,x++)
{
for(int m_y=l_y-10,y=0;m_y<=l_y+10;m_y++,y++)
{
if(m.library.color[m.map.m[1][m_x][m_y]][m.map.m[2][m_x][m_y]]!=color)
{
basic.color(m.library.color[m.map.m[1][m_x][m_y]][m.map.m[2][m_x][m_y]]);
color=m.library.color[m.map.m[1][m_x][m_y]][m.map.m[2][m_x][m_y]];
}
printf("%s",m.library.photo[m.map.m[1][m_x][m_y]][m.map.m[2][m_x][m_y]].c_str() );
}
printf("\n");
}
basic.color(15) ;
printf("x-%i,y-%i,see_x-%i,see_y-%i \n城市人口:%lld 市财政局还有%lld元 \n提示:AWSD 移动视角 Q 取消当前操作\nP 放置公路 L 摧毁建筑物/公路 O 查看建造进度\nI 在当前光标处修建建筑物",yy,xx,l_x,l_y,people,money);
}
int game()
{
CreateThread(NULL,0,trafic_working,NULL,0,NULL);
CreateThread(NULL,0,making_building,NULL,0,NULL);
int doing=0;//0无操作 1放置公路 2摧毁建筑物
while(1)
{
out_m();
mouse.mouse();
if(mouse.y<=21&&mouse.x<=21*2)yy=(mouse.x/2)+l_y-10,xx=mouse.y+l_x-10;
if(GetAsyncKeyState((int)'D')&&l_y<189)l_y++;
else if(GetAsyncKeyState((int)'A')&&l_y>11)l_y--;
else if(GetAsyncKeyState((int)'S')&&l_x<189)l_x++;
else if(GetAsyncKeyState((int)'W')&&l_x>11)l_x--;
else if(GetAsyncKeyState((int)'P')) doing=1;
else if(GetAsyncKeyState((int)'L')) doing=2;
else if(GetAsyncKeyState((int)'Q')) doing=0;
else if(GetAsyncKeyState((int)'O')) look_do();
else if(GetAsyncKeyState((int)'I'))
{
if(m.map.m[1][xx][yy]==0)
{
int arror=0;
if(m.map.m[1][xx+1][yy]==1)arror++;
if(m.map.m[1][xx-1][yy]==1)arror++;
if(m.map.m[1][xx][yy+1]==1)arror++;
if(m.map.m[1][xx][yy-1]==1)arror++;
if(arror>=1)make_do();
else MessageBox(0,"请在公路旁建造建筑物","提示",MB_OK);
}
else MessageBox(0,"您不能在其它建筑物/公路上建造建筑物","提示",MB_OK);
}
if(KEY_DOWN(VK_LBUTTON))
{
if(doing==1&&m.map.m[1][xx][yy]==0)m.map.m[1][xx][yy]=1;
else if(doing==2)m.map.m[1][xx][yy]=0;
}
}
}
int main()
{
system("mode con cols=150 lines=40");
HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE);
DWORD mode;
GetConsoleMode(hStdin, &mode);
mode &= ~ENABLE_QUICK_EDIT_MODE; //移除快速编辑模式
mode &= ~ENABLE_INSERT_MODE; //移除插入模式
mode &= ~ENABLE_MOUSE_INPUT;
SetConsoleMode(hStdin, mode);
CONSOLE_CURSOR_INFO cursor_info={1,0};
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);
system("title 城市之光3"); basic.color(15); basic.gt(3,6);printf("made by heveral(白.)");basic.wait(500);basic.cls();mouse.get_real_mouse();
while(1)
{
choose.about_things="开始界面选择",choose.title="城市之光3",choose.whats[1]="开始游戏", choose.whats[2]="打开金鹏游戏官网", choose.whats[3]="关闭游戏";
short a=choose.ai_choose();
if(a==1)game();
else if(a==2)system("start http://jinpeng-game.ys168.com/");
else if(a==3) break;
}
}
原创游戏-版权所有,侵权必究