自作のスロットが動かない

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
dast
記事: 41
登録日時: 13年前

自作のスロットが動かない

#1

投稿記事 by dast » 13年前

こんにちは。スロットのプログラムを作ってみたのですが画像が表示されません。
ソースは次の通りです。

コード:

#include "DxLib.h"

int Key[256];//キーが押されているフレーム数を格納する

// キーの入力状態を更新する
int gpUpdateKey(){
	char tmpKey[256]; // 現在のキーの入力状態を格納する
	GetHitKeyStateAll( tmpKey ); // 全てのキーの入力状態を得る
	for( int i=0; i<256; i++ ){ 
		if( tmpKey[i] != 0 ){ // i番のキーコードに対応するキーが押されていたら
			Key[i]++;     // 加算
		} else {              // 押されていなければ
			Key[i] = 0;   // 0にする
		}
	}
	return 0;
}

int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
        ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen( DX_SCREEN_BACK ); //ウィンドウモード変更と初期化と裏画面設定
          int S[2][7];//スロットの出目
          int x;
		  int score,game;//スコア,回転フラグ
		  int r;//各縦列ストップスイッチ
		  int R;//ドラストップ時処理用
          int i,j;//ループ用関数
		  int slot;//画像格納:スロットボディ
		  int p7,phz,ptk,pns,pnmz,pou,pei,ptm,pdhz,pd7;//画像格納:パネルー{7、富士、タカ、ナス、ナマズ、扇、エイ、緑玉、偽富士、偽}
		  //int D0[9],D1[9],D2[9],D3[9],D4[9],D5[9],D6[9],D7[9];
		  //int DA0[9],DA1[9],DA2[9],DA3[9],DA4[9],DA5[9],DA6[9],DA7[9];
		  int P[2][7];

		  x=0;
		  score=3;
		  game=0;
		  r=0;

		  slot = LoadGraph("img/スロットマシン.png");

		  p7 = LoadGraph("img/panel/セブン.png");
		  phz = LoadGraph("img/panel/富士.png");
		  ptk = LoadGraph("img/panel/鷹.png");
		  pns = LoadGraph("img/panel/なすび.png");
		  pnmz = LoadGraph("img/panel/ナマズ.png");
		  pou = LoadGraph("img/panel/扇.png");
		  pei = LoadGraph("img/panel/エイ.png");
		  ptm = LoadGraph("img/panel/緑丸.png");
		  pdhz = LoadGraph("img/panel/偽富士.png");
		  pd7 = LoadGraph("img/panel/偽7.png");

		  int D0[10]={pei,p7,pns,pou,pdhz,ptm,pd7,ptk,pnmz,phz};
		  int D1[10]={phz,pd7,pou,pnmz,pdhz,ptm,p7,ptk,pns,pei};
		  int D2[10]={ptm,p7,pou,ptk,pns,pdhz,pd7,pei,pnmz,phz};
		  int D3[10]={pnmz,pd7,ptk,phz,pou,pei,p7,ptm,pns,pdhz};
		  int D4[10]={pdhz,p7,ptm,phz,pou,pns,pd7,ptk,pnmz,pei};
		  int D5[10]={ptk,pd7,pdhz,pou,pnmz,pei,p7,pns,ptm,phz};
		  int D6[10]={pou,p7,ptk,phz,ptm,pns,pd7,pei,pnmz,pdhz};
		  int D7[10]={pns,pd7,phz,pei,ptm,pnmz,p7,ptk,pdhz,pou};

		  int DA0[10]={7,1,4,6,9,8,10,3,5,2};
		  int DA1[10]={2,10,6,5,9,8,1,3,4,7};
		  int DA2[10]={8,1,6,3,4,9,10,7,5,2};
		  int DA3[10]={5,10,3,2,6,7,1,8,4,9};
		  int DA4[10]={9,1,8,2,6,4,10,3,5,7};
		  int DA5[10]={3,10,9,6,5,7,1,4,8,2};
		  int DA6[10]={6,1,3,2,8,4,10,7,5,9};
		  int DA7[10]={4,10,2,7,8,5,1,3,9,6};

        // while(裏画面を表画面に反映, メッセージ処理, 画面クリア, キーの更新)
        while( ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0 && gpUpdateKey()==0 ){
			for(i=0;i>3;i++){
				for(j=0;j>8;j++){
					S[i][j]=(x+i)%10;
				}
			}
			if(Key[KEY_INPUT_A]==1&&game==0){
				score-=3;
				game=1;
			}
			else if(Key[KEY_INPUT_A]==1&&game==1&&r==0){
				R=x;
				for(i=0;i>3;i++){
					S[i][0]=(R+i)%10;
					r+=1;
				}
			}
			else if(Key[KEY_INPUT_A]==1&&game==1&&r==1){
				R=x;
				for(i=0;i>3;i++){
					S[i][1]=(R+i)%10;
					r+=1;
				}
			}
			else if(Key[KEY_INPUT_A]==1&&game==1&&r==2){
				R=x;
				for(i=0;i>3;i++){
					S[i][2]=(R+i)%10;
					r+=1;
				}
			}
			else if(Key[KEY_INPUT_A]==1&&game==1&&r==3){
				R=x;
				for(i=0;i>3;i++){
					S[i][3]=(R+i)%10;
					r+=1;
				}
			}
			else if(Key[KEY_INPUT_A]==1&&game==1&&r==4){
				R=x;
				for(i=0;i>3;i++){
					S[i][4]=(R+i)%10;
					r+=1;
				}
			}
			else if(Key[KEY_INPUT_A]==1&&game==1&&r==5){
				R=x;
				for(i=0;i>3;i++){
					S[i][5]=(R+i)%10;
					r+=1;
				}
			}
			else if(Key[KEY_INPUT_A]==1&&game==1&&r==6){
				R=x;
				for(i=0;i>3;i++){
					S[i][6]=(R+i)%10;
					r+=1;
				}
			}
			else if(Key[KEY_INPUT_A]==1&&game==1&&r==7){
				R=x;
				for(i=0;i>3;i++){
					S[i][7]=(R+i)%10;
					r+=1;
				}
				if(DA0[S[0][0]]=DA1[S[0][1]]=DA2[S[0][2]]=DA3[S[0][3]]=DA4[S[0][4]]=DA5[S[0][5]]=DA6[S[0][6]]=DA7[S[0][7]]){
					score+=6;
				}
				if(DA0[S[1][0]]=DA1[S[1][1]]=DA2[S[1][2]]=DA3[S[1][3]]=DA4[S[1][4]]=DA5[S[1][5]]=DA6[S[1][6]]=DA7[S[1][7]]){
					score+=6;
				}
				if(DA0[S[2][0]]=DA1[S[2][1]]=DA2[S[2][2]]=DA3[S[2][3]]=DA4[S[2][4]]=DA5[S[2][5]]=DA6[S[2][6]]=DA7[S[2][7]]){
					score+=6;
				}
			}
			else if(Key[KEY_INPUT_A]==1&&game==1&&r==8&&score>0){
				game=0;
				x=0;
				for(i=0;i>3;i++){
					for(j=0;j>8;j++){
						S[i][j]=x+i;
					}
				}
			}
			if(game==1){
				x+=1;
			}
		}

		for(i=0;i>3;i++){
			for(j=0;j>8;j++){
				DrawGraph(36,107+56*i,D0[S[i][j]],TRUE);
			}
		}
		DrawGraph(0,0,slot,TRUE);

        DxLib_End(); // DXライブラリ終了処理
        return 0;
} 
プログラムの構成は10種類の変数を用意してそれぞれにパネルの画像を入れた後、ドラの役目を持たせたD0~D7行列を用意してその中に変数を入れた後、当たり判定を出すためのDA0~DA7行列にパネルに応じた数字を入れ、1フレーム毎に増加するx変数をAボタンで止めさせて、xの値に応じたD0~D7画像を表示し、DA0~DA7のxで示した場所の数字が同じなら辺りを出すという仕組みになっています。
ところが実際に起動させてみると何の画像も表示されません。一体どうしたら画像が表示されるようになるでしょうか?

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

