★の表示と移動
次に今回のゲームの敵キャラにあたる★を表示します。
最終的に★は大量に出しますが、とりあえずは1個だけ出したいと思います。
プログラム的には●を表示したのと変わりありません。
一気に書いちゃいましょう。
続きを読む
次に今回のゲームの敵キャラにあたる★を表示します。
最終的に★は大量に出しますが、とりあえずは1個だけ出したいと思います。
プログラム的には●を表示したのと変わりありません。
一気に書いちゃいましょう。
続きを読む
さて、とりあえず無条件で●を右に移動させましたが、
本来はキーボードの「→」を押した時に右に移動するはずです。
そのへんを作ってみましょう。
まず、次の1行を追加します。
;自機移動
stick key
player_x = player_x + 5
stickは、押されているキーの番号を変数に代入する命令です。
続きを読む
まずは、ウィンドウを表示しなければ始まりません。
今回は、ワイド型スクリーンの比率に合わせて800×480ピクセルの
ウィンドウにしましょう。
;スクリーンを作成
screen 0, 800, 480
今回のゲームの自機は、画像ではなく、文字の「●」です。
つまり、mes命令で表示できます。
表示する位置はどこにしたらいいでしょうか?
自機は移動するので、位置は常に変化します。
ということは・・・・変数を使います。
;スクリーンを作成
screen 0, 800, 480
;自機の位置
player_x = 100
player_y = 200
その変数の位置に、緑色で●を表示しましょう。
ついでに、そのままだと少し小さいので、フォントのサイズを32にします。
;自機の位置
player_x = 100
player_y = 200
;フォントの設定
font "MS ゴシック", 32
;自機を表示
color 0, 255, 0
pos player_x, player_y
mes "●"
これで、左から100、上から200の位置に、緑色で●が表示されると思います。
自機は、カーソルキーの押した方に移動しますが、
キー入力は次ページ以降で説明するとして、
とりあえず単純に右方向に移動させてみましょう。
変数player_xとplayer_yは、ウィンドウの左上からの距離を表しています。
つまりplayer_xの値を大きくすれば右に移動します。
;自機を表示
color 0, 255, 0
pos player_x, player_y
mes "●"
;自機移動
player_x = player_x + 5
これで実行すれば移動するでしょうか・・・?
しませんね。
これは、表示した後に変数の値を変えただけなので意味がありません。
移動させるためには、表示→移動→表示→移動→・・・を、
繰り替えさなければなりません。
繰り返し処理は以前repeat-loopを紹介しました。
それを使ってもいいのですが、今回は違う方法を紹介します。
次のように追加してください。
*メインループ
;自機を表示
color 0, 255, 0
pos player_x, player_y
mes "●"
;自機移動
player_x = player_x + 5
await 16
goto *メインループ
awaitは前に紹介したから大丈夫ですね?
「*メインループ」と書いていますが、これは「ラベル」と呼ばれるものです。
先頭に「*」をつければラベルになります。「*」の後ろは何でもOK。
で、ラベル自体は何かをする命令ではなく、
プログラム中にはさむ 「しおり」のようなものです。
なお、ラベルは先頭に空白を入れず、左端に書くのが通例です。
で、最後に追加した「goto *メインループ」。
これは「“*メインループ”というラベルのところにジャンプしろ」いう意味の命令です。
歌の歌詞によくある「※くりかえし」ってやつに似てますね。
これで、表示→移動→表示→移動→・・・を
1秒間に約60回繰り返すことになります。
実行してみましょう。
残像が残るので、太い線が伸びていくように見えますが、
●が右に移動している証拠です。
さて、今回新しいループの方法を紹介しました。
ですが、今回のプログラムをrepeat – loopで書いても特に問題はありません。
では、どういう時はrepeat – loop を使い、
どういう時はgotoを使ってループを書けばいいのでしょうか?
これに関しては、特に正解はないのですが、次のように考えてください。
【repeat – loopがいいパターン】
・ループ回数が決まっている場合
・ループさせる処理があまり多くない場合
【gotoがいいパターン】
・ループ回数が決まってない場合
・ループさせる処理がある程度多い場合
今回のループは、★にぶつかってゲームが終了するまで
繰り返すわけですから、実際何回ループするか分かりません。
こういう場合はgotoを使ったほうがいいと思います。
●を移動させましたが、
残像が残っているので1本の線のようになってしまっています。
ちゃんと移動しているように見せるには、
一度表示した●を消してからちょっと右に移動する必要があります。
今回のゲームは、完成版サンプルを見てもらうと分かるとおり、
背景は青で塗りつぶしているので、
●を表示する前に画面を青一色で塗りつぶしましょう。
塗りつぶすには「boxf」命令を使います。
*メインループ
;画面をクリア
color 0, 0, 255
boxf
;自機を表示
color 0, 255, 0
pos player_x, player_y
boxfは「Box(四角く) Fill(塗りつぶす)」の略で、
画面全体を塗りつぶす命令です。
これで、画面真っ青→●表示→移動→画面真っ青→●表示→移動→・・・
というループになり、●が移動しているように見えると思います。
なお、PCのスペックによっては●がチラつく場合もありますが、
あとで修正しますので、とりあえず我慢しておいてください。
さて、基礎的なことはだいたい紹介しました。
ここからは、いよいよゲームを作ってみたいと思います。
ここで一つ注意。
ゲームプログラマーになろうと思った人が挫折する原因の一つに
「最初から市販されているようなカッコいいゲームを作ろうとする」というのがあります。
HSPでカッコいいゲームを作ることは可能です。
しかも比較的簡単にできます。
しかし、初めて作るゲームでカッコいいゲームを作るのは無理です。
そこで、今回はつまらないゲームを作ります。
そもそもゲームといっていいのか分からないほどのものです。
プレイヤーは「●」です。
横から「★」が3つ飛んできます。
キーボードのカーソルキーを使って●を操作し、
★にぶつからないよう避けてください。
★はどんどん増えていきます。
★に触ってしまうと終了。
その時の★の数がスコアとして表示されます。
それだけです。
サンプルを作ったのでプレイしてみてください。
さっそく次のページから作成していきます。
すでに何かプログラムを書いている人は、一度全部消してください。
まっさらな状態からゲームを作っていきます。
ここからは少し長いプログラムになりますので、ときどき保存しながら進めてください。
screen 0, 640, 480
HP = 200
;5回連続攻撃
repeat 5
mes "主人公は70のダメージ!"
HP = HP – 70
;HPをマイナスにしない
if(HP < 0){
HP = 0
}
mes "現在のHPは" + HP + "です\n"
;生死の判定
if(HP >= 1){
mes "まだ生きている\n"
}else{
mes "もう死んでいる\n"
break
}
loop
これは、前のページで作ったプログラムです。
このプログラムは、毎回ダメージが70で固定なので面白くないですね。
続きを読む■ツール | ■ゲーム | ■講座 | ■素材 | ■その他 | ■管理人へ |
Prominece3D | ウディタミネンス | エフェクト画像の描き方 | 戦闘エフェクト素材 | CG作品 | お問い合わせ |
Relocater | ツクルミネンス | ロゴの描き方 | 投稿エフェクト | 書籍 | 管理人を応援 |
Prominece | HSP講座 | ||||
Copyright © 2011-2018 藤宮翔流 All Rights Reserved.