忍者ブログ
まったくのプログラミング素人の筆者がC++/HSPを使用してSTG(シューティングゲーム)を作っていく過程を書くブログでしたが最近は脱線気味。プログラミング以外にも、ゲーム関連の記事、日々の戯言など。
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

ここ最近、スーパーマリオギャラクシーにはまってしまっていてゲーム作製が進んで
なかったのですが、やっとクリア出来たのでステージ4を作っていこうかと思っています^^;

で、ステージ4の構成としてはロボット登場→ちょっと破壊→ロボット退散→雑魚を少し出す
→更にロボット登場・・・といった感じで徐々にロボットが破壊されていくようにしようかと
今のところは思っています。
今回のロボットには触手がついているので、攻撃も触手中心に考えてます。
3b9b094c.jpg
とりあえず、こんな感じ。

出来れば背景をもう一枚重ねてロボットと戦う時は、この背景だけスクロールを止めて
雑魚が出てくる時は、高速スクロールって感じにしたいんですが、なかなか上手い背景が
出来なくて考え中です^^;

PR

昨日作製したネームエントリー&スコアランキングのスクリプトを元にして
作製中のSolid State SURVIVORに組み込んでみました↓
5dc8c13d.jpg
背景はゲームオーバー時点での背景を表示するようにしてみました。
なかなか上手く出来たのではないかと自分では思っています^^
後はネームエントリー用の曲を作らないといけませんね。

ネームエントリーのスクリプトを作っていたのですが、予想通り頭がこんがらがって来たので
スコアランキングとネームエントリーの部分だけで、簡単なスクリプトを作ってみました↓

ネームエントリー&スコアランキングのスクリプト

このスクリプトを動かすとこんな感じ↓
7166d627.jpg
タイトル画面

bf4b825b.jpg
ランキング表示画面

af005c40.jpg
自機セレクト

33395e03.jpg
プレイ画面。
自機と自機弾が表示されていますが、意味はありません^^;

819e4edf.jpg
ネームエントリー画面

一応、現在作製中のゲームと同じようにしようと思って、自機セレクト/ゲームプレイ画面も
入れています。
ゲームプレイと言っても、スペースキーで得点を加算するだけですが^^;
スクリプトの流れとしては、タイトル→自機セレクト→ゲームプレイ→ネームエントリー→
スコアランキング表示→タイトルに戻るって感じになっています。

で、肝心の名前とスコアの保存方法ですが、スコアはそのままbsave命令で保存出来るのですが
文字はそのままだと保存出来ないので、数字に置き換えて保存するようにしてみました。
その他に、自機の種類とクリアステージ数も保存するようにしてみた。
こんな感じで保存しています↓
 repeat 15
 bsave "score.dat",moji1.cnt,,0+(cnt*50)
 bsave "score.dat",moji2.cnt,,4+(cnt*50)
 bsave "score.dat",moji3.cnt,,8+(cnt*50)
 bsave "score.dat",jikiserectk.cnt,,12+(cnt*50)
 bsave "score.dat",stageflagk.cnt,,16+(cnt*50)
 bsave "score.dat",ranking.cnt,,20+(cnt*50)
 loop
リピート15としているのは、モードが3つあるので3×5で15となっています。
で、一人分につき50バイト使って保存するようにしています。

最初、文字コードにこだわってaの時は65で保存しようとしていたんですが
別に65にこだわる必要はなく、使いやすい数字を使えば良かったという事に
作ってから気づきました^^;
文字でファイルに保存する場合は文字コードを使う必要があると思うんですが
今回のように、数字で保存する場合は何でも良いでんすよね。


ロードに関してもセーブの時と同じで
 repeat 15
 bload "score.dat",moji1.cnt,,0+(cnt*50)
 bload "score.dat",moji2.cnt,,4+(cnt*50)
 bload "score.dat",moji3.cnt,,8+(cnt*50)
 bload "score.dat",jikiserectk.cnt,,12+(cnt*50)
 bload "score.dat",stageflagk.cnt,,16+(cnt*50)
 bload "score.dat",ranking.cnt,,20+(cnt*50)
 loop
みたいな感じで取り出して、モードごとに配列変数の0~4はイージー、5~9はノーマル
10~14はハードというように分けて表示させるようにしました。
なんか方法間違ってる気もしますが、ちゃんと動いているような感じなので
コレで様子見てみようと思っています。

あと、全然関係ないのですが背景を3Dっぽくスクロールさせたいと思って
es_d3dopt命令を使って表示させてみました。
最初es_excopyでスクロールさせて、それを奥行きがあるように表示させてみたのですが
やはり、この方法だと処理が重すぎたので、かわりにes_exput命令で表示させるように
してみたら上手く出来ました^^
でも、当り判定は反映されないのでゲーム部分には使用出来ませんが
背景としては十分に使用出来るんではないかと思っています。

