HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2011
1003
びーこんシューティングゲームの基礎7解決


びーこん

リンク

2011/10/3(Mon) 17:41:07|NO.41949

今からシューティングゲームを作りたいのですが、具体的にどのようなプログラムを書けばいい
のでしょうか?
画像は用意しているんですが、それをどうやって動かすのでしょうか。
(あと背景も)

意味がわからない質問になってしまいましたが、どうか回答の程よろしくおねがいします。



この記事に返信する


たんす

リンク

2011/10/3(Mon) 19:06:39|NO.41957

具体的なスクリプトを書くには、仕様が具体的に定まっている必要があります。

シューティングゲームといっても色々あり、
横スクロール、縦スクロール、スクロールなし、3D(奥行き)スクロールなど
作り方がだいぶ違います。

作りたい仕様が決まったら、それぞれのジャンルとHSPという単語で検索してみましょう。
参考になるページやスクリプトが見つかるかもしれません。

参考にしたページの作成者や管理者に疑問を投げかけるのが基本ですが、
疑問に思う点を具体的に書いてくだされば、この掲示板でも具体的な回答が返ってくるかもしれません。



ぬこ

リンク

2011/10/3(Mon) 20:28:57|NO.41962




ミント

リンク

2011/10/3(Mon) 20:48:37|NO.41965

どうもこんにちは。
自分もSTG製作中なので参考になれば・・・



質問の回答だけど・・・
・自機を出す → どうやって出すの? → 画像を出す
出すのにはどうするの? → 読み込みが必要 → それはどういう命令で? →
どういったタイミングで命令するの?

・読み込んだけど出ない → 描画の設定 → チカチカする → あるある →
原因を調べる → 解決する → 画像を出せた!


これができたなら・・・
・自機を動かしたい! → 命令は? → 2種類ある → どっちのほうがSTGに向いているか? →
それを使ってみたけどスピードどうする?



多分こんな感じで、1つづつやっていけば動かせると思います。
まずはサイトを検索して、自分に合ったサイトを探すことをオススメします。
最初は「自機狙い、円形あたり判定」とかはやらないで、簡単のからやると理解しやすいです。


それと余談ですが、難しい難易度を作りたい場合は「まず製作者が避けれないとダメです」



びーこん

リンク

2011/10/3(Mon) 21:51:11|NO.41972

皆さんの貴重な回答、ありがとうございました!!
シューティングについてもっともっと調べたいです。



玄冬

リンク

2011/10/5(Wed) 22:06:20|NO.42050

シューティングの基本は2D3D横縦問わず
*main
[自機に関する処理] [敵に関する処理] [その他の処理(アイテムなど)] [接触判定] await 20 goto *main
というループだと思います。

失礼ですが、質問のされ方からしてSTGを作る経験というより
プログラミング自体の経験があまりないのではございませんか?
(違っていたら申し訳ありません)

であれば、まずは比較的簡単なスクロールなしの2DSTGを習作として
作り、ある程度HSPでのプログラミングに慣れてから、
改めて思い通りのSTG作りに挑戦されてはいかがでしょう?


