代码编辑器1.9.0

多线程!!!

#include <winsock2.h>
#include <windows.h>
#include <iostream>
#include <stdlib.h>
#include <string.h>
#include <fstream>
#include <conio.h>
#include <stdio.h>
#include <string>
#include <atomic>
#include <time.h>
#include <mutex>
#include <map>#pragma comment(lib,"ws2_32.lib")#define FASTEST#define pass
#define PASS
#define UP                                      72
#define DOWN                                    80
#define LEFT                                    75
#define RIGHT                                   77
#define H                                       29
#define W                                       114
#define BUFLEN                                  256#define FASTCODE                                ((1 << 16) | (8 << 9) | (0))
#define TITLE                                   "title FastCode 1.9.0"#define helps "\
<h,H,?>                                         \n\
<s,S>                                           \n\
<q,Q>                                           \n\
<!>                                             \n\
<o,O>                                           \n\
<r,R,:>                                         \n\
<t,T,^>                                         \n\
<y,Y,@>     num                                 \n\
<x,X>       num                                 \n\
<b,B,<>     str                                 \n\
<f,F,>>     str                                 \n\
<e,E,->     num                                 \n\
<{>         num,begin,step                      \n\
<\">        num,begin,step                      \n\
<\'>        num,begin,step                      \n\
<l,L,|>     num,begin,step,+ str                \n\
<l,L,|>     num,begin,step,- num                \n\
</>                                             \n\
<k,K>       str                                 \n\
<p,P>       str,color                           \n\
<w,W,$>     \n command                          \n\
<c,C,=>                                         \n\
<v,V,~>                                         \n\
<m,M,%>     str1,str2                           \n\
<d,D,;>     str                                 \n\
Ctrl + A                                        \n\
Ctrl + B                                        \n\
Ctrl + D                                        \n\
Ctrl + E                                        \n\
Ctrl + F                                        \n\
Ctrl + L                                        \n\
Ctrl + O                                        \n\
Ctrl + R                                        \n\
Ctrl + S                                        \n\
Ctrl + T                                        \n\
Ctrl + U                                        \n\
Ctrl + W                                        \n\
Ctrl + Back                                     \n\
Ctrl + Enter                                    \n\
F1                                              \n\
F2                                              \n\
F3                                              \n\
F4                                              \n\
F5                                              \n\
F6                                              \n\
A ~ Z                                           \n\
Delete                                          \n\
Enter                                           \n\
Back                                            \n\
Tab                                             \n\
Esc                                             \n\
"#ifndef min
#define min(a, b) ({                                                            \typeof(a) x = (a);                                                          \typeof(b) y = (b);                                                          \x < y ? x : y;                                                              \
})
#endif#ifndef max
#define max(a, b) ({                                                            \typeof(a) x = (a);                                                          \typeof(b) y = (b);                                                          \x > y ? x : y;                                                              \
})
#endif#define color(tc)                                                               \SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE), tc)#define gotoxy(xx, yy)                                                          \do{                                                                         \COORD position = {xx, yy};                                              \SetConsoleCursorPosition (                                              \GetStdHandle (STD_OUTPUT_HANDLE),                                   \position                                                            \);                                                                      \}while(false)typedef signed char                             int8;
typedef signed short                            int16;
typedef signed long                             int32;
typedef signed long long                        int64;
typedef unsigned char                           uint8;
typedef unsigned short                          uint16;
typedef unsigned long                           uint32;
typedef unsigned long long                      uint64;
typedef unsigned char                           byte_t;
typedef unsigned short                          word_t;
typedef unsigned long                           iterator;
typedef void*                                   pointer_t;template <typename type> class vector {public:type* p;size_t Len;size_t Size;vector () {p = NULL;Len = 0;Size = 0;}~vector () {delete[] p;}size_t size () {return Size;}size_t len () {return Len;}void exp () {Len = (Len << 1) + 1;if (p == NULL) {p = new type [ Len ];} else {type *tp = new type [ Len ];for (size_t it = 0; it < Size; it++)tp[ it ] = p[ it ];delete[] p;p = tp;}return;}void exp (size_t ts) {while (ts >= Len)exp ();return;}type& operator [] (size_t it) {if (it >= Len)exp (it);return p[ it ];}type at (size_t it) {if (it >= Len)exp (it);return p[ it ];}void push_back (type& x) {if (Size == Len)exp ();p[ Size++ ] = x;return;}void push_back (type&& x) {if (Size == Len)exp ();p[ Size++ ] = x;return;}void push_back (vector <type>& vc) {for (size_t i = 0; i < vc.size(); i++)push_back (vc[i]);return;}void pop_back () {if (Size > 0)Size--;return;}void pop_back (size_t ts) {if (Size >= ts)Size -= ts;elseSize = 0;return;}void insert (size_t it, type& x) {if (Size == Len) exp ();for (size_t it_t = Size; it_t > it; it_t--)p[ it_t ] = p[it_t - 1];p[ it ] = x;Size++;return;}void insert (size_t it, type&& x) {if (Size == Len)exp ();for (size_t it_t = Size; it_t > it; it_t--)p[ it_t ] = p[it_t - 1];p[ it ] = x;Size++;return;}void erase (size_t it) {Size--;for (size_t it_t = it; it_t < Size; it_t++)p[ it_t ] = p[it_t + 1];return;}void reverse () {for (size_t it = 0; it < (Size >> 1); it++) {type tt = p[ it ];p[ it ] = p[Size - it - 1];p[Size - it - 1] = tt;}return;}void operator ++ () {if (Size == Len)exp ();Size++;return;}void operator ++ (int) {if (Size == Len)exp ();Size++;return;}void operator += (type& x) {if (Size == Len)exp ();p[ Size++ ] = x;return;}void operator += (type&& x) {if (Size == Len)exp ();p[ Size++ ] = x;return;}void operator += (vector <type>& vc) {for (size_t i = 0; i < vc.size(); i++)push_back (vc[i]);return;}void operator -- () {if (Size > 0)Size--;return;}void operator -- (int) {if (Size > 0)Size--;return;}void operator -= (size_t ts) {if (Size >= ts)Size -= ts;else Size = 0;return;}void operator = (vector <type>& vc) {for (size_t i = 0; i < vc.size(); i++)push_back (vc[i]);return;}
};template <typename type> struct node {type v;node <type>* pre;node <type>* next;node () {pre = next = NULL;}
};
template <typename type> class list {public:node <type>* head;node <type>* tail;list () {head = new node <type>;tail = new node <type>;head -> next = tail;tail -> pre = head;}~list () {node <type>* fn = head;node <type>* sn = head;while (fn !=NULL) {sn = sn -> next;delete fn;fn = sn;}}node <type>* begin () {return head;}node <type>* end () {return tail;}void push_back (type& x) {node <type>* tn = new node <type>;tn -> v = x;tn -> pre = tail -> pre;tn -> next = tail;tail -> pre -> next = tn;tail -> pre = tn;return;}void push_back (type&& x) {node <type>* tn = new node <type>;tn -> v = x;tn -> pre = tail -> pre;tn -> next = tail;tail -> pre -> next = tn;tail -> pre = tn;return;}void push_back (list <type>& tl) {node <type>* tn = tl.begin();tn = tn -> next;while (tn != tl.end()) {push_back(tn -> v);tn = tn -> next;}return;}void pop_back () {node <type>* tn = tail -> pre;if (tn != head) {tail -> pre = tn -> pre;tn -> pre -> next = tail;delete tn;}return;}void insert (node <type>* in, type& x) {node <type>* tn = new node <type>;tn -> v = x;tn -> pre = in;tn -> next = in -> next;in -> next -> pre = tn;in -> next = tn;return;}void insert (node <type>* in, type&& x) {node <type>* tn = new node <type>;tn -> v = x;tn -> pre = in;tn -> next = in -> next;in -> next -> pre = tn;in -> next = tn;return;}void erase (node <type>* en) {node <type>* tn = en -> next;if (tn != tail) {en -> next = tn -> next;tn -> next -> pre = en;delete tn;}return;}void operator += (type& x) {node <type>* tn = new node <type>;tn -> v = x;tn -> pre = tail -> pre;tn -> next = tail;tail -> pre -> next = tn;tail -> pre = tn;return;}void operator += (type&& x) {node <type>* tn = new node <type>;tn -> v = x;tn -> pre = tail -> pre;tn -> next = tail;tail -> pre -> next = tn;tail -> pre = tn;return;}void operator += (list <type>& tl) {node <type>* tn = tl.begin();tn = tn -> next;while (tn != tl.end()) {push_back(tn -> v);tn = tn -> next;}return;}void operator -- () {node <type>* tn = tail -> pre;if (tn != head) {tail -> pre = tn -> pre;tn -> pre -> next = tail;delete tn;}return;}void operator = (list <type>& tl) {node <type>* tn = tl.begin();tn = tn -> next;while (tn != tl.end()) {push_back(tn -> v);tn = tn -> next;}return;}
};class server {public:int                         error;int                         address_length;WORD                        wVersionRequested;SOCKET                      socket_server;SOCKET                      socket_client;WSADATA                     wsaData;SOCKADDR_IN                 server_address;SOCKADDR_IN                 client_address;int init (int port = 5000) {wVersionRequested = MAKEWORD(2, 2);error = WSAStartup(wVersionRequested, &wsaData);if (error != 0) {printf("Cant initiates use of the Winsock DLL by a process!\n");return 1;}if (LOBYTE(wsaData.wVersion) != 2 ||HIBYTE(wsaData.wVersion) != 2) {printf("could not find a usable WinSock DLL!\n");WSACleanup();return 1;}server_address.sin_family = AF_INET;server_address.sin_addr.S_un.S_addr = htonl(INADDR_ANY);server_address.sin_port = htons(port);socket_server = socket  (AF_INET,SOCK_STREAM,IPPROTO_TCP);if (INVALID_SOCKET == socket_server) {printf("socket function failed with error: %ld\n",WSAGetLastError());WSACleanup();return 1;}if (SOCKET_ERROR == bind(socket_server,(SOCKADDR *)&server_address,sizeof(server_address))) {printf("bind failed with error %u\n",WSAGetLastError());closesocket(socket_server);WSACleanup();return 1;}if (SOCKET_ERROR == listen(socket_server, 1))printf("listen function failed with error: %d\n",WSAGetLastError());address_length = sizeof(client_address);socket_client = accept(socket_server,(SOCKADDR *)&client_address,&address_length);if (INVALID_SOCKET == socket_client)printf("accept failed with error: %ld\n",WSAGetLastError());return 0;}int recv (char* buf, int len, int flags = 0) {int ret = ::recv(socket_client, buf, len, flags);if (ret <= 0) {if (ret == 0) {printf("Connection closed\n");} else {printf ("recv failed: %d\n",WSAGetLastError());closesocket(socket_client);closesocket(socket_server);WSACleanup();}}return ret;}int send (char* buf, int len, int flags = 0) {int ret = ::send (socket_client, buf, len, flags);if (SOCKET_ERROR == ret) {printf("send failed with error: %d\n",WSAGetLastError());closesocket(socket_client);closesocket(socket_server);WSACleanup();}return ret;}int close () {if (SOCKET_ERROR == closesocket(socket_client)) {printf("closesocket function failed with error %d\n",WSAGetLastError());WSACleanup();return 1;}if (SOCKET_ERROR == closesocket(socket_server)) {printf("closesocket function failed with error %d\n",WSAGetLastError());WSACleanup();return 1;}WSACleanup();return 0;}
};class client {public:WSADATA wsaData;SOCKET clientSocket;sockaddr_in serverAddr;int bytesSent;int init (const char* addr = "127.0.0.1", int port = 5000) {if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) {printf("Failed to initialize winsock.\n");return 1;}clientSocket = socket(AF_INET, SOCK_STREAM, 0);if (clientSocket == INVALID_SOCKET) {printf("Failed to create socket.\n");WSACleanup();return 1;}serverAddr.sin_family = AF_INET;serverAddr.sin_addr.s_addr = inet_addr(addr);serverAddr.sin_port = htons(port);if (connect(clientSocket,(sockaddr*)&serverAddr,sizeof(serverAddr)) == SOCKET_ERROR) {printf("Failed to connect to server.\n");closesocket(clientSocket);WSACleanup();return 1;}return 0;}int recv (char* buf, int len, int flags = 0) {int ret = ::recv(clientSocket, buf, len, flags);if (ret <= 0) {if (ret == 0) {printf("Connection closed\n");return 1;} else {printf("recv failed: %d\n",WSAGetLastError());closesocket(clientSocket);WSACleanup();return 1;}}return 0;}int send (char* buf, int len, int flags = 0) {bytesSent = ::send(clientSocket, buf, len, 0);if (bytesSent == SOCKET_ERROR) {printf("Failed to send data to server.\n");closesocket(clientSocket);WSACleanup();return 1;}return 0;}int close () {closesocket(clientSocket);WSACleanup();return 0;}
};namespace snake {#define X 23#define Y 40#define MAXLEN 75#define MINTIME 75unsigned int snake[MAXLEN][2];unsigned int len;unsigned int lastt[2];unsigned int score;unsigned int max_score;unsigned int way;double wait;int input;unsigned int food[2];bool empty = true;void welcome    ();void init       ();void drawmap    ();void drawsnake  ();void move       ();void clt        ();void getin      ();void putfood    ();void eatfood    ();bool gameover   ();int start       ();#undef X#undef Y#undef MAXLEN#undef MINTIME
}struct Pos {char                                        ch;byte_t                                      cl;
};list <vector <char> >                           doc;
node <vector <char> >*                          ty;
iterator                                        tx;
node <vector <char> >*                          py;
iterator                                        px;
long                                            cnt;
bool                                            lock;
bool                                            edit;
size_t                                          lines;char                                            name[BUFLEN];
char                                            exen[BUFLEN];
char                                            path[BUFLEN];
bool                                            isat[256];
Pos                                             preout[H][W];
Pos                                             thisout[H][W];std::map <std::string, byte_t>   keyword;std::atomic <signed char>                       sig;void whelp          ();
void rpath          ();
void rdocu          (int argc, char* argv);
void init           (int argc, char** argv);
void save           ();
void doccopy        (const char* from, const char* to);
void cppcopy        (const char* to);
void output         (LPVOID id);
bool cfn            (int ch);
bool cctrl          (int ch);
bool ccom           (int ch);
void input          (LPVOID id);int main (int argc, char** argv) {try {DWORD input_id;DWORD output_id;HANDLE input_handle;HANDLE output_handle;system (TITLE);system ("mode con lines=31 cols=120");CONSOLE_CURSOR_INFO cursor_info = {1, 0};SetConsoleCursorInfo (GetStdHandle (STD_OUTPUT_HANDLE),&cursor_info);color (15);whelp ();rpath ();init (argc, argv);input_handle = (HANDLE)::CreateThread (NULL, 0,(LPTHREAD_START_ROUTINE)input, (LPVOID)&input_id,0, &input_id);output_handle = (HANDLE)::CreateThread (NULL, 0,(LPTHREAD_START_ROUTINE)output, (LPVOID)&output_id,0, &output_id);while (sig != -1) {;}}catch (...) {printf ("异常产生!\n");throw ;}system ("pause");return 0;
}inline __attribute__ ((always_inline))
void whelp () {FILE* fp = fopen ("FCDOC\\help.txt", "w");fprintf (fp, helps);fclose (fp);return;
}
inline __attribute__ ((always_inline))
void rpath () {FILE*                                       fp = fopen ("FCDOC\\path.txt", "r");system ("cls");if (fp == NULL) {printf ("编译器路径:");gets (path);FILE*                                   sf = fopen ("path.txt", "w");fprintf (sf, "%s", path);fclose (sf);} else {fscanf (fp, "%s", path);}fclose (fp);
}
inline __attribute__ ((always_inline))
void rdocu (int argc, char* argv) {int                                         ch;size_t                                      sum;size_t                                      pre;vector <char>                               tv;FILE*                                       fp = fopen (argv, "r");iterator                                    nt = strlen (argv) - 1;system ("cls");printf ("读取中...\n\n");#ifndef FASTESTcolor (136);printf ("                                                                ");color (15);#endiffor (; nt > 0; nt--) { if (argv[nt - 1] == '\\')break;}if (argc != 1) {for (iterator it = 0; argv[nt] != '\0'; it++) {name[it]                            = argv[nt];nt++;}}fseek (fp, 0, 2);sum                                         = ftell (fp);fseek (fp, 0, 0);ch                                          = fgetc (fp);pre                                         = 0;while (ch != EOF) {if (ch == 10) {node <vector <char> >* tn           = new node <vector <char> >;for (iterator it = 0; it < tv.size(); it++) {tn -> v.push_back (tv[it]);}tn -> pre                           = doc.tail -> pre;tn -> next                          = doc.tail;doc.tail -> pre -> next             = tn;doc.tail -> pre                     = tn;while (tv.size () != 0) {tv.pop_back ();}} else if (ch == 9) {do {tv                              += ' ';} while (tv.size () % 4 != 0);} else {tv                                  += ch;}
#ifndef FASTESTgotoxy (0, 1);printf ("%d / %d", ftell (fp), sum);gotoxy (0, 2);size_t                                  temp = ftell (fp) * 64 / sum;if (temp != pre) {pre                                 = temp;color (170);for (iterator it = 0; it < temp; it++) {printf (" ");}color (15);}
#endifch                                      = fgetc(fp);}if (tv.size () != 0) {node <vector <char> >*                  tn = new node <vector <char> >;for (iterator it = 0; it < tv.size(); it++)tn -> v.push_back (tv[it]);tn -> pre                               = doc.tail -> pre;tn -> next                              = doc.tail;doc.tail -> pre -> next                 = tn;doc.tail -> pre                         = tn;}fclose (fp);Sleep (500);return;
}
inline __attribute__ ((always_inline))
void init (int argc, char** argv) {system ("cls");printf ("初始化...\n");if (argc != 1) {rdocu (argc, argv[1]);} else {system ("cls");printf ("文件名:");gets (name);FILE*                                   fp = fopen (name, "r");if (fp) {fclose (fp);rdocu (argc, name);} else {vector <char>                       tv;doc                                 += tv;}}iterator it = 0;for (; name[it] != '.' && name[it] != '\0'; it++) {exen[it] = name[it];}exen[it++] = '.';exen[it++] = 'e';exen[it++] = 'x';exen[it++] = 'e';exen[it++] = '\0';char                                        ts[W];sprintf (ts, "title %s", name);system (ts);ty                                          = doc.begin () -> next;tx                                          = 0;py                                          = doc.begin () -> next;px                                          = 0;lock                                        = true;sig                                         = 1;for (iterator yi = 0; yi < H - 1; yi++) {for (iterator xi = 0; xi < W - 7; xi++) {preout[yi][xi].cl                   = 15;preout[yi][xi].ch                   = ' ';}   }for (iterator yi = 0; yi < H - 1; yi++) {for (iterator xi = 0; xi < W - 7; xi++) {thisout[yi][xi].cl                  = 15;thisout[yi][xi].ch                  = ' ';}   }isat['~']                                   = true;isat['!']                                   = true;isat['%']                                   = true;isat['^']                                   = true;isat['&']                                   = true;isat['*']                                   = true;isat['(']                                   = true;isat[')']                                   = true;isat['-']                                   = true;isat['+']                                   = true;isat['=']                                   = true;isat['{']                                   = true;isat['}']                                   = true;isat['[']                                   = true;isat[']']                                   = true;isat['|']                                   = true;isat[':']                                   = true;isat[';']                                   = true;isat['<']                                   = true;isat['>']                                   = true;isat[',']                                   = true;isat['.']                                   = true;isat['?']                                   = true;isat['/']                                   = true;keyword["alignas"]                          = 11;keyword["alignof"]                          = 11;keyword["and"]                              = 11;keyword["and_eq"]                           = 11;keyword["asm"]                              = 11;keyword["auto"]                             = 11;keyword["bitand"]                           = 11;keyword["bitor"]                            = 11;keyword["bool"]                             = 11;keyword["break"]                            = 11;keyword["case"]                             = 11;keyword["catch"]                            = 11;keyword["char"]                             = 11;keyword["char16_t"]                         = 11;keyword["char32_t"]                         = 11;keyword["class"]                            = 11;keyword["compl"]                            = 11;keyword["const"]                            = 11;keyword["constexpr"]                        = 11;keyword["const_cast"]                       = 11;keyword["continue"]                         = 11;keyword["decltype"]                         = 11;keyword["default"]                          = 11;keyword["delete"]                           = 11;keyword["do"]                               = 11;keyword["double"]                           = 11;keyword["dynamic_cast"]                     = 11;keyword["else"]                             = 11;keyword["enum"]                             = 11;keyword["explicit"]                         = 11;keyword["export"]                           = 11;keyword["extern"]                           = 11;keyword["false"]                            = 11;keyword["float"]                            = 11;keyword["for"]                              = 11;keyword["friend"]                           = 11;keyword["goto"]                             = 11;keyword["if"]                               = 11;keyword["inline"]                           = 11;keyword["int"]                              = 11;keyword["long"]                             = 11;keyword["mutable"]                          = 11;keyword["namespace"]                        = 11;keyword["new"]                              = 11;keyword["noexcept"]                         = 11;keyword["not"]                              = 11;keyword["not_eq"]                           = 11;keyword["nullptr"]                          = 11;keyword["operator"]                         = 11;keyword["or"]                               = 11;keyword["or_eq"]                            = 11;keyword["private"]                          = 11;keyword["protected"]                        = 11;keyword["public"]                           = 11;keyword["register"]                         = 11;keyword["reinterpret_cast"]                 = 11;keyword["return"]                           = 11;keyword["short"]                            = 11;keyword["signed"]                           = 11;keyword["sizeof"]                           = 11;keyword["static"]                           = 11;keyword["static_assert"]                    = 11;keyword["static_cast"]                      = 11;keyword["struct"]                           = 11;keyword["switch"]                           = 11;keyword["template"]                         = 11;keyword["this"]                             = 11;keyword["thread_local"]                     = 11;keyword["throw"]                            = 11;keyword["true"]                             = 11;keyword["try"]                              = 11;keyword["typedef"]                          = 11;keyword["typeid"]                           = 11;keyword["typeof"]                           = 11;keyword["typename"]                         = 11;keyword["union"]                            = 11;keyword["unsigned"]                         = 11;keyword["using"]                            = 11;keyword["virtual"]                          = 11;keyword["void"]                             = 11;keyword["volatile"]                         = 11;keyword["wchar_t"]                          = 11;keyword["while"]                            = 11;keyword["xor"]                              = 11;keyword["xor_eq"]                           = 11;system ("cls");return;
}
inline __attribute__ ((always_inline))
void save () {edit                                        = false;char                                        calls[BUFLEN];sprintf (calls, "title %s", name);system (calls);FILE*                                       fp = fopen(name, "w");node <vector <char> >*                      sp = doc.begin () -> next;while (sp != doc.end ()) {for (iterator it = 0; it < sp -> v.size(); it++)fputc (sp -> v[it], fp);fputc ('\n', fp);sp                                      = sp -> next;}fclose(fp);return;
}
inline __attribute__ ((always_inline))
void doccopy (const char* from, const char* to) {FILE*                                       fp = fopen (from, "r");if (fp == NULL) {printf ("打开失败!\n");return;}FILE*                                       tp = fopen (to, "w");char                                        ch;ch                                          = fgetc (fp);while (ch != EOF) {fputc (ch, tp);ch                                      = fgetc (fp);}fclose (fp);fclose (tp);printf ("成功!\n");return;
}
inline __attribute__ ((always_inline))
void cppcopy (const char* to) {FILE*                                       fp = fopen (name, "r");FILE*                                       tp = fopen (to, "w");char                                        ch;ch                                          = fgetc (fp);while (ch != EOF) {fputc (ch, tp);ch                                      = fgetc (fp);}fclose (fp);fclose (tp);printf ("成功!\n");return;
}
inline __attribute__ ((always_inline))
void output (LPVOID id) {std::mutex                                  mlock;while (true) {while (true) {if (sig == 1) {sig                             = 0;break;} else if (sig == -1) {return;}}node <vector <char> >* pt               = py;mlock.lock ();node <vector <char> >* end              = doc.end ();mlock.unlock ();bool                                    special = false;bool                                    isinc   = false;bool                                    isstr   = false;bool                                    isch    = false;bool                                    isnum   = false;for (iterator yy = 0; yy < H - 1 && pt != end; yy++) {byte_t                              cl;iterator                            xx;std::string                         ks;if (!special) {isinc                           = false;isstr                           = false;isch                            = false;isnum                           = false;}for (xx = 0; xx < W - 7 && xx + px < pt -> v.size (); xx++) {char                            putch = pt -> v.at(xx + px);if ((!isinc) && (!isstr) && (!isch)) {if ((putch >= 'A' && putch <= 'Z') ||(putch >= 'a' && putch <= 'z') ||(putch >= '0' && putch <= '9') ||(putch == '_')) {ks                      += putch;} else {mlock.lock ();if (keyword[ks] != 0) {for (iterator it = 0; it < ks.size(); it++) {if (pt == ty && xx + px - ks.size() + it == tx)thisout[yy][xx + px - ks.size() + it].cl = 240;elsethisout[yy][xx + px - ks.size() + it].cl = keyword[ks];}}mlock.unlock ();ks                      = "";}} else {ks                          = "";}if (putch == ' ' || isat[(int)putch] == true || xx + px == 0) {isnum                           = true;} else if(putch < '0' || putch > '9') {isnum                       = false;}if ((!isstr) && (!isch)  && (isinc || putch == '#'))  {cl                          = 10;isinc                       = true;} else if ((!isinc) && (!isch)  && (isstr || putch == '\"')) {cl                          = 11;if (pt -> v[xx + px] == '\"' && !special)isstr                   = !isstr;} else if ((!isinc) && (!isstr) && (isch  || putch == '\'')) {cl                          = 14;if (pt -> v[xx + px] == '\'' && !special)isch                    = !isch;} else if ((!isinc) && (!isstr) && (!isch) && (isnum) &&(putch >= '0' && putch <= '9')) {cl                          = 11;} else if (isat[(int)putch] == true) {cl                          = 9;} else {cl                          = 15;}if (pt == ty && xx + px == tx) {cl                          = 240;}thisout[yy][xx].cl              = cl;thisout[yy][xx].ch              = putch;if (putch == '\\' && !special) {special                     = true;} else {special                     = false;}}cl                                  = 15;if (pt == ty && tx == pt -> v.size ()) {cl                              = 240;}thisout[yy][xx].cl                  = cl;thisout[yy][xx].ch                  = ' ';pt                                  = pt -> next;}pt                                      = py;mlock.lock ();gotoxy (0, 0);for (iterator yy = 0; yy < H - 1 && pt != end; yy++) {color (15);printf ("%4d ", (int)(lines + yy));for (iterator xx = 0; xx < W - 6; xx++) {if (thisout[yy][xx].ch != preout[yy][xx].ch ||thisout[yy][xx].cl != preout[yy][xx].cl) {gotoxy ((short)(xx + 5), (short)yy);color (thisout[yy][xx].cl);printf ("%c", thisout[yy][xx].ch);  }}color (12);gotoxy ((short)(W - 2), (short)yy);if (pt -> v.size() > W - 8) {printf (" > ");} else {printf ("   ");}printf ("\n");pt                                      = pt -> next;}color (15);printf ("%114c", ' ');memcpy (preout, thisout, sizeof (preout));mlock.unlock ();for (iterator yi = 0; yi < H - 1; yi++) {for (iterator xi = 0; xi < W - 7; xi++) {thisout[yi][xi].cl                  = 15;thisout[yi][xi].ch                  = ' ';}   }}return;
}
inline __attribute__ ((always_inline))
bool cfn (int ch) {if (ch == 0) {char                                    prt[W + 7];memset(prt, '\b', sizeof(prt));prt[W + 6] = '\0';printf("%s", prt);ch                                      = getch ();switch (ch) {case 59: {printf (helps);system ("pause");break;}case 60: {save ();char                            calls[BUFLEN];sprintf (calls, "%s %s -o %s -Ofast -m32 -std=gnu++14 -lwsock32",path, name, exen);printf("%s\n", calls);system (calls);sprintf (calls, "start %s", exen);system (calls);system ("pause");break;}case 61: {save ();char                            calls[BUFLEN];sprintf (calls, "%s %s -o %s -Ofast -m32 -std=gnu++14 -lwsock32",path, name, exen);printf("%s\n", calls);system (calls);sprintf (calls, "%s", exen);system (calls);system ("pause");break;}case 62: {save ();char                            calls[BUFLEN];sprintf (calls, "%s %s -o %s -Ofast -m32 -std=gnu++14 -lwsock32",path, name, exen);printf("%s\n", calls);system (calls);system ("pause");break;}case 63: {char                            calls[BUFLEN];sprintf (calls, "start %s", exen);system (calls);system ("pause");break;}case 64: {char                            calls[BUFLEN];sprintf (calls, "%s", exen);system (calls);system ("pause");break;}case 65: {save ();system (name);system ("pause");break;}default:break;}for (iterator yi = 0; yi < H - 1; yi++) {for (iterator xi = 0; xi < W - 7; xi++) {preout[yi][xi].cl               = 15;preout[yi][xi].ch               = ' ';}   }system ("cls");return true;}return false;
}
inline __attribute__ ((always_inline))
bool cctrl (int ch) {if (ch == 1) {ty -> v.insert (tx, 'a');tx++;ty -> v.insert (tx, 'u');tx++;           ty -> v.insert (tx, 't');tx++;ty -> v.insert (tx, 'o');tx++;ty -> v.insert (tx, ' ');tx++;return true;} else if (ch == 2) {ty -> v.insert (tx, 'b');tx++;ty -> v.insert (tx, 'o');tx++;ty -> v.insert (tx, 'o');tx++;ty -> v.insert (tx, 'l');tx++;ty -> v.insert (tx, ' ');tx++;return true;} else if (ch == 4) {ty -> v.insert (tx, 'd');tx++;ty -> v.insert (tx, 'o');tx++;ty -> v.insert (tx, 'u');tx++;ty -> v.insert (tx, 'b');tx++;ty -> v.insert (tx, 'l');tx++;ty -> v.insert (tx, 'e');tx++;ty -> v.insert (tx, ' ');tx++;return true;} else if (ch == 5) {ty -> v.insert (tx, 'e');tx++;ty -> v.insert (tx, 'x');tx++;ty -> v.insert (tx, 't');tx++;ty -> v.insert (tx, 'e');tx++;ty -> v.insert (tx, 'r');tx++;ty -> v.insert (tx, 'n');tx++;ty -> v.insert (tx, ' ');tx++;return true;} else if (ch == 6) {ty -> v.insert (tx, 'f');tx++;ty -> v.insert (tx, 'l');tx++;ty -> v.insert (tx, 'o');tx++;ty -> v.insert (tx, 'a');tx++;ty -> v.insert (tx, 't');tx++;ty -> v.insert (tx, ' ');tx++;return true;} else if (ch == 12) {ty -> v.insert (tx, 'l');tx++;ty -> v.insert (tx, 'o');tx++;ty -> v.insert (tx, 'n');tx++;ty -> v.insert (tx, 'g');tx++;ty -> v.insert (tx, ' ');tx++;return true;} else if (ch == 15) {ty -> v.insert (tx, 'o');tx++;ty -> v.insert (tx, 'p');tx++;ty -> v.insert (tx, 'e');tx++;ty -> v.insert (tx, 'r');tx++;ty -> v.insert (tx, 'a');tx++;ty -> v.insert (tx, 't');tx++;ty -> v.insert (tx, 'o');tx++;ty -> v.insert (tx, 'r');tx++;ty -> v.insert (tx, ' ');tx++;return true;} else if (ch == 18) {ty -> v.insert (tx, 'r');tx++;ty -> v.insert (tx, 'e');tx++;ty -> v.insert (tx, 'g');tx++;ty -> v.insert (tx, 'i');tx++;ty -> v.insert (tx, 's');tx++;ty -> v.insert (tx, 't');tx++;ty -> v.insert (tx, 'e');tx++;ty -> v.insert (tx, 'r');tx++;ty -> v.insert (tx, ' ');tx++;return true;} else if (ch == 19) {ty -> v.insert (tx, 's');tx++;ty -> v.insert (tx, 'i');tx++;ty -> v.insert (tx, 'g');tx++;ty -> v.insert (tx, 'n');tx++;ty -> v.insert (tx, 'e');tx++;ty -> v.insert (tx, 'd');tx++;ty -> v.insert (tx, ' ');tx++;return true;} else if (ch == 20) {ty -> v.insert (tx, 't');tx++;ty -> v.insert (tx, 'e');tx++;ty -> v.insert (tx, 'm');tx++;ty -> v.insert (tx, 'p');tx++;ty -> v.insert (tx, 'l');tx++;ty -> v.insert (tx, 'a');tx++;ty -> v.insert (tx, 't');tx++;ty -> v.insert (tx, 'e');tx++;ty -> v.insert (tx, ' ');tx++;return true;} else if (ch == 21) {ty -> v.insert (tx, 'u');tx++;ty -> v.insert (tx, 'n');tx++;ty -> v.insert (tx, 's');tx++;ty -> v.insert (tx, 'i');tx++;ty -> v.insert (tx, 'g');tx++;ty -> v.insert (tx, 'n');tx++;ty -> v.insert (tx, 'e');tx++;ty -> v.insert (tx, 'd');tx++;ty -> v.insert (tx, ' ');tx++;return true;} else if (ch == 23) {tx = ty -> v.size();return true;}return false;
}
inline __attribute__ ((always_inline))
bool ccom (int ch) {if (ch == 10) {char                                    prt[W + 7];memset(prt, '\b', sizeof(prt));prt[W + 6]                              = '\0';printf("%sFastCode:>  ", prt);ch                                      = getchar ();switch (ch) {case 'h':case 'H':case '?': {printf (helps);system ("pause");edit                            = false;break;}case 's':case 'S': {save ();break;}case 'q':case 'Q': {save ();sig                             = -1;exit (0);}case '!': {sig                             = -1;exit (0);}case 'o':case 'O': {save ();char                            calls[BUFLEN];sprintf (calls, "%s %s -o %s -Ofast -m32 -std=gnu++14 -lwsock32",path, name, exen);printf("%s\n", calls);system (calls);sprintf (calls, "start %s", exen);system (calls);system ("pause");break;}case 'r':case 'R':case ':': {save ();char                            calls[BUFLEN];sprintf (calls, "%s %s -o %s -Ofast -m32 -std=gnu++14 -lwsock32",path, name, exen);printf("%s\n", calls);system (calls);sprintf (calls, "%s", exen);system (calls);system ("pause");break;}case 't':case 'T':case '^': {tx                              = 0;cnt                             = 0;lines                           = 0;ty                              = doc.begin () -> next;py                              = doc.begin () -> next;edit                            = false;break;}case 'y':case 'Y':case '@': {unsigned int    linenum;scanf ("%d", &linenum);tx                              = 0;cnt                             = 0;lines                           = 0;ty                              = doc.begin () -> next;py                              = doc.begin () -> next;for (iterator it = 0; it < linenum; it++) {if (ty -> next != doc.end ()) {ty                      = ty -> next;py                      = py -> next;lines++;}}edit                            = false;break;}case 'x':case 'X': {unsigned int                    colnum;scanf ("%d", &colnum);tx                              = colnum;if (tx < 0) {tx                          = 0;}if (tx > ty -> v.size()) {tx                          = ty -> v.size();}edit                            = false;break;}case 'b':case 'B':case '<': {edit                            = false;int                             len;bool                            okk;char                            word[BUFLEN];getchar ();gets (word);len                             = strlen(word);while (ty -> pre != doc.begin()) {tx                          = 0;ty                          = ty -> pre;cnt--;for (; (signed int)tx < (signed int)ty -> v.size() - len; tx++) {okk                     = true;for (iterator it = 0; it < len; it++) {if (word[it] != ty -> v[tx + it]) {okk             = false;break;}}if (okk) {goto                FL_END;}}}break;
FL_END:break;}case 'f':case 'F':case '>': {edit                            = false;int                             len;bool                            okk;char                            word[BUFLEN];getchar ();gets (word);len                             = strlen(word);while (ty -> next != doc.end()) {tx                          = 0;ty                          = ty -> next;cnt++;for (; (signed int)tx < (signed int)ty -> v.size() - len; tx++) {okk = true;for (iterator it = 0; it < len; it++) {if (word[it] != ty -> v[tx + it]) {okk             = false;break; }}if (okk) {goto                FR_END;}}}break;
FR_END:break;}case 'e':case 'E':case '-': {int                             num;scanf ("%d", &num);for (iterator it = 0; it < num; it++) {if (tx > 0) {tx--;ty -> v.erase (tx);}}break;}case '{': {int                             num;int                             step;int                             begin;char                            word[BUFLEN];scanf ("%d,%d,%d", &num, &begin, &step);for (iterator it = 0; it < num; it++) {sprintf (word, "%d", it * step + begin);for (iterator i = 0; word[i] != '\0'; i++) {ty -> v.insert (tx, word[i]);tx++;}ty -> v.insert (tx, ',');tx++;ty -> v.insert (tx, ' ');tx++;}break;}case '\'': {int                             num;int                             step;char                            begin;scanf ("%d,%c,%d", &num, &begin, &step);for (iterator it = 0; it < num; it++) {ty -> v.insert (tx, '\'');tx++;ty -> v.insert (tx, (char)(it * step) + begin);tx++;ty -> v.insert (tx, '\'');tx++;ty -> v.insert (tx, ',');tx++;ty -> v.insert (tx, ' ');tx++;}break;}case '\"': {int                             num;int                             step;char                            begin;scanf ("%d,%c,%d", &num, &begin, &step);for (iterator it = 0; it < num; it++) {ty -> v.insert (tx, (char)(it * step) + begin);tx++;}break;}case 'l':case 'L':case '|': {int                             num;int                             deln;int                             step;int                             begin;char                            ch;char                            str[BUFLEN];node <vector <char> >*  tn = ty;scanf ("%d,%d,%d,%c", &num, &begin, &step, &ch);if (ch == '-') {scanf ("%d", &deln);tx                          -= deln;while (tx < 0) {tx++;deln--;}} else if (ch == '+') {getchar ();gets (str);}for (iterator it = 0; it < num; it++) {if (ch == '-') {for (iterator it = 0; it < deln; it++)tn -> v.erase (tx);} else if (ch == '+') {for (iterator l = 0; str[l] != '\0'; l++)tn -> v.insert (l + tx, str[l]);}for (iterator l = 0; l < step; l++) {if (tn -> next != doc.end())tn                  = tn -> next;elsegoto    LF_END;}}break;
LF_END:break;}case '/': {ty -> v.insert (0, '#');ty -> v.insert (0, '/');ty -> v.insert (0, '/');tx                              = 0;break;}case 'k':case 'K': {char                            word[BUFLEN];scanf ("%s", word);keyword[word]                   = 11;edit                            = false;break;}case 'p':case 'P': {unsigned int                    tcolor;char                            word[BUFLEN];scanf ("%s", word);scanf ("%d", &tcolor);keyword[word]                   = (byte_t)tcolor;edit                            = false;break;}case '.': {int                             ret;unsigned int                    tcolor;char                            path[BUFLEN];char                            word[BUFLEN];getchar ();gets (path);FILE* fp = fopen (path, "r");if (fp != NULL) {while (true) {ret = fscanf (fp, "%s %d", word, &tcolor);if (ret != -1)keyword[word]           = (byte_t)tcolor;elsebreak;}}edit                            = false;break;}case 'w':case 'W':case '$': {char                            calls[BUFLEN];getchar ();gets (calls);system (calls);system ("pause");edit                            = false;break;}case 'c':case 'C':case '=': {std::string                     TempBin;HGLOBAL                         hMemBin = NULL;PCHAR                           LockBin = NULL;node <vector <char> >*  tn = doc.begin () -> next;OpenClipboard(NULL);EmptyClipboard();while (tn != doc.end ()) {for (iterator it = 0; it < tn -> v.size (); it++)TempBin                 += tn -> v[it];TempBin                     += '\n';tn                          = tn -> next;}hMemBin                         = GlobalAlloc(GMEM_MOVEABLE, TempBin.size() + 1);LockBin                         = (PCHAR)GlobalLock(hMemBin);RtlMoveMemory(LockBin, TempBin.c_str(), TempBin.size() + 1);GlobalUnlock(hMemBin);LockBin                         = NULL;SetClipboardData(CF_TEXT, hMemBin);CloseClipboard();edit                            = false;break;}case 'v':case 'V':case '~': {lock                            = !lock;edit                            = false;break;}case 'm':case 'M':case '%': {char                            from[BUFLEN];char                            to[BUFLEN];getchar ();gets (from);gets (to);doccopy (from, to);system ("pause");edit                            = false;break;}case 'd':case 'D':case ';': {char                            to[BUFLEN];getchar ();gets (to);save ();cppcopy (to);system ("pause");edit                            = false;break;}case 'g':case 'G': {int                             no;scanf ("%d", &no);switch (no) {case 2147483647: {snake::start ();break;}default:break;}system (name);edit                            = false;break;}case 'i':case 'I': {getchar ();char                            c = getchar();char                            buf[BUFLEN];if (c == 's') {server ser;ser.init ();node <vector <char> >* tp   = doc.begin ();tp                          = tp -> next;while (tp != doc.end ()) {iterator it;for (it = 0; it < tp -> v.size (); it++) {buf[it]             = tp -> v[it];}buf[it++]               = '\n';buf[it++]               = '\0';ser.send (buf, strlen (buf) + 1);tp                      = tp -> next;}ser.close ();system ("pause");} else if (c == 'r') {client cli;FILE* fp                    = fopen ("recv.cpp", "w");char                        recvadd[BUFLEN];char                        recvbuf[BUFLEN];getchar ();gets (recvadd);cli.init(recvadd);while (true) {int ret                 = cli.recv(recvbuf, BUFLEN);if (ret == 0) {fprintf (fp, "%s", recvbuf);} else {break;}}cli.close ();fclose (fp);system ("pause");}edit                            = false;            break;}default:break;}CONSOLE_CURSOR_INFO cursor_info         = {1, 0};SetConsoleCursorInfo (GetStdHandle (STD_OUTPUT_HANDLE), &cursor_info);for (iterator yi = 0; yi < H - 1; yi++) {for (iterator xi = 0; xi < W - 7; xi++) {preout[yi][xi].cl               = 15;preout[yi][xi].ch               = ' ';}   }system ("cls");return true;}return false;
}
inline __attribute__ ((always_inline))
void input (LPVOID id) {int                                         ch;std::mutex                                  mlock;while (true) {ch                                      = getch ();edit                                    = true;mlock.lock ();if (cfn (ch)) {if (sig == -1)return;} else if (cctrl (ch)) {if (sig == -1)return;} else if (ch == 8) {                                               //Backif (tx == 0) {if (ty -> pre != doc.begin ()) {ty                          = ty -> pre;tx                          = ty -> v.size();for (iterator it = 0; it < ty -> next -> v.size (); it++)ty -> v                 += ty -> next -> v[it];doc.erase (ty);cnt--;}} else {ty -> v.erase (tx - 1);tx--;}} else if (ch == 9) {                                               //Tabdo {ty -> v.insert (tx, ' ');tx++;} while (tx % 4 != 0);} else if (ccom (ch)) {if (sig == -1)return;} else if (ch == 13) {                                              //Enternode <vector <char> >* tn           = new node <vector <char> >;for (iterator it = tx; it < ty -> v.size (); it++)tn -> v += ty -> v[it];ty -> v                             -= (ty -> v.size() - tx);tn -> pre                           = ty;tn -> next                          = ty -> next;ty -> next -> pre                   = tn;ty -> next                          = tn;ty                                  = ty -> next;tx                                  = 0;while (tx < ty -> pre -> v.size () &&ty -> pre -> v[tx] == ' ') {ty -> v.insert (tx, ' ');tx++;}cnt++;} else if (ch == 27) {                                              //Escsave ();sig                                 = -1;return;} else if (lock && ch == '(')  {ty -> v.insert (tx, (char)ch);tx++;ty -> v.insert (tx, ')');} else if (lock && ch == '[')  {ty -> v.insert (tx, (char)ch);tx++;ty -> v.insert (tx, ']');} else if (lock && ch == '{')  {ty -> v.insert (tx, (char)ch);tx++;ty -> v.insert (tx, '}');} else if (lock && ch == '\"') {ty -> v.insert (tx, (char)ch);tx++;ty -> v.insert (tx, '\"');} else if (lock && ch == '\'') {ty -> v.insert (tx, (char)ch);tx++;ty -> v.insert (tx, '\'');} else if (ch == 224) {ch = getch ();switch (ch) {case 83: {                                                  //Deleteif (tx == ty -> v.size()) {if (ty -> next != doc.end ()) {for (iterator it = 0; it < ty -> next -> v.size (); it++)ty -> v         += ty -> next -> v[it];doc.erase (ty);}} else {ty -> v.erase (tx);}break;}case UP: {if (ty -> pre != doc.begin ()) {ty                      = ty -> pre;tx                      = min (tx, ty -> v.size ());cnt--;}edit                        = false;break;}case DOWN: {if (ty -> next != doc.end ()) {ty                      = ty -> next;tx                      = min (tx, ty -> v.size ());cnt++;}edit                        = false;break;}case LEFT: {if (tx > 0) {tx--;}edit                        = false;break;}case RIGHT: {if (tx < ty -> v.size ()) {tx++;}edit                        = false;break;}}} else if (ch == 127) {do {if (tx != 0) {tx--;ty -> v.erase (tx);}} while (tx % 4 != 0);} else {ty -> v.insert (tx, (char)ch);tx++;}while (cnt > H - 2) {lines++;cnt--;py                          = py -> next;}while (cnt < 0) {lines--;cnt++;py                          = py -> pre;}if (edit) {edit                        = false;char                        calls[BUFLEN];sprintf (calls, "title %s*", name);system (calls);}mlock.unlock();sig                             = 1;}return;
}namespace snake {#define X 23#define Y 40#define MAXLEN 75#define MINTIME 75void welcome () {printf  ("游戏规则:\n");printf  ("w,a,s,d,控制移动\n");getch   ();system  ("cls");return;}void init () {system ("title 贪吃蛇");CONSOLE_CURSOR_INFO cursor_info = {1, 0};SetConsoleCursorInfo (GetStdHandle (STD_OUTPUT_HANDLE), &cursor_info);std::fstream in ("score.txt", std::ios::in);if (!in.fail ())in >> max_score;elsewelcome ();in.close ();len = 4;snake[0][0] = X >> 1;snake[0][1] = Y >> 1;snake[1][0] = (X >> 1) + 1;snake[1][1] = Y >> 1;snake[2][0] = (X >> 1) + 2;snake[2][1] = Y >> 1;snake[3][0] = (X >> 1) + 3;snake[3][1] = Y >> 1;way = UP;wait = 150.0;return;}void drawmap (){color (255);for (unsigned int xx = 0; xx < X; xx++){gotoxy (0, (short)xx);printf ("  ");gotoxy ((short)(Y * 2 - 2), (short)xx);printf ("  ");}for (unsigned int yy = 0; yy < Y; yy++){gotoxy ((short)(yy * 2), 0);printf ("  ");gotoxy ((short)(yy * 2), (short)(X - 1));printf ("  ");}return;}void drawsnake (){color (255);gotoxy (0,0);printf ("  ");color (10);gotoxy ((short)(snake[0][1] * 2), (short)snake[0][0]);printf ("□");gotoxy ((short)(snake[1][1] * 2), (short)snake[1][0]);printf ("■");return;}void move () {lastt[0] = snake[len-1][0];lastt[1] = snake[len-1][1];for (unsigned int tc = len - 1; tc > 0; tc--){snake[tc][0] = snake[tc-1][0];snake[tc][1] = snake[tc-1][1];}switch (way) {case UP: {snake[0][0]--;break;}case DOWN: {snake[0][0]++;break;}case LEFT: {snake[0][1]--;break;}case RIGHT: {snake[0][1]++;break;}}return;}void clt () {color (0);gotoxy ((short)(lastt[1] * 2), (short)lastt[0]);printf ("  ");return;}void getin () {if (kbhit () != 0) {while (kbhit() != 0)input = getch ();switch (input) {case 'W':case 'w': {if (way != DOWN)way = UP;break;}case 'S':case 's': {if (way != UP)way = DOWN;break;}case 'A':case 'a':{if (way != RIGHT)way = LEFT;break;}case 'D':case 'd':{if (way != LEFT)way = RIGHT;break;}}}return;}void putfood () {if (empty) {bool flag = true;srand (time (NULL));while (flag) {food[0] = rand () % (X - 2) + 1;food[1] = rand () % (Y - 2) + 1;flag = false;for (unsigned int tc = 0; tc < len; tc++) {if(snake[tc][0] == food[0] && snake[tc][1] == food[1])flag = true;} }empty = false;color (14);gotoxy ((short)(food[1] * 2), (short)food[0]);printf ("◆");}return;}void eatfood () {if (snake[0][0] == food[0] && snake[0][1] == food[1]) {empty = true;score++;if(wait >= MINTIME)wait -= 0.5;if(len < MAXLEN)len++;}return;}bool gameover () {bool over = false;if (snake[0][0] == 0 || snake[0][0] == X - 1 ||snake[0][1] == 0 || snake[0][1] == Y - 1) {over = true;}for (unsigned int tc = 1; tc < len; tc++)if (snake[0][0] == snake[tc][0] && snake[0][1] == snake[tc][1])over = true;if (over == true) {system ("cls");while (kbhit() != 0)getch ();printf ("Game over!\n");printf ("Score:%d\n",score);printf ("Max score:%d\n",max_score);getch ();system ("cls");printf ("Save...\n");if (score > max_score) {std::fstream write;write.open ("score.txt",std::ios::out);write << score;write.close ();max_score = score;}}return over;}int start () {init ();drawmap ();Sleep (3000);while (true) {clt         ();drawsnake   ();putfood     ();eatfood     ();getin       ();move        ();if (gameover ())break;Sleep ((DWORD)(wait));}return 0;}#undef X#undef Y#undef MAXLEN#undef MINTIME
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/667246.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

说说RDB和AOF

简介&#xff1a; 众所周知&#xff0c;redis是一个内存数据库&#xff0c;当机器重启后&#xff0c;内存中数据都会丢失。所以redis提供了两种持久化方式&#xff0c;即&#xff1a;RDB(保存一个时间点前的数据)和AOF(保存redis服务器端执行的每一条命令)。 RDB: RDB有两种…

【算法与数据结构】300、674、LeetCode最长递增子序列 最长连续递增序列

文章目录 一、300、最长递增子序列二、674、最长连续递增序列三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、300、最长递增子序列 思路分析&#xff1a; 第一步&#xff0c;动态数组的含义。 d p [ i ] dp[i] dp[i…

程序执行内存区域,堆栈使用及区别

文章目录 一、程序执行内存区域二、堆区详解三、栈内存与堆内存的区别总结 一、程序执行内存区域 **代码区&#xff1a;**当我们的程序被执行时&#xff0c;它会有一个加载准备的过程。其中函数及内部的流程结构代码指令会被放到代码区中&#xff0c;等待着被调用执行。 **常数…

【JS】基于React的Next.js环境配置与示例

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍基于React的Next.js环境配置与示例。 学其所用&#xff0c;用其所学。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&#xff0c;下…

【乳腺肿瘤诊断分类及预测】基于自适应SPREAD-PNN概率神经网络

课题名称&#xff1a;基于自适应SPREAD-PNN的乳腺肿瘤诊断分类及预测 版本日期&#xff1a;2023-06-15 运行方式: 直接运行PNN0501.m 文件即可 代码获取方式&#xff1a;私信博主或QQ&#xff1a;491052175 模型描述&#xff1a; 威斯康辛大学医学院经过多年的收集和整理&…

笔记---求组合数

总&#xff1a; ①10w次询问——1 < b < a < 2000——递推求—— N N N2 ②1w次询问——1 < b < a < 105——公式求—— N l o g N NlogN NlogN ③20次询问——1 < b < a < 1018——Lucas定理 ④1次询问——1 < b < a < 5000——拆分质因子…

【数据结构与算法】(7)基础数据结构之双端队列的链表实现、环形数组实现示例讲解

目录 2.6 双端队列1) 概述2) 链表实现3) 数组实现习题E01. 二叉树 Z 字层序遍历-Leetcode 103 2.6 双端队列 1) 概述 双端队列、队列、栈对比 定义特点队列一端删除&#xff08;头&#xff09;另一端添加&#xff08;尾&#xff09;First In First Out栈一端删除和添加&…

