夏休みプチプログラミングコンテスト2018への投稿です。二つ目!
一つ目はこちらです。
投稿!夏休みプチプログラミングコンテスト2018
クエリちゃん x プロ生ちゃん 夏休み #プチプログラミング コンテスト2018開催!(8/31〆切) https://t.co/9JVhsAaYoh pic.twitter.com/dxMOZNiv19
— プロ生ちゃん(暮井 慧)@コラボ募集中 (@pronama) July 23, 2018
プロ生ちゃんとのコラボ企画!#プチプログラミングコンテスト2018 開催デス(*Q∀Q)!
夏休み、クエリとプロ生ちゃんと一緒に楽しみまショウ(๑Q´ㅂQ´)و✧
詳細はコチラ!https://t.co/rjpf4NK96C#クエリちゃん #プロ生ちゃん #プログラミング #夏休み #コンテスト pic.twitter.com/xLKU6gWTXD— クエリちゃん (@Query_chan) July 23, 2018
今回のプログラムは、「2018夏休み 自由研究」!
「1個のみかんの皮、どこまで伸ばせるのか研究」です。
みかん好きなクエリちゃんが小学生で自由研究をしたら、というところからの考案です。
動作の内容は、mi ka n のいずれかを入力してエンターキー。制限時間内に入力されたmikanの数で、研究結果(長さ)が決まるゲームのようになってます。
ソースはここに載せておきます。改変して利用などもご自由にどうぞ!
スレッド利用やタイマー、入力待ちの使い方など、小さめだけど濃い目です。
無限ループのforとwhileの使い分けは、あとで回数や条件を付けれるようにとかそういう感覚です。
たまたま2つ使ってるので一応書いておきます。
右クリックからダウンロード
https://cocoamix.jp/puttti2018/mikan.c
macではそのまま、
cc mikan.c
./a.out
で動作すると思います。
中身のほぼほぼ全般
// defines
int gamejikan =10; //入力時間
int mikanSize = 5;//1MiKaNでの長さ
char *title = "⭐️ 2018夏休み 自由研究! ⭐\n「1個のみかんの皮、どこまで伸ばせるのか研究」\n";
char *subtitle = "mi ka n のいずれかを入力してEnter。mikanの数で長さが決まります。制限時間: %d秒\n- Enterで開始 -";
char *msgTimeup = "\n時間で〜〜す!!\n- Enterで結果表示 -\n";
char *mikan[] =
{
"mi",
"ka",
"n",
};
char *kekka_head = "⭐️ 研究の成果 ⭐️ \n\n🍊";
char *msgTrophy[] =
{
"先生「努力が足りません。」",
"先生「頑張りましたね!!!」",
"先生「これは世界新記録かもしれませんよ!」",
"先生「チートいけません」",
};
char *msgEnd = "--- 自由研究 終了 ---";
//////////////////////////////////////////////////////
// globalな変数
// Mi Ka N カウント保持
int countMi = 0;
int countKa = 0;
int countN = 0;
int endFlug = 0; //スレッド終了用flug
//////////////////////////////////////////////////////
int inputMain();
void *inputting();
//
// メイン
int main(void){
inputMain();
return 0;
}
//
// 入力ループなスレッドfunc
void *inputting(){
char buff[256];
for(;;){
// 入力読み込み
memset(buff,0x00,sizeof(buff));
fgets(buff, sizeof(buff), stdin);
if(strlen(buff)>0)buff[strlen(buff) - 1] = 0x00;//改行消し
if(endFlug == 1){
// 入力ループ、thread終了
break;
}
// Mi or Ka or N
int len = strlen(buff);
if(len >= 2){
if(strncasecmp(buff, mikan[0],strlen(mikan[0])) == 0){
countMi++;
}else if(strncasecmp(buff, mikan[1],strlen(mikan[1])) == 0){
countKa++;
}
}else{
if(strncasecmp(buff, mikan[2],strlen(mikan[2])) == 0){
countN++;
}
}
//printf("%d %d %d",countMi,countKa,countN);
}
return 0;
}
//
// みかんチャレンジ
int inputMain(){
int ret = 0;
// タイトル表示
printf("%s",title);
printf(subtitle,gamejikan);
char buff[4];
fgets(buff, 4, stdin);//enter待ち用に
// 入力スレッド生成
pthread_t inputThread;
pthread_create( &inputThread, NULL, &inputting, NULL);
// タイマー
double timeStart =0;
double timeWk =0;
double keika =0;
double jikan =gamejikan;
timeStart = clock() / CLOCKS_PER_SEC ;
while(1){
if(keika > jikan)break;
timeWk = clock() / CLOCKS_PER_SEC ;
keika = timeWk - timeStart;
}
// 入力終了
printf("%s", msgTimeup);
endFlug = 1;
pthread_join(inputThread, NULL); //スレッド終了待ち
// 結果表示
int kekkaCount = countMi;
if(kekkaCount > countKa) kekkaCount = countKa;
if(kekkaCount > countN) kekkaCount = countN;
printf("%s", kekka_head);
sleep(1);
for(int i=0; i< kekkaCount;i++){
printf("-");
}
printf("\n\n%dセンチまで伸ばせました!\n",kekkaCount*mikanSize);
if(kekkaCount < 3){
printf("%s\n\n",msgTrophy[0]);
}else if(kekkaCount < 10){
printf("%s\n\n",msgTrophy[1]);
}else if(kekkaCount < 20){
printf("%s\n\n",msgTrophy[2]);
}else{
printf("%s\n\n",msgTrophy[3]);
}
printf("入力した数 Mi: %d Ka: %d N: %d\n\n",countMi,countKa,countN);
sleep(1);
printf("%s\n\n",msgEnd);
return ret;
}
楽しくなったの二つ目です。
2018夏休み 自由研究のプログラム作りました!
「1個のみかんの皮、どこまで伸ばせるのか研究」https://t.co/CbVHeoDAQN#プチプログラミング @Query_chan @pronama pic.twitter.com/ncYMtkqLTH— うに+✩♪ (@cocoamixjp) July 29, 2018
