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


HSPTV!掲示板


未解決 解決 停止 削除要請

2014
0926
shiokazu急ぎです!穴に落ちたらゲームオーバーにしたい…etc5未解決


shiokazu

リンク

2014/9/26(Fri) 18:49:44|NO.65257

以前、この掲示板でお世話になりいただいたソースを使って自分のものにあてはめていたら
いくつかまだできないことがあり、低レベルかと思いますが質問させてください。

・歩くモーションはうまくいったが右に歩かせるとキャラが左にむいてしまう
・ブロックに穴をあけてキャラを落とすとエラーになる
 (gotoあたりを使用してゲームオーバー画面にしようと考えているが入れ込む場所が分からない)
・ステージ画面内に新たに静止画を設置して当たり判定をつけてpos設定とgotoでしたいがまず画像がのらない

この三つです。
使っているソースは下記の通りです…。
文化祭で使いたいんですが自力だけでは間に合わなそうです。
ぜひ力を貸してください。
よろしくお願いします。



//マクロ
#const CHRA_MAX 234 //1ステージ内のキャラクター総数
#const CHIP 40 //基本チップサイズ

//キャラクター画像読み込み
buffer 3
picload "深緑ロンまとめ.gif"

//マップ用バッファ
buffer 2,680,480
//Map
dim map,17,13
map(0,0)=1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
map(0,1)=1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
map(0,2)=1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
map(0,3)=1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1
map(0,4)=1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,1
map(0,5)=1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
map(0,6)=1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1
map(0,7)=1,1,0,0,0,0,1,0,1,0,0,1,0,0,0,0,1
map(0,8)=1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,1
map(0,9)=1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1
map(0,10)=1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
map(0,11)=1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1

//マップ画像を生成
//Map 色・全体サイズ変更
color 187,187,187 //背景色
boxf

//Y軸
repeat 13
yy=cnt
//X軸
repeat 17
xx=cnt
if map(xx,yy)=1 : pos xx*CHIP,yy*CHIP : gcopy 3,120,0,CHIP,CHIP
loop
loop

screen 0,680,480
title "ロンニューの大冒険"
color 0,0,0
boxf

//キャラクター用設定
//要素数は本来必要な分だけ
dim char_x,CHRA_MAX //キャラクターのX座標
dim char_y,CHRA_MAX //キャラクターのY座標
dim char_sizez,CHRA_MAX //キャラクターの横幅
dim char_sizey,CHRA_MAX //キャラクターの縦幅
dim char_type,CHRA_MAX //キャラクターの種類 0=なし、1=プレイヤー、2=敵タイプA、3=敵タイプ3・・・等
dim char_act,CHRA_MAX //キャラクターの現在のアクション 0=待機、1=歩行、2=ジャンプ上昇、3=ジャンプ下降
dim char_cd,CHRA_MAX //キャラクターの現在の向き 0=右、1=左
dim char_ani,CHRA_MAX //キャラクターのアニメパターン
dim char_anicnt,CHRA_MAX //キャラクターのアニメカウンタ

//初期設定
char_type(0)=1 //0はプレイヤー用1
char_x(0)=CHIP*2 //キャラクターのX座標
char_y(0)=CHIP*6 //キャラクターのY座標
char_sizex(0)=10 //キャラクターの横幅
char_sizey(0)=15 //キャラクターの縦幅


//メインループ
*メイン
ax=0
//キー入力
stick sk,$5
if sk&4 : ax=3 : char_cd(0)=0 : if (skf=0)&(char_act(0)!=1) : char_act(0)=1 : char_ani(0)=0 : char_anicnt(0)=0
if sk&1 : ax=-3 : char_cd(0)=1 : if (skf=0)&(char_act(0)!=1) : char_act(0)=1 : char_ani(0)=0 : char_anicnt(0)=0
//ジャンプ
if (sk&2) : if skf=0 : ay=-14 : skf=1 : char_act(0)=2 : char_ani(0)=0 : char_anicnt(0)=0
if (skf=0)&(ax=0)&(char_act(0)!=0) : char_act(0)=0 : char_ani(0)=0 : char_anicnt(0)=0
//当たり判定
;縦

ay++;重力
char_y(0)+=ay;縦移動

leftX=(char_x(0)+haba)/CHIP : rightX=(char_x(0)+CHIP-haba)/CHIP
downY=(char_y(0)+CHIP)/CHIP : upY=(char_y(0)+CHIP-char_sizey(0))/CHIP
;title""+ay+" "+char_x(0)+" "+leftX+" "+z+" "+ map(leftX,downY)+" "+ map(rightX,downY)
z=map(leftX,downY)+map(rightX,downY) + map(leftX,upY)+map(rightX,upY)
if z>0 {
if ay>=0 {
char_y(0)=downY*CHIP-CHIP : ay=0
if skf!=0 : skf=0 : char_act(0)=0 : char_ani(0)=0 : char_anicnt(0)=0
} else {
char_y(0)=upY*CHIP+CHIP-char_sizey(0):ay=0
}
}



char_x(0)+=ax;横移動
haba=(CHIP-char_sizex(0))/2
;横
leftX=(char_x(0)+haba)/CHIP : rightX=(char_x(0)+CHIP-haba)/CHIP
downY=(char_y(0)+CHIP-1)/CHIP : upY=(char_y(0)+CHIP-char_sizey(0))/CHIP


z=map(leftX,downY)+map(rightX,downY) + map(leftX,upY)+map(rightX,upY)
if z>0 {
if ax>=0 {
char_x(0) = rightX*CHIP-CHIP+haba-1
} else {
char_x(0) = leftX*CHIP+CHIP-haba
}
}


