Example #1
0
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;
}
Example #2
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);
}
Example #3
0
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;
}