Re: 自作のスロットが動かない

#2

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

描画処理が描画ループ外にありましたので直しました。こういうミスをしないためにもインデントは正確に。あと無駄だと思われる条件処理を縮めて見ました。同じような処理が多い時は関数化するか共通化できないか考えましょう。
ただし、動作試験できていないのでバグはあるかも知れません。コメントを書いてもらうと回答者もコードを解析しやすいです。

コード:

#include "DxLib.h"

int Key[256];//キーが押されているフレーム数を格納する

// キーの入力状態を更新する
int gpUpdateKey(){
	char tmpKey[256]; // 現在のキーの入力状態を格納する
	GetHitKeyStateAll( tmpKey ); // 全てのキーの入力状態を得る
	for( int i=0; i<256; i++ ){ 
		if( tmpKey[i] != 0 ){ // i番のキーコードに対応するキーが押されていたら
			Key[i]++;     // 加算
		} else {              // 押されていなければ
			Key[i] = 0;   // 0にする
		}
	}
	return 0;
}

int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
	ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen( DX_SCREEN_BACK ); //ウィンドウモード変更と初期化と裏画面設定
	int S[2][7];//スロットの出目
	int x;
	int score,game;//スコア,回転フラグ
	int r;//各縦列ストップスイッチ
	int R;//ドラストップ時処理用
	int i,j;//ループ用関数
	int slot;//画像格納:スロットボディ
	int p7,phz,ptk,pns,pnmz,pou,pei,ptm,pdhz,pd7;//画像格納:パネルー{7、富士、タカ、ナス、ナマズ、扇、エイ、緑玉、偽富士、偽}
	//int D0[9],D1[9],D2[9],D3[9],D4[9],D5[9],D6[9],D7[9];
	//int DA0[9],DA1[9],DA2[9],DA3[9],DA4[9],DA5[9],DA6[9],DA7[9];
	int P[2][7];

	x=0;
	score=3;
	game=0;
	r=0;

	slot = LoadGraph("img/スロットマシン.png");

	p7 = LoadGraph("img/panel/セブン.png");
	phz = LoadGraph("img/panel/富士.png");
	ptk = LoadGraph("img/panel/鷹.png");
	pns = LoadGraph("img/panel/なすび.png");
	pnmz = LoadGraph("img/panel/ナマズ.png");
	pou = LoadGraph("img/panel/扇.png");
	pei = LoadGraph("img/panel/エイ.png");
	ptm = LoadGraph("img/panel/緑丸.png");
	pdhz = LoadGraph("img/panel/偽富士.png");
	pd7 = LoadGraph("img/panel/偽7.png");

	int D0[10]={pei,p7,pns,pou,pdhz,ptm,pd7,ptk,pnmz,phz};
	int D1[10]={phz,pd7,pou,pnmz,pdhz,ptm,p7,ptk,pns,pei};
	int D2[10]={ptm,p7,pou,ptk,pns,pdhz,pd7,pei,pnmz,phz};
	int D3[10]={pnmz,pd7,ptk,phz,pou,pei,p7,ptm,pns,pdhz};
	int D4[10]={pdhz,p7,ptm,phz,pou,pns,pd7,ptk,pnmz,pei};
	int D5[10]={ptk,pd7,pdhz,pou,pnmz,pei,p7,pns,ptm,phz};
	int D6[10]={pou,p7,ptk,phz,ptm,pns,pd7,pei,pnmz,pdhz};
	int D7[10]={pns,pd7,phz,pei,ptm,pnmz,p7,ptk,pdhz,pou};

	int DA0[10]={7,1,4,6,9,8,10,3,5,2};
	int DA1[10]={2,10,6,5,9,8,1,3,4,7};
	int DA2[10]={8,1,6,3,4,9,10,7,5,2};
	int DA3[10]={5,10,3,2,6,7,1,8,4,9};
	int DA4[10]={9,1,8,2,6,4,10,3,5,7};
	int DA5[10]={3,10,9,6,5,7,1,4,8,2};
	int DA6[10]={6,1,3,2,8,4,10,7,5,9};
	int DA7[10]={4,10,2,7,8,5,1,3,9,6};

	// while(裏画面を表画面に反映, メッセージ処理, 画面クリア, キーの更新)
	while( ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0 && gpUpdateKey()==0 ){
		for(i=0;i>3;i++){
			for(j=0;j>8;j++){
				S[i][j]=(x+i)%10;
			}
		}
		if(Key[KEY_INPUT_A]==1&&game==0){
			score-=3;
			game=1;
		}
		else if( Key[KEY_INPUT_A]==1 && game==1 ) {
			if( r==8 ) { 
				if( score>0 ) {
					game=0;
					x=0;
					for(i=0;i>3;i++){
						for(j=0;j>8;j++){
							S[i][j]=x+i;
						}
					}
				}
			} else {
				R=x;
				for(i=0;i>3;i++){
					S[i][r]=(R+i)%10;
					r+=1;
				}
				if( r==7 ) {
					if(DA0[S[0][0]]=DA1[S[0][1]]=DA2[S[0][2]]=DA3[S[0][3]]=DA4[S[0][4]]=DA5[S[0][5]]=DA6[S[0][6]]=DA7[S[0][7]]){
						score+=6;
					}
					if(DA0[S[1][0]]=DA1[S[1][1]]=DA2[S[1][2]]=DA3[S[1][3]]=DA4[S[1][4]]=DA5[S[1][5]]=DA6[S[1][6]]=DA7[S[1][7]]){
						score+=6;
					}
					if(DA0[S[2][0]]=DA1[S[2][1]]=DA2[S[2][2]]=DA3[S[2][3]]=DA4[S[2][4]]=DA5[S[2][5]]=DA6[S[2][6]]=DA7[S[2][7]]){
						score+=6;
					}
				}
			}
		}
		if(game==1){
			x+=1;
		}
		//	描画
		for(i=0;i>3;i++){
			for(j=0;j>8;j++){
				DrawGraph(36,107+56*i,D0[S[i][j]],TRUE);
			}
		}
		DrawGraph(0,0,slot,TRUE);
	}
	DxLib_End(); // DXライブラリ終了処理
	return 0;
}
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

