夏休み前に実施した授業中の課題だ。
7人提出があったぞ。
では順番に見ていこう!
まずは2次元配列を使ったこちら。
ishikawa.c
/* 他プログラムを参考にしました。 */
#include <stdio.h>
int main(void)
{
int maru[5][5] = {
{0,0,0,0,0},
{0,1,0,1,0},
{0,1,0,1,0},
{1,0,0,0,1},
{0,1,1,1,0},
};
int i, k;
char kigou[5], kigou2[5];
printf("記号を入力してね(■or●)>");
scanf("%s", kigou);
printf("もう一つ入力してね(○or◎)>");
scanf("%s", kigou2);
for(i=0; i<5; i++){
for(k=0; k<5; k++){
if(maru[i][k]){
printf("%s", kigou);
}
else{
printf("%s", kigou2);
}
}
printf("\n");
}
return 0;
}
テトリスなどのブロックデータもこんな感じの2次元配列を使って表現しているよ。
数値をキャラクタに置き換えて表示しているんだね。
次はドラクエの戦闘シーンを再現したプログラムだ。
nakano.c
/* 自由課題 スライムを倒せ! */
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
int suraimu,n,panti,raihu;
srand((unsigned)time(NULL));
suraimu = rand() % 5 + 8;
raihu = 3;
printf("スライムが現れた!\n");
while(suraimu > 0 && raihu > 0){
printf(" ---- \n");
printf("| HP %d |\n",suraimu);
printf(" ---- \n");
printf("どうする?\n1.戦う\n2.逃げる\n\n何番?:");
scanf("%d",&n);
if(n == 1){
panti = rand() % 3 + 3;
printf("スライムにパンチをくらわせた!\n%dのダメージ!\n",panti);
if (panti == 5){
printf("会心の一撃!\n");
}
suraimu -= panti;
}
else if(n == 2){
printf("逃げられない!\n");
}
else{
printf("そんな選択肢はないぞ!\n");
}
if(suraimu > 0){
printf("\nスライムの攻撃!\n");
raihu -= 1;
printf("自分の残りライフは「%d」です\n\n",raihu);
printf("-----------------------------------\n");
}
}
if(suraimu <= 0 && raihu > 0){
printf("\nやった!スライムを倒した!\n");
}
else{
printf("\nGAME OVER\n");
}
return 0;
}
suraimu = rand() % 5 + 8;
の部分がポイントだね。
スライムのHPが実行するたびに変わるよ。
while文の条件を使って戦闘終了するまでをループ化している。
なかなかやるな!
次は、if文のお手本のようなプログラム!
natsuki.c
#include<stdio.h>
int main(void)
{
int house;
printf("家から学院に行くのに何分掛かる?\n");
scanf("%d",&house);
if(house==0){
printf("どこでもドア~!!!!!111111111\n");
}
else if(house>=1&& house<=10){
printf("近くに住んでいるのかな?うらやまし~\n");
}
else if(house>=11&& house<=20){
printf("おー、僕もそれくらいです\n");
}
else if(house>=30&& house<=60){
printf("うわっ、それは大変ですね…\n");
}
else{
printf("ふざけないでちゃんと、家よ!!!!!\n");
}
return 0;
}
あたしとしては21分から29分までのときの処理が気になるねぇ。
次は今回一番ショートなプログラムだよ。
noguchi.c
#include <stdio.h>
int main(void)
{
int i;
for(i=1; i<11; i++){
printf("%d\n",i);
}
return 0;
}
実行結果は次のうちどれでしょう?
1)1 2 3 4 …11 まで表示
2)0 1 2 3 …10 まで表示
3)1 2 3 4 …10 まで表示
う~ん。1かしら?
こっちの魔王はくせがあるぞ!
sakuraba.c
#include<stdio.h>
int main(void)
{
int x, y, z;
printf("あなたの攻撃 威力:");
scanf("%d", &x);
printf("仲間の攻撃 威力:");
scanf("%d", &y);
printf("魔王の攻撃 威力:");
scanf("%d", &z);
printf("結果は!! ");
if(x>y,x>z)
printf("魔王を倒した!おめでとう!!(HAPPY END)\n");
else if(y>x,y>z)
printf("魔王を倒した!………………あなたを巻き込んで(BAD END)\n");
else if(z>x,z>y)
printf("残念だが世界は滅亡してしまった……………(BAD END)\n");
else
printf("次回に続く!!!(TO BE CONTINUED)\n");
return 0;
}
うん。これはif文でよくやってしまう例だ。
実はif(x>y,x>z)
と書くと左側のx>y
は条件には入らず無視されてしまうんだ。
もし、x>y
またはx>z
という条件にしたいなら
if(x>y || x>z)
と書いてみて。
カンマ(,)は左から右に処理が移るだけで、あまり意味はないのね。
作成者からクイズです!
できれば下のプログラムは見ないで答えてね。
問題!
0+1=ワン
0+2=ニャー
6+3=ワン
6+7=ワンワン
7+9=ワンニャー
11+12=ニャーワン
11+17=ニャーニャー
である。
では、1+「?」=ワンワンワン の「?」に入る最も小さい数はなんだろう。
yae.c
#include<stdio.h>
int main(void)
{
int kotae;
printf("問題。\n\n0+1=ワン\n0+2=ニャー\n6+3=ワン\n6+7=ワンワン\n7+9=ワンニャー\n11+12=ニャーワン\n11+17=ニャーニャー\n\nである。\n");
printf("では、1+「?」=ワンワンワン の「?」に入る最も小さい数はなんだろう。\n");
scanf("%d",&kotae);
if(kotae==110){
printf("\n正解!奇数のときにワン、偶数のときにニャーと表していたんだ\n");
}
else{
printf("\n残念...不正解だ。必ず規則性があるはず、それを探してみよう\n");
}
return 0;
}
次のおみくじプログラムは、rand()
を使ったプログラムだけど雰囲気が夏らしいプログラムだね。
わたしはちょっと怖いかな。
yamagata.c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
/*ここにプログラムを記述*/
int i,omikuji,n;
srand((unsigned)time(NULL));
printf("++心霊おみくじ++\n\n\n\n\n\n");
printf("おみくじを引いてください\n");
getchar();
omikuji = rand() % 3;
for(i=0; i<1; i++){
if(omikuji!=0)break;
printf("大吉!\n\n沢山の心霊現象を体験できる夏になるよおめでとう^^\n\n\n");
for(n=0;n<333; n++){
printf("9646");
}
printf("\n");
}
for(i=0; i<1; i++){
if(omikuji!=1)break;
printf("吉t_t\n\n微妙だね、でも心霊スポットとかに行けば何かしらは起こるかも...\n");
for(n=0;n<222;n++){
printf("4649");
}
printf("\n");
}
for(i=0; i<1; i++){
if(omikuji!=2)break;
printf("凶;_;\n\n残念、今年の夏も去年と同じで平凡です。\nお化けのおの字すら感じ取れない夏休みになるでしょうね\n");
}
return 0;
}
コメント