とりあえず、スコアランキングとネームエントリーはコレで完成かな?
もっと簡単に出来ると思っていたのですが、思った以上に大変でした(汗)
HSPコンテスト2007でSolid State SURVIVOR が「(株)晋遊舎 「Windows100%」編集部賞」
を受賞したのですが、そのお陰で今月発売のWindows100%誌に掲載されました!

s-DSCF5482.jpg
ほんのちょっと小さく掲載されただけですが、それでも自分が作製したゲームが雑誌に
掲載されるなんて夢にも思っていなかったので、とても嬉しいです^^
これも、色々なみなさんの協力のお陰ですね。頑張って作製して、なるべく早く完成させようと
思っていますので、今後とも、よろしくお願い致しますm(_ _)m

ネームエントリーの方は大体出来て来たので、ランキング表示の方を作ろうと思ったのですが
ランキング表示させる為には、得点をソートしないといけません。

で、ソートの方法について色々と調べてみたのですが結構ややこしそうな感じでした。
ここでふと、リンク先の「マクセルの手動ブログ」さんで簡単なソートの方法を掲載されていたのを
思い出し、早速見てみました。
(左側メニュー部分の成果のHSPから「スコアランキング表 (えせソート)」をクリックで見れます)

読んでみて納得。とても簡単でわかりやすく解説されています。
本来のソートとはちょっと違いますが、スコアランキングとしては十分に機能します。

この、マクセルさんのスクリプトを使わせて貰って、簡単なランキング表示スクリプトを作成してみました↓
**************************************************************
 screen 0,280,120,0,0,0
 sc=0  ;初期スコア
 dim ranking,5 ; ① 1~5位のスコアを配列変数に保存
 ranking.0=500 ; ② 適当なスコアをデフォルトとして保存。
 ranking.1=450
 ranking.2=400
 ranking.3=350
 ranking.4=300
 scrrank=5  ; ③ 現在の順位(最初はランク外)
*main
 redraw 0 ;仮想画面を指定
 color 0,0,0 ;色に黒を指定
 boxf 0,0,640,480 ;指定色で画面を塗りつぶす

 stick ky,16
 if ky=16 : sc+10       ;スペースでスコア加算
 if ky=32 : gosub *rank ;エンターでランキング反映

 color 255,255,255
 pos 0,0
 mes " 1位 "+ranking.0
 mes " 2位 "+ranking.1
 mes " 3位 "+ranking.2
 mes " 4位 "+ranking.3
 mes " 5位 "+ranking.4
 mes "score "+sc
 pos 85,0
 mes "Spaceでスコア加算"
 mes "Enterでランキングに反映"
 redraw 1 ;画面を更新
 await 16
 getkey syuryo,27:if syuryo=1:end;ESCを押すと強制終了
 goto *main ;*mainに戻る

*rank
 if sc>ranking.4 {     ; ④ ランクイン時のみ以降を処理
  repeat 5
   if sc>ranking.cnt :scrrank=cnt :break ; ⑤ 現在のランクを判定
  loop
  repeat 5
   if scrrank=4-cnt :ranking(4-cnt)=sc :break ; ⑦ 処理対象が現在の順位まで来たら現スコアを保存し終了
   ranking(4-cnt)=ranking(4-cnt-1)   ; ⑥ 現在の順位より下位のランクをずらす
  loop
 } 
 sc=0
 return
*********************************************************************
上記のスクリプトを実行するとこんな感じ↓
WS000000.JPG
スペースでスコア加算し5位よりも大きいスコアなら、エンターを押した時にランキングに反映されます。
ほぼ、マクセルさんのスクリプトを写しただけですが、ランキングスクリプトとしては
これで十分な感じですね。
後は、これに名前を関連付けで保存&読み込み出来るようにするべく試行錯誤しています^^;

Twitter
カレンダー
03 2025/04 05
S M T W T F S
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
最新コメント
[04/20 kt.]
[04/19 うぇむ]
[11/24 kt.]
[11/21 NONAME]
[11/24 kt.]
プロフィール
HN:
kt.
性別:
男性
自己紹介:
プログラミング経験は昔ファミリーベーシックでちょっとさわったくらい。
好きなSTGは、怒首領蜂大往生、エスプガルーダ(2)等の弾幕STGやら雷電シリーズなんかの非弾幕、バトルガレッガ、グラディウスシリーズ、R-TYPE等、STGなら何でも好きです。
音楽がカッコイイSTGが特に好きで、並木学氏は最高!
ブログ内検索
忍者ブログ [PR]