dast
記事: 41
登録日時: 13年前

Re: 自作のスロットが動かない

#3

投稿記事 by dast » 13年前

訂正していただきありがとうございます。
早速訂正後のプログラムを動作させてみたところ、slotに登録したスロットマシン.pngは無事表示されたのですがp7,phz,ptk,…,pd7に登録したスロットのパネルが表示されず、表示されるはずのところには何も描画されていない領域が表示されます。
Logを見る限りでは画像はちゃんと読み込まれているみたいなので、やはりこれらの変数を扱っている51~58行目で何かが起きていると思われます。画像を登録した変数でint行列を作ってはいけない決まりでもあるのでしょうか?ご指導よろしくお願いします。

あと画像を表示する座標を間違えていたのに気づいて116行目を

コード:

                DrawGraph(36+72*j,107+56*i,D0[S[i][j]],TRUE);
と直しましたが別に変化はありませんでした。

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

Re: 自作のスロットが動かない

#4

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

変数の状況をprintfデバッグ法でしらべてみてください。
「簡単RPG講座 番外編。 デバッグ入門 • C言語交流フォーラム ~ mixC++ ~」
http://dixq.net/forum/blog.php?u=114&b=982

とりあえず絵が無いので確認できないですが、

コード:

		for(i=0;i>3;i++){
			for(j=0;j>8;j++){
は条件が逆でループが回りません。

コード:

		for(i=0;i<3;i++){
			for(j=0;j<8;j++){
が正しいです。
ただし、int S[2][7];では配列要素が足らないのでint S[3][8];が正しいはずです。
3ラインで8つの図柄が見えている状況って事で良いんですよね。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

dast
記事: 41
登録日時: 13年前

Re: 自作のスロットが動かない

#5

投稿記事 by dast » 13年前

ご指摘された所を直したらパネルが表示されるようになりました。ありがとうございます
しかし、今度は二回目以降Aボタンを押すと止まるはずのパネルの変化が止まらなくて困っています。
S[j]をリアルタイムで表示してみると、一回Aを押すとS[j]の回転が始まるのはいいのですが、もう一度Aを押してもS[j]が止まりません。98~102行目の処理の仕方に問題があるのだと思いますが、いまいちどういう処理をしたらいいのかよく分かりません。
今の段階の処理は
Aを押したときのxの値をRに記録する→S[r]=(R+i)%10;としてr行目の値を固定する→次の行に進む
となっているのですが…。
ご教授よろしくお願いします

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

Re: 自作のスロットが動かない

#6

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

元のコードのままの処理だと思うのですが、r==8でscore>0の時にしか停止できません。この条件で良いのでしょうか?
絵柄がないのでは私にはこれ以上のイメージが湧きません。それとスロットにも詳しくないのでやりたい事も実はよく分かっていません。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

non
記事: 1097
登録日時: 14年前

Re: 自作のスロットが動かない

#7

投稿記事 by non » 13年前

xという変数が、何の目的に使われているのか説明してください。
また、xの範囲は?
non

dast
記事: 41
登録日時: 13年前

Re: 自作のスロットが動かない

#8

投稿記事 by dast » 13年前

>>softyaさん
私がイメージしていたのはgame=0,r=0から始まって、Aを押すとS[j](0<=i<=2,0<=j<=7)の値とスロットの絵柄がxの値に従って回転し、Aを押すとS[1][r],S[2][r],S[3][r]の値が固定されてr行目の絵柄が固定された後にr+1となり、これがr==7となったらS[1][0]~S[1][7],S[2][0]~S[2][7],S[3][0]~S[3][7]の値がそろっているかを判定してそろっていたらScore+=6をして、もう一度Aを押すとまたgame=0,r=0に戻るというものを想像していたのですが…。説明不足で申し訳ありませんでした。
>>nonさん
xはスロットの絵柄を回転させるための変数です。なので+=1し続けるということ以外はあまり考えていません。

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

Re: 自作のスロットが動かない

#9

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

ちょっとややこしいので時間がとれたときに考えてみます。
ダミーでも良いので絵柄を用意してもらえると、こちらで検証できるのですが・・・。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

dast
記事: 41
登録日時: 13年前

Re: 自作のスロットが動かない

#10

投稿記事 by dast » 13年前

すみません、スロットを右から順番に止める事については自己解決しました。
ソースは次の通りです。

コード:

#include "DxLib.h"

#define SCORE 9//初期スコア
 
int Key[256];//キーが押されているフレーム数を格納する
 
// キーの入力状態を更新する
int gpUpdateKey(){
    char tmpKey[256]; // 現在のキーの入力状態を格納する
    GetHitKeyStateAll( tmpKey ); // 全てのキーの入力状態を得る
    for( int i=0; i<256; i++ ){ 
        if( tmpKey[i] != 0 ){ // i番のキーコードに対応するキーが押されていたら
            Key[i]++;     // 加算
        } else {              // 押されていなければ
            Key[i] = 0;   // 0にする
        }
    }
    return 0;
}
 
int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
    ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen( DX_SCREEN_BACK ); //ウィンドウモード変更と初期化と裏画面設定
    int S[3][8];//スロットの出目
    int x;
    int score,game;//スコア,回転フラグ
    int r;//各縦列ストップスイッチ
    int R;//ドラストップ時処理用
    int i,j;//ループ用関数
    int slot;//画像格納:スロットボディ
	int scoreboard;//画像格納:スコアボード
    int p7,phz,ptk,pns,pnmz,pou,pei,ptm,pdhz,pd7;//画像格納:パネルー{7、富士、タカ、ナス、ナマズ、扇、エイ、緑玉、偽富士、偽}
    //int D0[9],D1[9],D2[9],D3[9],D4[9],D5[9],D6[9],D7[9];
    //int DA0[9],DA1[9],DA2[9],DA3[9],DA4[9],DA5[9],DA6[9],DA7[9];
    int P[2][7];

	int col=GetColor(34,177,76);
 
    x=0;
    score=SCORE;
    game=0;
    r=0;

	scoreboard = LoadGraph("img/board/スコアボード.png");
 
    slot = LoadGraph("img/スロットマシン.png");
 
    p7 = LoadGraph("img/panel/セブン.png");
    phz = LoadGraph("img/panel/富士.png");
    ptk = LoadGraph("img/panel/鷹.png");
    pns = LoadGraph("img/panel/なすび.png");
    pnmz = LoadGraph("img/panel/ナマズ.png");
    pou = LoadGraph("img/panel/扇.png");
    pei = LoadGraph("img/panel/エイ.png");
    ptm = LoadGraph("img/panel/緑丸.png");
    pdhz = LoadGraph("img/panel/偽富士.png");
    pd7 = LoadGraph("img/panel/偽7.png");
 
    int D0[10]={pei,p7,pns,pou,pdhz,ptm,pd7,ptk,pnmz,phz};
    int D1[10]={phz,pd7,pou,pnmz,pdhz,ptm,p7,ptk,pns,pei};
    int D2[10]={ptm,p7,pou,ptk,pns,pdhz,pd7,pei,pnmz,phz};
    int D3[10]={pnmz,pd7,ptk,phz,pou,pei,p7,ptm,pns,pdhz};
    int D4[10]={pdhz,p7,ptm,phz,pou,pns,pd7,ptk,pnmz,pei};
    int D5[10]={ptk,pd7,pdhz,pou,pnmz,pei,p7,pns,ptm,phz};
    int D6[10]={pou,p7,ptk,phz,ptm,pns,pd7,pei,pnmz,pdhz};
    int D7[10]={pns,pd7,phz,pei,ptm,pnmz,p7,ptk,pdhz,pou};
 
    int DA0[10]={7,1,4,6,9,8,0,3,5,2};
    int DA1[10]={2,0,6,5,9,8,1,3,4,7};
    int DA2[10]={8,1,6,3,4,9,0,7,5,2};
    int DA3[10]={5,0,3,2,6,7,1,8,4,9};
    int DA4[10]={9,1,8,2,6,4,0,3,5,7};
    int DA5[10]={3,0,9,6,5,7,1,4,8,2};
    int DA6[10]={6,1,3,2,8,4,0,7,5,9};
    int DA7[10]={4,0,2,7,8,5,1,3,9,6};
 
    // while(裏画面を表画面に反映, メッセージ処理, 画面クリア, キーの更新)
    while( ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0 && gpUpdateKey()==0 ){
        for(i=0;i<3;i++){
            for(j=r;j<8;j++){
                S[i][j]=(x+i)%10;
            }
        }
        if(Key[KEY_INPUT_A]==1&&game==0){
            score-=3;
            game=1;
        }
		else if( Key[KEY_INPUT_A]==1 && game==1 && r<=7 ){
			r+=1;
			if(r==8){
				/*//デバッグ用
				DA0[S[0][0]]=DA1[S[0][1]]=DA2[S[0][2]]=DA3[S[0][3]]=DA4[S[0][4]]=DA5[S[0][5]]=DA6[S[0][6]]=DA7[S[0][7]]=1; 
				DA0[S[1][0]]=DA1[S[1][1]]=DA2[S[1][2]]=DA3[S[1][3]]=DA4[S[1][4]]=DA5[S[1][5]]=DA6[S[1][6]]=DA7[S[1][7]]=1; 
				DA0[S[2][0]]=DA1[S[2][1]]=DA2[S[2][2]]=DA3[S[2][3]]=DA4[S[2][4]]=DA5[S[2][5]]=DA6[S[2][6]]=DA7[S[2][7]]=1; 
				*/
				if(DA0[S[0][0]]=DA1[S[0][1]]=DA2[S[0][2]]=DA3[S[0][3]]=DA4[S[0][4]]=DA5[S[0][5]]=DA6[S[0][6]]=DA7[S[0][7]]){
					score+=6;
				}
				if(DA0[S[1][0]]=DA1[S[1][1]]=DA2[S[1][2]]=DA3[S[1][3]]=DA4[S[1][4]]=DA5[S[1][5]]=DA6[S[1][6]]=DA7[S[1][7]]){
					score+=6;
				}
				if(DA0[S[2][0]]=DA1[S[2][1]]=DA2[S[2][2]]=DA3[S[2][3]]=DA4[S[2][4]]=DA5[S[2][5]]=DA6[S[2][6]]=DA7[S[2][7]]){
					score+=6;
				}
			}
		}
		else if( Key[KEY_INPUT_A]==1 && game==1 && r==8 ){
			if(score>0){
				r=0;
				game=0;
			}
		}

        if(game==1){
            x+=1;
        }
        //  描画
        for(i=0;i<3;i++){
            for(j=0;j<8;j++){
                DrawGraph(36+72*j,107+56*i,D0[S[i][j]],TRUE);
            }
        }
        DrawGraph(0,0,slot,TRUE);
		DrawGraph(34,21,scoreboard,TRUE);
		DrawFormatString(207,29,col,"%d",score);
		for(i=0;i<3;i++){
			for(j=0;j<8;j++){
				DrawFormatString(42+20*j,273+50*i,col,"%d",S[i][j]);
			}
		}
		for(i=0;i<10;i++){
				DrawFormatString(242+10*i,273,col,"%d",DA0[i]);
				DrawFormatString(242+10*i,293,col,"%d",DA1[i]);
				DrawFormatString(242+10*i,313,col,"%d",DA2[i]);
				DrawFormatString(242+10*i,333,col,"%d",DA3[i]);
				DrawFormatString(242+10*i,353,col,"%d",DA4[i]);
				DrawFormatString(242+10*i,373,col,"%d",DA5[i]);
				DrawFormatString(242+10*i,393,col,"%d",DA6[i]);
				DrawFormatString(242+10*i,413,col,"%d",DA7[i]);
		}
		for(i=0;i<3;i++){
			for(j=0;j<8;j++){
				DrawFormatString(380,273+20*i,col,"%d",DA0[S[i][0]]);
				DrawFormatString(390,273+20*i,col,"%d",DA1[S[i][1]]);
				DrawFormatString(400,273+20*i,col,"%d",DA2[S[i][2]]);
				DrawFormatString(410,273+20*i,col,"%d",DA3[S[i][3]]);
				DrawFormatString(420,273+20*i,col,"%d",DA4[S[i][4]]);
				DrawFormatString(430,273+20*i,col,"%d",DA5[S[i][5]]);
				DrawFormatString(440,273+20*i,col,"%d",DA6[S[i][6]]);
				DrawFormatString(450,273+20*i,col,"%d",DA7[S[i][7]]);
			}
		}
		DrawFormatString(42,423,col,"%d",r);
    }
    DxLib_End(); // DXライブラリ終了処理
    return 0;
}
ただ、ここでまた新たな問題が起こりまして…
最後の列のスロットを止めて当たりを判定する時に、上段の当たりの条件で使っている変数DA0[S[0][0]],DA1[S[0][1]],DA2[S[0][2]],DA3[S[0][3]],DA4[S[0][4]],DA5[S[0][5]],DA6[S[0][6]],DA7[S[0][7]]のうち、DA0[S[0][0]]~DA6[S[0][6]]の値に差し替えられて強制的に当たりになってしまいます。中断と下段でも同じ事が起きてしまいます。これを普通に判定するにはどうしたらいいのでしょうか?

あと、このプログラムに使っている画像を貼っておきます。検証よろしくお願いします。
添付ファイル
1ドラ.png
スロットのパネルをまとめたものです
1ドラ.png (4.47 KiB) 閲覧数: 4461 回
スコアボード.png
スコアボード.png (56.71 KiB) 閲覧数: 4461 回
スロットマシン.png

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

Re: 自作のスロットが動かない

#11

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

ここの部分が条件式ではなく代入式になっています。

コード:

                if(DA0[S[0][0]]=DA1[S[0][1]]=DA2[S[0][2]]=DA3[S[0][3]]=DA4[S[0][4]]=DA5[S[0][5]]=DA6[S[0][6]]=DA7[S[0][7]]){
                    score+=6;
                }
                if(DA0[S[1][0]]=DA1[S[1][1]]=DA2[S[1][2]]=DA3[S[1][3]]=DA4[S[1][4]]=DA5[S[1][5]]=DA6[S[1][6]]=DA7[S[1][7]]){
                    score+=6;
                }
                if(DA0[S[2][0]]=DA1[S[2][1]]=DA2[S[2][2]]=DA3[S[2][3]]=DA4[S[2][4]]=DA5[S[2][5]]=DA6[S[2][6]]=DA7[S[2][7]]){
                    score+=6;
                }
ちなみに、DA0[S[0][0]]==DA1[S[0][1]]==DA2[S[0][2]]と言うような条件式は作れませんので、
DA0[S[0][0]]==DA1[S[0][1]] &&DA1[S[0][1]]==DA2[S[0][2]]
と言う風に展開して下さい。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

non
記事: 1097
登録日時: 14年前

Re: 自作のスロットが動かない

#12

投稿記事 by non » 13年前

D0からD7まで8個のドラムの絵柄が作られているようですが、
DrawGraph(36+72*j,107+56*i,D0[S[j]],TRUE);
がD0だけしか使われていないようですが、良いのですか?
non

閉鎖

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