当前位置: 首页 > news >正文

C++合作开发项目:美术馆1.0

快乐星空MakerZINCFFO

合作入口:CM工作室

效果图:

代码:

(还有几个音乐!)

main.cpp

#include <bits/stdc++.h>
#include <windows.h>
#include <conio.h>
#include <time.h>
#include "music.h"using namespace std;struct CITYBLOCK{string ico;string name;string english_name;string text;int color;int len;
};
/*
CITYBLOCK city_block[30] = 
{{"▁", "平地", "Ground", "", 15, 0},{"▁", "平地", "Ground", "", 14, -1},{"忄","路灯", "Light", "驱散黑暗", 14, 1},{"囧","小平房", "Small House", "淳朴的农村建筑", 15, 2},{"马路","小平房", "Small House", "淳朴的农村建筑", 15, 2},
};
*/namespace functions{#define FUNCTION void#define Art_Title(string)	SetConsoleTitle(string)int ifchick = 0;string city_map[1000][1000];int city_mapdata[1000][1000] = {0};int x, y;int day;int money;int choose = 1;//1、建筑  2、居民  3、状况int yinhang, gongren, famu, jishu, xuesheng, laoshi, kuanggong;int house;int people;int s;int m;char click;int num;int yh, gc, ds, kj, xx;float kejidian, muliao;ifstream in;ofstream out;FUNCTION Make_Text(string same, string name){ofstream file(same, ios::out); if (!file) {  MessageBox(NULL, "Open Error!", "Files News", MB_ICONWARNING|MB_OK);} file << name;file.close();	}bool isFileExists(string name) {ifstream f(name.c_str(), ios::in);return f.good();}FUNCTION New(){out.open("ArtShowDown1.bie",ios::out);out << x << " " << y << " " << money << " " << kejidian << " " << muliao << " " << day;out.close();out.open("ArtShowDown2.bie",ios::out);for(int i = 0; i <= 20; i++){for(int j = 0; j <= 48; j++){out << city_map[i][j];out << "\n";}	}out.close();	out.open("ArtShowDown3.bie",ios::out);out << people << " " << yinhang << " " << famu << " " << jishu << " " << gongren << " " << laoshi << " " << xuesheng << " " << kuanggong;out.close();out.open("ArtShowDown4.bie",ios::out);out << yh << " " << gc << " " << ds << " " << kj << " " << xx;	out.close();out.open("ArtShowDown5.bie",ios::in);for(int i = 0; i <= 20; i++){for(int j = 0; j <= 48; j++){out << city_mapdata[i][j] << " ";}	}out.close();			}FUNCTION Cin(){in.open("ArtShowDown1.bie",ios::in);in >> x >> y >> money >> kejidian >> muliao >> day;in.close();in.open("ArtShowDown2.bie",ios::in);for(int i = 0; i <= 20; i++){for(int j = 0; j <= 48; j++){in >> city_map[i][j];}	}in.close();	in.open("ArtShowDown3.bie",ios::in);in >> people >> yinhang >> famu >> jishu >> gongren >> laoshi >> xuesheng >> kuanggong;in.close();	in.open("ArtShowDown4.bie",ios::in);in >> yh >> gc >> ds >> kj >> xx;	in.close();in.open("ArtShowDown5.bie",ios::in);for(int i = 0; i <= 20; i++){for(int j = 0; j <= 48; j++){in >> city_mapdata[i][j];}	}in.close();	}FUNCTION Make(){if(isFileExists("ArtShowDown1.bie") == false && isFileExists("ArtShowDown2.bie") == false && isFileExists("ArtShowDown3.bie") == false && isFileExists("ArtShowDown4.bie") == false && isFileExists("ArtShowDown5.bie") == false){Make_Text("ArtShowDown1.bie", "10 23 10000 0 0 0");Make_Text("ArtShowDown2.bie", "▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n▁\n");Make_Text("ArtShowDown3.bie", "0 0 0 0 0 0 0 0");Make_Text("ArtShowDown4.bie", "0 0 0 0 0");Make_Text("ArtShowDown5.bie", "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ");}}FUNCTION ModeVolume(float Volume){bgMusic.SetVolume(Volume);}FUNCTION color(int colors){SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), colors);}FUNCTION syscolor(char colors[5]){char t[100];sprintf(t, "color %s", colors);system(t);}FUNCTION Pause(){system("pause");}FUNCTION Cls(){system("cls");}FUNCTION ModeWindow(int cols, int lines){char t[1000];sprintf(t, "mode con cols=%d lines=%d", cols, lines);system(t);}FUNCTION gotoxy(int x,int y){COORD Pos;Pos.X = y;Pos.Y = x;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),Pos);}FUNCTION SlowSay(const char * text, float time_s){while (1){if (*text != 0){printf("%c", *text++);}else{break;}_sleep(time_s * 1000);}}FUNCTION Click(){ModeVolume(0.1);BeepMusic("点击.mp3");}FUNCTION Put(){ModeVolume(0.1);BeepMusic("放置.mp3");}FUNCTION Click_Sound(){ModeVolume(0.1);BeepMusic("点击.mp3");_sleep(315);BeepMusic("音效.mp3");}	POINT Windowpos(){POINT p;GetCursorPos(&p);HWND h = GetForegroundWindow();ScreenToClient(h,&p);p.x /= 8;p.y /= 16;return p; }FUNCTION HideCursor(){HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);CONSOLE_CURSOR_INFO CursorInfo;GetConsoleCursorInfo(handle, &CursorInfo);//获取控制台光标信息CursorInfo.bVisible = false; //隐藏控制台光标SetConsoleCursorInfo(handle, &CursorInfo);//设置控制台光标状态}void mapout(){gotoxy(0, 0);color(14);printf("第 %d 天:\n",day);for(int i = 0; i <= 20; i++){printf(" ");for(int j = 0; j <= 48; j++){if(i == x && j == y){color(127);}else if(city_mapdata[i][j] == -1){color(14);}else if(city_mapdata[i][j] == 1){color(14);}else if(city_mapdata[i][j] == 3){color(8);}else if(city_mapdata[i][j] == 10){color(8);}else if(city_mapdata[i][j] == 9){color(11);}else if(city_mapdata[i][j] == 2){color(15);}else if(city_mapdata[i][j] == 4){color(7);}else if(city_mapdata[i][j] == 6){color(8);}else if(city_mapdata[i][j] == 7){color(2);}else if(city_mapdata[i][j] == 16){color(12);}else if(city_mapdata[i][j] == 15){color(11);}else if(city_mapdata[i][j] == 14){color(8);}else if(city_mapdata[i][j] == 13){color(8);}else{color(15);}		cout << city_map[i][j];}printf("\n");}color(13);printf("X = %d, Y = %d      \n经费:%d     \n", x, y, money);color(15);if(choose == 1){printf("╭────────────────────┬────────────────────╮\n");printf("│添加建筑:     |基础建筑|               │           |高级建筑|                   │\n");printf("│1、路灯  45经费    │7、银行  1500经费  │Z、学校  300经费,                      │\n");printf("│2、小平房  100经费 │8、大厦  700经费   │X、图书馆  150经费,25科技点            │\n");printf("│3、马路  50经费    │9、人工湖  900经费 │C、矿井  200经费,木料100               │\n");printf("│4、电线杆  80经费  │0、高速公路 70经费 │V、熔炼厂  250经费,5科技点             │\n");printf("│5、工厂  5000经费  │                   │B、卫星发射中心  5000经费,100科技点    │\n");printf("│6、小区  3000经费  │                   │N、城市中心  1200经费,5科技点,200木料 │\n");printf("╰────────────────────┴────────────────────╯\n");}if(choose == 2){printf("╭─────────────────────────────────────────╮\n");printf("│城市居民:                                                                        │\n");printf("│( 总人数:%d )                    │                                              │\n",people);printf("│1、招聘银行职员(%d)  5、减少      │  Z、招聘老师(%d)  V、减少                    │\n",yinhang, laoshi);printf("│2、招聘伐木工(%d)    6、减少      │  X、招聘学者(%d)  B、减少                    │\n",famu, xuesheng);printf("│3、招聘技术人员(%d)  7、减少      │  C、招聘矿工(%d)  N、减少                    │\n",jishu, kuanggong);printf("│4、招聘工人(%d)      8、减少      │                                              │\n",gongren);printf("│空格、更多选项...                 │                                              │\n");printf("╰─────────────────────────────────────────╯\n");}if(choose == 3){printf("╭─────────────────────────────────────────╮\n");printf("│经费:%d¥/100000                                                                 │\n", money);printf("│科技点:%f/2000                                                                   │\n", kejidian);printf("│木料:%f根                                                                        │\n", muliao);printf("│                                                                                  │\n");printf("│                                                                                  │\n");printf("│                                                                                  │\n");printf("│                                                                                  │\n");printf("╰─────────────────────────────────────────╯\n");}						}	int mouse;POINT p;
};using namespace functions;int main(void)
{Art_Title("美术馆(1011 TM)");HideCursor();ModeWindow(100, 34);_sleep(1000);syscolor("8A");_sleep(100);syscolor("EA");BeepMusic("开杀.wav");gotoxy(14, 38);color(234);SlowSay("Made By ", 0.001);color(236);SlowSay("Maker", 0.001);color(234);SlowSay(" And ", 0.001);color(235);SlowSay("ZINCFFO", 0.001);_sleep(3500);syscolor("8A");_sleep(100);syscolor("0A");	Cls();_sleep(1000);BeepMusic("BGM-HOT.mp3");syscolor("AF");gotoxy(14, 41);color(174);printf("欢迎来到");color(169);printf("《美术馆》");color(174);printf("!\n");gotoxy(16, 46);color(11);printf("开始游戏");while(1){mouse = GetAsyncKeyState(VK_LBUTTON) & 0x8000;p = Windowpos();if(p.x >= 57 && p.y >= 20 && p.x <= 67 && p.y <= 21){gotoxy(16, 45);color(172);printf(">开始游戏<");if(mouse){Click();Make();Cin();//BeepMusic("BGM-HAPPY.mp3");Cls();syscolor("0f");gotoxy(14, 31);color(15);SlowSay("你可以创造属于自己的", 0.025);color(10);SlowSay("城市", 0.025);color(15);SlowSay("了......", 0.025);_sleep(200);srand((unsigned)time(NULL));for(int i = 0; i <= 99; i += m){m = rand() % 15;color(11);gotoxy(16, 47);printf("%%d", i);s = rand() % 175;_sleep(s);}gotoxy(16, 47);printf("%99");_sleep(200);syscolor("08");_sleep(200);Cls();//BeepMusic("BGM-PLAY.mp3");Click();while(1){New();Cin();mapout();click = getch();if(click == 's' || click == 'S'){if(x != 20)x++;}else if(click == 'w' || click == 'W'){if(x != 0)x--;}else if(click == 'a' || click == 'A'){if(y != 0)y--;}else if(click == 'd' || click == 'D'){if(y != 48)y++;}			else if(click == '1' && choose == 1 && city_map[x][y] == "▁"){if(money >= 45){Click();Put();money -= 45;city_map[x][y] = "忄";city_mapdata[x][y] = 1;city_mapdata[x + 1][y] = -1;city_mapdata[x - 1][y] = -1;city_mapdata[x][y - 1] = -1;city_mapdata[x][y + 1] = -1;}elseMessageBox(NULL, "经费不足!", "添加建筑", MB_ICONWARNING|MB_OK);}else if(click == '2' && choose == 1 && city_map[x][y] == "▁"){house += 1;people += 2;if(money >= 100){Click();Put();money -= 100;city_map[x][y] = "囧";city_mapdata[x][y] = 2;}elseMessageBox(NULL, "经费不足!", "添加建筑", MB_ICONWARNING|MB_OK);}else if(click == '3' && choose == 1 && city_map[x][y] == "▁"){if(money >= 50){Click();Put();money -= 50;city_map[x][y] = "▓";city_mapdata[x][y] = 3;}elseMessageBox(NULL, "经费不足!", "添加建筑", MB_ICONWARNING|MB_OK);}else if(click == '4' && choose == 1 && city_map[x][y] == "▁"){if(money >= 80){Click();Put();money -= 80;city_map[x][y] = "‖";city_mapdata[x][y] = 4;}elseMessageBox(NULL, "经费不足!", "添加建筑", MB_ICONWARNING|MB_OK);}else if(click == '5' && choose == 1 && city_map[x][y] == "▁"){if(money >= 5000){Click();Put();money -= 5000;city_map[x][y - 1] = "⊿";city_map[x][y] = "甴";city_map[x][y + 1] = "∏";city_mapdata[x][y] = -2;city_mapdata[x][y + 1] = -3;city_mapdata[x][y - 1] = -4;gc++;}elseMessageBox(NULL, "经费不足!", "添加建筑", MB_ICONWARNING|MB_OK);}else if(click == '6' && choose == 1 && city_map[x][y] == "▁"){house += 5;srand((unsigned)time(NULL));people += rand() % 5;people += 8;if(money >= 3000){Click();Put();money -= 3000;city_map[x - 1][y] = "目";city_map[x][y - 1] = "目";city_map[x][y] = "目";city_map[x][y + 1] = "目";city_map[x + 1][y] = "目";city_mapdata[x][y] = 6;city_mapdata[x - 1][y] = 6;city_mapdata[x + 1][y] = 6;city_mapdata[x][y + 1] = 6;city_mapdata[x][y - 1] = 6;}elseMessageBox(NULL, "经费不足!", "添加建筑", MB_ICONWARNING|MB_OK);}else if(click == '7' && choose == 1 && city_map[x][y] == "▁"){if(money >= 1500){Click();Put();money -= 1500;yh++;city_map[x][y] = "皿";city_mapdata[x][y] = 7;}elseMessageBox(NULL, "经费不足!", "添加建筑", MB_ICONWARNING|MB_OK);}else if(click == '8' && choose == 1 && city_map[x][y] == "▁"){if(money >= 700){Click();Put();money -= 700;city_map[x][y] = "目";city_mapdata[x][y] = 8;ds++;}elseMessageBox(NULL, "经费不足!", "添加建筑", MB_ICONWARNING|MB_OK);}else if(click == '9' && choose == 1 && city_map[x][y] == "▁"){if(money >= 900){Click();Put();money -= 900;city_map[x][y] = "〇";city_mapdata[x][y] = 9;}elseMessageBox(NULL, "经费不足!", "添加建筑", MB_ICONWARNING|MB_OK);}else if(click == '0' && choose == 1 && city_map[x][y] == "▁"){if(money >= 70){Click();Put();money -= 70;city_map[x][y] = "█";city_mapdata[x][y] = 10;}elseMessageBox(NULL, "经费不足!", "添加建筑", MB_ICONWARNING|MB_OK);}else if(click == ' '){if(choose == 3){choose = 1;continue;}if(choose == 2){choose = 3;continue;}if(choose == 1){	choose = 2;continue;}}else if(click == 'z' && choose == 1 && city_map[x][y] == "▁"){if(money >= 300){Click();Put();money -= 300;xx++;city_map[x][y] = "㏕";city_mapdata[x][y] = 11;}elseMessageBox(NULL, "经费不足!", "添加建筑", MB_ICONWARNING|MB_OK);}else if(click == 'x' && choose == 1 && city_map[x][y] == "▁"){if(money >= 150){if(kejidian >= 25){Click();Put();money -= 150;kejidian -= 25;city_map[x][y] = "㏑";city_mapdata[x][y] = 12;}elseMessageBox(NULL, "科技点不足!", "添加建筑", MB_ICONWARNING|MB_OK);}elseMessageBox(NULL, "经费不足!", "添加建筑", MB_ICONWARNING|MB_OK);}else if(click == 'c' && choose == 1 && city_map[x][y] == "▁"){if(money >= 200){if(muliao >= 100){Click();Put();money -= 200;muliao -= 100;kj++;city_map[x][y] = "□";city_mapdata[x][y] = 13;}elseMessageBox(NULL, "木料不足!", "添加建筑", MB_ICONWARNING|MB_OK);}elseMessageBox(NULL, "经费不足!", "添加建筑", MB_ICONWARNING|MB_OK);}else if(click == 'b' && choose == 1 && city_map[x][y] == "▁"){if(money >= 5000){if(kejidian >= 100){Click();Put();money -= 5000;kejidian -= 100;city_map[x][y] = "Ξ";city_mapdata[x][y] = 15;}elseMessageBox(NULL, "科技点不足!", "添加建筑", MB_ICONWARNING|MB_OK);}elseMessageBox(NULL, "经费不足!", "添加建筑", MB_ICONWARNING|MB_OK);}else if(click == 'v' && choose == 1 && city_map[x][y] == "▁"){if(money >= 250){if(kejidian >= 5){Click();Put();money -= 250;kejidian -= 5;city_map[x][y] = "ㄖ";city_mapdata[x][y] = 14;}elseMessageBox(NULL, "科技点不足!", "添加建筑", MB_ICONWARNING|MB_OK);}elseMessageBox(NULL, "经费不足!", "添加建筑", MB_ICONWARNING|MB_OK);}else if(click == 'n' && choose == 1 && city_map[x][y] == "▁"){if(money >= 1200){if(kejidian >= 5){if(muliao >= 200){Click();Put();money -= 1200;kejidian -= 5;muliao -= 200;city_map[x][y] = "¥";city_mapdata[x][y] = 16;}elseMessageBox(NULL, "木料不足!", "添加建筑", MB_ICONWARNING|MB_OK);}elseMessageBox(NULL, "科技点不足!", "添加建筑", MB_ICONWARNING|MB_OK);}elseMessageBox(NULL, "经费不足!", "添加建筑", MB_ICONWARNING|MB_OK);}if(click == '1' && choose == 2){if(((gongren + jishu + yinhang + famu + laoshi + kuanggong + xuesheng) < people) && yh > 0)yinhang++;}if(click == '2' && choose == 2){if((gongren + jishu + yinhang + famu + laoshi + kuanggong + xuesheng) < people)famu++;}if(click == '3' && choose == 2){if(((gongren + jishu + yinhang + famu + laoshi + kuanggong + xuesheng) < people) && ds > 0)jishu++;}if(click == '4' && choose == 2){if(((gongren + jishu + yinhang + famu + laoshi + kuanggong + xuesheng) < people) && gc > 0)gongren++;}if(click == '5' && choose == 2){if(yinhang > 0)yinhang--;}if(click == '6' && choose == 2){if(famu > 0)famu--;}if(click == '7' && choose == 2){if(jishu > 0)jishu--;}if(click == '8' && choose == 2){if(gongren > 0)gongren--;}if(click == 'z'){if(((gongren + jishu + yinhang + famu + laoshi + kuanggong + xuesheng) < people) && xx >= 1)laoshi++;	}if(click == 'x'){if(((gongren + jishu + yinhang + famu + laoshi + kuanggong + xuesheng) < people) && xx >= 1 && laoshi >= 2)xuesheng++;	}if(click == 'c'){if(((gongren + jishu + yinhang + famu + laoshi + kuanggong + xuesheng) < people) && kj > 0)kuanggong++;	}if(click == 'v' && choose == 2){if(laoshi > 0)laoshi--;}if(click == 'b' && choose == 2){if(xuesheng > 0)xuesheng--;}if(click == 'n' && choose == 2){if(kuanggong > 0)kuanggong--;}if(yh > 0 && yinhang > 1)money += 5;num++;int die;srand((unsigned)time(NULL));die = rand() % 30;if(die == 15 && people > 5)people--;if(die == 14 && people > 5)people++;if(famu)muliao += famu * 0.2;if(xuesheng)kejidian += 0.2 * xuesheng;//if()if(num % 60 == 0){day++;}	}}}else{gotoxy(16, 45);color(173);printf(" 开始游戏 ");}}Pause();return 0;
}

music.h:

#ifndef MUSIC_H
#define MUSIC_H#include "ege.h"
#include <windows.h>
#include <sys/time.h>
#define N NULL
using namespace ege;MUSIC bgMusic;struct MciMusic{void SendMusic(LPCSTR musicname){char Code[10] = "play ";strcat(Code, musicname);mciSendString(Code, N, 0, N);}void PauseMusic(LPCSTR musicname){char Code[10] = "pause ";strcat(Code, musicname);mciSendString(Code, N, 0, N);	}void ResumeMusic(LPCSTR musicname){char Code[10] = "resume ";strcat(Code, musicname);mciSendString(Code, N, 0, N);	}void CloseMusic(LPCSTR musicname){char Code[10] = "close ";strcat(Code, musicname);mciSendString(Code, N, 0, N);	}
};void BeepMusic(const char *musicname)
{bgMusic.OpenFile(musicname);bgMusic.SetVolume(1.0f);if (bgMusic.IsOpen()) {bgMusic.Play(0);}
}#endif

ege.h:


#ifndef EGE_H
#define EGE_H#if defined(_MSC_VER) && (_MSC_VER >= 1200)
#pragma once
#endif#ifndef __cplusplus
#error You must use C++ compiler, or you need filename with '.cpp' suffix
#endif#if defined(_INC_CONIO) || defined(_CONIO_H_)
#error can not include "conio.h" before "graphics.h"
#endif#if defined(_MSC_VER)
#	pragma warning(disable: 4355)
#	ifndef _ALLOW_ITERATOR_DEBUG_LEVEL_MISMATCH
#		define _ALLOW_ITERATOR_DEBUG_LEVEL_MISMATCH
#	endif
#	ifndef _ALLOW_RUNTIME_LIBRARY_MISMATCH
#		define _ALLOW_RUNTIME_LIBRARY_MISMATCH
#	endif
#endif#if !defined(EGE_GRAPH_LIB_BUILD) && !defined(EGE_GRAPH_NO_LIB)
#	ifdef _MSC_VER
#		pragma comment(lib,"gdiplus.lib")
#		ifdef _WIN64 // 64 bit libs
#			pragma comment(lib,"graphics64.lib")
#		else   // 32 bit libs
#			pragma comment(lib,"graphics.lib")
#		endif
#	endif
#endif#if !defined(EGE_GRAPH_LIB_BUILD) && !defined(EGE_GRAPH_NO_LIB)
#ifndef _CRT_SECURE_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS
#endif#ifndef _CRT_SECURE_NO_DEPRECATE
#define _CRT_SECURE_NO_DEPRECATE
#endif#ifndef _CRT_NON_CONFORMING_SWPRINTFS
#define _CRT_NON_CONFORMING_SWPRINTFS
#endif#endif#if defined(EGE_FOR_AUTO_CODE_COMPLETETION_ONLY)
#include <windef.h>
#include <winuser.h>
#include <wingdi.h>
#else
#include <windows.h>	
#endif#if defined(_MSC_VER) && (_MSC_VER <= 1300)
#define EGE_COMPILERINFO_VC6
#endif#if defined(_MSC_VER) && _MSC_VER <= 1200 && !defined(SetWindowLongPtr)
#	define SetWindowLongPtrW   SetWindowLongW
#	define GetWindowLongPtrW   GetWindowLongW
#	define GWLP_USERDATA       GWL_USERDATA
#	define GWLP_WNDPROC        GWL_WNDPROC
#endif#ifndef WM_MOUSEWHEEL
#define WM_MOUSEWHEEL                   0x020A
#endif#ifndef EGE_CDECL
#	if __STDC__
#		define EGE_CDECL  __cdecl
#	else
#		define EGE_CDECL  __cdecl
#	endif
#endif#ifdef _MSC_VER
#	if defined(_WIN64)
#		define EGEAPI
#	else
#		define EGEAPI EGE_CDECL
#	endif
#else
#	if defined(__WORDSIZE)
#		if __WORDSIZE > 32
#			define EGEAPI
#		else
#			define EGEAPI EGE_CDECL
#		endif
#	else
#		define EGEAPI
#	endif
#endif#ifndef EGE_DEPRECATE
#	ifdef _MSC_VER
#		ifdef _CRT_DEPRECATE_TEXT
#			define EGE_DEPRECATE(text) _CRT_DEPRECATE_TEXT("This function is deprecated, more info visit http://tcgraphics.sourceforge.net/")
#		else
#			define EGE_DEPRECATE(text)
#		endif
#	else
#		define EGE_DEPRECATE(text) __attribute__((deprecated))
#	endif
#endif#define EGE_GDIPLUS     //启用GDIPLUS#define SHOWCONSOLE             1       // 进入图形模式时,保留控制台的显示
#define EGERGBA(r, g, b, a)     ( ((r)<<16) | ((g)<<8) | (b) | ((a)<<24) )
#define EGERGB(r, g, b)         EGERGBA(r, g, b, 0xFF)
#define EGEARGB(a, r, g, b)     EGERGBA(r, g, b, a)
#define EGEACOLOR(a, color)     ( ((color) & 0xFFFFFF) | ((a)<<24) )
#define EGECOLORA(color, a)     EGEACOLOR(a, color)
#define EGEGET_R(c)             ( ((c)>>16) & 0xFF )
#define EGEGET_G(c)             ( ((c)>> 8) & 0xFF )
#define EGEGET_B(c)             ( ((c)) & 0xFF )
#define EGEGET_A(c)             ( ((c)>>24) & 0xFF )
#define EGEGRAY(gray)           EGERGB(gray, gray, gray)
#define EGEGRAYA(gray, a)       EGERGBA(gray, gray, gray, a)
#define EGEAGRAY(a, gray)       EGEGRAYA(gray, a)
#define NAMESPACE_EGE_L         namespace ege {
#define NAMESPACE_EGE_R         }NAMESPACE_EGE_Lconst double PI = 3.1415926535897932384626;enum graphics_drivers {     /* define graphics drivers */DETECT,         /* requests autodetection */CGA, MCGA, EGA, EGA64, EGAMONO, IBM8514,/* 1 - 6 */HERCMONO, ATT400, VGA, PC3270,          /* 7 - 10 */TRUECOLOR, TRUECOLORSIZE,CURRENT_DRIVER = -1
};enum graphics_modes { /* graphics modes for each driver */CGAC0       = 0,  /* 320x200 palette 0; 1 page  */CGAC1       = 1,  /* 320x200 palette 1; 1 page  */CGAC2       = 2,  /* 320x200 palette 2: 1 page  */CGAC3       = 3,  /* 320x200 palette 3; 1 page  */CGAHI       = 4,  /* 640x200 1 page             */MCGAC0      = 0,  /* 320x200 palette 0; 1 page  */MCGAC1      = 1,  /* 320x200 palette 1; 1 page  */MCGAC2      = 2,  /* 320x200 palette 2; 1 page  */MCGAC3      = 3,  /* 320x200 palette 3; 1 page  */MCGAMED     = 4,  /* 640x200 1 page             */MCGAHI      = 5,  /* 640x480 1 page             */EGALO       = 0,  /* 640x200 16 color 4 pages   */EGAHI       = 1,  /* 640x350 16 color 2 pages   */EGA64LO     = 0,  /* 640x200 16 color 1 page    */EGA64HI     = 1,  /* 640x350 4 color  1 page    */EGAMONOHI   = 0,  /* 640x350 64K on card, 1 page - 256K on card, 4 pages */HERCMONOHI  = 0,  /* 720x348 2 pages            */ATT400C0    = 0,  /* 320x200 palette 0; 1 page  */ATT400C1    = 1,  /* 320x200 palette 1; 1 page  */ATT400C2    = 2,  /* 320x200 palette 2; 1 page  */ATT400C3    = 3,  /* 320x200 palette 3; 1 page  */ATT400MED   = 4,  /* 640x200 1 page             */ATT400HI    = 5,  /* 640x400 1 page             */VGALO       = 0,  /* 640x200 16 color 4 pages   */VGAMED      = 1,  /* 640x350 16 color 2 pages   */VGAHI       = 2,  /* 640x480 16 color 1 page    */PC3270HI    = 0,  /* 720x350 1 page             */IBM8514LO   = 0,  /* 640x480 256 colors         */IBM8514HI   = 1   /*1024x768 256 colors         */
};enum graphics_errors {      /* graphresult error return codes */grOk                =   0,grNoInitGraph       =  -1,grNotDetected       =  -2,grFileNotFound      =  -3,grInvalidDriver     =  -4,grNoLoadMem         =  -5,grNoScanMem         =  -6,grNoFloodMem        =  -7,grFontNotFound      =  -8,grNoFontMem         =  -9,grInvalidMode       = -10,grError             = -11,   /* generic error */grIOerror           = -12,grInvalidFont       = -13,grInvalidFontNum    = -14,grInvalidVersion    = -18,grException         = 0x10,  /* ege error */grParamError        = 0x11,grInvalidRegion     = 0x12,grOutOfMemory       = 0x13,grNullPointer       = 0x14,grAllocError        = 0x15,grInvalidMemory     = 0xCDCDCDCD,
};enum message_event {MSG_EVENT_UP            = 0x00,MSG_EVENT_DOWN          = 0x01,MSG_EVENT_CLICK         = 0x01,MSG_EVENT_DBCLICK       = 0x02,MSG_EVENT_MOVE          = 0x04,MSG_EVENT_WHEEL         = 0x10,
};enum message_mouse {MSG_MOUSE_LEFT      = 0x01,MSG_MOUSE_RIGHT     = 0x02,MSG_MOUSE_MID       = 0x04,
};// 颜色
enum COLORS {BLACK           = EGERGB(0, 0, 0),BLUE            = EGERGB(0, 0, 0xA8),GREEN           = EGERGB(0, 0xA8, 0),CYAN            = EGERGB(0, 0xA8, 0xA8),RED             = EGERGB(0xA8, 0, 0),MAGENTA         = EGERGB(0xA8, 0, 0xA8),BROWN           = EGERGB(0xA8, 0xA8, 0),LIGHTGRAY       = EGERGB(0xA8, 0xA8, 0xA8),DARKGRAY        = EGERGB(0x54, 0x54, 0x54),LIGHTBLUE       = EGERGB(0x54, 0x54, 0xFC),LIGHTGREEN      = EGERGB(0x54, 0xFC, 0x54),LIGHTCYAN       = EGERGB(0x54, 0xFC, 0xFC),LIGHTRED        = EGERGB(0xFC, 0x54, 0x54),LIGHTMAGENTA    = EGERGB(0xFC, 0x54, 0xFC),YELLOW          = EGERGB(0xFC, 0xFC, 0x54),WHITE           = EGERGB(0xFC, 0xFC, 0xFC),
};// 填充模式
enum fill_patterns {/* Fill patterns for get/setfillstyle */EMPTY_FILL,     /* fills area in background color */SOLID_FILL,     /* fills area in solid fill color */LINE_FILL,      /* --- fill */LTSLASH_FILL,   /* /// fill */SLASH_FILL,     /* /// fill with thick lines */BKSLASH_FILL,   /* \\\ fill with thick lines */LTBKSLASH_FILL, /* \\\ fill */HATCH_FILL,     /* light hatch fill */XHATCH_FILL,    /* heavy cross hatch fill */INTERLEAVE_FILL,/* interleaving line fill */WIDE_DOT_FILL,  /* Widely spaced dot fill */CLOSE_DOT_FILL, /* Closely spaced dot fill */USER_FILL       /* user defined fill */
};enum text_just {        /* Horizontal and vertical justificationfor settextjustify */LEFT_TEXT   = 0,CENTER_TEXT = 1,RIGHT_TEXT  = 2,BOTTOM_TEXT = 0,/* CENTER_TEXT = 1,  already defined above */TOP_TEXT    = 2
};enum line_styles {      /* Line styles for get/setlinestyle */SOLID_LINE      = PS_SOLID,CENTER_LINE     = PS_DASH,DOTTED_LINE     = PS_DOT,DASHED_LINE     = PS_DASHDOT,NULL_LINE       = PS_NULL,USERBIT_LINE    = PS_USERSTYLE,   /* User defined line style */
};enum key_msg_flag {KEYMSG_CHAR_FLAG    = 2,KEYMSG_DOWN_FLAG    = 1,KEYMSG_UP_FLAG      = 1,KEYMSG_CHAR         = 0x40000,KEYMSG_DOWN         = 0x10000,KEYMSG_UP           = 0x20000,KEYMSG_FIRSTDOWN    = 0x80000,
};enum music_state_flag {MUSIC_MODE_NOT_OPEN = 0x0,MUSIC_MODE_NOT_READY = 0x20C,MUSIC_MODE_PAUSE = 0x211,MUSIC_MODE_PLAY = 0x20E,MUSIC_MODE_STOP = 0x20D,MUSIC_MODE_OPEN = 0x212,MUSIC_MODE_SEEK = 0x210,
};enum initmode_flag {INIT_DEFAULT        = 0x0,INIT_NOBORDER       = 0x1,INIT_CHILD          = 0x2,INIT_TOPMOST        = 0x4,INIT_RENDERMANUAL   = 0x8,INIT_NOFORCEEXIT    = 0x10,INIT_UNICODE        = 0x20,INIT_WITHLOGO       = 0x100,INIT_ANIMATION      = INIT_DEFAULT | INIT_RENDERMANUAL | INIT_NOFORCEEXIT,
};enum rendermode_e {RENDER_AUTO,RENDER_MANUAL,
};typedef enum key_code_e {key_mouse_l     = 0x01,key_mouse_r     = 0x02,key_mouse_m     = 0x04,key_back        = 0x08,key_tab         = 0x09,key_enter       = 0x0d,key_shift       = 0x10,key_control     = 0x11,key_menu        = 0x12,key_pause       = 0x13,key_capslock    = 0x14,key_esc         = 0x1b,key_space       = 0x20,key_pageup      = 0x21,key_pagedown    = 0x22,key_home        = 0x23,key_end         = 0x24,key_left        = 0x25,key_up          = 0x26,key_right       = 0x27,key_down        = 0x28,key_print       = 0x2a,key_snapshot    = 0x2c,key_insert      = 0x2d,key_delete      = 0x2e,key_0           = 0x30,key_1           = 0x31,key_2           = 0x32,key_3           = 0x33,key_4           = 0x34,key_5           = 0x35,key_6           = 0x36,key_7           = 0x37,key_8           = 0x38,key_9           = 0x39,key_A           = 0x41,key_B           = 0x42,key_C           = 0x43,key_D           = 0x44,key_E           = 0x45,key_F           = 0x46,key_G           = 0x47,key_H           = 0x48,key_I           = 0x49,key_J           = 0x4a,key_K           = 0x4b,key_L           = 0x4c,key_M           = 0x4d,key_N           = 0x4e,key_O           = 0x4f,key_P           = 0x50,key_Q           = 0x51,key_R           = 0x52,key_S           = 0x53,key_T           = 0x54,key_U           = 0x55,key_V           = 0x56,key_W           = 0x57,key_X           = 0x58,key_Y           = 0x59,key_Z           = 0x5a,key_win_l       = 0x5b,key_win_r       = 0x5c,key_sleep       = 0x5f,key_num0        = 0x60,key_num1        = 0x61,key_num2        = 0x62,key_num3        = 0x63,key_num4        = 0x64,key_num5        = 0x65,key_num6        = 0x66,key_num7        = 0x67,key_num8        = 0x68,key_num9        = 0x69,key_multiply    = 0x6a,key_add         = 0x6b,key_separator   = 0x6c,key_subtract    = 0x6d,key_decimal     = 0x6e,key_divide      = 0x6f,key_f1          = 0x70,key_f2          = 0x71,key_f3          = 0x72,key_f4          = 0x73,key_f5          = 0x74,key_f6          = 0x75,key_f7          = 0x76,key_f8          = 0x77,key_f9          = 0x78,key_f10         = 0x79,key_f11         = 0x7a,key_f12         = 0x7b,key_numlock     = 0x90,key_scrolllock  = 0x91,key_shift_l     = 0xa0,key_shift_r     = 0xa1,key_control_l   = 0xa2,key_control_r   = 0xa3,key_menu_l      = 0xa4,key_menu_r      = 0xa5,key_semicolon   = 0xba,key_plus        = 0xbb,key_comma       = 0xbc,key_minus       = 0xbd,key_period      = 0xbe,key_slash       = 0xbf,key_tilde       = 0xc0,key_lbrace      = 0xdb,key_backslash   = 0xdc,key_rbrace      = 0xdd,key_quote       = 0xde,key_ime_process = 0xe5,
}key_code_e;typedef enum key_msg_e {key_msg_down    = 1,key_msg_up      = 2,key_msg_char    = 4,
}key_msg_e;
typedef enum key_flag_e {key_flag_shift  = 0x100,key_flag_ctrl   = 0x200,
}key_flag_e;typedef enum mouse_msg_e {mouse_msg_down      = 0x10,mouse_msg_up        = 0x20,mouse_msg_move      = 0x40,mouse_msg_wheel     = 0x80,
}mouse_msg_e;typedef enum mouse_flag_e {mouse_flag_left     = 1,mouse_flag_right    = 2,mouse_flag_mid      = 4,mouse_flag_shift    = 0x100,mouse_flag_ctrl     = 0x200,
}mouse_flag_e;typedef DWORD color_t;struct viewporttype {int left;int top;int right;int bottom;int clipflag;
};struct textsettingstype {int font;int direction;int charsize;int horiz;int vert;
};struct linestyletype {int linestyle;unsigned short upattern;int thickness;
};typedef struct key_msg {int             key;key_msg_e       msg;unsigned int    flags;
}key_msg;typedef struct mouse_msg {int             x;int             y;mouse_msg_e     msg;unsigned int    flags;int             wheel;bool is_left() { return (flags & mouse_flag_left) != 0; }bool is_right() { return (flags & mouse_flag_right) != 0; }bool is_mid() { return (flags & mouse_flag_mid) != 0; }bool is_down() { return msg == mouse_msg_down; }bool is_up() { return msg == mouse_msg_up; }bool is_move() { return msg == mouse_msg_move; }bool is_wheel() { return msg == mouse_msg_wheel; }
}mouse_msg;typedef struct ege_point {float x;float y;
}ege_point;typedef struct ege_rect {float x;float y;float w;float h;
}ege_rect;typedef struct ege_colpoint {float   x;float   y;color_t color;
}ege_colpoint;// 鼠标消息
struct MOUSEMSG {UINT uMsg;              // 当前鼠标消息bool mkCtrl;            // Ctrl 键是否按下bool mkShift;           // Shift 键是否按下bool mkLButton;         // 鼠标左键是否按下bool mkMButton;         // 鼠标中键是否按下bool mkRButton;         // 鼠标右键是否按下short x;                // 当前鼠标 x 坐标short y;                // 当前鼠标 y 坐标short wheel;            // 鼠标滚轮滚动值(120为基数)
};struct msg_createwindow {HANDLE hEvent;HWND hwnd;LPCWSTR classname;DWORD style;DWORD exstyle;size_t id;LPVOID param;
};//音乐类宏
#define MUSIC_ERROR  0xFFFFFFFFtypedef void (CALLBACK_PROC)();
typedef int (__stdcall MSG_KEY_PROC  )(void*, unsigned, int);
typedef int (__stdcall MSG_MOUSE_PROC)(void*, unsigned, int, int, int);
typedef CALLBACK_PROC       * LPCALLBACK_PROC;
typedef MSG_KEY_PROC        * LPMSG_KEY_PROC;
typedef MSG_MOUSE_PROC      * LPMSG_MOUSE_PROC;/*
注意:以下函数的注释后带'###'的函数表示未实现
*/struct VECTOR3D;// 3d 计算辅助函数
void EGEAPI rotate_point3d_x(VECTOR3D  * pt, float r); //弧度,右手定则
void EGEAPI rotate_point3d_y(VECTOR3D  * pt, float r);
void EGEAPI rotate_point3d_z(VECTOR3D  * pt, float r);struct VECTOR3D {float x, y, z;VECTOR3D() {x = 0; y = 0; z = 0;}VECTOR3D(float _x, float _y) {x = _x; y = _y; z = 0;}VECTOR3D(float _x, float _y, float _z) {x = _x; y = _y; z = _z;}VECTOR3D& operator = (const VECTOR3D& _fp)  {x = _fp.x; y = _fp.y; z = _fp.z;return *this;}VECTOR3D& operator += (const VECTOR3D& _fp);VECTOR3D& operator -= (const VECTOR3D& _fp);VECTOR3D operator + (const VECTOR3D& _fp) const;VECTOR3D operator - (const VECTOR3D& _fp) const;VECTOR3D& operator *= (float f); //缩放VECTOR3D operator * (float f) const; //缩放float operator * (const VECTOR3D& _fp) const; //点乘VECTOR3D operator & (const VECTOR3D& _fp) const; //叉乘VECTOR3D& operator &= (const VECTOR3D& _fp); //叉乘float GetModule() const;float GetSqrModule() const {return float(x*x + y*y + z*z);}VECTOR3D& SetModule(float m) {float t = m / GetModule();*this *= t;return *this;}VECTOR3D& Rotate(float rad, const VECTOR3D& v); //绕任意轴旋转,右手定则,rad为弧度VECTOR3D& Rotate(float rad, float x, float y, float z) {VECTOR3D v(x, y, z);return Rotate(rad, v);}VECTOR3D& Rotate(const VECTOR3D& e, const VECTOR3D& s = VECTOR3D(0.0f, 0.0f, 1.0f)); //从s到e之间的夹角确定旋转static float GetAngel(const VECTOR3D& e, const VECTOR3D& s = VECTOR3D(0.0f, 0.0f, 1.0f));
};class IMAGE;
typedef IMAGE *PIMAGE;
typedef const IMAGE *PCIMAGE;// 绘图环境相关函数
void EGEAPI setinitmode(int mode, int x = CW_USEDEFAULT, int y = CW_USEDEFAULT); //设置初始化模式,mode=0为普通,1为无边框窗口,xy是初始窗口坐标
int  EGEAPI getinitmode();
void EGEAPI initgraph(int Width, int Height, int Flag);        // 初始化图形环境
// Debug 配置下默认不显示 LOGO,Release 模式下默认显示。
#if !defined(NDEBUG) || defined(DEBUG) || defined(_DEBUG)
inline void EGEAPI initgraph(int Width, int Height) {initgraph(Width, Height, getinitmode());
}
#else
inline void EGEAPI initgraph(int Width, int Height) {initgraph(Width, Height, getinitmode()|INIT_WITHLOGO);
}
#endif
void EGEAPI initgraph(int* gdriver, int* gmode, const char* path);  // 兼容 Borland C++ 3.1 的重载,只使用 640x480x24bit
void EGEAPI closegraph();                                           // 关闭图形环境
bool EGEAPI is_run();                                               // 判断UI是否退出
void EGEAPI setcaption(LPCSTR  caption);
void EGEAPI setcaption(LPCWSTR caption);
void EGEAPI seticon(int icon_id);
int  EGEAPI attachHWND(HWND hWnd);void EGEAPI movewindow(int x, int y, bool redraw = true);	//移动窗口
void EGEAPI resizewindow(int width, int height);			//重设窗口尺寸void EGEAPI setrendermode(rendermode_e mode);// 绘图环境设置
PIMAGE  gettarget();
int     settarget(PIMAGE pbuf); // 用 NULL 设置窗口为绘图目标void EGEAPI cleardevice(PIMAGE pimg = NULL);                   // 清屏void EGEAPI getviewport(int *pleft, int *ptop, int *pright, int *pbottom, int *pclip = 0, PCIMAGE pimg = NULL); // 获取视图信息
void EGEAPI setviewport(int left, int top, int right, int bottom, int clip = 1, PIMAGE pimg = NULL);           // 设置视图
void EGEAPI clearviewport(PIMAGE pimg = NULL);                                                                 // 清空视图EGE_DEPRECATE(setactivepage)
void EGEAPI setactivepage(int page); // 设置当前绘图页,即绘图函数默认的输出缓冲,范围0-1,默认为0
EGE_DEPRECATE(setvisualpage)
void EGEAPI setvisualpage(int page); // 设置当前显示页,用于设置显示到窗口上的页,范围0-1,默认为0
EGE_DEPRECATE(swappage)
void EGEAPI swappage();
void EGEAPI window_getviewport(struct viewporttype * viewport);
void EGEAPI window_getviewport(int* left, int* top, int* right, int* bottom);
void EGEAPI window_setviewport(int  left, int  top, int  right, int  bottom);// 绘图属性
EGE_DEPRECATE(getlinestyle)
void EGEAPI getlinestyle(int *plinestyle, unsigned short *pupattern = NULL, int *pthickness = NULL, PCIMAGE pimg = NULL); // 获取当前线形
void EGEAPI setlinestyle(int linestyle, unsigned short upattern = 0, int thickness = 1, PIMAGE pimg = NULL);          // 设置当前线形
void EGEAPI setlinewidth(float width, PIMAGE pimg = NULL);          // 设置当前线宽
//EGE_DEPRECATE(getfillstyle)
//void getfillstyle(color_t *pcolor, int *ppattern = NULL, PIMAGE pimg = NULL);           // 获取填充类型 ###
EGE_DEPRECATE(setfillstyle)
void EGEAPI setfillstyle(int pattern, color_t color, PIMAGE pimg = NULL);  // 设置填充类型void EGEAPI setwritemode(int mode, PIMAGE pimg = NULL);         // 设置绘图位操作模式//void EGEAPI graphdefaults(PIMAGE pimg = NULL);                  // 重置所有绘图设置为默认值 ###// 色彩函数
color_t EGEAPI getcolor(PCIMAGE pimg = NULL);                   // 获取当前绘图前景色
color_t EGEAPI getfillcolor(PCIMAGE pimg = NULL);               // 获取当前绘图填充色
color_t EGEAPI getbkcolor(PCIMAGE pimg = NULL);                 // 获取当前绘图背景色
void EGEAPI setcolor(color_t color, PIMAGE pimg = NULL);        // 设置当前绘图前景色
void EGEAPI setfillcolor(color_t color, PIMAGE pimg = NULL);    // 设置当前绘图填充色
void EGEAPI setbkcolor(color_t color, PIMAGE pimg = NULL);      // 设置当前绘图背景色(设置并做背景色像素替换)
void EGEAPI setbkcolor_f(color_t color, PIMAGE pimg = NULL);    // 快速设置当前绘图背景色(只设置不绘画)
void EGEAPI setfontbkcolor(color_t color, PIMAGE pimg = NULL);  // 设置当前文字背景色
void EGEAPI setbkmode(int iBkMode, PIMAGE pimg = NULL);         // 设置背景混合模式(0=OPAQUE, 1=TRANSPARENT)// 兼容宏
#define RGBtoGRAY   rgb2gray
#define RGBtoHSL    rgb2hsl
#define RGBtoHSV    rgb2hsv
#define HSLtoRGB    hsl2rgb
#define HSVtoRGB    hsv2rgb// 颜色模型转换函数
color_t     EGEAPI rgb2gray(color_t rgb);
void        EGEAPI rgb2hsl(color_t rgb, float *H, float *S, float *L);
void        EGEAPI rgb2hsv(color_t rgb, float *H, float *S, float *V);
color_t     EGEAPI hsl2rgb(float H, float S, float L);
color_t     EGEAPI hsv2rgb(float H, float S, float V);// 按 Alpha 通道混合颜色,将 src 作为背景色,dst 作为前景色进行混合
color_t     EGEAPI alphablend(color_t dst, color_t src); // 使用 EGEGET_A(src) 作为 Alpha 值
color_t     EGEAPI alphablend(color_t dst, color_t src, unsigned char alpha);// 基本绘图函数color_t     EGEAPI getpixel  (int x, int y, PCIMAGE pimg = NULL);               // 获取点的颜色
void        EGEAPI putpixel  (int x, int y, color_t color, PIMAGE pimg = NULL); // 画点
color_t     EGEAPI getpixel_f(int x, int y, PCIMAGE pimg = NULL);               // 获取点的颜色
void        EGEAPI putpixel_f(int x, int y, color_t color, PIMAGE pimg = NULL); // 绝对坐标画点
void        EGEAPI putpixels  (int nPoint, int* pPoints, PIMAGE pimg = NULL);   // 批量画点
void        EGEAPI putpixels_f(int nPoint, int* pPoints, PIMAGE pimg = NULL);   // 批量画点void        EGEAPI putpixel_withalpha  (int x, int y, color_t color, PIMAGE pimg = NULL); // 带透明度画点
void        EGEAPI putpixel_withalpha_f(int x, int y, color_t color, PIMAGE pimg = NULL); // 带透明度绝对坐标画点
void        EGEAPI putpixel_savealpha  (int x, int y, color_t color, PIMAGE pimg = NULL); // 设置像素点的颜色(同时保留原有alpha值)
void        EGEAPI putpixel_savealpha_f(int x, int y, color_t color, PIMAGE pimg = NULL); // 设置像素点的颜色(同时保留原有alpha值,使用绝对坐标)void EGEAPI moveto(int x, int y, PIMAGE pimg = NULL);                      // 移动当前点(绝对坐标)
void EGEAPI moverel(int dx, int dy, PIMAGE pimg = NULL);                   // 移动当前点(相对坐标)void EGEAPI line(int x1, int y1, int x2, int y2, PIMAGE pimg = NULL);      // 画线
void EGEAPI linerel(int dx, int dy, PIMAGE pimg = NULL);                   // 画线(至相对坐标)
void EGEAPI lineto(int x, int y, PIMAGE pimg = NULL);                      // 画线(至绝对坐标)
void EGEAPI line_f(float x1, float y1, float x2, float y2, PIMAGE pimg = NULL);  // 画线
void EGEAPI linerel_f(float dx, float dy, PIMAGE pimg = NULL);                   // 画线(至相对坐标)
void EGEAPI lineto_f(float x, float y, PIMAGE pimg = NULL);                      // 画线(至绝对坐标)void EGEAPI rectangle(int left, int top, int right, int bottom, PIMAGE pimg = NULL);   // 画矩形//void EGEAPI getarccoords(int *px, int *py, int *pxstart, int *pystart, int *pxend, int *pyend, PIMAGE pimg = NULL);    // 获取圆弧坐标信息 ###
void EGEAPI arc(int x, int y, int stangle, int endangle, int radius, PIMAGE pimg = NULL);                  // 画圆弧
void EGEAPI circle(int x, int y, int radius, PIMAGE pimg = NULL);                                          // 画圆
void EGEAPI pieslice(int x, int y, int stangle, int endangle, int radius, PIMAGE pimg = NULL);             // 画填充圆扇形
void EGEAPI ellipse(int x, int y, int stangle, int endangle, int xradius, int yradius, PIMAGE pimg = NULL);// 画椭圆弧线
void EGEAPI fillellipse(int x, int y, int xradius, int yradius, PIMAGE pimg = NULL);                       // 画填充椭圆
void EGEAPI sector(int x, int y, int stangle, int endangle, int xradius, int yradius, PIMAGE pimg = NULL); // 画填充椭圆扇形
void EGEAPI roundrect(int left, int top, int right, int bottom, int xradius, int yradius, PIMAGE pimg = NULL); //画圆角矩形 void EGEAPI arcf(float x, float y, float stangle, float endangle, float radius, PIMAGE pimg = NULL);                    // 画圆弧
void EGEAPI circlef(float x, float y, float radius, PIMAGE pimg = NULL);                                                // 画圆
void EGEAPI pieslicef(float x, float y, float stangle, float endangle, float radius, PIMAGE pimg = NULL);               // 画填充圆扇形
void EGEAPI ellipsef(float x, float y, float stangle, float endangle, float xradius, float yradius, PIMAGE pimg = NULL);// 画椭圆弧线
void EGEAPI fillellipsef(float x, float y, float xradius, float yradius, PIMAGE pimg = NULL);                           // 画填充椭圆
void EGEAPI sectorf(float x, float y, float stangle, float endangle, float xradius, float yradius, PIMAGE pimg = NULL); // 画填充椭圆扇形void EGEAPI bar(int left, int top, int right, int bottom, PIMAGE pimg = NULL);                             // 画无边框填充矩形
void EGEAPI bar3d(int left, int top, int right, int bottom, int depth, int topflag, PIMAGE pimg = NULL);   // 画有边框三维填充矩形void EGEAPI fillrect(int left, int top, int right, int bottom, PIMAGE pimg = NULL);                      //画填充矩形 
void EGEAPI fillroundrect(int left, int top, int right, int bottom, int xradius, int yradius, PIMAGE pimg = NULL); //画填充圆角矩形 void EGEAPI drawpoly(int numpoints, const int *polypoints, PIMAGE pimg = NULL);     // 画多边形
void EGEAPI drawlines(int numlines, const int *polypoints, PIMAGE pimg = NULL);     // 画多条不连续线(扩展函数)
void EGEAPI drawbezier(int numpoints, const int *polypoints, PIMAGE pimg = NULL);   // 画bezier曲线(扩展函数)
void EGEAPI fillpoly(int numpoints, const int *polypoints, PIMAGE pimg = NULL);     // 画填充的多边形
void EGEAPI fillpoly_gradient(int numpoints, const ege_colpoint* polypoints, PIMAGE pimg = NULL); // 画渐变填充的多边形
void EGEAPI floodfill(int x, int y, int border, PIMAGE pimg = NULL);                // 按边界颜色填充区域
void EGEAPI floodfillsurface(int x, int y, color_t areacolor, PIMAGE pimg = NULL);  // 按起始点颜色填充区域#ifdef EGE_GDIPLUS
// 高级绘图函数(带AA)
// ege new_api
void EGEAPI ege_enable_aa(bool enable, PIMAGE pimg = NULL);void EGEAPI ege_line(float x1, float y1, float x2, float y2, PIMAGE pimg = NULL);
void EGEAPI ege_drawpoly(int numpoints, ege_point* polypoints, PIMAGE pimg = NULL);
void EGEAPI ege_drawcurve(int numpoints, ege_point* polypoints, PIMAGE pimg = NULL);
void EGEAPI ege_rectangle(float x, float y, float w, float h, PIMAGE pimg = NULL);
void EGEAPI ege_ellipse(float x, float y, float w, float h, PIMAGE pimg = NULL);
void EGEAPI ege_pie(float x, float y, float w, float h, float stangle, float sweepAngle, PIMAGE pimg = NULL);void EGEAPI ege_arc(float x, float y, float w, float h, float stangle, float sweepAngle, PIMAGE pimg = NULL);
void EGEAPI ege_bezier(int numpoints, ege_point* polypoints, PIMAGE pimg = NULL);void EGEAPI ege_fillpoly(int numpoints, ege_point* polypoints, PIMAGE pimg = NULL);
void EGEAPI ege_fillrect(float x, float y, float w, float h, PIMAGE pimg = NULL);
void EGEAPI ege_fillellipse(float x, float y, float w, float h, PIMAGE pimg = NULL);
void EGEAPI ege_fillpie(float x, float y, float w, float h, float stangle, float sweepAngle, PIMAGE pimg = NULL);void EGEAPI ege_setpattern_none(PIMAGE pimg = NULL);
void EGEAPI ege_setpattern_lineargradient(float x1, float y1, color_t c1, float x2, float y2, color_t c2, PIMAGE pimg = NULL);
void EGEAPI ege_setpattern_pathgradient(ege_point center, color_t centercolor,int count, ege_point* points, int colcount, color_t* pointscolor, PIMAGE pimg = NULL);
void EGEAPI ege_setpattern_ellipsegradient(ege_point center, color_t centercolor,float x, float y, float w, float h, color_t color, PIMAGE pimg = NULL);
void EGEAPI ege_setpattern_texture(PIMAGE srcimg, float x, float y, float w, float h, PIMAGE pimg = NULL);void EGEAPI ege_drawtext(LPCSTR  textstring, float x, float y, PIMAGE pimg = NULL);
void EGEAPI ege_drawtext(LPCWSTR textstring, float x, float y, PIMAGE pimg = NULL);void EGEAPI ege_setalpha(int alpha, PIMAGE pimg = NULL);
void EGEAPI ege_gentexture(bool gen, PIMAGE pimg = NULL);
void EGEAPI ege_puttexture(PCIMAGE srcimg, float x, float y, float w, float h, PIMAGE pimg = NULL);
void EGEAPI ege_puttexture(PCIMAGE srcimg, ege_rect dest, PIMAGE pimg = NULL);
void EGEAPI ege_puttexture(PCIMAGE srcimg, ege_rect dest, ege_rect src, PIMAGE pimg = NULL);//draw image
void EGEAPI ege_drawimage(PCIMAGE srcimg,int dstX, int dstY,PIMAGE pimg = NULL);
void EGEAPI ege_drawimage(PCIMAGE srcimg,int dstX, int dstY, int dstWidth, int dstHeight, int srcX, int srcY, int srcWidth, int srcHeight,PIMAGE pimg = NULL);// matrix for transformation
typedef struct ege_transform_matrix{float m11;float m12;float m21;float m22;float m31;float m32;	
}ege_transform_matrix;//transforms
void EGEAPI ege_transform_rotate(float angle,PIMAGE pimg = NULL);
void EGEAPI ege_transform_translate(float x,float y,PIMAGE pimg = NULL);
void EGEAPI ege_transform_scale(float scale_x, float scale_y,PIMAGE pimg = NULL);
void EGEAPI ege_transform_reset(PIMAGE pimg = NULL);
void EGEAPI ege_get_transform(ege_transform_matrix* pmatrix, PIMAGE pimg = NULL);
void EGEAPI ege_set_transform(ege_transform_matrix* const pmatrix, PIMAGE pimg = NULL);
ege_point EGEAPI ege_transform_calc(ege_point p, PIMAGE pimg = NULL); // Calculate transformed coordination of p; 
ege_point EGEAPI ege_transform_calc(float x, float y, PIMAGE pimg = NULL); // Calculate transformed coordination of point(x,y);//
#endif//We don't support VC 6
#ifndef EGE_COMPILERINFO_VC6
//Console 
BOOL init_console(); // Initialize the console 
void clear_console(); // clear the console
BOOL show_console(); //Show the Console
BOOL hide_console(); // hide the console
BOOL close_console(); //close the console and restore the old STD I/O
#endif//int  EGEAPI Begin2d();
//void EGEAPI EndRender();//时间函数(以下函数不能在多线程下使用,只能给绘图主线程调用)
void EGEAPI ege_sleep(long ms);     // 至少延迟ms毫秒
void EGEAPI delay(long ms);         // 至少延迟ms毫秒
void EGEAPI delay_ms(long ms);      // 平均延迟ms毫秒
void EGEAPI delay_fps(int fps);    // 平均延迟1000/fps毫秒,用于稳定帧率控制
void EGEAPI delay_fps(long fps);    // 平均延迟1000/fps毫秒,用于稳定帧率控制
void EGEAPI delay_fps(double fps);  // 平均延迟1000/fps毫秒,用于稳定帧率控制
void EGEAPI delay_jfps(int fps);   // 平均延迟1000/fps毫秒,用于稳定逻辑帧率控制,绘图带跳帧
void EGEAPI delay_jfps(long fps);   // 平均延迟1000/fps毫秒,用于稳定逻辑帧率控制,绘图带跳帧
void EGEAPI delay_jfps(double fps); // 平均延迟1000/fps毫秒,用于稳定逻辑帧率控制,绘图带跳帧
// 以下函数可以多线程下使用,非图形(worker)线程的sleep使用这个
void EGEAPI api_sleep(long dwMilliseconds);
double EGEAPI fclock(); // 获取以秒为单位的浮点时间,只用于计时用,精度0.01秒,// 文字相关函数
void EGEAPI outtext(LPCSTR  textstring, PIMAGE pimg = NULL);                   // 在当前位置输出文字
void EGEAPI outtext(LPCWSTR textstring, PIMAGE pimg = NULL);                   // 在当前位置输出文字
void EGEAPI outtext(CHAR  c, PIMAGE pimg = NULL);                              // 在当前位置输出字符
void EGEAPI outtext(WCHAR c, PIMAGE pimg = NULL);                              // 在当前位置输出字符
void EGEAPI outtextxy(int x, int y, LPCSTR  textstring, PIMAGE pimg = NULL);   // 在指定位置输出文字
void EGEAPI outtextxy(int x, int y, LPCWSTR textstring, PIMAGE pimg = NULL);   // 在指定位置输出文字
void EGEAPI outtextxy(int x, int y, CHAR c, PIMAGE pimg = NULL);               // 在指定位置输出字符
void EGEAPI outtextxy(int x, int y, WCHAR c, PIMAGE pimg = NULL);              // 在指定位置输出字符
void EGEAPI outtextrect(int x, int y, int w, int h, LPCSTR  textstring, PIMAGE pimg = NULL); // 在指定矩形范围输出文字
void EGEAPI outtextrect(int x, int y, int w, int h, LPCWSTR textstring, PIMAGE pimg = NULL); // 在指定矩形范围输出文字
void EGEAPI xyprintf(int x, int y, LPCSTR  fmt, ...); // 在指定位置输出格式化字符串,指定绘图目标调用settarget
void EGEAPI xyprintf(int x, int y, LPCWSTR fmt, ...); // 在指定位置输出格式化字符串,指定绘图目标调用settarget
void EGEAPI rectprintf(int x, int y, int w, int h, LPCSTR  fmt, ...); // 在指定矩形输出格式化字符串,指定绘图目标调用settarget
void EGEAPI rectprintf(int x, int y, int w, int h, LPCWSTR fmt, ...); // 在指定矩形输出格式化字符串,指定绘图目标调用settarget
int  EGEAPI textwidth(LPCSTR  textstring, PIMAGE pimg = NULL);                 // 获取字符串占用的像素宽
int  EGEAPI textwidth(LPCWSTR textstring, PIMAGE pimg = NULL);                 // 获取字符串占用的像素宽
int  EGEAPI textwidth(CHAR  c, PIMAGE pimg = NULL);
int  EGEAPI textwidth(WCHAR c, PIMAGE pimg = NULL);
int  EGEAPI textheight(LPCSTR  textstring, PIMAGE pimg = NULL);                // 获取字符串占用的像素高
int  EGEAPI textheight(LPCWSTR textstring, PIMAGE pimg = NULL);                // 获取字符串占用的像素高
int  EGEAPI textheight(CHAR  c, PIMAGE pimg = NULL);
int  EGEAPI textheight(WCHAR c, PIMAGE pimg = NULL);
void EGEAPI settextjustify(int horiz, int vert, PIMAGE pimg = NULL);// 设置当前字体样式(详见帮助)
//      nHeight: 字符的平均高度;
//      nWidth: 字符的平均宽度(0 表示自适应);
//      lpszFace: 字体名称;
//      nEscapement: 字符串的书写角度(单位 0.1 度);
//      nOrientation: 每个字符的书写角度(单位 0.1 度);
//      nWeight: 字符的笔画粗细(0 表示默认粗细);
//      bItalic: 是否斜体;
//      bUnderline: 是否下划线;
//      bStrikeOut: 是否删除线;
//      fbCharSet: 指定字符集;
//      fbOutPrecision: 指定文字的输出精度;
//      fbClipPrecision: 指定文字的剪辑精度;
//      fbQuality: 指定文字的输出质量;
//      fbPitchAndFamily: 指定以常规方式描述字体的字体系列。
void EGEAPI setfont(int nHeight, int nWidth, LPCSTR lpszFace,  PIMAGE pimg = NULL);
void EGEAPI setfont(int nHeight, int nWidth, LPCWSTR lpszFace, PIMAGE pimg = NULL);
void EGEAPI setfont(int nHeight, int nWidth, LPCSTR lpszFace,  int nEscapement, int nOrientation,int nWeight, int bItalic, int bUnderline, int bStrikeOut, PIMAGE pimg = NULL);
void EGEAPI setfont(int nHeight, int nWidth, LPCWSTR lpszFace, int nEscapement, int nOrientation,int nWeight, int bItalic, int bUnderline, int bStrikeOut, PIMAGE pimg = NULL);
void EGEAPI setfont(int nHeight, int nWidth, LPCSTR lpszFace,  int nEscapement, int nOrientation,int nWeight, int bItalic, int bUnderline, int bStrikeOut, BYTE fbCharSet,BYTE fbOutPrecision, BYTE fbClipPrecision, BYTE fbQuality, BYTE fbPitchAndFamily, PIMAGE pimg = NULL);
void EGEAPI setfont(int nHeight, int nWidth, LPCWSTR lpszFace, int nEscapement, int nOrientation,int nWeight, int bItalic, int bUnderline, int bStrikeOut, BYTE fbCharSet,BYTE fbOutPrecision, BYTE fbClipPrecision, BYTE fbQuality, BYTE fbPitchAndFamily, PIMAGE pimg = NULL);
void EGEAPI setfont(const LOGFONTA *font, PIMAGE pimg = NULL); // 设置当前字体样式
void EGEAPI setfont(const LOGFONTW *font, PIMAGE pimg = NULL); // 设置当前字体样式
void EGEAPI getfont(LOGFONTA *font, PCIMAGE pimg = NULL);      // 获取当前字体样式
void EGEAPI getfont(LOGFONTW *font, PCIMAGE pimg = NULL);      // 获取当前字体样式//图片函数
#define getmaxx getwidth
#define getmaxy getheightint EGEAPI getwidth(PCIMAGE pimg = NULL);          // 获取图片宽度
int EGEAPI getheight(PCIMAGE pimg = NULL);         // 获取图片高度
int EGEAPI getx(PCIMAGE pimg = NULL);              // 获取当前 x 坐标
int EGEAPI gety(PCIMAGE pimg = NULL);              // 获取当前 y 坐标PIMAGE         EGEAPI newimage();                      // 创建 PIMAGE
PIMAGE         EGEAPI newimage(int width, int height); // 创建 PIMAGE
void           EGEAPI delimage(PCIMAGE pImg);          // 删除 PIMAGE
color_t*       EGEAPI getbuffer(PIMAGE pImg);
const color_t* EGEAPI getbuffer(PCIMAGE pImg);int  EGEAPI resize_f(PIMAGE pDstImg, int width, int height);  //重设尺寸,但不填充背景色
int  EGEAPI resize(PIMAGE pDstImg, int width, int height); //重设尺寸,并填充背景色
int EGEAPI getimage(PIMAGE pDstImg, int srcX, int srcY, int srcWidth, int srcHeight);                             // 从屏幕获取图像
int EGEAPI getimage(PIMAGE pDstImg, PCIMAGE pSrcImg, int srcX, int srcY, int srcWidth, int srcHeight);            // 从另一个 PIMAGE 对象中获取图像
int  EGEAPI getimage(PIMAGE pDstImg, LPCSTR  pImgFile, int zoomWidth = 0, int zoomHeight = 0);                     // 从图片文件获取图像(bmp/jpg/gif/emf/wmf)
int  EGEAPI getimage(PIMAGE pDstImg, LPCWSTR pImgFile, int zoomWidth = 0, int zoomHeight = 0);                     // 从图片文件获取图像(bmp/jpg/gif/emf/wmf)
int  EGEAPI getimage(PIMAGE pDstImg, LPCSTR  pResType, LPCSTR  pResName, int zoomWidth = 0, int zoomHeight = 0);   // 从资源文件获取图像(bmp/jpg/gif/emf/wmf)
int  EGEAPI getimage(PIMAGE pDstImg, LPCWSTR pResType, LPCWSTR pResName, int zoomWidth = 0, int zoomHeight = 0);   // 从资源文件获取图像(bmp/jpg/gif/emf/wmf)
void EGEAPI putimage(int dstX, int dstY, PCIMAGE pSrcImg, DWORD dwRop = SRCCOPY);                                  // 绘制图像到屏幕
void EGEAPI putimage(int dstX, int dstY, int dstWidth, int dstHeight, PCIMAGE pSrcImg, int srcX, int srcY, DWORD dwRop = SRCCOPY);                                // 绘制图像到屏幕(指定宽高)
void EGEAPI putimage(int dstX, int dstY, int dstWidth, int dstHeight, PCIMAGE pSrcImg, int srcX, int srcY, int srcWidth, int srcHeight, DWORD dwRop = SRCCOPY);   // 绘制图像到屏幕(指定源宽高和目标宽高进行拉伸)
void EGEAPI putimage(PIMAGE pDstImg, int dstX, int dstY, PCIMAGE pSrcImg, DWORD dwRop = SRCCOPY);                                                                 // 绘制图像到另一图像中
void EGEAPI putimage(PIMAGE pDstImg, int dstX, int dstY, int dstWidth, int dstHeight, PCIMAGE pSrcImg, int srcX, int srcY, DWORD dwRop = SRCCOPY);                // 绘制图像到另一图像中(指定宽高)
void EGEAPI putimage(PIMAGE pDstImg, int dstX, int dstY, int dstWidth, int dstHeight, PCIMAGE pSrcImg, int srcX, int srcY, int srcWidth, int srcHeight, DWORD dwRop = SRCCOPY);   // 绘制图像到另一图像中(指定源宽高和目标宽高进行拉伸)
int  EGEAPI saveimage(PCIMAGE pimg, LPCSTR  filename);
int  EGEAPI saveimage(PCIMAGE pimg, LPCWSTR filename);
int  EGEAPI savepng(PCIMAGE pimg, LPCSTR  filename, int bAlpha = 0);
int  EGEAPI savepng(PCIMAGE pimg, LPCWSTR filename, int bAlpha = 0);
int  EGEAPI getimage_pngfile(PIMAGE pimg, LPCSTR  filename);
int  EGEAPI getimage_pngfile(PIMAGE pimg, LPCWSTR filename);int EGEAPI putimage_transparent(PIMAGE imgdest,         // handle to destPCIMAGE imgsrc,         // handle to sourceint nXOriginDest,       // x-coord of destination upper-left cornerint nYOriginDest,       // y-coord of destination upper-left cornercolor_t crTransparent,  // color to make transparentint nXOriginSrc = 0,    // x-coord of source upper-left cornerint nYOriginSrc = 0,    // y-coord of source upper-left cornerint nWidthSrc = 0,      // width of source rectangleint nHeightSrc = 0      // height of source rectangle
);
int EGEAPI putimage_alphablend(PIMAGE imgdest,         // handle to destPCIMAGE imgsrc,         // handle to sourceint nXOriginDest,       // x-coord of destination upper-left cornerint nYOriginDest,       // y-coord of destination upper-left cornerunsigned char alpha,    // alphaint nXOriginSrc = 0,    // x-coord of source upper-left cornerint nYOriginSrc = 0,    // y-coord of source upper-left cornerint nWidthSrc = 0,      // width of source rectangleint nHeightSrc = 0      // height of source rectangle
);
int EGEAPI putimage_alphatransparent(PIMAGE imgdest,         // handle to destPCIMAGE imgsrc,         // handle to sourceint nXOriginDest,       // x-coord of destination upper-left cornerint nYOriginDest,       // y-coord of destination upper-left cornercolor_t crTransparent,  // color to make transparentunsigned char alpha,    // alphaint nXOriginSrc = 0,    // x-coord of source upper-left cornerint nYOriginSrc = 0,    // y-coord of source upper-left cornerint nWidthSrc = 0,      // width of source rectangleint nHeightSrc = 0      // height of source rectangle
);
int EGEAPI putimage_withalpha(PIMAGE imgdest,         // handle to destPCIMAGE imgsrc,         // handle to sourceint nXOriginDest,       // x-coord of destination upper-left cornerint nYOriginDest,       // y-coord of destination upper-left cornerint nXOriginSrc = 0,    // x-coord of source upper-left cornerint nYOriginSrc = 0,    // y-coord of source upper-left cornerint nWidthSrc = 0,      // width of source rectangleint nHeightSrc = 0      // height of source rectangle
);
int EGEAPI putimage_withalpha(PIMAGE imgdest,         // handle to destPCIMAGE imgsrc,         // handle to sourceint nXOriginDest,       // x-coord of destination upper-left cornerint nYOriginDest,       // y-coord of destination upper-left cornerint nWidthDest,         // width of destination rectangleint nHeightDest,        // height of destination rectangle	int nXOriginSrc,        // x-coord of source upper-left cornerint nYOriginSrc,        // y-coord of source upper-left cornerint nWidthSrc,          // width of source rectangleint nHeightSrc          // height of source rectangle
);
int EGEAPI putimage_alphafilter(PIMAGE imgdest,         // handle to destPCIMAGE imgsrc,         // handle to sourceint nXOriginDest,       // x-coord of destination upper-left cornerint nYOriginDest,       // y-coord of destination upper-left cornerPCIMAGE imgalpha,       // alphaint nXOriginSrc,        // x-coord of source upper-left cornerint nYOriginSrc,        // y-coord of source upper-left cornerint nWidthSrc,          // width of source rectangleint nHeightSrc          // height of source rectangle
);
int EGEAPI imagefilter_blurring (PIMAGE imgdest,         // handle to destint intensity,int alpha,int nXOriginDest = 0,int nYOriginDest = 0,int nWidthDest = 0,int nHeightDest = 0
);
int EGEAPI putimage_rotate(PIMAGE imgdest,PCIMAGE imgtexture,int nXOriginDest,int nYOriginDest,float centerx,float centery,float radian,int btransparent = 0,            // transparent (1) or not (0)int alpha = -1,                  // in range[0, 256], alpha== -1 means no alphaint smooth = 0
);int EGEAPI putimage_rotatezoom(PIMAGE imgdest,PCIMAGE imgtexture,int nXOriginDest,int nYOriginDest,float centerx,float centery,float radian,float zoom,int btransparent = 0,            // transparent (1) or not (0)int alpha = -1,                  // in range[0, 256], alpha== -1 means no alphaint smooth = 0
);int EGEAPI putimage_rotatetransparent(PIMAGE imgdest,/* handle to dest, NULL means the SCREEN  */PCIMAGE imgsrc,/* handle to source */int xCenterDest,/* x-coord of rotation center in dest */int yCenterDest,/* y-coord of rotation center in dest */int xCenterSrc, /* x-coord of rotation center in source */int yCenterSrc,/* y-coord of rotation center in source */color_t crTransparent, /* color to make transparent */float radian, /* rotation angle (clockwise, in radian) */float zoom=1.0 /* zoom factor */
); int EGEAPI putimage_rotatetransparent(PIMAGE imgdest,/* handle to dest, NULL means the SCREEN */PCIMAGE imgsrc,/* handle to source */int xCenterDest,/* x-coord of rotation center in dest */int yCenterDest,/* y-coord of rotation center in dest */int xOriginSrc, /* x-coord of source upper-left corner */int yOriginSrc, /* y-coord of source upper-left corner */int widthSrc, /* width of source rectangle */int heightSrc, /* height of source rectangle */int xCenterSrc, /* x-coord of rotation center in source */int yCenterSrc,/* y-coord of rotation center in source */color_t crTransparent, /* color to make transparent */float radian, /* rotation angle (clockwise, in radian) */float zoom=1.0 /* zoom factor */
); // 其它函数HWND        EGEAPI getHWnd();         // 获取绘图窗口句柄
HINSTANCE   EGEAPI getHInstance();
HDC         EGEAPI getHDC(PCIMAGE pImg = NULL);PVOID       EGEAPI getProcfunc();
int         EGEAPI getGraphicsVer();   // 获取当前版本
float       EGEAPI getfps();           // 获取当前帧率//随机函数
void            EGEAPI randomize();
unsigned int    EGEAPI random(unsigned int n);
double          EGEAPI randomf();//高级输入函数
// title 对话框标题, text 对话框提示文字, buf接收输入数据的字符串指针, len指出buf的最大长度,也同时会限制输入内容长度
int EGEAPI inputbox_getline(LPCSTR  title, LPCSTR  text, LPSTR  buf, int len);  //弹出对话框,让用户输入,当前程序运行暂停,返回非0表示输入有效,0为无效
int EGEAPI inputbox_getline(LPCWSTR title, LPCWSTR text, LPWSTR buf, int len);  //弹出对话框,让用户输入,当前程序运行暂停,返回非0表示输入有效,0为无效//键盘处理函数
int     EGEAPI kbmsg();
key_msg EGEAPI getkey();
EGE_DEPRECATE(getchEx)
int     EGEAPI getchEx(int flag);
EGE_DEPRECATE(kbhitEx)
int     EGEAPI kbhitEx(int flag);
int     EGEAPI keystate(int key);       // 获得键码为key的键(见key_code_e)是否按下,如果key使用鼠标按键的键码,则获得的是鼠标键状态
void    EGEAPI flushkey();              // 清空键盘消息缓冲区#if !defined(_INC_CONIO) && !defined(_CONIO_H_)
#define _INC_CONIO
#define _CONIO_H_
#else
#define getch getchEx
#define kbhit kbhitEx
#endif//鼠标处理函数
int         EGEAPI mousemsg();                  // 检查是否存在鼠标消息
mouse_msg   EGEAPI getmouse();                  // 获取一个鼠标消息。如果没有,就等待
EGE_DEPRECATE(GetMouseMsg)
MOUSEMSG    EGEAPI GetMouseMsg();               // (不推荐使用的函数)获取一个鼠标消息。如果没有,就等待void        EGEAPI flushmouse();                // 清空鼠标消息缓冲区
int         EGEAPI showmouse(int bShow);        // 设置是否显示鼠标
int         EGEAPI mousepos(int *x, int *y); // 获取当前鼠标位置/*
callback function define as:
int __stdcall on_msg_key(void* param, unsigned msg, int key);
msg: see 'enum message_event'
key: keycode
return zero means process this message, otherwise means pass it and then process with 'getkey' function
*/
//int message_addkeyhandler(void* param, LPMSG_KEY_PROC func);        //设置键盘回调函数
/*
callback function define as:
int __stdcall on_msg_mouse(void* param, unsigned msg, int key, int x, int y);
msg: see 'enum message_event'
key: see 'enum message_mouse', if msg==MSG_EVENT_WHELL, key is a int number that indicates the distance the wheel is rotated, expressed in multiples or divisions of WHEEL_DELTA, which is 120.
x,y: current mouse (x, y)
return zero means process this message, otherwise means pass it and then process with 'GetMouseMsg' function
*/
//int message_addmousehandler(void* param, LPMSG_MOUSE_PROC func);    //设置鼠标回调函数
int EGEAPI SetCloseHandler(LPCALLBACK_PROC func);class MUSIC
{
public:MUSIC();virtual ~MUSIC();operator HWND()const{ return (HWND)m_dwCallBack; }
public:int   IsOpen() { return (m_DID != MUSIC_ERROR) ? 1 : 0; }DWORD OpenFile(LPCSTR  filepath);DWORD OpenFile(LPCWSTR filepath);DWORD Play(DWORD dwFrom = MUSIC_ERROR, DWORD dwTo = MUSIC_ERROR);DWORD Pause();DWORD Seek(DWORD dwTo); //播放位置定位,单位为msDWORD SetVolume(float value);DWORD Close();DWORD Stop();DWORD GetPosition();DWORD GetLength();// 以下函数GetPlayStatus的返回值为以下之一(意义看后缀):// MUSIC_MODE_NOT_OPEN   //没有正确打开// MUSIC_MODE_NOT_READY  //设备没准备好 (较少使用)// MUSIC_MODE_PAUSE  //暂停中// MUSIC_MODE_PLAY   //正在播放// MUSIC_MODE_STOP   //成功打开后,或者播放完是这个状态// MUSIC_MODE_OPEN   //打开中 (较少使用)// MUSIC_MODE_SEEK   //定位中 (较少使用)DWORD GetPlayStatus();
private:DWORD       m_DID;PVOID       m_dwCallBack;
};/* 压缩函数 */
/* 压缩时dest缓冲区要保证最小大小为sourceLen * 1.001 + 16 */
/* 调用compress/compress2前,*destLen必须有值,表示dest缓冲区的最大大小,返回时这个值表示实际大小 */
/* compress2 的level 从0-9,0不压缩,9最大压缩,compress函数使用默认值6 */
int             EGEAPI ege_compress(void *dest, unsigned long *destLen, const void *source, unsigned long sourceLen);
int             EGEAPI ege_compress2(void *dest, unsigned long *destLen, const void *source, unsigned long sourceLen, int level);
int             EGEAPI ege_uncompress(void *dest, unsigned long *destLen, const void *source, unsigned long sourceLen);
unsigned long   EGEAPI ege_uncompress_size(const void *source, unsigned long sourceLen); /* 返回0表示错误,其它表示大小 */NAMESPACE_EGE_R#ifndef EGE_GRAPH_LIB_BUILD#if defined(_MSC_VER) && (defined(HIDE_CONSOLE) || !defined(SHOW_CONSOLE))
#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )
#endif#define Sleep(ms) delay_ms(ms)#endif#if !defined(_MSC_VER)
#define WinMain(...) WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
#elif defined(_CONSOLE)
#if (_MSC_VER > 1200)
#define WinMain(...) main(int argc, char* argv[])
#else
#define WinMain main
#endif
#endif#endif

相关文章:

C++合作开发项目:美术馆1.0

快乐星空MakerZINCFFO 合作入口&#xff1a;CM工作室 效果图&#xff1a; 代码&#xff1a; &#xff08;还有几个音乐&#xff01;&#xff09; main.cpp #include <bits/stdc.h> #include <windows.h> #include <conio.h> #include <time.h> #in…...

QT 5 同时使用Q_DECLARE_METATYPE(pointdata) 和继承 QObjectUserData

在Qt框架中&#xff0c;QObjectUserData 和 Q_DECLARE_METATYPE() 宏都与Qt的元对象系统有关&#xff0c;但它们的使用方式有一些特别的限制和兼容性问题。 关于QObjectUserData&#xff1a; QObjectUserData 是一个用来存储用户数据的类。在Qt中&#xff0c;每个 QObject 可以…...

【MySQL进阶之路 | 高级篇】范式概述与第一范式

1. 范式简介 在关系型数据库中&#xff0c;关于数据表的设计的基本原则&#xff0c;规则就称为范式。可以理解为&#xff0c;一张数据表的设计结果需要满足的某种设计标准的级别。要想设计一个结构合理的关系型数据库&#xff0c;必须满足一定的范式。 范式的英文名是Normal …...

Open-TeleVision复现及机器人迁移

相关信息 标题 Open-TeleVision: Teleoperation with Immersive Active Visual Feedback作者 Xuxin Cheng1 Jialong Li1 Shiqi Yang1 Ge Yang2 Xiaolong Wang1 UC San Diego1 MIT2主页 https://robot-tv.github.io/链接 https://robot-tv.github.io/resources/television.pdf代…...

Notepad++换安装路径之后,右键打开方式报错:Windows无法访问指定设备、路径或文件。你可能没有适当的权限访问该项目。的处理方法

把Notepad添加到右键打开方式&#xff0c;可以参考下面的3篇文章添加&#xff1a; https://blog.csdn.net/xiaoerbuyu1233/article/details/88287747 https://blog.csdn.net/qq_44000337/article/details/120277317 https://www.cnblogs.com/zhrngM/p/12899026.html 这里主要是…...

【Flutter 面试题】 使用成熟状态管理库的弊端有哪些?

【Flutter 面试题】 使用成熟状态管理库的弊端有哪些? 文章目录 写在前面口述回答补充说明写在前面 🙋 关于我 ,小雨青年 👉 CSDN博客专家,GitChat专栏作者,阿里云社区专家博主,51CTO专家博主。2023博客之星TOP153。 👏🏻 正在学 Flutter 的同学,你好! 😊 …...

Apache Commons技术详解

文章目录 简介官网链接原理基础使用Commons LangCommons Collections 高级使用Commons IOCommons Math 优缺点优点缺点 总结 简介 Apache Commons 是 Apache 软件基金会下的一个项目&#xff0c;旨在提供可重用的Java组件。这些组件覆盖了广泛的编程任务&#xff0c;从字符串处…...

怎样使用 Juicer tools 的 dump 命令将.hic文件转换为交互矩阵matrix计数文件 (Windows)

创作日志&#xff1a; 万恶的生信…一个scHiC数据集没有提供处理好的计数文件&#xff0c;需要从.hic转换。Github一个个好长的文档看了好久才定位到 juicer tools 的dump命令&#xff0c;使用起来比想象中简单。 一、下载Juicer tools 注意&#xff1a;使用Juicer tools的前提…...

【Docker】Docker Desktop - WSL update failed

问题描述 Windows上安装完成docker desktop之后&#xff0c;第一次启动失败&#xff0c;提示&#xff1a;WSL update failed 解决方案 打开Windows PowerShell 手动执行&#xff1a; wsl --set-default-version 2 wsl --update...

基于rsync\unlink 等一套本机备份跨机备份历史备份清理shell 脚本

一 摘要 本文主要介绍一套本地备份、跨机器备份、历史备份清理脚本&#xff0c;使用场景如数据库备份等 二 环境 linux 系列系统 基本都支持&#xff0c;个别命令可能需要微调。 2.1 实验环境 [rootlocalhost rsync]# cat /etc/centos-release CentOS Linux release 7.9.2…...

使用nginx实现一个端口和ip访问多个vue前端

前言&#xff1a;由于安全组要求&#xff0c;前端页面只开放一个端口&#xff0c;但是项目有多个前端&#xff0c;此前一直使用的是一个前端使用单独一个端口进行访问&#xff0c;现在需要调整。 需要实现&#xff1a;这里以80端口为例&#xff0c;两个前端分别是&#xff1a;p…...

Linux云计算 |【第一阶段】SERVICES-DAY5

主要内容&#xff1a; 源码编译安装、rsync同步操作、inotify实时同步、数据库服务基础 实操前骤&#xff1a;&#xff08;所需tools.tar.gz与users.sql&#xff09; 1.两台主机设置SELinnx和关闭防火墙 setenforce 0 systemctl stop firewalld.service //停止防火墙 sy…...

IP第一次综合实验

一、实验拓扑 二、实验要求 1、R6为ISP&#xff0c;接口IP地址均为公有地址&#xff0c;该设备只能配置地址之后不能冉对其进行任何配置 2、R1-R5为局域网&#xff0c;私有Ip地址192.168.1.0/24&#xff0c;请合理分配 3、R1、82、R4&#xff0c;各有两个环回IP地址;R5,R6各…...

Could not load dynamic library ‘cudart64_100.dll‘

python代码报错 Could not load dynamic library cudart64_100.dll; dlerror: cudart64_100.dll not found 2024-07-22 14:19:21.931639: I tensorflow/stream_executor/cuda/cudart_stub.cc:29] Ignore above cudart dlerror if you do not have a GPU set up on your machine…...

四大引用——强软弱虚

目录 一、强引用 二、软引用 三、弱引用 四、虚引用 一、强引用 强引用是在程序代码之中普遍存在的&#xff0c;类似于“Object obj new Object()”&#xff0c;obj变量引用Object这个对象&#xff0c;就叫做强引用。当内存空间不足&#xff0c;Java虚拟机宁愿抛出OutOfMe…...

MySQL--索引(2)

InnoDB 1.索引类型 主键索引(Primary Key) 数据表的主键列使用的就是主键索引。 一张数据表有只能有一个主键&#xff0c;并且主键不能为 null&#xff0c;不能重复。 在 mysql 的 InnoDB 的表中&#xff0c;当没有显示的指定表的主键时&#xff0c;InnoDB 会自动先检查表中是…...

JVM类加载机制详解

Java在运行期才对类进行加载到内存、连接、初始化过程。这使得Java应用具有极高的灵活性和拓展性&#xff0c;可以依赖运行期进行动态加载和动态连接。 主要加载哪些&#xff1f;Java中的数据类型分为基本数据类型和引用数据类型&#xff0c;基本数据类型由虚拟机预先定义&…...

【MATLAB实战】基于UNet的肺结节的检测

数据&#xff1a; 训练过程图 算法简介&#xff1a; UNet网络是分割任务中的一个经典模型,因其整体形状与"U"相似而得名,"U"形结构有助于捕获多尺度信息,并促进了特征的精确重建&#xff0c;该网络整体由编码器,解码器以及跳跃连接三部分组成。 编码器由…...

Elasticsearch基础(五):使用Kibana Discover探索数据

文章目录 使用Kibana Discover探索数据 一、添加样例数据 二、数据筛选 三、保存搜索 使用Kibana Discover探索数据 一、添加样例数据 登录Kibana。在Kibana主页的通过添加集成开始使用区域&#xff0c;单击试用样例数据。 在更多添加数据的方式页面下方&#xff0c;单击…...

爬取百度图片,想爬谁就爬谁

前言 既然是做爬虫&#xff0c;那么肯定就会有一些小心思&#xff0c;比如去获取一些自己喜欢的资料等。 去百度图片去抓取图片吧 打开百度图片网站&#xff0c;点击搜索xxx&#xff0c;打开后&#xff0c;滚动滚动条&#xff0c;发现滚动条越来越小&#xff0c;说明图片加载…...

HTTP 缓存

缓存 web缓存是可以自动保存常见的文档副本的HTTP设备&#xff0c;当web请求抵达缓存时&#xff0c;如果本地有已经缓存的副本&#xff0c;就可以从本地存储设备而不是从原始服务器中提取这个文档。使用缓存有如下的优先。 缓存减少了冗余的数据传输缓存环节了网络瓶颈的问题…...

设计模式实战:图形编辑器的设计与实现

简介 本篇文章将介绍如何设计一个图形编辑器系统,系统包括图形对象的创建、组合、操作及撤销等功能。我们将通过这一项目,应用命令模式、组合模式和备忘录模式来解决具体的设计问题。 问题描述 设计一个图形编辑器系统,用户可以创建并操作图形对象,将多个图形对象组合成…...

.NET 情报 | 分析某云系统添加管理员漏洞

01阅读须知 此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等&#xff08;包括但不限于&#xff09;进行检测或维护参考&#xff0c;未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失&#xf…...

vue检测页面手指滑动距离,执行回调函数,使用混入的语法,多个组件都可以使用

mixin.ts 定义滑动距离的变量和检测触摸开始的方法&#xff0c;滑动方法&#xff0c;并导出两个方法 sendTranslateX.value > 250 && sendTranslateY.value < -100是向上滑动&#xff0c;满足距离后执行回调函数func&#xff0c;并在一秒内不再触发&#xff0c;一…...

opencv 优势

OpenCV(开源计算机视觉库)是一个广泛使用的计算机视觉和机器学习软件框架。它最初由Intel开发,后来由Itseez公司维护,最终于2015年成为非营利组织OpenCV.org的一部分。OpenCV的目的是实现一个易于使用且高效的计算机视觉框架,支持实时视觉应用。 以下是关于OpenCV的一些关…...

1-如何挑选Android编译服务器

前几天&#xff0c;我在我的星球发了一条动态&#xff1a;入手洋垃圾、重操老本行。没错&#xff0c;利用业余时间&#xff0c;我又重新捣鼓捣鼓代码了。在接下来一段时间&#xff0c;我会分享我从服务器的搭建到完成Android产品开发的整个过程。这些东西之前都是折腾过的&…...

【JS逆向课件:第十六课:Scrapy基础2】

ImagePipeLines的请求传参 环境安装&#xff1a;pip install Pillow USER_AGENT Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36需求&#xff1a;将图片的名称和详情页中图片的数据进行爬取&a…...

使用 PowerShell 自动化图像识别与鼠标操作

目录 前言功能概述代码实现1. 引入必要的程序集2. 定义读取文件行的函数3. 定义加载图片的函数4. 定义查找小图像在大图像中的位置的函数5. 定义截取全屏的函数6. 定义模拟鼠标点击的函数7. 定义主函数 配置文件示例运行脚本结语全部代码提示打包exe 下载地址 前言 在日常工作…...

组队学习——支持向量机

本次学习支持向量机部分数据如下所示 IDmasswidthheightcolor_scorefruit_namekind 其中ID&#xff1a;1-59是对应训练集和验证集的数据&#xff0c;60-67是对应测试集的数据&#xff0c;其中水果类别一共有四类包括apple、lemon、orange、mandarin。要求根据1-59的数据集的自…...

【数据中心】数据中心的IP封堵防护:构建网络防火墙的基石

数据中心的IP封堵防护&#xff1a;构建网络防火墙的基石 引言一、理解IP封堵二、IP封堵的功能模块及其核心技术三、实施IP封堵的关键策略四、结论 引言 在当今高度互联的世界里&#xff0c;数据中心成为信息流动和存储的神经中枢&#xff0c;承载着企业和组织的大量关键业务。…...

LangChain的使用详解

一、 概念介绍 1.1 Langchain 是什么&#xff1f; 官方定义是&#xff1a;LangChain是一个强大的框架&#xff0c;旨在帮助开发人员使用语言模型构建端到端的应用程序&#xff0c;它提供了一套工具、组件和接口&#xff0c;可简化创建由大型语言模型 (LLM) 和聊天模型提供…...

Modbus转BACnet/IP网关快速对接Modbus协议设备与BA系统

摘要 在智能建筑和工业自动化领域&#xff0c;Modbus和BACnet/IP协议的集成应用越来越普遍。BA&#xff08;Building Automation&#xff0c;楼宇自动化&#xff09;系统作为现代建筑的核心&#xff0c;需要高效地处理来自不同协议的设备数据&#xff0c;负责监控和管理建筑内…...

万字长文之分库分表里无分库分表键如何查询【后端面试题 | 中间件 | 数据库 | MySQL | 分库分表 | 其他查询】

在很多业务里&#xff0c;分库分表键都是根据主要查询筛选出来的&#xff0c;那么不怎么重要的查询怎么解决呢&#xff1f; 比如电商场景下&#xff0c;订单都是按照买家ID来分库分表的&#xff0c;那么商家该怎么查找订单呢&#xff1f;或是买家找客服&#xff0c;客服要找到对…...

如何查看jvm资源占用情况

如何设置jar的内存 java -XX:MetaspaceSize256M -XX:MaxMetaspaceSize256M -XX:AlwaysPreTouch -XX:ReservedCodeCacheSize128m -XX:InitialCodeCacheSize128m -Xss512k -Xmx2g -Xms2g -XX:UseG1GC -XX:G1HeapRegionSize4M -jar your-application.jar以上配置为堆内存4G jar项…...

科研绘图系列:R语言TCGA分组饼图(multiple pie charts)

介绍 在诸如癌症基因组图谱(TCGA)等群体研究项目中,为了有效地表征和比较不同群体的属性分布,科研人员广泛采用饼图作为数据可视化的工具。饼图通过将一个完整的圆形划分为若干个扇形区域,每个扇形区域的面积大小直接对应其代表的属性在整体中的占比。这种图形化的展示方…...

ReadAgent,一款具有要点记忆的人工智能阅读代理

人工智能咨询培训老师叶梓 转载标明出处 现有的大模型&#xff08;LLMs&#xff09;在处理长文本时受限于固定的最大上下文长度&#xff0c;并且当输入文本越来越长时&#xff0c;性能往往会下降&#xff0c;即使在没有超出明确上下文窗口的情况下&#xff0c;LLMs 的性能也会随…...

构建智能:利用Gradle项目属性控制构建行为

构建智能&#xff1a;利用Gradle项目属性控制构建行为 Gradle作为一款强大的构建工具&#xff0c;提供了丰富的项目属性管理功能。通过项目属性&#xff0c;开发者可以灵活地控制构建行为&#xff0c;实现条件编译、动态配置和多环境构建等高级功能。本文将详细解释如何在Grad…...

如何通过smtp设置使ONLYOFFICE协作空间服务器可以发送注册邀请邮件

什么是ONLYOFFICE协作空间 ONLYOFFICE协作空间&#xff0c;是Ascensio System SIA公司出品的&#xff0c;基于Web的&#xff0c;开源的&#xff0c;跨平台的&#xff0c;在线文档编辑和协作的解决方案。在线Office包含了最基本的办公三件套&#xff1a;文档编辑器、幻灯片编辑…...

SQL labs靶场-SQL注入入门

靶场及环境配置参考 一&#xff0c;工具准备。 推荐下载火狐浏览器&#xff0c;并下载harkbar插件&#xff08;v2&#xff09;版本。hackbar使用教程在此不做过多描述。 补充&#xff1a;url栏内部信息会进行url编码。 二&#xff0c;SQL注入-less1。 1&#xff0c;判断传参…...

HarmonyOS应用开发者高级认证,Next版本发布后最新题库 - 单选题序号4

基础认证题库请移步&#xff1a;HarmonyOS应用开发者基础认证题库 注&#xff1a;有读者反馈&#xff0c;题库的代码块比较多&#xff0c;打开文章时会卡死。所以笔者将题库拆分&#xff0c;单选题20个为一组&#xff0c;多选题10个为一组&#xff0c;题库目录如下&#xff0c;…...

使用LSTM完成时间序列预测

c 在本教程中&#xff0c;我们将介绍一个简单的示例&#xff0c;旨在帮助初学者入门时间序列预测和 PyTorch 的使用。通过这个示例&#xff0c;你可以学习如何使用 LSTMCell 单元来处理时间序列数据。 我们将使用两个 LSTMCell 单元来学习从不同相位开始的正弦波信号。模型在…...

《数据结构:顺序实现二叉树》

文章目录 一、树1、树的结构与概念2、树相关术语 二、二叉树1、概念与结构2、满二叉树3、完全二叉树 三、顺序二叉树存储结构四、实现顺序结构二叉树1、堆的概念与结构2、堆的实现3、堆的排序 一、树 1、树的结构与概念 树是一种非线性的数据结构&#xff0c;它是由n&#xff…...

【HarmonyOS】HarmonyOS NEXT学习日记:六、渲染控制、样式结构重用

【HarmonyOS】HarmonyOS NEXT学习日记&#xff1a;六、渲染控制、样式&结构重用 渲染控制包含了条件渲染和循环渲染&#xff0c;所谓条件渲染&#xff0c;即更具状态不同&#xff0c;选择性的渲染不同的组件。 而循环渲染则是用于列表之内的、多个重复元素组成的结构中。 …...

【防火墙】防火墙NAT、智能选路综合实验

实验拓扑 实验要求 7&#xff0c;办公区设备可以通过电信链路和移动链路上网(多对多的NAT&#xff0c;并且需要保留一个公网IP不能用来转换) 8&#xff0c;分公司设备可以通过总公司的移动链路和电信链路访问到Dmz区的http服务器 9&#xff0c;多出口环境基于带宽比例进行选路…...

VUE之---slot插槽

什么是插槽 slot 【插槽】&#xff0c; 是 Vue 的内容分发机制&#xff0c; 组件内部的模板引擎使用slot 元素作为承载分发内容的出口。slot 是子组件的一个模板标签元素&#xff0c; 而这一个标签元素是否显示&#xff0c; 以及怎么显示是由父组件决定的。 VUE中slot【插槽】…...

linux、windows、macos,命令终端清屏

文章目录 LinuxWindowsmacOS 在Linux、Windows和macOS的命令终端中&#xff0c;清屏的命令或方法各不相同。以下是针对这三种系统的清屏方法&#xff1a; Linux clear命令&#xff1a;这是最常用的清空终端屏幕的命令之一。在终端中输入clear命令后&#xff0c;屏幕上的所有内容…...

【RaspberryPi】树莓派Matlab/Simulink支持包安装与使用

官网支持与兼容性 Raspberry Pi Support from MATLAB - Hardware Support - MATLAB & Simulink Raspberry Pi Support from Simulink - Hardware Support - MATLAB & Simulink Matlab与树莓派兼容性 Simulink与树莓派兼容性 树莓派Matlab&Simulink RaspberryPi支…...

嵌入式人工智能(10-基于树莓派4B的DS1302实时时钟RTC)

1、实时时钟&#xff08;Real Time Clock&#xff09; RTC&#xff0c;全称为实时时钟&#xff08;Real Time Clock&#xff09;&#xff0c;是一种能够提供实时时间信息的电子设备。RTC通常包括一个计时器和一个能够记录日期和时间的电池。它可以独立于主控芯片工作&#xff…...

C++ | Leetcode C++题解之第275题H指数II

题目&#xff1a; 题解&#xff1a; class Solution { public:int hIndex(vector<int>& citations) {int n citations.size();int left 0, right n - 1;while (left < right) {int mid left (right - left) / 2;if (citations[mid] > n - mid) {right m…...

编写DockerFile

将自己的项目或者环境通过Docker部署到服务器需要一下几个步骤&#xff1a; 打包项目或者环境 编写Dockerfile文件 运行Dockerfile文件&#xff0c;构建DockerImages镜像&#xff0c;将DockerImages存入DockerHub或者存入阿里云镜像仓库 服务器pull下DockerImages镜像&#…...