インべーダーゲーム
Re:インべーダーゲーム
敵がいる位置は
左 中 右
の3種類だけですか?
それとも少しずつ左に移動していき、ある程度左まで来たら右に移動するのでしょうか?
どちらにしても「現在向いている方向」なる変数を用意し、そこに方向を指す数値を入れ、
それに従って計算すればいいと思います。
左 中 右
の3種類だけですか?
それとも少しずつ左に移動していき、ある程度左まで来たら右に移動するのでしょうか?
どちらにしても「現在向いている方向」なる変数を用意し、そこに方向を指す数値を入れ、
それに従って計算すればいいと思います。
#include <stdio.h> #include <windows.h> int main(){ int Dir=1; int i,x=0; while(1){ x += Dir; if( x<0 || x>2){ x = 1; Dir *= -1; } for(i=0; i<x; i++) printf(" "); printf("●\n"); Sleep(500); system("cls"); } } 実行結果 略 後者でもやり方は同じ #include <stdio.h> #include <windows.h> int main(){ int Dir=1; int i,x=0; while(1){ x += Dir; if( x<0 || x>50){ Dir *= -1; } for(i=0; i<x; i++) printf(" "); printf("*\n"); Sleep(1); system("cls"); } } 実行結果 略
Re:インべーダーゲーム
上のプログラムについてわからないところがあるんですけどint i,x=0;でiとx=0を宣言しているのはわかるのですがx += Dir;これのいみがわかりません。
Re:インべーダーゲーム
管理人さんのソースにコメント付けたよ。
#include <stdio.h> #include <windows.h> int main(){ int Dir=1; // *の移動方向 1=右, -1=左 int i; // ループカウンタ int x = 0; // *の現在位置(左端からのX座標) while(1){ x += Dir; // *の位置を更新(移動方向を加算) if( x<0 || x>50){ // *を0<=x<=50の範囲で移動させたいので Dir *= -1; // 範囲を超えたときに方向を逆転させる } for(i=0; i<x; i++) // *の現在位置手前まで空白を入出力する printf(" "); printf("*\n"); // *出力 Sleep(1); // 一瞬待つ system("cls"); // 画面クリア } }
Re:インべーダーゲーム
コメントありがとうございます。なぜか system("cls"); がプログラムに入るとMS-DOSがたくさん出てくるんですが(消えたり出たり)どうしてでしょうか
Re:インべーダーゲーム
>なぜか system("cls"); がプログラムに入るとMS-DOSがたくさん出てくるんですが(消えたり出たり)どうしてでしょうか
良く分かりませんが、これではどうですか
良く分かりませんが、これではどうですか
#include <stdio.h> #include <windows.h> int main(){ int Dir=1; // *の移動方向 1=右, -1=左 int i; // ループカウンタ int x = 0; // *の現在位置(左端からのX座標) while(1){ x += Dir; // *の位置を更新(移動方向を加算) if( x<=0 || x>=50){ // *を0<=x<=50の範囲で移動させたいので Dir *= -1; // 範囲を超えたときに方向を逆転させる } printf(" \r"); for(i=0; i<x; i++) // *の現在位置手前まで空白を入出力する printf(" "); printf("*\r"); // *出力 Sleep(80); // 一瞬待つ } }
Re:インべーダーゲーム
for文で書くなら
if( x<=0 || x>=50){
ここにイコール必要でしたね。
まぁDXライブラリで使うなら関係ないと思いますが。
Re:インべーダーゲーム
サンプルを見て作ってみたんですがなぜか絵が絵画されません。どうすればいいでしょうか。
#include "DxLib.h" char Key[256]; int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){ ChangeWindowMode( TRUE ) ; // ウィンドウモードに変更 if( DxLib_Init() == -1 ) return -1 ; // DXライブラリ初期化処理 SetDrawScreen( DX_SCREEN_BACK ) ; // 描画先を裏画面に設定 int i,x=0; int White = GetColor( 255 , 255 , 255 ) ; // 白色の値を取得 while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]){ //↑メッセージ処理 ↑画面をクリア ↑キーボード入力状態取得 ↑ESCが押されていない for (x>0;x<=50;x++) if(x=50){ for (x=50;x>0;x--); } for(i=0;i<x; i++) ClearDrawScreen(); // 裏画面のデータを全て削除 LoadGraphScreen( x, i, "char.png" , TRUE ) ; //裏画面へ画像を描写 ScreenFlip() ; } // キーの入力待ち(『WaitKey』を使用) DxLib_End() ; // DXライブラリ使用の終了処理 return 0 ; // ソフトの終了 }
Re:インべーダーゲーム
for (x>0;x<=50;x++) if(x=50){ for (x=50;x>0;x--); } for(i=0;i<x; i++)この部分、間違いだらけの上に何をどうしたいのかがさっぱりわからないんですけど。
Re:インべーダーゲーム
根本的に全く理解せずに書いてるのがわかります。
まず、ゲームを作るどうこうより、C言語の基本をしっかり理解する必要があるでしょう。
あてずっぽで書いたらまず期待する動作はしてくれません。
まず、ゲームを作るどうこうより、C言語の基本をしっかり理解する必要があるでしょう。
あてずっぽで書いたらまず期待する動作はしてくれません。
Re:インべーダーゲーム
まず真ん中に行くプログラムを作ったつもりなんですがなぜかエラーが出ます。どうすればいいでしょうかif( x=0 || x=10 || x=20 || x=30 || x=40 || x=50 || x=60 || x=70 || x=80 || x=90 || x=100){x=x+10;}
Re:インべーダーゲーム
C言語の基礎を勉強しなおす必要があると思いますが。
前のプログラムでもそうでしたがif分の条件を書く場合は「X==0」というように=を2個書かないとだめです。
> エラーが出ます。
エラーが出たならエラー内容ぐらい書きましょうよ。
規約読まれましたか?
前のプログラムでもそうでしたがif分の条件を書く場合は「X==0」というように=を2個書かないとだめです。
> エラーが出ます。
エラーが出たならエラー内容ぐらい書きましょうよ。
規約読まれましたか?
Re:インべーダーゲーム
その文はエラーではなくバグです。(コンパイルはちゃんと通るはずです)
条件で一致するようにする書き方は、 = 記号二つです。
その式ではxに値を代入してしまいます。
で、その文だとxは常に20になります。
素直に上の文は
条件で一致するようにする書き方は、 = 記号二つです。
その式ではxに値を代入してしまいます。
で、その文だとxは常に20になります。
素直に上の文は
if ( x <= 100 ) { x += 10; }でいいと思いますよ。
Re:インべーダーゲーム
御津凪さんありがとうございます。
しかし中から右に行くようにしたいのですが、
if (x=110 x <= 209 ) { x += 10; }という意味で左のプログラムを作ったのですが、うまくいかなくて困っています。
2つの条件を表すにはどうすればいいでしょうか?
しかし中から右に行くようにしたいのですが、
if (x=110 x <= 209 ) { x += 10; }という意味で左のプログラムを作ったのですが、うまくいかなくて困っています。
2つの条件を表すにはどうすればいいでしょうか?
Re:インべーダーゲーム
とてもアドバイス受けたいと思ってるように見えないんですが。。
とりあえず人の話聞きましょうよ(よく読みましょうよ)。
上でも書きましたが、あてずっぽで書いてもなんにもなりませんよ。
とりあえず人の話聞きましょうよ(よく読みましょうよ)。
上でも書きましたが、あてずっぽで書いてもなんにもなりませんよ。
Re:インべーダーゲーム
複数の条件を表すには、各条件の間に && あるいは || を書きます。
条件1 && 条件2 で、条件1 かつ 条件2の場合、となり、
条件1 || 条件2 で、条件1 または 条件2の場合、となります。
上記の式は 110 と x の間に何も無いのが原因ですね。
恐らく && だと思います。
あと、また = 記号が一個ですよ…。(VisualBasic使ってました?)
Mist さんの通り、規約読まれましたか?
ひよこさんがどの程度の知識を持っているのか、などがないと、
解決しにくいです。
質問を質問で返されてしまいますし、最善の答えも得られません。
詳しくは規約をよーく読んでください。
条件1 && 条件2 で、条件1 かつ 条件2の場合、となり、
条件1 || 条件2 で、条件1 または 条件2の場合、となります。
上記の式は 110 と x の間に何も無いのが原因ですね。
恐らく && だと思います。
あと、また = 記号が一個ですよ…。(VisualBasic使ってました?)
if ( 110 <= && x < 210 ) { x += 10; }分かりやすく書くならこうですかね。
Mist さんの通り、規約読まれましたか?
ひよこさんがどの程度の知識を持っているのか、などがないと、
解決しにくいです。
質問を質問で返されてしまいますし、最善の答えも得られません。
詳しくは規約をよーく読んでください。
Re:インべーダーゲーム
> if ( 110 <= && x < 210 ) { x += 10; }
x抜けてるよ。
正しくは
if ( 110 <=x && x < 210 ) { x += 10; }
x抜けてるよ。
正しくは
if ( 110 <=x && x < 210 ) { x += 10; }
Re:インべーダーゲーム
すみませんでした。規約読んできました。
自分はインベーダーゲームの敵の動きを作りたいと思っています。自分は最近C言語を勉強しだした初心者です。
ソースはx座標をまず110まで10ずつ増やしそれから220まで11ずつ増やし220から120になるように10ずつ減らし120から11減らし109から10減らし99にして11ずつへらして0にしておなじ動きを繰り返させようと思っています。しかし途中で止まってしまうので今ここに書かせてもらってます。止まらないようにするにはどうすればいいでしょうか?
ソース
自分はインベーダーゲームの敵の動きを作りたいと思っています。自分は最近C言語を勉強しだした初心者です。
ソースはx座標をまず110まで10ずつ増やしそれから220まで11ずつ増やし220から120になるように10ずつ減らし120から11減らし109から10減らし99にして11ずつへらして0にしておなじ動きを繰り返させようと思っています。しかし途中で止まってしまうので今ここに書かせてもらってます。止まらないようにするにはどうすればいいでしょうか?
ソース
#include "DxLib.h" char Key[256]; int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){ ChangeWindowMode( TRUE ) ; // ウィンドウモードに変更 if( DxLib_Init() == -1 ) return -1 ; // DXライブラリ初期化処理 SetDrawScreen( DX_SCREEN_BACK ) ; // 描画先を裏画面に設定 int i; int x; x=0; int White = GetColor( 255 , 255 , 255 ) ; // 白色の値を取得 while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]){ //↑メッセージ処理 ↑画面をクリア ↑キーボード入力状態取得 ↑ESCが押されていない if ( x <= 100 ) { x += 10; }//xが110になるように if ( 110 >=x && x <= 209 ) { x += 11; }//xが110から210になるように座標を11ずつ加算 if ( 210 ==x && x == 130 ) { x -= 10; }//210から120まで10ずつ座標を減らす if ( 120 ==x ) { x -= 11; }//109にする if ( 109 ==x ) { x -= 10; } //99にする if ( 99==x && x ==11 ) { x -= 11; } //99から0になるように11ずつ座標を減らす ClearDrawScreen(); // 裏画面のデータを全て削除 LoadGraphScreen( x, 10, "char.png" , TRUE ) ; //裏画面へ画像を描写 ScreenFlip() ; } // キーの入力待ち(『WaitKey』を使用) DxLib_End() ; // DXライブラリ使用の終了処理 return 0 ; // ソフトの終了 }どうぞよろしくお願いします。
Re:インべーダーゲーム
if ( 210 ==x && x == 130 )//xが210かつ130なら if ( 99==x && x ==11 )//xが99かつ11なら の部分ですが、xが210かつ130なら、ということになるので成り立ちませんよ。 if ( 110 >=x && x <= 209 )//xが110以上かつ209以下なら ここで書かれているように、これと同じことをすればできると思います。 if文は もし~が真(成立している)ならば...する ということです。 if(~){ ... }御津凪様が書いてくださったことをもう一度よく読んで、
理解したほうが良いと思います。
僕も3か月前までは全くプログラムが分かりませんでした。
(今も分からないことだらけですが・・・;)
プログラムは楽しくすれば早く身に付きますよ。
Re:インべーダーゲーム
まずC言語の基本の学習から始められては?
条件式の書き方の基本も分からずにやっていても時間の無駄だと思いますけど。
以下のページの23章ぐらいまでやれば簡単なプログラムを組む分には困らないようにはなると思います。
http://www.kumei.ne.jp/c_lang/index_c.html
条件式の書き方の基本も分からずにやっていても時間の無駄だと思いますけど。
以下のページの23章ぐらいまでやれば簡単なプログラムを組む分には困らないようにはなると思います。
http://www.kumei.ne.jp/c_lang/index_c.html
Re:インべーダーゲーム
いろいろ考えたんですけどなぜか真ん中で止まってしまうのですが。どこで値がおかしくなっているのでしょうか?
if ( x <= 100 ) { x += 10; }//xが110になるように if ( 110 <=x && x <= 209 ) { x += 1; }//xが110から210になるように座標を11ずつ加算 // if( 210>=x && x>=120 && x==210){ x -=-10;} if( 210>=x && x>=120 && x==200){ x -=-10;} if( 210>=x && x>=120 && x==190){ x -=-10;} if( 210>=x && x>=120 && x==180){ x -=-10;} if( 210>=x && x>=120 && x==170){ x -=-10;} if( 210>=x && x>=120 && x==160){ x -=-10;} if( 210>=x && x>=120 && x==150){ x -=-10;} if( 210>=x && x>=120 && x==140){ x -=-10;} if( 210>=x && x>=120 && x==130){ x -=-10;} // if( 210>=x && x>=120 && x==120){ x -=-11;} if( 210>=x && x>=109 && x==109){ x -=-10;} // if( 210>=x && x>=11 && x==99){ x -=-11;} if( 210>=x && x>=11 && x==88){ x -=-11;} if( 210>=x && x>=11 && x==77){ x -=-11;} if( 210>=x && x>=11 && x==66){ x -=-11;} if( 210>=x && x>=11 && x==55){ x -=-11;} if( 210>=x && x>=11 && x==44){ x -=-11;} if( 210>=x && x>=11 && x==33){ x -=-11;} if( 210>=x && x>=11 && x==22){ x -=-11;} if( 210>=x && x>=11 && x==11){ x -=-11;}どこがおかしいのでしょうか。
Re:インべーダーゲーム
> if( 210>=x && x>=120 && x==210){ x -=-10;}
これではxが210の時しかx-=-10;が実行されませんね。
あと、x-=-10;はx+=10;と同じです。
これではxが210の時しかx-=-10;が実行されませんね。
あと、x-=-10;はx+=10;と同じです。
Re:インべーダーゲーム
if(x==210)
と
if( 210>=x && x>=120 && x==210)
が結果的に等価であることは理解できますか?
理解できないようであれば、http://www.kumei.ne.jp/c_lang/index.html等でみっちり基礎から勉強しなおす事をお薦めします。
と
if( 210>=x && x>=120 && x==210)
が結果的に等価であることは理解できますか?
理解できないようであれば、http://www.kumei.ne.jp/c_lang/index.html等でみっちり基礎から勉強しなおす事をお薦めします。
Re:インべーダーゲーム
問題はCについての知識が少ないという事じゃないと思うんですが。
まぁそれはいいとして、言葉がわからないなら辞書で調べるなりしたらどうですか。
結果的に等しいと書いてあったらわかるんでしょうか。
まぁそれはいいとして、言葉がわからないなら辞書で調べるなりしたらどうですか。
結果的に等しいと書いてあったらわかるんでしょうか。
Re:インべーダーゲーム
では、
「Xが10以上100以下であり、かつ100と等しい時」
と
「Xが100と等しい時」
という条件式は結果的に同じ効果をもたらすという事は理解できますか?
「Xが10以上100以下であり、かつ100と等しい時」
と
「Xが100と等しい時」
という条件式は結果的に同じ効果をもたらすという事は理解できますか?
Re:インべーダーゲーム
えっとね、算数に例えると足し算も引き算も出来ないような人に面積の計算の仕方を理解させることは出来ないでしょ。
今のあなたの実力では、自らオリジナルなプログラムを書くことは無理ですからアドバイスどおり基礎の勉強から始めてください。
今のあなたの実力では、自らオリジナルなプログラムを書くことは無理ですからアドバイスどおり基礎の勉強から始めてください。