« 【curses】スネークゲーム | トップページ | DXライブラリを使うプロジェクト設定のプロパティシート »

2011年5月 4日 (水)

【curses】ひたすら下るゲーム

ひたすら下るゲーム

cursesライブラリのスクロール機能を使って、ひたすら下るゲームを作った。

左右に移動し続ける主人公(@)はスペースキーで方向転換する。

スクロールする障害物(#)にぶつからないようひたすら下るのが目的。

#include <curses.h>
#include <unistd.h>
#include <time.h>
#define STAGE_WIDTH    40
#define LANE_INI_WIDTH 32
#define STAGE_HEIGHT   20
int main(int argc, char *argv[])
{
	int i,d,ch;
	int py,px,pvx;
	int wx,wvx,wd,ww;
	srand(time(NULL));
	if(!initscr())return 1;
	noecho();nonl();cbreak();
	wtimeout(stdscr, 0);
	keypad(stdscr, TRUE);
	scrollok(stdscr, TRUE);
RETRY:
	curs_set(0);
	clear();
	py=STAGE_HEIGHT-12;
	px=0; pvx=1;
	wx=4; wvx=1;
	ww=LANE_INI_WIDTH;
	wd=0;
	for(d=1;;++d) {
		usleep(100000);
		ch=getch();
		if(ch==' ')pvx=-pvx;
		if(px<=0)pvx=1;
		mvaddch(py,px,'.');
		px+=pvx;
		scrl(1);
		move(STAGE_HEIGHT-1,0);
		for(i=0;i<STAGE_WIDTH;++i)addch('#');
		move(STAGE_HEIGHT-1,wx);
		for(i=0;i<ww;++i)addch(' ');
		if(ww>3)mvaddch(STAGE_HEIGHT-1,rand()%(ww-2)+wx+1,'#');
		mvprintw(STAGE_HEIGHT,0,"%d",d);
		move(py,px);
		ch=inch();
		addstr("@\b");
		if(ch!=' ')break;
		if(ww>1&&d%10==0){
			--ww;
		}
		if(wx+ww>=STAGE_WIDTH-1)wvx=-1;
		else if(wx<=1)wvx=1;
		else if(--wd<0){
			wd=rand()%10+2;
			wvx=-wvx;
		}
		wx+=wvx;
		refresh();
	}
	mvaddch(py,px,'X');
	curs_set(1);
	mvaddstr(0,0,"retry or quit [r/q] ?  \b\b");
	refresh();
	do {
		ch=getch();
		if(ch == 'r') {
			goto RETRY;
		}
	} while(ch != 'q');
	endwin();
	return 0;
}

|

« 【curses】スネークゲーム | トップページ | DXライブラリを使うプロジェクト設定のプロパティシート »

C/C++」カテゴリの記事

curses」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




« 【curses】スネークゲーム | トップページ | DXライブラリを使うプロジェクト設定のプロパティシート »