「プログラミング実習」2016年度代表作品




TAの方々と選ぶ「最終課題の代表作品」

本科目の最終課題は2015年度まで本科目を担当していた齋藤豪先生の超大作です。
資料
ダウンロードプログラム
1620502
・スタート、終わりの画面を作る
・スピードが徐々に早くなる
・ゲーム中に点数、HP、ゴールまでの距離を表示
・キー操作の仕方を変えた
・敵は横にも動ける
・敵も弾を発射
・HPを設定、一度攻撃を受けただけでは死なない
・敵を倒すとポイントアップ
・ゴールを設ける
・敵は最後に三体大きいものを作ってボス風にしました。 私が作った敵は可愛い海の生き物風にしたところがお気に入りです。
1620508
・チュートリアルを作成しました。
・while文を用いてプレイヤーの好きなタイミングでスタートできるようにしました。
・敵を撃ち落とす毎にスコアが+88されるようにしました。
・gamemain2.c内のinitmovingobjects関数内で数種類の敵を表示するための構造体を増やしました。
・敵の表示について、出現するタイミングは固定し、出現位置はランダムになるようにしました。
・敵の動きを変更しました。縦にも横にも動きます。
・ゲームの操作方法を変更しました。
・一定時間経過する毎にスピードが上がっていくようにしました。
・プレイ画面の右上に現在のスピードのレベル(MAX7レベル)を、右下に現在のスコアを表示させました。
・walldataは変更せずに、wall orderを変更し、同じようなコースが続かないようにしました。
・コースが2周(wallが560回スクロール)したらゲームクリアとしました。
・壁や敵に当たってゲームオーバーになったときと、ゴールしたときの演出を変えました。
・スコアによって、ゲームが終わったあとの演出を変えました。

[ゲームの実行方法]
makeコマンドでチュートリアルが表示され、そのまま画面の案内に従ってreturnキーを押すとゲームが始まるようになった
[操作方法]
'k'→ 'd'← 'j'↑ 'f'↓ 発射は変更なし
1620517
〜ルール変更に関して〜
・ゲーム開始前に操作説明を導入。かつreturnを押さないとゲームが始まらない仕様。
・キー操作は
上:Iキー 下:Mキー 右:Kキー 左:Jキー
加速:Xキー(ポイント2倍) 速度を戻す:Cキー 弾丸をうつ:スペースキー
に変更。
・HP制を導入。HPは敵に触れている時間に比例して減らされる。HPは100からのスタートで0になるとゲームは終了する。
・敵を倒す度scoreが50加算される。
・スコアが2000を超えるとゲームが終了する。
〜改造点〜
・スコア2000がゴールになっている(上記)
・プレーヤーはXを押すことでspeedlevelの値を8から5に変更できCを押すことでもとに戻すことができスピードを制御できる。(スピードが速くなっている間はscoreが二倍速で増える)
・ゲームプレイ中も現在のスコア、現在のスピード、HPを表示させている。このときのスピードレベルはspeedlevelとは異なりレベル1が遅くレベル2になると速いという仕様。
・敵に当たるとHPが減り、壁に当たると即ゲーム終了とした。checkcollisionを使用。
・ゲームが終わった際の表示を派手にした。スコア2000でクリア画面、1800以上で惜しい、それ以外はもっとがんばろうという趣旨の表示である。
〜敵の改造点、特徴〜
【mayenemy.c】
・人が踊ってるようなイメージで作っています。
・大きさ自体は横に広く弾丸を受けやすい。
・しかし動きは横に動いていて画面から踊りながら消えていくのでうつ前に消えてしまう。攻撃を受ける機会は少ないがスコア稼ぎをしづらい敵になっている。
・mayenemy2.cと組み合わせて使う。
【mayenemy2.c】
・きらきらと周りながら上から一直線に落ちてくる。mayenemyが撃った弾丸のようになっているのが特徴。
・「+ +」と「 * 」が交互になりながら降ってくるので非常に狙い撃ちしづらい。一直線に落ちてくるので攻撃もくらいやすい厄介な敵。
・mayenemy.cと組み合わせて使う。
【表示の仕方】
・mayenemyを上の方から出現させる。
・mayenemy2をmayenemyのx座標と同じx座標、y座標は+4した座標に1秒後に出現させる。
・mayenemyは近い方の壁へ向かいはけていく。mayenemy2は下に向かって落ちてくる。
これによりノリノリのmayenemyがキラキラで攻撃をしてくるような敵にしています。
・敵はfor文で繰り返し96回まで出てくるように改造している。
1620519
○改造した点
・敵を撃つとscoreに100加算されるようにした。
・敵が出てくる回数を増やし、出てくるタイミングを分散させた。また動き方も変更した。
・操作しやすいようにキー操作を右:g、左:f、 上:t、下:vに変更した。
・速いspeedlevelほど入るscoreの割合が大きくなるようにした。
・scoreが1200を超えるとゲームクリア、You win!! Congrats!!と出力され自動的に終了されるようにした。
・speedlevelを自分で入力できるようにした。
・過去最高点を出したときはNew record!!と出力するようにした。
○ルール
makeコマンドでコンパイル後speedlevelを入力(1〜10、数が大きいほど遅い)するとゲーム開始。
キー操作 右:g、左:f、上:t、下:v、space:発射
敵や壁にぶつかると負け、scoreが1200を超えると勝ち
speedlevelが速いと難易度が上がるが、scoreは稼げる。
敵を撃つごとに100加算される。
敵を撃ちづらくするために点滅するようにした。
1620520
・矢印キーで移動するようにした。
・スコアを表示した。
・壁などに3回まで当たってもセーフにし、残りライフを表示した。
・敵に弾が当たって消えたら100点加点
・敵が尽きないようにした。
・敵が現れるx座標をランダムにした。
・時間に従って速さが変わる。
・スコアが10000点を超えたらゲームクリア
・敵もビームを発射してくるようにした。
・敵が3ポーズ持っている。
1620522
・scoreが20増えるごとにspeedlevelを1減らすことで徐々にスピードが上がるようにした。
・スコアとそのときのスピードレベル(最初は1でスピードが上がる度に1増える)を表示させるようにした。
・使うキーを変更し、種類も増やした。
 J: 右 に移動 G: 左 に移動 Y: 上 に移動 B: 下 に移動
 U:右上に移動 T:左上に移動 N:右下に移動 V:左下に移動 H: 弾 を発射