小学生に遊ばせる目的で作った簡単なゲームですが
何かの参考になれば幸いです。
#define global draw_cir(%1,%2,%3) circle %1-%3, %2-%3, %1+%3, %2+%3		;%1=X座標,%2=Y座標を中心にした円の描画
#define global ctype d_cos(%1) cos(deg2rad(%1)) ;コサインの度数法表記 #define global ctype d_sin(%1) sin(deg2rad(%1)) ; サインの度数法表記 #define global ctype dis(%1,%2,%3,%4) sqrt(double(%1-%3)*(%1-%3) + double(%2-%4)*(%2-%4)) ;2点間の距離 #const GAME_W 640 ;ウィンドウ幅 #const GAME_H 640 ;ウィンドウ高さ #const GAME_hW 0.5 * GAME_W ;ウィンドウ中心(横) #const GAME_hH 0.5 * GAME_H ;ウィンドウ中心(縦) #const PLAYER_spd 2 ;敵用 #enum X = 0 ;X座標 #enum Y ;Y座標 #enum R ;半径 screen 0, GAME_W, GAME_H title "" dialog "ルール\n赤(あか)い玉を↑↓→←で操作(そうさ)して\n壁(かべ)までたどりつけるかな?\n途中(とちゅう)で青(あお)い玉にさわったら負(ま)けだよ!", 0 v_stage = 1 *GAME_start v_GAME = 0 PLAYER_X = GAME_hW PLAYER_Y = GAME_hH v_loop = 0 *main redraw 2 color $ff, $ff, $ff boxf : color gosub *sub_PLAYER gosub *sub_ENEMY redraw 1 await 20 v_loop++ if v_GAME : goto *GAME_end : else : goto *main *sub_PLAYER getkey key_left, 37 getkey key_right, 39 getkey key_up, 38 getkey key_down, 40 PLAYER_move_X = key_right - key_left PLAYER_move_Y = key_down - key_up if PLAYER_move_X | PLAYER_move_Y { PLAYER_A = atan(PLAYER_move_Y, PLAYER_move_X) PLAYER_X += cos(PLAYER_A) * PLAYER_spd PLAYER_Y += sin(PLAYER_A) * PLAYER_spd } color $ff, $00, $00 : draw_cir PLAYER_X, PLAYER_Y, 8;描画 if ((0 < PLAYER_X & PLAYER_X < GAME_W) & (0 < PLAYER_Y & PLAYER_Y < GAME_H)) = 0 : v_GAME++;壁との接触判定 return *sub_ENEMY ddim ENEMY, 3, 8 v_eR1 = d_sin(v_loop) * 25 + 50 repeat 8 ENEMY(0, cnt) = (d_cos(45 * cnt + v_loop) * v_ER1) + GAME_hW, (d_sin(45 * cnt + v_loop) * v_ER1) + GAME_hH, 0.2 * v_ER1 loop if 2 <= v_stage { ;2面以降 v_eR2 = d_sin(v_loop+180) * 25 + 150 repeat 12,8 ENEMY(0, cnt) = (d_cos(30 * cnt - v_loop) * v_ER2) + GAME_hW, (d_sin(30 * cnt - v_loop) * v_ER2) + GAME_hH, 0.1 * v_ER2 loop } if 3 <= v_stage { ;3面以降 v_eR3 = d_sin(v_loop) * 25 + 250 repeat 18,20 ENEMY(0, cnt) = (d_cos(20 * cnt + v_loop) * v_ER3) + GAME_hW, (d_sin(20 * cnt + v_loop) * v_ER3) + GAME_hH, 0.05 * v_ER3 loop } color $00, $00, $ff repeat length(ENEMY) draw_cir ENEMY(X, cnt), ENEMY(Y, cnt), ENEMY(R, cnt) ;描画 if dis(PLAYER_X, PLAYER_Y, ENEMY(X, cnt), ENEMY(Y, cnt)) < ENEMY(R, cnt) + 6 : v_GAME-- ;自機との接触判定 loop return *GAME_end if 0 < v_GAME { if 3 < v_stage { dialog "おめでとう!\n全ステージクリアです", 1 end } else { dialog "おめでとう!次(つぎ)のステージもがんばってね", 1 v_stage++ goto *GAME_start } } else : dialog "負け", 1 : end wait 5



びーこん

リンク

2011/10/9(Sun) 15:44:00|NO.42136

玄冬さん、ソースありがとうございます。
そうですね、プログラムはあんまり経験したことがなかったので非常に助かります。



玄冬

リンク

2011/10/11(Tue) 05:15:56|NO.42270

ああ…誤記が…

ソース100行目
×repeat length(ENEMY)
○repeat length2(ENEMY)
ですね。

参考になればとか大きな言っておいて、ごめんなさい。



ONION software Copyright 1997-2023(c) All rights reserved.