type.c
// type.c
// by spin
#include <curses.h>
#include <time.h>
#include <stdlib.h>
#define ESC '\x1b'
char *word[] = {
"auto","break","case","char","const","continue","default","do",
"double","else","enum","extern","float","for","goto","if","int",
"long","register","return","short","signed","sizeof","static","struct",
"switch","typedef","union","unsigned","void","volatile","while"
};
int num = sizeof(word)/sizeof(char*);
void print_guide(void);
void init_word(void);
int continue_game(void);
void clear_line(int y);
void print_result(clock_t start, clock_t end, int miss);
int typing_game(void);
int main(void)
{
initscr();
cbreak();
noecho();
while (typing_game())
;
endwin();
return 0;
}
void print_guide(void)
{
mvaddstr(0, 0, "*---*---*---*---*---*---*---*---*");
mvaddstr(1, 0, " Cタイピング");
mvaddstr(2, 0, " 32個の単語のタイプ速度を競おう");
mvaddstr(3, 0, " (Escで中断出来ます)");
mvaddstr(4, 0, "*---*---*---*---*---*---*---*---*");
mvaddstr(5, 0, "タイピングすると同時に計測を開始します");
}
void init_word(void)
{
int i, a, b;
char *tmp;
srand(time(NULL));
for (i = 0;i < 100;i++) {
a = rand()%num;
b = rand()%num;
tmp = word[a];
word[a] = word[b];
word[b] = tmp;
}
}
int continue_game(void)
{
int ch;
while ((ch = getch()) != 'n')
if (ch == 'y')
return 1;
return 0;
}
void clear_line(int y)
{
mvaddstr(y, 0, " ");
}
void print_result(clock_t start, clock_t end, int miss)
{
char buf[50];
mvaddstr(6, 0, "-*-*-*-Finish!!!-*-*-*-");
sprintf(buf, "結果 : %.3fsec ミス : %d打"
,(double)(end-start)/CLOCKS_PER_SEC, miss);
mvaddstr(8, 0, buf);
}
int typing_game(void)
{
char buf[50];
int i, k, ch, miss_count, isStart;
clock_t start, end;
clear();
print_guide();
init_word();
i = k = miss_count = 0;
isStart = 1;
sprintf(buf, "残り%2d個 : %s%*s", 32-i,word[i]+k, k, "");
mvaddstr(6, 0, buf);
while ((ch=getch()) != ESC) {
if (isStart) {
clear_line(5);
start = clock();
isStart = 0;
}
(ch == word[i][k]) ? k++ : miss_count++;
if (k == strlen(word[i])) {
k = 0;
i++;
if (i == num) {
end = clock();
print_result(start, end, miss_count);
break;
}
}
sprintf(buf, "残り%2d個 : %s%*s", 32-i,word[i]+k, k, "");
mvaddstr(6, 0, buf);
}
mvaddstr(10, 0, "もう一度やりますか[y,n]?");
if (!continue_game())
return 0;
return 1;
}
魔法の言葉♪
『ってゆ~かさ、好きなら好きで良いし!嫌いなら嫌いで良いじゃん!』
討論(というレベルまではいってない)しているスレを見ると、大体上の言葉が必ず出てくる
正直、なんの興味も無い討論だったら別にそれでいいと思うけど、自分の興味がある話でこの言葉が出てくるとイラッとするんだよなぁ
正しいか正しくないか考えてるのに好き嫌いはカンケーねーだろーと小1時間(略
大体疑似科学の話になると
「科学的根拠がないから正しくない」
このセリフが出る。するとすかさず
「科学だけで全部解明できる訳ではない」
こう言われる。ここまで1セット
きっと考えてもまとまらないので、考えるのをやめます
両手に○○○○
そう、鉄アレイだね
余りにも華奢なカラダなので少しずつ鍛えてマッスル
こないだまで鉄アレイなんかなかったから、本入れた鞄でトレーニングしてたよ!
片方5キロの鉄アレイが手に入ったのでガンガンやってます
思ったより筋肉痛とかならないもんだね。良かった良かった
そういえば、後期のカリキュラムが大体わかりました
水曜は休みになりそう
その分他の曜日はガッツリ入ってますが(笑)
もうちょっと均してくれればいいのにネー、なんて友達は言ってます
後期も鬼門は実験になりそうだな…良いメンバーと巡り会えますよーに
授業は基本的に全部取ると思います
選択科目だから取らないなんて人が居ますが、結局は取らざるを得ない状況になるよう仕組まれてますから(笑)
プログラミングの授業が楽しいといいんだけどなー
そろそろ寝ます
おやすみなさい
ワールドオブモノトーン
bitmap画像をディザリングして二値画像にしても、24bitでそのまま保存したら圧縮されないよ!ダメじゃん!
さて、白と黒だけを用いて画像を表現するには目の錯覚を用いて微妙な濃淡を表現します。
カラー画像などを二値化するのに一般的なのはディザ法、やったのは組織的ディザ法ですが
下のようなディザマトリックスを用意!
0 8 2 10 12 4 14 6 3 11 1 9 15 7 13 5
今回はbayerマトリックスを使いました(他にもいくつかあるみたいです)
そして、256階調なので各行列を17倍(16倍して8を足すのもあるみたい)して、その値よりも元の画素値が大きければ白、小さければ黒、としていくのであーる
下の富士山は

こんな二値画像に

あんまりもとの画像がはっきりくっきりしたものじゃないから微妙だぞ!
でも、とぉ~くからみて下さい。ほら、なんとなく濃淡が出てるでしょ?
これが、ディザリングゥ!
画像処理は楽しい!
コメントを閉じろ
#include <stdio.h>
int main(void)
{
int a = 1;
int b = 2; /* comment
printf("a + b = %d\n", a+b);
return 0;
}
上のプログラムのように関数内でコメント(/**/)が閉じられていないとき、エラーを知らせるプログラムを作る
C++形式のコメント(//)は省く(というより、閉じる必要が無いため)
う~ん、案外てこずるぞこれw
・関数はmain関数だけじゃない←関数の先頭を探す必要あり
・printf("/*");のように、「"」内のコメントは無効←「”」で囲まれている部分は省く←実はこれもマズイ
・関数の始まりから終わりまでを監視する必要あり←「{」と「}」を入れていくスタックにするか
・fgetsでいくか、fgetcでいくか←fgetcで諸々の処理を施しつつ1行取り込む方法にするか
・っつーかコンパイラがエラー検出してくれるのに←元も子もない
あー、めんどくさいぞこれw
ソースを読み込む時に必要のないデータは全て省くか・・・・
関数の先頭を取得(関数長を求めるプログラムで作成済み)
↓
「/*」または「*/」が入っている行のみを保存
↓
「”」で囲まれていたら無効化
↓
閉じられているかどうか、処理
こんな感じでいけるかなぁ。
とりあえず、もうすこし考える