int main(int argc,char *argv) { system("color 4A"); Snake sna; Apple fd; fd=product_food(fd);; //сно╥я╜╩╥ while(1) { if(sna.is_dead()) { system("cls"); GameOver(); break; } if(sna.is_eat(fd)) { fd=product_food(fd); } if(sna.is_win()) { break; } sna.Move(); } return 0; }
// // FUNCTION: WndProc(HWND, UINT, WPARAM, LPARAM) // // PURPOSE: Processes messages for the main window. // // WM_COMMAND - process the application menu // WM_PAINT - Paint the main window // WM_DESTROY - post a quit message and return // // LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { int wmId, wmEvent; PAINTSTRUCT ps; HDC hdc; switch (message) { case WM_CREATE: hdc = GetDC(hWnd); SetMapMode(hdc, MM_LOMETRIC); POINT p[1]; p[0].x = 1000; p[0].y = -1000; LPtoDP(hdc, p, 1); DeleteDC(hdc); SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, p[0].x + 10, p[0].y + 52, NULL); //Padding na ramkê SetTimer(hWnd, TIMER, 25, (TIMERPROC)NULL); break; case WM_COMMAND: wmId = LOWORD(wParam); wmEvent = HIWORD(wParam); // Parse the menu selections: switch (wmId) { case IDM_ABOUT: DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About); break; case IDM_EXIT: DestroyWindow(hWnd); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } break; case WM_PAINT: hdc = BeginPaint(hWnd, &ps); // TODO: Add any drawing code here... SetMapMode(hdc, MM_LOMETRIC); //ustaw gruboœæ na 0,1 mm SelectObject(hdc, hPen); //wybierz utworzone pióro snake.Draw(hdc); EndPaint(hWnd, &ps); break; case WM_USER: DeleteObject(hPen); //usuñ pióro PostQuitMessage(0); break; case WM_TIMER: snake.Move(); //wykonaj ruch wê¿em RedrawWindow(hWnd, NULL, NULL, RDW_ERASE | RDW_INVALIDATE | RDW_NOCHILDREN); //i odœwie¿ okno break; case WM_DESTROY: DeleteObject(hPen); //usuñ pióro PostQuitMessage(0); break; case WM_KEYDOWN: switch(wParam) { case VK_LEFT: snake.Turn(LEFT); break; case VK_RIGHT: snake.Turn(RIGHT); break; case VK_DOWN: PostMessage(HWND_BROADCAST, GORIGHT, 0, 0); break; default: break; } break; default: break; } if(message == GOLEFT) { snake.Add(wParam); snake.SetDirection(LEFT); } return DefWindowProc(hWnd, message, wParam, lParam); }
int main() { int c = 0; initscr(); cbreak(); // Disable buffering, making input available to the program immediately timeout(500); keypad(stdscr, TRUE); // Enable input from arrow keys curs_set(0); // Hide cursor getmaxyx(stdscr, maxY, maxX); // Get max X and Y of the terminal //Snake* snake = Snake::Load(FILE_NAME); Snake* snake; snake = new Snake(maxX-1, maxY-1, UP); GenerateNewTarget(); while(snake->SetTarget(targetX, targetY)==false) GenerateNewTarget(); mvaddch(targetY, targetX, '$'); while (true) { c = getch(); if(c==32) { GenerateNewTarget(); while(snake->SetTarget(targetX, targetY)==false) GenerateNewTarget(); mvaddch(targetY, targetX, '$'); } //運行AI if(isAutoMode==true) { autoMove(snake,snake->getTarX(),snake->getTarY(),maxX,maxY); c=moveQueue.front(); moveQueue.pop(); } switch (c) { case KEY_UP: //259 snake->SetDir(UP); break; case KEY_DOWN: //258 snake->SetDir(DOWN); break; case KEY_LEFT: //260 snake->SetDir(LEFT); break; case KEY_RIGHT://261 snake->SetDir(RIGHT); break; default: break; } if (c == 'q' || c == 'Q') { break; } snake->Move(); if (snake->CurX() < 0 || snake->CurX() >= maxX || snake->CurY() < 0 || snake->CurY() >= maxY) { printLog(log); //int i=0; //while(i==0)//停留在結束畫面 //{ //cout<<endl; //} break; } round=round+1; if (snake->CurX() == targetX && snake->CurY() == targetY) { GenerateNewTarget(); while(snake->SetTarget(targetX, targetY)==false) GenerateNewTarget(); mvaddch(targetY, targetX, '$'); //snake->SetTarget(targetX, targetY); score+=1; //time.push_back(round); r.push_back("Round="+int2str(round)+" mean="+dbl2str(static_cast<double>(round)/score)); //round=0; } printLog(r,"round"); } //snake->Save(FILE_NAME); delete snake; endwin(); // Restores the terminal after Curses activity cout<<"你的得分是:"<<score<<endl; }