コード例 #1
0
ファイル: 贪吃蛇.cpp プロジェクト: chenwp/shuax
void DispatchMessage()
{
	InitSnake();
	InitWall();

	while (1)
	{
		CreateFood();
		CreateAward();

		DrawString(10, 0, " Score:%04d ", score);
		AppendSnakeNodeList(Head, Orientation);
		CheckAward();
		if (CheckSnake() || CheckWall())
		{
			DrawString(2, 2, "你死啦! 按任意键重新开始玩!");
			getch();
			break;
		}
		DrawString(Head->Location.x, Head->Location.y, "◎");

		if (!CheckFood())
		{
			DrawString(Tail->Location.x, Tail->Location.y, " ");
            DeleteSnakeNodeList(Tail);
		}
		int keep = 0;

		if (kbhit())
		{
			switch (getch())
			{
			case 0x1b://按下ESC,暂停游戏
				getch();
				continue;
			case 0xE0://按下特殊键
				switch (getch())
				{
				case 75: if(Orientation==0) keep = 1;if (Orientation%2!=0) Orientation=0; break;
				case 72: if(Orientation==1) keep = 1;if (Orientation%2==0) Orientation=1; break;
				case 77: if(Orientation==2) keep = 1;if (Orientation%2!=0) Orientation=2; break;
				case 80: if(Orientation==3) keep = 1;if (Orientation%2==0) Orientation=3; break;
				default: ;
				}
				break;
			}
		}

		if(!keep&&(100-score*2)>10)Sleep(100-score*2);//难度提升 
		else Sleep(10);
	}
}
コード例 #2
0
ファイル: greedysnake.c プロジェクト: me123alsl/GreedySnake
int main()
{
	int parent_x, parent_y;
START:
	head = (psnakeHead)malloc(sizeof(snakeHead));
	head -> length = 0;
	head -> row = 14;
	head -> col = 14;
	head -> pbody = NULL;
	head -> headdirection = RIGHT;
	InitSnake(head);

    initscr();  
    raw();                  /* close row buffer */
    cbreak();               /* put termial to CBREAK mode */  
    noecho();  
    curs_set(FALSE);            /* set cursor invisible */  
    keypad(stdscr,TRUE);    /* recognise user's function key,F1,F2,...
							   display some message about title and wall */  
    signal(SIGALRM, StartAlarm);  
	getmaxyx(stdscr, parent_y, parent_x);
	WINDOW *welwin = newwin(29, parent_x, 0, 0);
	WINDOW *lelwin = newwin(7, parent_x, 30, 0);
	if (!welwin || !lelwin) {
		Die("Unable to allocate window memory\n");
	}
	Welcome(welwin, 29, parent_x);
	int speed = Choice(lelwin);
    Set_ticker(speed);  
	DrawWalls();
    StartAlarm();
    foodpos = DisplayFood(head);
    while(!isfailed && chinput !='q') {
        chinput = getch();
		ControlSnake(chinput, head);
    }
    if(isfailed) {
		ClearScr(LEFT_EDGE+1, RIGHT_EDGE-1, TOP_ROW+1, BUT_ROW-1);		//mark
		free(head -> pbody);
		free(head);
		head = NULL;
    }
    if(isrestart) {
        isfailed = 0;
        isrestart = 0;      // clear the flag
        goto START;    		// go to the START statement
    }
	endwin();
	return 0;
}