ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

ゲームプログラマーコミュのゲーム作り、初心者の為のHSP談話室

  • mixiチェック
  • このエントリーをはてなブックマークに追加
HSPもバージョンが3.3になろうとし、iPhoneやiPad、アンドロイドでもHSPで作ったソフトが動くようになる開発が進んでると聞いて、

これを期にゲームを作ってみたい人が、HSPに触れ、自分の作りたいゲームの質問、アドバイス、作ったゲームの発表の場としてトピを立てました。

HSPのゲーム作りの手軽さを多くの人の間で、語り合えたらとおもいます。

よろしくお願いします。

最新HSP3.2プログラミング入門―Windows98/2000/Me/XP/Vista/7対応 [単行本]

http://www.amazon.co.jp/%E6%9C%80%E6%96%B0HSP3-2%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E5%85%A5%E9%96%80%E2%80%95Windows98-2000-Me-Vista-7%E5%AF%BE%E5%BF%9C/dp/4798024325/ref=sr_1_1?s=books&ie=UTF8&qid=1303658505&sr=1-1

HSP3.21のダウンロード
http://www.vector.co.jp/soft/dl/win95/prog/se080832.html

このURLをダブルクリックするとベクターというフリーソフトを扱っているサイトに行きます。
今すぐダウンロードという緑色のボタンがあるのでそこをクリックすると案内が出ます。
案内に従って、ダウンロードしてください。

コメント(126)

単純に空気抵抗を考えずに放物線を描くプログラムを組む場合、単純に重力加速度G(9.80619920m/s2)を初速aに追加していく感じです。

フリップ制御をして60FPSにしている場合

初期値 y0
加速度 g = 9.806f
初速 a
開始からのフリップ数 t = 0
とすると

t++;
y = y0 + (a * t) + g / (t*t/360)

これで座標値の単位が1ピクセル辺り1メートルの時の重力計算が算出できます。
後はこれをループに加えるだけ。

まあ、これだとあっと言う間に画面外に抜けて、暫くしてオーバーフロー起こします。
地面(?)に着いた時に反発係数を加えたり、重力加速度を更に割ったりする必要があります。
プログラミングを昨日今日で始めた人がいきなり物理演算を書くのは少し無理があるんじゃないでしょうか
将来的には必須だとしても物理力学はプログラミングというより数学の範疇なので
まずはそれ以外でHSPの基礎を学んだほうがいいように思います

それこそジャンケンゲーム程度から初めるのが妥当かと


どうしてもバスケットボールにこだわるならなんちゃって放物線もあります
(HSPは未経験なので必要に応じて変更してください)

---
sy = 5 (初期設定、ボールの挙がる速度)
 ループ開始 10回
x = x + 1
y = y - sy
 ボール描画
sy = -1 (重力を仮に1としてボール速度から引いていく)
 ループ折り返し
---

ここから重力を2や3にしてみたりx座標の加算値やループ回数を変えてみたりして
まずはプログラムの挙動を理解していく行程が大事だと自分は思っています
毎回重力加速度を速度に足して
毎回速度をy座標に足してループする。

それはさておき

mixi上のリストをHSPに持ってくコピーの仕方を書きます。

まず1番目の写真、マウスで左ボタンを押しながらコピーしたいところをなぞり、色を反転させます。

そして2番目の写真、右クリックをしてメニューを出します。コピーという項目を選んでパソコンに色を反転させたところを記憶させます。

そして3番目の写真。HSPを起動し上に並んでるメニューの編集を押して、貼り付けを選びます。

するとmixi上のプログラムリストがHSPにコピーされます。
screen 0, 640,480

repeat
cls 0
mes "スペースキーを長く押してください。"
b = 0
repeat p
pos b,432:mes "*":b = b + 8
loop
pos b,432:mes "|"

wait 3
stick kk, 16+128

;スペースキー処理
if (kk&16) ! 0 : p=p+1;スペースキーが押されたらpowerを上げる
if ((kk&16) = 0) and (p>0):dialog "power = " + p, 0, "" :p=0;スペースキーが放された
;エスケープキー処理
if kk&128 : end
loop

;これコピーして実行してみて!パワーゲージちょっと読みづらいリストでごめんね。
>90 さとそnさまの方法であります。まさに。

放物線を描くのに方程式を使わないで位置にスピードを加えスピードに加速度加え続けたら出来る。
面積を調べるのに積分しなくてもドット数を調べれば面積はわかる。

;バスケットボールのための放物運動シュミレーション====================
;
sx = 16; x方向の初速:単位ドット
p = 32 ; 投げる力(Y方向の初速:単位ドット)
*start
screen 0, 640,480
cls 0

mes "x方向の初速を入れてください(16〜32くらい?)"
input sx
mes "Y方向の初速を入れてください(0〜50くらい?)"
input p
button "実行", *throw
button "終了", *final
stop

*final
end

;ゲージを表示=========================================================
*throw
cls 0

pos 0, 416
mes "Y方向への初速(力) = " + p
b = 0
repeat p
pos b,432:mes "*":b = b + 8 ;半角文字一個はたぶん8ドットなので8個足す
loop
pos b,432:mes "|"

;軌道を見る(t時間を使う)====================================================================
t = 0;時間
x = 0:y = 400;ボールの位置
sx = sx ;inputで入れた値をそのまま使う
sy = -p ;斜め右上方向に速度を設定
g = 1 ;重力加速度