普渡机器人CEO预测2024年服务机器人市场将扩大

原创 | 文 BFT机器人 根据普渡科技有限公司的报告&#xff0c;商用服务机器人在东亚地区的应用比其他地方更为广泛。然而&#xff0c;预计到2024年&#xff0c;全球其他地区也将迎头赶上。这家总部位于中国深圳的公司自豪地宣称&#xff0c;它已经成为中国最大的此类机器人出口…

基于微信小程序的书籍阅读系统,附源码

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

【Unity知识点详解】自定义程序集

今天来介绍一下Unity中的自定义程序集。在项目开发中我们经常接触到第三方插件的程序集&#xff0c;如DOTween、Newtonsoft.Json等。 使用自定义程序集有这么几个好处&#xff1a; 方便代码的的复用。当某一功能模块需要在多个项目中重复使用时&#xff0c;可以将代码编译成程…

Linux 驱动开发基础知识——内核对设备树的处理与使用(十)

个人名片&#xff1a; &#x1f981;作者简介&#xff1a;学生 &#x1f42f;个人主页&#xff1a;妄北y &#x1f427;个人QQ&#xff1a;2061314755 &#x1f43b;个人邮箱&#xff1a;2061314755qq.com &#x1f989;个人WeChat&#xff1a;Vir2021GKBS &#x1f43c;本文由…

