Download : sample-001.c ( utf8 版 )
/*
* 2016/09/30 sample-001.c
*/
/*
* curses hello
*
* 利用方法
* コンパイル
* cc -I ~/c/include -o sample-001.exe sample-001.c -lncursesw
* 実行
* sample-001
*/
#include <stdio.h>
#include <ncursesw/ncurses.h> /* ncursesw を利用する場合 */
/*
* curses_hello()
*/
void curses_hello( void ) {
initscr(); /* curses の利用開始 */
move ( 10, 30 ); /* カーソルの移動 ( Y, X の順である事に注意 ) */
addstr ( "Hello, Curses" ); /* 文字列の表示 */
getch(); /* 文字の入力を待つ */
endwin(); /* curses の利用終了 */
}
/*
* main
*
*/
int main( int argc, char *argv[] )
{
curses_hello();
return 0;
}
$ ./sample-001.exe
Hello, Curses
$
Download : sample-002.c ( utf8 版 )
/*
* 2016/09/30 sample-002.c
*/
/*
* スカッシュゲーム ( Ver 0.01 )
* キーボードによって、ラケットを移動する
* 'h' 左に移動
* 'l' 右に移動
* 'q' 終了
*
* 利用方法
* コンパイル
* cc -I ~/c/include -o sample-002.exe sample-002.c -lncursesw
* 実行
* sample-002
*/
#include <stdio.h>
#include <ncursesw/ncurses.h> /* ncursesw を利用する場合 */
/*
* main
*/
int main(int argc, char *argv[]) {
int racket_x = 35; /* ラケットの x 座標 */
int racket_y = 12; /* ラケットの y 座標 */
int ch = ' '; /* キーボードからの入力 */
initscr(); /* curses を利用開始 */
noecho();
while ( ch != 'q' ) { /* キーボードから 'q' が入るまで繰り返す */
move ( racket_y, racket_x ); /* ラケットを書く */
addstr ( "********" );
ch = getch(); /* 入力を待つ */
move ( racket_y, racket_x ); /* ラケットを消す */
addstr ( " " );
switch ( ch ) {
case 'h':
racket_x = racket_x - 1;
break;
case 'l':
racket_x = racket_x + 1;
break;
}
}
endwin(); /* curses を利用終了 */
return 0;
}
$ ./sample-002.exe
********
$
Download : sample-003.c ( utf8 版 )
/*
* 2016/09/30 sample-003.c
*/
/*
* スカッシュゲーム ( Ver 0.02 )
* ボールも一緒に移動
*
* 利用方法
* コンパイル
* cc -I ~/c/include -o sample-003.exe sample-003.c -lncursesw
* 実行
* sample-003
*/
#include <stdio.h>
#include <ncursesw/ncurses.h> /* ncursesw を利用する場合 */
/*
* main
*/
int main(int argc, char *argv[]) {
int racket_x = 35; /* ラケットの x 座標 */
int racket_y = 19; /* ラケットの y 座標 */
int ball_x = 35; /* ボールの x 座標 */
int ball_y = 12; /* ボールの y 座標 */
int ball_dx = 0; /* ボールの x 速度 */
int ball_dy = 1; /* ボールの y 速度 */
int ch = ' '; /* キーボードからの入力 */
initscr(); /* curses を利用開始 */
noecho();
while ( ch != 'q' ) { /* キーボードから 'q' が入るまで繰り返す */
move ( racket_y, racket_x ); /* ボール書き込む */
addstr ( "********" );
move ( ball_y, ball_x ); /* ボール書き込む */
addch ( '*' );
ch = getch(); /* 入力をまつ */
move ( racket_y, racket_x );
addstr ( " " );
move ( ball_y, ball_x );
addch ( ' ' );
ball_x = ball_x + ball_dx;
ball_y = ball_y + ball_dy;
switch ( ch ) {
case 'h':
racket_x = racket_x - 1;
break;
case 'l':
racket_x = racket_x + 1;
break;
}
}
endwin(); /* curses を利用終了 */
return 0;
}
$ ./sample-003.exe
*
********
$
Download : sample-004.c ( utf8 版 )
/*
* 2016/09/30 sample-004.c
*/
/*
* スカッシュゲーム ( Ver 0.03 )
* ボールは、キーボードの入力を待たずに勝手に移動
*
* 利用方法
* コンパイル
* cc -I ~/c/include -o sample-004.exe sample-004.c -lncursesw
* 実行
* sample-004
*/
#include <stdio.h>
#include <ncursesw/ncurses.h> /* ncursesw を利用する場合 */
/*
* main
*/
int main(int argc, char *argv[]) {
int racket_x = 35; /* ラケットの x 座標 */
int racket_y = 19; /* ラケットの y 座標 */
int ball_x = 35; /* ボールの x 座標 */
int ball_y = 12; /* ボールの y 座標 */
int ball_dx = 0; /* ボールの x 速度 */
int ball_dy = 1; /* ボールの y 速度 */
int ch = ' '; /* キーボードからの入力 */
initscr(); /* curses を利用開始 */
noecho();
timeout(0); /* キーボードを待つ時間 (0 にしたので待たない) */
while ( ch != 'q' ) {
usleep ( 1000000 ); /* ボールの移動の時間 ( 1000000 micro sec = 1sec ) */
move ( racket_y, racket_x ); /* ボール書き込む */
addstr ( "********" );
move ( ball_y, ball_x ); /* ボール書き込む */
addch ( '*' );
ch = getch(); /* 入力をチェック (入力がなくても次に行く) */
move ( racket_y, racket_x );
addstr ( " " );
move ( ball_y, ball_x );
addch ( ' ' );
ball_x = ball_x + ball_dx;
ball_y = ball_y + ball_dy;
switch ( ch ) {
case 'h':
racket_x = racket_x - 1;
break;
case 'l':
racket_x = racket_x + 1;
break;
}
}
endwin(); /* curses を利用終了 */
return 0;
}
$ ./sample-003.exe
*
********
$
Download : sample-005.c ( utf8 版 )
/*
* 2016/09/30 sample-005.c
*/
/*
* スカッシュゲーム ( Ver 0.04 )
* ボールの移動と、キーボードの入力を分離
*
* 利用方法
* コンパイル
* cc -I ~/c/include -o sample-005.exe sample-005.c -lncursesw
* 実行
* sample-005
*/
#include <stdio.h>
#include <ncursesw/ncurses.h> /* ncursesw を利用する場合 */
/*
* main
*/
int main(int argc, char *argv[]) {
int racket_x = 35; /* ラケットの x 座標 */
int racket_y = 19; /* ラケットの y 座標 */
int ball_x = 35; /* ボールの x 座標 */
int ball_y = 12; /* ボールの y 座標 */
int ball_dx = 0; /* ボールの x 速度 */
int ball_dy = 1; /* ボールの y 速度 */
int ball_count = 0; /* ボールの待ち時間 */
int ch = ' '; /* キーボードからの入力 */
initscr(); /* curses を利用開始 */
noecho();
timeout(0); /* キーボードを待つ時間 (0 にしたので待たない) */
/* ボールを書く */
move ( ball_y, ball_x );
addch ( '*' );
/* ラケットを書く */
move ( racket_y, racket_x );
addstr ( "********" );
while ( ch != 'q' ) {
usleep ( 10000 ); /* 移動の時間 ( 10000 micro sec = 10 mili sec ) */
ball_count = ball_count + 1; /* ボールの待ち時間を増やす */
if ( ball_count > 100 ) { /* ボールの待ち時間が 100 を越えた */
ball_count = 0; /* カウントをリセット */
move ( ball_y, ball_x ); /* ボールを消す */
addch ( ' ' );
/* ボールを移動 */
ball_x = ball_x + ball_dx;
ball_y = ball_y + ball_dy;
move ( ball_y, ball_x ); /* ボールを書く */
addch ( '*' );
}
ch = getch(); /* 入力をチェック (入力がなくても次に行く) */
switch ( ch ) {
case 'h':
// break;
case 'l': /* ch が 'h' か 'l' の時 */
move ( racket_y, racket_x ); /* ラケットを消す */
addstr ( " " );
if ( ch == 'h' ) { /* 入力が 'h' なら */
racket_x = racket_x - 1; /* 左に移動 */
} else { /* そうでなければ ('l' なので) */
racket_x = racket_x + 1; /* 右に移動 */
}
move ( racket_y, racket_x ); /* ラケットを書く */
addstr ( "********" );
break;
}
}
endwin(); /* curses を利用終了 */
return 0;
}
$ ./sample-003.exe
*
********
$
Download : sample-006.c ( utf8 版 )
/*
* 2016/09/30 sample-006.c
*/
/*
* スカッシュゲーム ( Ver 0.05 )
* 衝突処理
* ボールと壁
* ボールとラケット
*
* 利用方法
* コンパイル
* cc -I ~/c/include -o sample-006.exe sample-006.c -lncursesw
* 実行
* sample-006
*/
#include <stdio.h>
#include <ncursesw/ncurses.h> /* ncursesw を利用する場合 */
/*
* main
*/
int main(int argc, char *argv[]) {
int racket_x = 35; /* ラケットの x 座標 */
int racket_y = 19; /* ラケットの y 座標 */
int ball_x = 35; /* ボールの x 座標 */
int ball_y = 12; /* ボールの y 座標 */
int ball_dx = 1; /* ボールの x 速度 */
int ball_dy = 1; /* ボールの y 速度 */
int ball_count = 0; /* ボールの待ち時間 */
int ch = ' '; /* キーボードからの入力 */
initscr(); /* curses を利用開始 */
noecho();
timeout(0); /* キーボードを待つ時間 (0 にしたので待たない) */
/* ボールを書く */
move ( ball_y, ball_x );
addch ( '*' );
/* ラケットを書く */
move ( racket_y, racket_x );
addstr ( "********" );
while ( ch != 'q' ) {
usleep ( 1000 ); /* 移動の時間 ( 1000 micro sec = 1 mili sec ) */
ball_count = ball_count + 1; /* ボールの待ち時間を増やす */
if ( ball_count > 100 ) { /* ボールの待ち時間が 100 を越えた */
ball_count = 0; /* カウントをリセット */
move ( ball_y, ball_x ); /* ボールを消す */
addch ( ' ' );
/* ボールを移動 */
ball_x = ball_x + ball_dx;
ball_y = ball_y + ball_dy;
move ( ball_y, ball_x ); /* ボールを書く */
addch ( '*' );
if ( ball_x < 1 ) { /* ボールが左端にきた */
ball_dx = 1; /* ボールの向きを右向きにする */
}
if ( ball_x > 70 ) { /* ボールが右端にきた */
ball_dx = -1; /* ボールの向きを左向きにする */
}
if ( ball_y < 1 ) { /* ボールが上端にきた */
ball_dy = 1; /* ボールの向きを下向きにする */
}
if ( ball_y > 20 ) { /* ボールが下端にきた */
ball_dy = -1; /* ボールの向きを上向きにする */
}
if ( ball_y == racket_y ) { /* ボールがラケットの高さで */
if ( racket_x <= ball_x ) { /* ボールがラケットの左端より右で */
if ( ball_x <= racket_x + 7 ) { /* ボールがラケットの右端より左なら */
/* ラケットとボールが衝突したので.. */
ball_dy = -1; /* ボールの向きを上向きにする */
}
}
}
}
ch = getch(); /* 入力をチェック (入力がなくても次に行く) */
switch ( ch ) {
case 'h':
// break;
case 'l': /* ch が 'h' か 'l' の時 */
move ( racket_y, racket_x ); /* ラケットを消す */
addstr ( " " );
if ( ch == 'h' ) { /* 入力が 'h' なら */
if ( racket_x > 1 ) { /* まだ左端でなければ */
racket_x = racket_x - 1; /* 左に移動 */
}
} else { /* そうでなければ ('l' なので) */
if ( racket_x + 7 < 70 ) { /* まだ右端でなければ */
racket_x = racket_x + 1; /* 右に移動 */
}
}
move ( racket_y, racket_x ); /* ラケットを書く */
addstr ( "********" );
break;
}
}
endwin(); /* curses を利用終了 */
return 0;
}
$ ./sample-003.exe
*
********
$
/*
* CDATE FILENAME
*
* キーボードから一文字入力し、その文字によって異る国の挨拶をする
*/
#include <stdio.h>
/*
* hello ( char contry )
* char contry : 国を表す一文字
* j : 日本
* e : 英語
* c : 中国
* f : フランス語
* g : ドイツ語
*/
void hello ( char cmd ) {
switch ( cmd ) {
case 'j': /* 'j' の時は、日本語にする */
printf ( "こんにちは\n" );
break;
case 'e': /* 'e' の時は、英語にする */
printf ( "Good Afternoon\n" );
break;
case 'c': /* 'c' の時は、中国語にする */
printf ( "ニイハオ\n" );
break;
case 'f': /* 'f' の時は、フランス語にする */
printf ( "Bonjour\n" );
break;
/*
** この部分を完成させなさい
*/
printf ( "Guten tag\n" );
break;
default: /* どれでもなければ.. */
printf ( "???\n" );
break;
}
}
/*
* main
*/
int main( void )
{
printf ( "国を表す文字を入力してください\n" );
printf ( "\tj\t日本\n" );
printf ( "\te\t英語\n" );
printf ( "\tc\t中国\n" );
printf ( "\tf\tフランス\n" );
printf ( "\tg\tドイツ\n" );
hello ( getchar() ); /* getchar() で文字を入力し、それに対応する結果を出す */
return 0;
}
/*
* 課題 CNAME-02
*
* 20160923 20160923-02-QQQQ.c
*
* 0 〜 99 の偶数を出力する
* 0, 2, 4, 6, ..., 98
*/
#include <stdio.h>
/*
* for 文を利用して、0 から 99 の偶数の数値
(そのニ) i が 0 〜 99 の間の偶数だけを動くようにし、毎回 i を出す
*/
int main(int ac, char *av[] ) {
int i; /* for 文の制御変数 */
/*
「i++」 は、ほぼ、「i=i+1」 と同じ
*/
for ( i = 0; i < 100; i = i + 2 ) {
/* i++ だと i = 0, 1, 2, .. */
/* 0, 1, 2, 3, ... */
/* ○○とすれば i = 0, 2, 4, .. */
printf ( "%d\n", i ); /* i を出力 */
}
return 0;
}
#include <stdio.h>
int main(int argc, char *argv[] ) {
int i = 0;
/*
「繰り返す条件」が成立(真)の間、「繰り返す命令」を繰り返す
*/
while ( i < 10 /* 繰り返す条件 */ ) {
/* 繰り返す命令 */
printf ( "i=%d\n", i );
i = i + 1;
}
/* i = 0 ? 9 の間の 10 回 printf を実行する */
/* その時、i の値は 0 ? 9 と毎回変化するので,
表示されるのは、「i=0」、「i=1」、...、「i=9」と表示される */
/*
while 文を使う時の注意
1.「繰り返す条件」の部分は、後から、変化してくれないと困る
式の中に、「変数」を含める
2. その「変数」を、「繰り返す命令」の中で、代入を使って、
値を変更し、「いつかは、条件が成立しなくなるようにする」必要がある
remark
再帰でも同じような制限があった事を思い出そう
「wihle は、常に再帰に書き直せる」ので、while の注意が、
そのまま、書き換えた再帰に適用される
逆は簡単ではない
一般に、while よりは再帰の方が高機能(表現力が高い)
*/
return 0;
}
#include<stdio.h>
int main(int argc, char *argv[] ) {
int i;
scanf ( "%d", &i ); /* i に、標準入力(普通はキーボード)から
整数値を入力し、その値を、変数 i に
代入する */
printf ( "%d", i ); /* i の値を標準出力(普通は、画面)に、
i の値である整数値を表示する */
/*
printf と scanf は、書式指定 (%X) の部分を共有している
scanf は printf の入力版
printf ( "i=%d\n", i );
scanf ( "i=%d\n", &i );
*/
scanf ( "i=%d\n", &i ); /* この形も可能だが、「利用禁止」する */
/* キーボードから 「i=999[改行]」とすると、i に 999 が入る */
/* じゃあ、いきなり「999」とすると、何がおきるか ? */
/* "i" が見当たらないので、それから先進まなくなる */
/* まんがいち、間違えると、それっきり入力ができなくなる */
/* [安全のために]
scanf による変数への値の入力は
1. 一つの変数に関して、一回呼び出す
2. 最初の文字列は、その値を取り出すための書式指定だけにする
*/
printf ( "i=%d\n", i );
/*
%d 整数値
%c 文字
%lf 浮動小数点数 !! ptintf の時は、「%f」で、違う
*/
return 0;
}
#include <stdio.h>
int main(int argc, char *argv[] ) {
int i;
i = 0; /* i に初期値代入 */
while ( i < 10 ) { /* i の値をチェックしている */
printf ( "i = %d\n", i );
i = i + 1; /* i の値を更新している */
}
/*
i=0
i=1
..
i=9
と出力する
*/
return 0;
}
#include <stdio.h>
int main(int argc, char *argv[] ) {
int i;
/*
i の初期化
i のチェック
i の更新
*/
for ( i = 0; i < 10; i = i + 1 ) {
printf ( "i = %d\n", i );
}
/*
i=0
i=1
..
i=9
と出力する
*/
/*
for 文は、簡単に while 文に書き換えられる
for ( <初期化式>; <継続条件式>; <再初期化式> ) {
<繰返し文>
}
=>
<初期化式>
while ( <継続条件式> ) {
<繰返し文>
<再初期化式>
}
例:
for ( i = 0; i < 10; i = i + 1 ) {
printf ( "i = %d\n", i );
}
=>
i = 0;
while ( i < 10 ) {
printf ( "i = %d\n", i );
i = i + 1;
}
逆
while (<繰り返し条件>) {
<繰り返し文>
}
=>
for ( ; <繰り返し条件>; ) {
<繰り返し文>
}
*/
return 0;
}
#include <stdio.h>
/*
キーボードから、10 個の整数値を入力して、
その総和を出力するプログラム
これは、繰り返しのプログラムになる
while/for [再帰] を利用する -> for 文
繰り返し部分は
for ( i = 0; i < 10; i = i + 1 ) { -- 10 回繰り返す
}
となり、全体は
何かをする
for ( i = 0; i < 10; i = i + 1 ) {
何かをする
}
何かをする
以下の作業を行うための準備
for ( i = 0; i < 10; i = i + 1 ) {
数値を入力する
それらを足し合わせる
}
結果を出力
int i;
int total;
int number;
--- 利用する変数は、宣言する必要がある
total = 0;
--- なにも入力されない状態では、「そこまでの合計」は 0 となる
for ( i = 0; i < 10; i = i + 1 ) {
printf ( "%d 番目の整数値を入力してください : ", i + 1 );
scanf ( "%d", &number );
--- 入力された個々の値は、変数 number に保存する
total = total + number;
--- これまでの合計が total に入っているして、
--- これに、新しく入力された値を加えることにより、
--- その数を含めた、合計が total に入る
}
printf ( "10 個の整数の合計は %d です。\n", total );
-- total という変数に、合計が入っていると想定する
*/
int main(int argc, char *argv[] ) {
int i;
int total;
int number;
total = 0;
for ( i = 0; i < 10; i = i + 1 ) {
printf ( "%d 番目の整数値を入力してください : ", i + 1 );
scanf ( "%d", &number );
total = total + number; /* 蓄積を行う */
}
printf ( "10 個の整数の合計は %d です。\n", total );
return 0;
}
#include <stdio.h>
int main(int argc, char *argv[]) {
int trump;
printf ( "トランプの数 ( 1 ? 13 ) を入力してください : " );
scanf ( "%d", &trump );
/*
トランプの数値が 1 ? 10 場合は、そのまま
その代わりに、11 の時は J, 12 には Q, 13 の時には K を
出力したい
(それいがいの場合は '?' )
*/
/*
if でやるとどうなるか ?
*/
if ( trump == 1 ) {
printf ( "1\n" );
} else if ( trump == 2 ) {
printf ( "2\n" );
/* 途中省略 3 ? 8 */
} else if ( trump == 9 ) {
printf ( "9\n" );
} else if ( trump == 10 ) {
printf ( "10\n" );
} else if ( trump == 11 ) {
printf ( "J\n" );
} else if ( trump == 12 ) {
printf ( "Q\n" );
} else if ( trump == 13 ) {
printf ( "K\n" );
} else {
printf ( "?\n" );
}
return 0;
}
#include <stdio.h>
int main(int argc, char *argv[]) {
int trump;
printf ( "トランプの数 ( 1 ? 13 ) を入力してください : " );
scanf ( "%d", &trump );
/*
トランプの数値が 1 ? 10 場合は、そのまま
その代わりに、11 の時は J, 12 には Q, 13 の時には K を
出力したい
(それいがいの場合は '?' )
*/
/*
switch でやるとどうなるか ?
*/
switch ( trump ) {
case 1: /* trump == 1 の時 */
printf ( "1\n" );
break; /* ここまでをやる */
case 2:
printf ( "2\n" );
break;
/* 途中省略 3 ? 8 */
case 9:
printf ( "9\n" );
printf ( "9\n" );
printf ( "9\n" );
printf ( "9\n" );
printf ( "9\n" );
printf ( "9\n" );
break;
case 10:
printf ( "10\n" );
break;
case 11:
printf ( "J\n" );
break;
case 12:
printf ( "Q\n" );
break;
case 13:
printf ( "K\n" );
break;
default: /* どれにも合わない時は default へ */
printf ( "?\n" );
break; /* default がなければ、何もしない */
}
return 0;
}
#include <stdio.h>
int main(int argc, char *argv[]) {
int trump;
printf ( "トランプの数 ( 1 ? 13 ) を入力してください : " );
scanf ( "%d", &trump );
/*
トランプの数値が 1 ? 10 場合は、そのまま
その代わりに、11 の時は J, 12 には Q, 13 の時には K を
出力したい
(それいがいの場合は '?' )
*/
/*
switch でやるとどうなるか ?
*/
switch ( trump ) {
case 1: /* trump == 1 の時 */
printf ( "A\n" );
break; /* break 文があると、switch から抜け(break)する */
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:
case 10:
printf ( "%d\n", trump ); /* 途中に break がないので、
trump が 2 ? 10 の場合は、
いずれも、ココに来る */
break;
case 11:
printf ( "J\n" );
break;
case 12:
printf ( "Q\n" );
break;
case 13:
printf ( "K\n" );
break;
default: /* どれにも合わない時は default へ */
printf ( "?\n" );
break; /* default がなければ、何もしない */
}
return 0;
}
#include <stdio.h>
#include <ncursesw/ncurses.h> /* ncursesw を利用する場合 */
/*
画面の真ん中に、'*' を使って、「田」という字かいてみる
*********
* * *
* * *
*********
* * *
* * *
*********
*/
int main(int arg, char *argv[] ) {
initscr(); /* curses の利用開始 */
/* やりたい事をかく */
move ( 4, 30 ); /* カーソルの移動 ( Y, X の順である事に注意 ) */
addstr ( "*********" );
move ( 5, 30 ); /* カーソルの移動 ( Y, X の順である事に注意 ) */
addstr ( "* * *" );
move ( 6, 30 ); /* カーソルの移動 ( Y, X の順である事に注意 ) */
addstr ( "* * *" );
move ( 7, 30 ); /* カーソルの移動 ( Y, X の順である事に注意 ) */
addstr ( "*********" );
move ( 8, 30 ); /* カーソルの移動 ( Y, X の順である事に注意 ) */
addstr ( "* * *" );
move ( 9, 30 ); /* カーソルの移動 ( Y, X の順である事に注意 ) */
addstr ( "* * *" );
move ( 10, 30 ); /* カーソルの移動 ( Y, X の順である事に注意 ) */
addstr ( "*********" );
getch(); /* 文字の入力を待つ */
endwin(); /* curses の利用終了 */
return 0;
}
/*
* 2016/09/30 sample-001.c
*/
/*
* curses hello
*
* 利用方法
* コンパイル
* cc -Ic:\usr\c\include -o sample-001.exe sample-001.c -lncursesw
* 実行
* sample-001
*/
#include <stdio.h>
#include <ncursesw/ncurses.h> /* ncursesw を利用する場合 */
/*
* curses_hello()
*/
void curses_hello( void ) {
initscr(); /* curses の利用開始 */
move ( 10, 30 ); /* カーソルの移動 ( Y, X の順である事に注意 ) */
addstr ( "Hello, Curses" ); /* 文字列の表示 */
move ( 13, 40 ); /* カーソルの移動 ( Y, X の順である事に注意 ) */
addstr ( "Jump" ); /* 文字列の表示 */
move ( 6, 60 ); /* カーソルの移動 ( Y, X の順である事に注意 ) */
addstr ( "Back" ); /* 文字列の表示 */
getch(); /* 文字の入力を待つ */
endwin(); /* curses の利用終了 */
}
/*
* main
*
*/
int main( int argc, char *argv[] )
{
curses_hello();
return 0;
}
/*
* 2016/09/30 sample-002.c
*/
/*
* スカッシュゲーム ( Ver 0.01 )
* キーボードによって、ラケットを移動する
* 'h' 左に移動
* 'l' 右に移動
* 'q' 終了
*
* 利用方法
* コンパイル
* cc -Ic:\usr\c\include -o sample-002.exe sample-002.c -lncursesw
* 実行
* sample-002
*/
#include <stdio.h>
#include <ncursesw/ncurses.h> /* ncursesw を利用する場合 */
/*
* main
*/
int main(int argc, char *argv[]) {
int racket_x = 35; /* ラケットの x 座標 */
int racket_y = 12; /* ラケットの y 座標 */
int ch = ' '; /* キーボードからの入力 */
initscr(); /* curses を利用開始 */
noecho(); /* キーボードからの入力時に、それを表示しない */
while ( ch != 'q' ) { /* キーボードから 'q' が入るまで繰り返す */
move ( racket_y, racket_x ); /* ラケットを書く */
addstr ( "********" );
ch = getch(); /* 入力を待つ */
move ( racket_y, racket_x ); /* ラケットを消す */
addstr ( " " );
switch ( ch ) {
case 'h':
racket_x = racket_x - 1;
break;
case 'l':
racket_x = racket_x + 1;
break;
}
}
endwin(); /* curses を利用終了 */
return 0;
}
/*
* 2016/09/30 sample-003.c
*/
/*
* スカッシュゲーム ( Ver 0.02 )
* ボールも一緒に移動
*
* 利用方法
* コンパイル
* cc -Ic:\usr\c\include -o sample-003.exe sample-003.c -lncursesw
* 実行
* sample-003
*/
#include <stdio.h>
#include <ncursesw/ncurses.h> /* ncursesw を利用する場合 */
/*
* main
*/
int main(int argc, char *argv[]) {
int racket_x = 35; /* ラケットの x 座標 */
int racket_y = 19; /* ラケットの y 座標 */
int ball_x = 35; /* ボールの x 座標 */
int ball_y = 12; /* ボールの y 座標 */
int ball_dx = 0; /* ボールの x 速度 */
int ball_dy = 1; /* ボールの y 速度 */
int ch = ' '; /* キーボードからの入力 */
initscr(); /* curses を利用開始 */
noecho();
while ( ch != 'q' ) { /* キーボードから 'q' が入るまで繰り返す */
move ( racket_y, racket_x ); /* ボール書き込む */
addstr ( "********" );
move ( ball_y, ball_x ); /* ボール書き込む */
addch ( '*' );
ch = getch(); /* 入力をまつ */
move ( racket_y, racket_x );
addstr ( " " );
move ( ball_y, ball_x );
addch ( ' ' );
ball_x = ball_x + ball_dx;
ball_y = ball_y + ball_dy;
switch ( ch ) {
case 'h':
racket_x = racket_x - 1;
break;
case 'l':
racket_x = racket_x + 1;
break;
}
}
endwin(); /* curses を利用終了 */
return 0;
}
/*
* 2016/09/30 sample-004.c
*/
/*
* スカッシュゲーム ( Ver 0.03 )
* ボールは、キーボードの入力を待たずに勝手に移動
*
* 利用方法
* コンパイル
* cc -Ic:\usr\c\include -o sample-004.exe sample-004.c -lncursesw
* 実行
* sample-004
*/
#include <stdio.h>
#include <ncursesw/ncurses.h> /* ncursesw を利用する場合 */
/*
* main
*/
int main(int argc, char *argv[]) {
int racket_x = 35; /* ラケットの x 座標 */
int racket_y = 19; /* ラケットの y 座標 */
int ball_x = 35; /* ボールの x 座標 */
int ball_y = 12; /* ボールの y 座標 */
int ball_dx = 0; /* ボールの x 速度 */
int ball_dy = 1; /* ボールの y 速度 */
int ch = ' '; /* キーボードからの入力 */
initscr(); /* curses を利用開始 */
noecho();
timeout(0); /* キーボードを待つ時間 (0 にしたので待たない) */
while ( ch != 'q' ) {
usleep ( 1000000 ); /* ボールの移動の時間 ( 1000000 micro sec = 1sec ) */
move ( racket_y, racket_x ); /* ボール書き込む */
addstr ( "********" );
move ( ball_y, ball_x ); /* ボール書き込む */
addch ( '*' );
ch = getch(); /* 入力をチェック (入力がなくても次に行く) */
move ( racket_y, racket_x );
addstr ( " " );
move ( ball_y, ball_x );
addch ( ' ' );
ball_x = ball_x + ball_dx;
ball_y = ball_y + ball_dy;
switch ( ch ) {
case 'h':
racket_x = racket_x - 1;
break;
case 'l':
racket_x = racket_x + 1;
break;
}
}
endwin(); /* curses を利用終了 */
return 0;
}
/*
* 2016/09/30 sample-005.c
*/
/*
* スカッシュゲーム ( Ver 0.04 )
* ボールの移動と、キーボードの入力を分離
*
* 利用方法
* コンパイル
* cc -Ic:\usr\c\include -o sample-005.exe sample-005.c -lncursesw
* 実行
* sample-005
*/
#include <stdio.h>
#include <ncursesw/ncurses.h> /* ncursesw を利用する場合 */
/*
* main
*/
int main(int argc, char *argv[]) {
int racket_x = 35; /* ラケットの x 座標 */
int racket_y = 19; /* ラケットの y 座標 */
int ball_x = 35; /* ボールの x 座標 */
int ball_y = 12; /* ボールの y 座標 */
int ball_dx = 0; /* ボールの x 速度 */
int ball_dy = 1; /* ボールの y 速度 */
int ball_count = 0; /* ボールの待ち時間 */
int ch = ' '; /* キーボードからの入力 */
initscr(); /* curses を利用開始 */
noecho();
timeout(0); /* キーボードを待つ時間 (0 にしたので待たない) */
/* ボールを書く */
move ( ball_y, ball_x );
addch ( '*' );
/* ラケットを書く */
move ( racket_y, racket_x );
addstr ( "********" );
while ( ch != 'q' ) {
usleep ( 10000 ); /* 移動の時間 ( 10000 micro sec = 10 mili sec ) */
ball_count = ball_count + 1; /* ボールの待ち時間を増やす */
if ( ball_count > 100 ) { /* ボールの待ち時間が 100 を越えた */
ball_count = 0; /* カウントをリセット */
move ( ball_y, ball_x ); /* ボールを消す */
addch ( ' ' );
/* ボールを移動 */
ball_x = ball_x + ball_dx;
ball_y = ball_y + ball_dy;
move ( ball_y, ball_x ); /* ボールを書く */
addch ( '*' );
}
ch = getch(); /* 入力をチェック (入力がなくても次に行く) */
switch ( ch ) {
case 'h':
// break;
case 'l': /* ch が 'h' か 'l' の時 */
move ( racket_y, racket_x ); /* ラケットを消す */
addstr ( " " );
if ( ch == 'h' ) { /* 入力が 'h' なら */
racket_x = racket_x - 1; /* 左に移動 */
} else { /* そうでなければ ('l' なので) */
racket_x = racket_x + 1; /* 右に移動 */
}
move ( racket_y, racket_x ); /* ラケットを書く */
addstr ( "********" );
break;
}
}
endwin(); /* curses を利用終了 */
return 0;
}
/*
* 2016/09/30 sample-006.c
*/
/*
* スカッシュゲーム ( Ver 0.05 )
* 衝突処理
* ボールと壁
* ボールとラケット
*
* 利用方法
* コンパイル
* cc -Ic:\usr\c\include -o sample-006.exe sample-006.c -lncursesw
* 実行
* sample-006
*/
#include <stdio.h>
#include <ncursesw/ncurses.h> /* ncursesw を利用する場合 */
/*
* main
*/
int main(int argc, char *argv[]) {
int racket_x = 35; /* ラケットの x 座標 */
int racket_y = 19; /* ラケットの y 座標 */
int ball_x = 35; /* ボールの x 座標 */
int ball_y = 12; /* ボールの y 座標 */
int ball_dx = 1; /* ボールの x 速度 */
int ball_dy = 1; /* ボールの y 速度 */
int ball_count = 0; /* ボールの待ち時間 */
int ch = ' '; /* キーボードからの入力 */
initscr(); /* curses を利用開始 */
noecho();
timeout(0); /* キーボードを待つ時間 (0 にしたので待たない) */
/* ボールを書く */
move ( ball_y, ball_x );
addch ( '*' );
/* ラケットを書く */
move ( racket_y, racket_x );
addstr ( "********" );
while ( ch != 'q' ) {
usleep ( 1000 ); /* 移動の時間 ( 1000 micro sec = 1 mili sec ) */
ball_count = ball_count + 1; /* ボールの待ち時間を増やす */
if ( ball_count > 100 ) { /* ボールの待ち時間が 100 を越えた */
ball_count = 0; /* カウントをリセット */
move ( ball_y, ball_x ); /* ボールを消す */
addch ( ' ' );
/* ボールを移動 */
ball_x = ball_x + ball_dx;
ball_y = ball_y + ball_dy;
move ( ball_y, ball_x ); /* ボールを書く */
addch ( '*' );
if ( ball_x < 1 ) { /* ボールが左端にきた */
ball_dx = 1; /* ボールの向きを右向きにする */
}
if ( ball_x > 70 ) { /* ボールが右端にきた */
ball_dx = -1; /* ボールの向きを左向きにする */
}
if ( ball_y < 1 ) { /* ボールが上端にきた */
ball_dy = 1; /* ボールの向きを下向きにする */
}
if ( ball_y > 20 ) { /* ボールが下端にきた */
ball_dy = -1; /* ボールの向きを上向きにする */
}
if ( ball_y == racket_y ) { /* ボールがラケットの高さで */
if ( racket_x <= ball_x ) { /* ボールがラケットの左端より右で */
if ( ball_x <= racket_x + 7 ) { /* ボールがラケットの右端より左なら */
/* ラケットとボールが衝突したので.. */
ball_dy = -1; /* ボールの向きを上向きにする */
}
}
}
}
ch = getch(); /* 入力をチェック (入力がなくても次に行く) */
switch ( ch ) {
case 'h':
// break;
case 'l': /* ch が 'h' か 'l' の時 */
move ( racket_y, racket_x ); /* ラケットを消す */
addstr ( " " );
if ( ch == 'h' ) { /* 入力が 'h' なら */
if ( racket_x > 1 ) { /* まだ左端でなければ */
racket_x = racket_x - 1; /* 左に移動 */
}
} else { /* そうでなければ ('l' なので) */
if ( racket_x + 7 < 70 ) { /* まだ右端でなければ */
racket_x = racket_x + 1; /* 右に移動 */
}
}
move ( racket_y, racket_x ); /* ラケットを書く */
addstr ( "********" );
break;
}
}
endwin(); /* curses を利用終了 */
return 0;
}