repeat
x = sx * t ;ボールのx座標を設定
y = t* ( g*t + sy)+400 ;ボールのy座標を設定
pos x,y:mes "●"
if y > 400 :goto *exit_loop;床にボールがぶつかったら、そこで移動を終了する。
t = t + 1;時間を一個進ませる
loop

;============================================================================================
*exit_loop
dialog "軌道を出しました", 0, "メッセージボックス"
goto *start

end
まず放物運動のシュミレーションから見てみてからやった方がいいかな?と思い作ってみました。
サンプルプログラムをあれやこれや作ってるうちに無駄に長いプログラムをバシバシ書き込んでいたので
削除をいっぱいしました。なんかごめん、僕もなんかちゃんとわかってないので試行錯誤ばかりなんです。

プログラムも、

人に伝え教えることも、、、、

難しい。
;inputとdialogを使ってみよう!=========================
;
sy = 32 ; 投げる力(Y方向の初速:単位ドット)

*start
cls 0

mes "Y方向の初速を入れてください(0〜50くらい?)"
input sy;入力ボックスを表示。syに値が入る。

button "実行", *throw

stop

*throw

m = "sy="+sy

dialog m, 0, "y方向の初速"

goto *start
dialog命令について説明します。

 dialog "message", 0, "option"

dialog はメッセージボックスを表示します。
1番始めのパラメータはメッセージボックスの中身に表示します。
2番目のパラメータがプログラム上では0で、
 0はOKボタンのメッセージボックスを表示します。
 1は警告マーク付きOKボタンのメッセージボックスを出します。
 2は、、、、
といろいろあります。ここら辺はHSPのヘルプで、dialogという命令を検索してみてください。
3番目のパラメータはメッセージボックスのタイトルのところに表示する内容です。

例:
>dialog "type=0", 0, "OKメッセージボックス"
>
>dialog "type=1", 1, "警告のOKメッセージボックス"
>
>sy = 20
>m = "sy="+sy
>dialog m ,0,"y方向の初速"
>
>end

この>が頭にあるリストと、サンプル画像と対応しています。

=======================================================================
とりあえずちょっと癖のあるダイアログ命令を説明して見ました。何か質問あったらバシバシお願いします。

input は、数値や文字列をキーボードから入力する事が出来ます。

>sy = 32
>input sy

入力の内容の初期値が32という数字になります。
BOXの中身を変えるとsyの値も変わります。


もし文字を入力したい場合は

>m = "test"
>input m

入力の内容の初期値がtestという文字列になります。

BOXの中身を変えると、変数mの内容も変更と同時に変わります。


そして入力が完了したらボタンを押して入力終了するようにするのがポピュラーみたいです。

>m="test"
>input m
>button "入力完了", *ok
>stop
>
>*ok
>dialog m, 0, "こんな文字列が入力されました。"
>end
>113の一部修正。

;軌道を見る(t時間を使わない)====================================================================

x = 0:y = 400;ボールの位置
sx = sx ;inputで入れた値をそのまま使う
sy = -p ;斜め右上方向に速度を設定
g = 1 ;重力加速度

repeat
x = x + sx ;ボールのx座標を設定
y = y + sy ;ボールのy座標を設定
sy = sy + g ;速度に加速度時間1個分を足す
pos x,y:mes "●"
if y > 400 :goto *exit_loop;床にボールがぶつかったら、そこで移動を終了する。
loop
;============================================================================================
*exit_loop

時間を示す変数tを使わなくても放物線は描けます。

本当は放物線より、キーボードからやジョイスティックでキャラを動かすことから始めた方が解りやすく、面白いです。

ただこのプログラムは軌道が少し違ってきます。何個ずつY座標が毎回どのくらい移動しているかを
画面に数値を 表示して調べると、バグの原因がわかります。


*start5
screen 0, 640,480
p=0

repeat
cls 0
mes "スペースキーを長く押してください。"
b = 0
repeat p
pos b,432:mes "*":b = b + 8
loop
pos b,432:mes "|"

wait 3
stick kk, 16+128

;スペースキー処理
if (kk&16) ! 0 : p=p+1;スペースキーが押されたらpowerを上げる
if ((kk&16) = 0) and (p>0):goto *shot3;スペースキーが放された
;エスケープキー処理
if kk&128 : end
loop


*shot3
x = 0: y = 400;人の居るところ
sy = -8;y方向のスピードは−8(毎回ループ毎に上向きに8ドット飛ぶ)
repeat


;cls 0
pos 200, 300:mes "V"
pos 0, 400: mes "人"

x=x+8
y=y+sy
pos x,y : mes"●"

if p > 0 : p = p - 1;力は1づつ減少する。
if p = 0 : p = -1:sy = -sy;力が尽きた(p=0)になったら、上向きに飛ぶ方向を、下向きの落ちる方向に、スピードをマイナスする

if (x >= 190)and(x<=210)and(y>=296)and(y<=316):dialog "Goal",0,"OKボタンのメッセージボックス":end
if y > 400 : dialog "外れた", 0, "やり直し":goto *start5

wait 3

loop
end

放物線でない場合を作りました。;cls 0の先頭;を取ると、軌道は残りません。

ログインすると、残り113件のコメントが見れるよ

mixiユーザー
ログインしてコメントしよう!

ゲームプログラマー 更新情報

ゲームプログラマーのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。