"void"についてわからないことがあります。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
airu_741238426729987412356

"void"についてわからないことがあります。

#1

投稿記事 by airu_741238426729987412356 » 15年前

"void"についてわからないことがあります。

-------------main.cpp-----------------

フォーラムルールにあるとおり、ソースコードはcodeタグで囲んでください。 by softya(ソフト屋)

コード:

#include "DxLib.h"

typedef struct { 

int x ; 
int y ; 
int img ; 
int muki ; 
int walk ; 

} ; 

int hantei [3][3] = { 

{ 1,1,1 } , 
{ 0,0,0 } , 
{ 0,1,0 } , 

} ; 

int cannot ( int x , int y , int muki ) { 

if ( muki == 0 ) //上向きなら

if ( hantei [y/32-1][x/32] == 1 ) 

return 1 ; 

if ( muki == 1 ) 

if ( hantei [y/32][x/32-1] == 1 ) 

return 1 ; 

if ( muki == 2 ) 

if ( hantei [y/32+1][x/32] == 1 ) 

return 1 ; 

if ( muki == 3 ) 

if ( hantei [y/32][x/32+1] == 1 ) 

return 1 ; 

return 0 ; 

}

int WINAPI WinMain ( HINSTANCE hInstance , HINSTANCE hPrevInstance , LPSTR lpCmdLine , int nCmdShow ) { 

ChangeWindowMode ( TRUE ) ; 

if ( DxLib_Init () == - 1 ) 

return - 1 ; 

int a ; 
int b ; 

int image[16] ; 
int image_1[1] ; 

char key [256] ; 

ch_t ch ; 

ch.x = 32 ; 
ch.y = 32 ; 

ch.muki = 3 ; 
ch.walk = 0 ; 

SetDrawScreen ( DX_SCREEN_BACK ) ; 

LoadDivGraph ( "dat/char.png" , 16 , 4 , 4 , 32 , 32 , image ) ; 
LoadDivGraph ( "dat/kabe.png" , 1 , 1 , 1 , 32 , 32 , image_1 ) ; 

while ( !ProcessMessage () && !ClearDrawScreen () && !GetHitKeyStateAll ( key ) && !key [KEY_INPUT_ESCAPE] ) { 

for ( a = 0 ; a < 3 ; a++ ) 
for ( b = 0 ; b < 3 ; b++ ) 

if ( hantei [a][b] == 1 ) 

DrawGraph ( b * 32 , a * 32 , image_1[0] , FALSE ) ; 

if ( ch.x % 32 == 0 && ch.y % 32 == 0 ) { 

ch.walk = 1 ; 

if ( key [KEY_INPUT_UP] == 1 ) 

ch.muki = 0 ; 

else if ( key [KEY_INPUT_LEFT] == 1 ) 

ch.muki = 1 ; 

else if ( key [KEY_INPUT_DOWN] == 1 ) 

ch.muki = 2 ; 

else if ( key [KEY_INPUT_RIGHT] == 1 ) 

ch.muki =3 ; 

else 

ch.walk = 0 ; 

if ( cannot ( ch.x , ch.y , ch,muki ) == 1 ) 

ch.walk = 0 ; 

}

if ( ch.walk = 1 ) { 

if ( ch.muki == 0 ) 

ch.y-- ; 

else if ( ch.muki == 1 ) 

ch.x-- ; 

else if ( ch.muki == 2 ) 

ch.y++ ; 

else if ( ch.muki == 3 ) 

ch.x++ ; 

}

ch.img = image [( ch.x % 32 + ch.y % 32 ) / 8 + ch.muki * 4] ; 

DrawGraph ( ch.x , ch.y , ch.img , TRUE ) ; //画像を表示

ScreenFlip () ; 

}

DxLib_End () ; 

return 0 ; 

}
------------------------------------------

上のソースは見たことがありますね。そうです。キャラクターを動かすプログラムで、歩けるところと歩けないところを設定するプログラムです。
そこで、質問なのですが、"void"という関数がありますね。
オープニング、メニュー、ロード画面、マップ、戦闘画面、エンディング、といったことを設定する"void"ですが、先ほどのソースを応用して、オープニングが流れて、メニューになって、ゲーム開始を選択すると、マップに行き、敵に触れて、先頭画面になるプログラムを組みたいのですが、どうしたらいいのでしょうか。いろいろ作りましたが、エラーが出てきてどうしてもできません。それと、オープニングの歌を流して、オープニングが終了したら、"StopSound"関数で終了したりしたいのですが、なぜか、歌が流れなく、そかも、処理がまったく進んでいないようです。voidの関数のなかで、オープニングの歌、終了したらストップ、メニュー、マップ、マップの歌、戦いに入ったら、マップの歌をストップして戦いの歌に切り替える。しかし、歌を流すと処理が止まるとすべてができなくなります。どうすればできますか。お手数ですが、ソースを記入して、解説もお願いします。まだ、C言語については初心者なのでよろしくお願いします。

TEAS TEA

Re: "void"についてわからないことがあります。

#2

投稿記事 by TEAS TEA » 15年前

voidは関数ではないですよ?
引数がない、戻り値がないといったことを表すものです。
関数というのは今回のソースではWinMain があたります。
その中に書いてあるのは処理です。

>>オープニング、メニュー、ロード画面、マップ、戦闘画面、エンディング、といったことを設定する"void"ですが、
どこでこれを聞いたかわかりませんが間違っているかと思います。

int WINAPI WinMain ( HINSTANCE hInstance , HINSTANCE hPrevInstance , LPSTR lpCmdLine , int nCmdShow ) が呼ばれその中のwhileで設定します。
この中でDrawGraph等としていますがこれをシーンごとに状況分けするだけです。
switch~case等でシーンごとに呼び出す処理、表示する画像を分けて下さい。

>>音の件
ソースをみないとよくわかりませんがこちらの館様に詳しい解説が書いてあると思います。

私が言うのもアレなのですが質問が少し読みにくいです。
次回から改行やコードでくくって頂けますと助かります。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: "void"についてわからないことがあります。

#3

投稿記事 by softya(ソフト屋) » 15年前

ご質問を拝見する限り、C言語の知識が足りていないものと思われます。
このサイトはC言語の入門サイトではないので、C言語の文法に関する情報は不十分ですので別にC言語の入門書籍を併読されることをお勧めします。
「お手数ですが、ソースを記入して、解説もお願いします。」とありますが、まず自分で出来るだけ書いてみてください。
それが勉強になりますので、まず自分の出来る限りをやってもらって、それでも分からないところは解説させていただきます。

で、つくられるのはRPG的なものだと思いますが、実のところそこそこの力量を必要とします。
私の日記で書いているRPG講座ですが、C言語がある程度理解出来ないと内容を理解することが難しいと思います。
http://dixq.net/forum/blog.php?u=114&sd=a
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

閉鎖

“C言語何でも質問掲示板” へ戻る