ページ 11

通常文字と選択文字

Posted: 2012年8月05日(日) 16:27
by kiri
C言語初心者です。
最初のタイトル画面を作っています。
通常の文字”恋愛シュミレーションデーム”の下に
選択出来る文字”ゲームスタート”を入れたいのですが、
下のプログラムを打つと何も表示されません。
なぜ、何も表示されないのか、下のプログラムを見て教えて下さい。お願いします。

コード:

#include "DxLib.h"
int Key[256];
int GetHitKeyStateAll_2(int GetHitKeyStateAll_InputKey[]){
	char GetHitKeyStateAll_Key[256];
	GetHitKeyStateAll(GetHitKeyStateAll_Key);
	for(int i=0; i<256; i++ ){
		if(GetHitKeyStateAll_Key[i]==1)GetHitKeyStateAll_InputKey[i]++;
		else                               GetHitKeyStateAll_InputKey[i]=0;
	}
	return 0;
}

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR IpCmdLine, int nCmdShow){
	ChangeWindowMode(TRUE);
	if(DxLib_Init()==-1 || SetDrawScreen(DX_SCREEN_BACK)!=0)return -1;
	
	while(ProcessMessage()==0 && ClearDrawScreen()==0 && GetHitKeyStateAll_2(Key)==0 && Key[KEY_INPUT_ESCAPE]==0){

    int Red;
	Red = GetColor(255,0,0);
	DrawString(0,0,"恋愛シュミレーションゲーム ",Red);

typedef struct{
	int x,y;
	char name[128];
}MenuElement_t;

MenuElement_t MenuElement[2]={
	{80,100,"ゲームスタート"},
	{100,300,"ゲーム終了"},
};
int SelectNum = 0;

while(ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0 ){	

	if(Key[KEY_INPUT_DOWN]==1){
      SelectNum=(SelectNum+1) % 2;
	  for(int i=0; i<2; i++)
	  
	  if(i=SelectNum)       {MenuElement[i].x=80;}
	  else                  {MenuElement[i].x=100;}
	}
	}

	for(int i=0;i<2;i++){
		DrawFormatString(MenuElement[i].x,MenuElement[i].y,GetColor(255,255,255),MenuElement[i].name);
	}

        WaitKey();
		ScreenFlip();
	}

    DxLib_End();
	return 0;
}

Re: 通常文字と選択文字

Posted: 2012年8月05日(日) 16:38
by softya(ソフト屋)
今回は直しておきましたがcodeタグをお使いください。 
フォーラムルールに説明があります。 http://dixq.net/board/board.html
それとインデントが不正確なのでちゃんと整理しましょう。バグのもとです。
「mixcpp/投稿前チェックリスト - PukiWiki」
http://uchan.net/w/index.php?mixcpp%2F% ... 5%B9%A5%C8

あとで内容にもお答えします。

【追記】
プログラム中に全角文字があるのでコンパイルが通りません。投稿したコードの再確認をお願いします。
それと、このサイトのコンテンツである「ゲームプログラミングの館」は理解されていますでしょうか?
http://dixq.net/g/
なにか読まれていない箇所が見受けられます。この機会に全部を勉強されることをおすすめします。

Re: 通常文字と選択文字

Posted: 2012年8月05日(日) 16:44
by へにっくす
やってはいけないルールに触れています。

補足資料.11章 書いてはいけない4つの処理
http://dixq.net/g/h_11.html

まずはこれを解消しましょう。

また
なんだかところどころ全角スペースが含まれている気がしますが、、
インデントもあわせましょうね

Re: 通常文字と選択文字

Posted: 2012年8月05日(日) 17:33
by kiri
インデントの整理をしましたが、結果は相変わらずでした。
一応、プログラムの館も一通り目は通したつもりでしたが、応用することが
出来ないからなのでしょうか?どこが違うのか何が足りないのかわかりません。
僕が今、知りたいのは例えば、文字を表示するプログラムと画像を表示するプログラムの合わせかたです。プログラムの館にはそれぞれいろんなプログラムが掲載されていますが、
そのプログラム同士をくっつける方法が掲載されていません。そこらへんを重点的にご指導お願い致します。

Re: 通常文字と選択文字

Posted: 2012年8月05日(日) 17:37
by softya(ソフト屋)
kiri さんが書きました:インデントの整理をしましたが、結果は相変わらずでした。
一応、プログラムの館も一通り目は通したつもりでしたが、応用することが
出来ないからなのでしょうか?どこが違うのか何が足りないのかわかりません。
僕が今、知りたいのは例えば、文字を表示するプログラムと画像を表示するプログラムの合わせかたです。プログラムの館にはそれぞれいろんなプログラムが掲載されていますが、
そのプログラム同士をくっつける方法が掲載されていません。そこらへんを重点的にご指導お願い致します。
重大な問題はへにっくすさんが指摘している部分にあります。
whileループ中にあるwhileループを抜けないので何も表示されないです。
そもそも、「書いてはいけない4つの処理」に違反した2重のwhileループやwaitkeyは問題なのですが、なぜ抜けないのか考察してみてください。

【補足】初心者の人がこういう問題で行き詰る確率が高いので書いてはいけない処理になっている一面もあります。
まぁ、大体はプログラムがぐちゃぐちゃになるんでやらないほうが良いんですよ。

【更に補足】
組み合わせで悩むのは、その処理の根本的なことを理解できていないからだと思います。
サンプルはひとつの例でしか無いので、いろんな形に応用できます。
メニューを作れって言われた時にサンプルを見ずに作れるぐらい理解していれば応用できるとおもいます。
※ 決して暗記ではないですよ。私がメニューを作ると絶対にDixqさんとは微妙に違うものになりますから。

それと現在引っかかっている問題はC言語の基礎的な所で変数は何時どの関数で更新されるのかと言った問題です。