・ゲームが始まる前にルール説明を加え、さらに始めるタイミングを自分で決められるようにした。
・敵が多く現れるようにし、出現する位置や動きを少し変えた。
1620526
・explanationという関数を作りゲーム開始前に簡単なルール説明を表示させた。
・explanationという関数のなかでレベルを入力できるようにし、初期スピードが4段階になるよう設定して、初期スピードが速いほどscoreが多く増えるようにした。
・scoreが1000になったら強制終了するようにした。
・一定時間経過ごとにスピードが徐々に速くなるようにした。
・gameioput関数を使用しゲーム中にscore、position、lifeを表示するようにした。
・上下左右に動けるようにした。
・敵のデザインを変更した。
・setevents関数の中身を変更して、スピードや動く向きなどの敵の動き方を変更し、狙いにくくなるようにした。
・gamemain2.c内で敵を作った。
・敵に弾が当たると点数が入るようにした。'$'は1回につきscoreが+200、それ以外は1回につき+50になるようにした。
・1回敵に当たっただけでは死なないようにした。lifeを3に設定して、3回当たると死ぬようにした。lifeはscoreの下に表示した。
1620533
・敵の数を増やしました。
・操作対象と弾の形を変えました。
・操作しやすくするために、hかHで前、nかNで右、bかBで後ろ、vかVで左に操作対象が移動するようにしました。
・敵が出てくる場所を変えました。
・敵が出てくる時間を変えました。
・スコアが1000になるとゲームクリアとなりゲームが終了されるようにしました。
・ゲーム終了時の表示をスコアごとに変わるようにしました。
・ゲーム中にスコアが表示されるようにしました。
・レベルに応じて操作対象が動く速さを変えました。
・最初にレベルを選択できるようにしました。
・myposが斜めにも動くようにしました。
・操作方法の説明が最初に表示されるようにしました。
・ゲーム実行時の画面で「score」と表示されるようにしました。
・スコアによって操作対象が動く速さが変わるようにしました。
・壁か的にぶつかると文章が表示されるようにしました。
・見やすくなるように表示される部分にスペースを作りました。
・敵のデザインを変え、旧デザインよりは当てづらい敵にしました。
・敵に弾が当たったらスコアが30プラスされるようにしました。
・スピードが上がるとスコアの増加量が大きくなるようにしました。
・操作対象が上下にも動くようにしました。
・レベルによって弾の大きさをかえました。
1520536
・enemyを(友人のものも含め)3種類追加した。
・プレイ中にスコア・残ライフを表示させるようにした。
・飛行機を前後ろにも動けるようにした。f, jキーで左右、y, bキーで前後に動けるようにした。
・実行が終わったら最後にGAMEOVERと出力させるようにした。
・walls.cで壁のデザインを変更し、World1~3という表示と簡易的なゴールを作った。