【数据结构与算法】(5)基础数据结构之队列 链表实现、环形数组实现详细代码示例讲解

目录 2.4 队列1) 概述2) 链表实现3) 环形数组实现 2.4 队列 1) 概述 计算机科学中&#xff0c;queue 是以顺序的方式维护的一组数据集合&#xff0c;在一端添加数据&#xff0c;从另一端移除数据。习惯来说&#xff0c;添加的一端称为尾&#xff0c;移除的一端称为头&#xf…

安装配置Oracle 11g 、PLSQL及使用Navicat远程连接Oracle

目录 一、下载 二、安装 1.执行安装程序 2.配置安全更新 3.安装选项 4.系统类 5.网络安装选项 6.选择安装类型 7.选择产品语言 8.选择数据库版本 9.指定安装位置 10.选择配置类型 ​编辑11.指定数据库标识符 12.指定配置选项 13.电子邮箱 14.指定数据库存储…

自学Java的第十九天

一&#xff0c;每日收获 1.排序 2.冒泡排序法 3.查找 4.多维数组-二维数组 二&#xff0c;新名词与小技巧 三&#xff0c;今天学习中所遇到的困难 一&#xff0c;每日收获 1.排序 ① 排序的介绍 排序是将多个数据&#xff0c;依指定的顺序进行排列的过程。 ② 排序的…

