« 【JavaSE】フレームワークライブラリを更新 (2011/03/01) | トップページ | 【curses】スネークゲーム »

2011年4月20日 (水)

【curses】障害物避けレースゲーム

障害物避けレースゲーム

cursesライブラリを使ってシンプルなゲームを作ってみた。

左から右へコースが流れるので、障害物(*)とガードレール(=I=)にぶつからないようにゴールするのが目的。

操作は上下移動にカーソルキーを使う。

ゲームオーバーになったら再挑戦する(r)か終了する(q)か問われる。

CygwinとUbuntuで動作確認した。

Cygwinでカーソルが表示されたままだったので、プレイに支障ないようカーソル位置を考慮した。

#include <curses.h>
#include <unistd.h>
#include <time.h>
#define DIST 200
int main(void)
{
	int d,ch,py,px;
	srand(time(NULL));
	if(!initscr()){
		return 1;
	}
	noecho();nonl();cbreak();
	wtimeout(stdscr, 0);
	keypad(stdscr, TRUE);
	leaveok(stdscr, TRUE);
RETRY:
	curs_set(0);
	clear();
	py=2;px=20;
	for(d=0; d<DIST+px-1; ++d){
		usleep(40000);
		ch=getch();
		if(d%3 == 0)
			move(rand()%3+1,0),addch('*');
		if(d == DIST)
			mvaddch(0,0,'G'),
			mvaddch(1,0,'O'),
			mvaddch(2,0,'A'),
			mvaddch(3,0,'L'),
			mvaddch(4,0,'!');
		mvinsch(0,0,"=I="[d%3]);
		mvinsch(1,0,' ');
		mvinsch(2,0,' ');
		mvinsch(3,0,' ');
		mvinsch(4,0,"=I="[d%3]);
		mvaddch(py,px+1,'-');
		py+=-(ch==KEY_UP&&py>0)+(ch==KEY_DOWN&&py<4);
		move(py,px);
		if(inch()!=' ')break;
		addstr("<\b");
		refresh();
	}
	curs_set(1);
	mvaddstr(5,0,"retry or quit [r/q] ?");
	refresh();
	do {
		ch=getch();
		if(ch == 'r'){
			goto RETRY;
		}
	} while(ch != 'q');
	endwin();
	return 0;
}

|

« 【JavaSE】フレームワークライブラリを更新 (2011/03/01) | トップページ | 【curses】スネークゲーム »

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

curses」カテゴリの記事

コメント

コメントを書く



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




« 【JavaSE】フレームワークライブラリを更新 (2011/03/01) | トップページ | 【curses】スネークゲーム »