ルール
・実行方法については変更は無し。
・操作方法については、f:左へ移動 j:右 y:前 b:後ろ
・ルールには大きな変更はなく、ライフが残り5の状態からスタートし、0になって何かに衝突するとゲームオーバーになる。



TAの方々と選ぶ「第6回課題の代表作品」

1620502
・攻撃力、防御力、HPの項目を追加して、それを使って相手のHPを削る戦いをする
・自分のキャラクタを固定して相手キャラクタに戦わせるようにした
・自分のキャラクタの勝った回数を記録する
・printf文を増やして表示を親切にする
1620511
・団体戦と個人戦を選択できるようにした
・最終結果として個人戦のときは100戦中何勝何敗かとレベルを、団体戦のときは何レベルになったかを表示させるようにした
・団体戦を選んでも個人戦を選んでもゲームが終了した後同じメンバーでゲームを続けるか終了するかを選択できるようにした
・個人戦の場合、元々の能力値が一番小さい人が必ず0敗になってしまうので、50戦後に3つの箱の中から好きなのを選んで当たりの場合最下位の人のレベルが30倍されるようにした
・その他表示を分かりやすくした
1620517
・指定された6人がcharacterとlevelの構造体で指定されており、原作のポケモンに乗っ取って、キャラクター名、個体値、種族値、技名2つ、タイプが前者に収納されており、努力値はレベルアップとともに増えていく形式にした。
・6人の中から好きなキャラを選び、それと戦う対戦相手を先ほど選んだキャラ以外から選ぶ。(同じキャラを選んだ場合キャラを選び直せという指示がでる。)
・バトルスタート、各キャラは1攻撃技、2回復技を持っているのでどちらか技を選ぶ。対戦相手はrand関数によってランダムに技を出してくる。先攻は常にこちら側。どちらか一方の体力が0になるとwhile文をぬけて対戦終了。勝った方はレベルが1上がり、努力値は5あがる。
・試合を10回完了するとfor文を抜け最終的な手持ちのキャラたちのステータスと誰が何レベル上がったかを表示して終了。

ポイントは以下の通り。
・各キャラそれぞれ技が2つあり技により特徴が違う。(必ずあたるものとあたらないもの、自分を攻撃してしまうものなど)攻撃技はkougeki関数をつくり、回復技はkaihuku関数を作っている。あたる確率はrand関数を用いてだしている。
・各キャラにはタイプがありタイプ相性がいいと能力値が2倍になる。
・すべてのscanfは誤った値が入力されてもエラーにならないよう、while文を用いたり大きすぎる値を入力された場合は余りの数を入力することにしている。
・自分の手で戦況がかえられるゲーム性にしました。
1620520
・チュートリアルをつけた
・種族を作った
・種族ごとのこゆうわざをつけた
・種族値、個体値、努力値をさらに、体力に関するもの、攻撃力に関するもの、防御力に関するものという風に細かく分けた
・個体値を乱数でつけるようにした
・努力値は戦ったら付与されるようにした
・勝ったらレベルアップではなく、経験値が溜まったらレベルアップするようにした
・バトルシステムを変えて、プレイできるようにした。
・セーブできるようにした
1620525
・表示を派手にして誰と誰が戦っているのか見てわかるようにした。
・最終的に、何勝何敗だったか表示した。 
・2人のレベルを入れ替えるアクシデントを付け加えた。乱数によってどの2人を選ぶかを設定し、入れ替えを行った。
・ボーナスポイントでレベルが上がるプログラムは、何レベル上げるかを入力してもらった値をもとに決定させた。
・最後に、当たればレベルが上がり、外れれば下がる賭けを設定した。当たりのボールは乱数によって決め毎回違うようにし、選んでもらったボールと当たりのボールが一致したら、レベルを乱数によって1〜150の範囲で上げ、一致しなかったら1〜150の範囲で下げるプログラムをつけくわえた。
1620534
なるべく本家のゲームと同じになるように敵を倒すところに重点をおきました。
・5ターン毎に使えるようになる必殺技を設定して、HPの高い敵でも工夫すれば勝てるようにしました。
・また手持ちのHPが低めなポケモンを3体、難易度によってHPと攻撃力が変わる敵を1体置き、技の使い分けをできるようにさせることで自分の選択できるルートを増やして、勝ったときの実感が大きくなるようにしました。