学习c语言,动态内存管理

malloc和calloc区别在于初始化 realloc动态内存

【从单张图像解锁深度信息】Depth Anything一种用于鲁棒单目深度估计的高度实用的解决方案

Depth Anything是一种用于鲁棒单目深度估计的高度实用的解决方案。 在不追求新颖的技术模块的情况下,我们的目标是建立一个简单而强大的基础模型,处理任何情况下的任何图像。 为此,我们通过设计数据引擎来收集并自动注释大规模未标记数据(~62M)来扩展数据集,这显着扩大了…

web前端-------弹性盒子(2)

上一讲我们谈的是盒子的容器实行&#xff0c;今天我们来聊一聊弹性盒子的项目属性&#xff1b; *******************&#xff08;1&#xff09;顺序属性 order属性&#xff0c;用于定义容器中项目的出现顺序。 顺序属性值&#xff0c;为整数&#xff0c;可以为负数&#xff…

Elasticsearch:集群故障排除和优化综合指南

Elasticsearch 是一个强大的搜索和分析引擎&#xff0c;是许多数据驱动应用程序和服务的核心。 它实时处理、分析和存储大量数据的能力使其成为当今快节奏的数字世界中不可或缺的工具。 然而&#xff0c;与任何复杂的系统一样&#xff0c;Elasticsearch 可能会遇到影响其性能和…

Container 命令ctr、crictl 命令

1、 Containerd和Docker的架构区别 Docker vs. Containerd&#xff1a; 2、ctr & crictl的区别 ctr是containerd的一个客户端工具 crictl 是 CRI 兼容的容器运行时命令行接口&#xff0c;可以使用它来检查和调试 Kubernetes 节点上的容器运行时和应用程序 crictl 则直接对…

Maxwell查询databases表报错:You have an error in your SQL syntax;

报错信息&#xff1a;You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near databases at line 1 报错说明&#xff1a; maxwell初始化后&#xff0c;在其数据库中会有一些表&#xff0c;…