gosub *描画
await 17
goto *メイン

*描画
redraw 0

//描画処理
//マップ
pos 0,0
gcopy 2,0,0,680,480

//自機
//キャラクター数だけループ
gmode 2
repeat CHRA_MAX
//キャラクタータイプが【0】の時は読み飛ばす
if char_type(cnt)=0 : continue
//プレイヤー
if char_type(cnt)=1 {
//キャラクターの現在のアクション 0=待機、1=歩行、2=ジャンプ
if char_act(cnt)=0 {

//待機
//アニメ用
char_anicnt(cnt)++
if char_anicnt(cnt)=0 {
char_anicnt(cnt)=0
char_ani(cnt)++
if char_ani(cnt)>0 : char_ani(cnt)=0
}
}
if char_act(cnt)=1 {
//歩行
//アニメ用
char_anicnt(cnt)++
if char_anicnt(cnt)=2 {
char_anicnt(cnt)=0
char_ani(cnt)++
if char_ani(cnt)>2 : char_ani(cnt)=0
}
}
if char_act(cnt)=2 {
//ジャンプ
//アニメ用
char_anicnt(cnt)++
if char_anicnt(cnt)=1 {
char_anicnt(cnt)=0
if char_ani(cnt)<1 : char_ani(cnt)++
}
}
//キャラクターの描画
pos char_x(cnt),char_y(cnt)
gcopy 3,(char_ani(cnt)*CHIP)+(char_cd(cnt)*160),(char_act(cnt)*CHIP),CHIP,CHIP
}

loop
redraw 1
return



この記事に返信する


shiokazu

リンク

2014/9/26(Fri) 18:56:15|NO.65258

長くてすみません。
//マクロ
#const CHRA_MAX 234 //1ステージ内のキャラクター総数
この234という数字がわかりません
この数字が画像位置なのか何の数字なんでしょうか?
よろしくお願いします。



ぴょぴょ(科学太郎)

リンク

2014/9/26(Fri) 19:09:19|NO.65259

> #const CHRA_MAX 234 //1ステージ内のキャラクター総数
> この234という数字がわかりません
> この数字が画像位置なのか何の数字なんでしょうか?
自分で考えて作らなかったのが原因でしょう。
コメントで「1ステージ内のキャラクター総数」と書いてます。
よって、234とはキャラクター総数が234体という意味です。

あと記号定数の CHRA_MAX は CHAR_MAX だと思います。
英語でキャラクタとは character ですので頭文字4文字ですね。

> ・歩くモーションはうまくいったが右に歩かせるとキャラが左にむいてしまう
画像を差し替えれば良いだけです。
なお、深緑ロンまとめ.gif がダウンロードできませんので
正しくアドバイスできません。

> 文化祭で使いたいんですが自力だけでは間に合わなそうです。
> ぜひ力を貸してください。
なるほどね。



cats

リンク

2014/9/26(Fri) 19:35:19|NO.65260

まず始めに掲示板利用時に守ってほしいことから。
投稿時、コードは<pre>と</pre>で囲むことで見やすくなるので使いましょう。
そしてコードはみんなが見るものですので、必要なファイル(画像や音声)は
アップロードするなり、その部分を消すなりして誰でも実行できる形にしましょう。
それと極力コードはインデントなどで見やすくしましょう。

さて、CHRA_MAXはキャラの最大数を示しており、これを書いた人はたくさんのキャラが
いることを想定していたのだと思います。CHRA_MAXは1にして構いません。

マップについて、縦のマップサイズは12ですね。
穴に落ちるということは、13番目のマップを参照しようとすることです。
そんなものは初期化していないのでエラーになります。
downYに自分のY座標(マップチップ)が代入されているようなので、
エラーの前の行に次のように書けば良いです。

if downY >= 13 : dialog "ゲームオーバー" : stop
downYが13以上になれば落ちたということになります。

ゲームの際はキャラの位置が思わぬ場所に行くときがあります。
そういうゲームではキャラの位置をlimitなどで制限してエラーを避けましょう。
特にこのように配列を使用している場合は、ありえない配列を指定してしまい
エラーを起こしやすいので注意してください。



Ve

リンク

2014/9/26(Fri) 21:05:27|NO.65261

元のソースに手を加えた本人です。
せめて、前のスレッドを終わらせてから次のスレッドに移って下さい。


アクションゲームで自機の画像が変えられないです。 http://hsp.tv/play/pforum.php?mode=all&num=64580

#const CHRA_MAX 234 は、catsさんの書かれた通りですが、"234"と言う数値はテストの物であり、
プレイヤーキャラクターしかいない場合は"1"で良いです。

>文化祭で使いたいんですが自力だけでは間に合わなそうです。
>ぜひ力を貸してください。
他人のゲームを自分の作品としてHSPコンテストに出展する事件もありましたし、
ほぼ他人が作ったソースに画像だけ差し替えて、
自分のゲームとして出すという道義的な問題がないようにお願いします。



yu

リンク

2014/9/27(Sat) 11:58:28|NO.65268

ぴょぴょさんやcatsさんで答えが出ているので、個人的に思うこと。

文化祭で公開するということは、パソコンクラブ、もしくはパソコン部での発表だと思うのですが、
部内のメンバー同士であれこれ話し合って作る方がもっと有意義だと思うのです。

部内のPCはしょぼかったけど、あの時は楽しかったなぁ・・(遠い目)



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