• ベストアンサー

c言語

c++初心者がテトリスもどきを作ろうと思っているのですが、 mainで上からブロックを落としながら、画面の下の方でそのブロックを置く場所を移動できるようにしたいのですが、ブロックをランダムに落とすことができません。。 しかもブロックが下りてきている間は移動操作ができません。。 移動する関数を作ってよびだしても、移動する操作を無限ループにしているので、今度はブロックが落ちてきません。。 解決策はありますか?説明がわかりにくくて申し訳ないです。

noname#193530
noname#193530

質問者が選んだベストアンサー

  • ベストアンサー
  • yama1718
  • ベストアンサー率41% (670/1618)
回答No.2

この3つくらいの方法があるかな。 1-両方の処理を短く分割して、相互に呼び出してループする。 2-キー入力による割り込みや、タイマー割り込みなどを使う。 3-マルチスレッドで両方を並列動作させる。 2や3に関しては動作環境やOS(MS-DOS,Windows,Linux)によりプログラムやできる事が違いますので、システムやAPI関数をよく調べる事。 リアルタイム性のアクションゲームのプログラムには色々なテクニックが必要です、そういう事はゲームプログラムの入門書を読めば学べるでしょう。 でも初心者がいきなり作るのは荷が重いんじゃないかなと思います。

noname#193530
質問者

お礼

回答ありがとうございます!荷が重いですかね・・頑張ってみます・・(^_^;)

その他の回答 (1)

  • kamikami30
  • ベストアンサー率24% (812/3335)
回答No.1

開発者は自力で調べない人には反応冷ややかですよ。 一度でも検索しましたか?

noname#193530
質問者

お礼

回答ありがとうございます! 調べてみるとたくさんの例があったのですが、理解できず・・しかも自分で途中まで作ってしまっていたので知りたいところだけ質問することにしました((+_+))

関連するQ&A

  • C言語について

    C言語を少しかじっている初心者です。こんな私が何故か今年会社の新人にプログラミングを指導することになりまして。。。ですが、あまりにもわからないことが多すぎるので、どなたかお助けください。 質問。 (1)C言語で開発されるシステムって実際にはどういうものが多いのでしょうか。 (2)CはVBなどのように、フォーム昨日がないですが、操作画面はどうやって作るのでしょうか。 (3)単体プログラムを結合をさせる時は、作った関数をヘッダファイルにして、mainで呼び出すのでしょうか。 また、研修の最後に成果を見せてもらうために、新人でプロジェクトを組んで簡単なシステムを作ってもらおうと思っています。設計から仕様書作成、結合、テスト・・・と一通りの開発手順を体験させたいのです。 でどんなシステムを作ってもらおうか悩んでいます。1プロジェクト6人で開発日数は3日。コンパイラはlsic-86で、ファイル処理関係がいいのです。なるべく実用的なもので・・・と考えているんですが、なにか良いネタはないですかね。。。 質問ずくめで申し訳ありませんが、どなたかよろしくお願いいたします。

  • main関数内のローカル変数について。

    main関数内でローカル変数は使用しない方が良いのでしょうか? 例えばmain関数内でループ処理(無限ループ)を行なう場合、 プログラムを終了するまで、ローカル変数は解放されないように思います。 なので、プログラム実行中は常にスタックに積んである状態になってしまいます。 この場合main関数内の変数は静的変数にするのが望ましいのですか?? よろしくお願いします。

  • テトリスを作りたいんですげど・・・・・

    C言語(C++ではない)でwindowAPIを使用してテトリスを作りたいんですけど・・・ テトリスのブロックをランダムで出力する方法       ブロックを下に落とす方法と左右に動かす方法       ブロックを回転させる方法       ブロックが左右の壁にぶつかったらブロックを回転させないようにする方法       ブロックを縦20行×横10行の枠内にに出ないようにするには?       ブロックが一番下に行ったら、そこで止まるようにする方法と次のブロックを出現させる方法        これらを教えてもらいたいんですけどよろしいですか? 出来れば早めにお願いします。

  • C++言語について

    大学で研究室に配属された友達に勉強の相談をされました。 下の課題なのですが、どのようにプログラムすれば良いのでしょうか? 来年は、留年している僕の番なのでとても気になります。 丸投げで申し訳ないのですが、どなたかよろしくお願いいたします。 (1) 0から20の間の一様乱数を1000個作り、それをヒストグラムにする。 出来上がった分布の平均が10、分散が20÷√12になることを確認する。 (2) 平均値が10の指数関数分布exp(-ax)(0<x)になるように乱数を1000個作り、それをヒストグラムにする。 出来上がった分布の平均値が10に近いことを確認する。 (3) 平均値が5のpoisson分布になるように乱数を1000個作り、それをヒストグラムにする。 そのヒストグラムをpoisson分布関数、及びgauss分布でfitする。 (4) 平均値が10の指数関数分布exp(-ax)(0<x)になるように乱数からサンプルを1000個選び出し、その和を取りヒストグラムにする。 この操作を10000回繰り返す。 出来たヒストグラムをgauss分布関数でfitする。 僕にはもうサッパリ分かりません。。。

  • 無限ループ内でのキー判別

    DSPを用いたシステムを開発している途中なのですが。ループ内でのキー判別ができません。 whlie文で無限ループを行い,特定のキー(Enter等)が押されたらその動作を行うという判別ができません。 get関数等を無限ループの中で用いると,get文のところで止まってしまい,これでは私が求めている処理を行うことができません。 無限ループを行い,キー操作があった時だけその動作をする関数があれば教えてください。 PC:window7,visual stdio

  • Javaでテトリスを作成(OOPで)

    JavaでGUIのテトリスを作成しているのですが、処理でちょっと困っています。 次のようにオブジェクト指向で作っているのですが、なにか違和感が感じます。 問題点があったら教えてください>< Field.java テトリス全体のmap どこにブロックがあるかを保持 Block.java テトリスのBlock(テトリミノ)のスーパークラス。このサブクラスでそのBlockの形を保持 TetrisProcess.java テトリスの処理をする。Blockの移動、移動できるかを確認。Threadをたてる。 Blockが落ちてくる処理なんですが、TetrisProcessからBlockに『次の形はなに?』と聞いて、Fieldに『次の形はこれだから、下(横)へ進める?』っていう処理を考えているのですがどうでしょうか?? 駄文、本当にごめんなさい・・・

  • スレッドの終了の仕方

    こんばんわ 今スレッドを使ったプログラムを組んでいるのですが、_beginthreadexで起動したスレッド(無限ループ)二つをある条件の時にmainで終了させたいのですが、_endthreadでは特定のスレッドを終了させるようなパラメータが無いみたいなのでどうしていいかわかりません。CloseHandleだけでも終了させることができるのでしょうか??何かいい方法は無いでしょうか? windowsプログラム初心者なので分かりにくい質問で申し訳ないです。

  • ビットマップファイルの読み書き(C言語)

    以下のサイトの関数を利用させていただき、ビットマップファイルの読み書きを行ったのですが、 書き出されたビットマップファイルが0バイトのデータなしファイルになってしまいました。 読み込まれた画像データのRGB値を変更するなどの処理を行いたいので、RGB値を操作するにはどうすればよいかなども、 具体的に教えていただければ幸いです。 以下、作成したmain関数です。 int main(void) { Picture* bmap; FILE *filepass; if((filepass = fopen("test.bmp", "rb"))==NULL){ printf("file open err\n"); exit(0); } bmap = getBmp(filepass); filepass = fopen("test2.bmp", "wb"); bmap = putBmp(filepass, bmap); fclose(filepass); return 0; } 他力本願で申し訳ないのですが、ご回答をお願いします。

  • フリーゲーム「1999ChristmasEve」無限ループ

    お世話になっています。 フリーゲームで有名なホラーADV「1999ChristmasEve」をやっているのですが、 何度やっても無限ループに陥る箇所があります。 第六話の「眠りと見張り」のところで、グッパーし主人公が先に寝る番となる部分。 攻略サイトなどによれば、その選択肢(ランダムですが)だと、 ED「一人の力は弱くても」になるはずなのですが、無限ループで進むことができなくなります。 (夢の中の教会を探検するとどうしようもなくなる) しかしいくら検索しても、そのような注意書きやバグの情報は無く、他にこんな症状の方がいないかと質問させていただきました。 (公式サイトで質問があったようなのですが、もう閉鎖しているようなので…) 同じような状態を経験したことがある方、いましたら回答をお願い致します。 もちろん解決策もお待ちしております。

  • C言語の関数の戻り値がおかしい?

    #include<stdio.h> #include<ctype.h> #include<stdlib.h> int get_word(char *buf,int buf_size,FILE *fp) { int len; int ch; while((ch = getc(fp)) != EOF && !isalnum(ch));/*→「英数字のとき」このループは飛ばす。*/ if(ch == EOF){/*もし英数字以外が入力されていたらメインプログラムにEOFを返す。*/ return EOF; } len = 0; do{ buf[len] = ch; len++; if(len >= buf_size){ fprintf(stderr,"word too long.\n"); exit(1); } }while((ch = getc(fp)) != EOF && isalnum(ch)); buf[len] = '\0'; return len; } int main(void) { char buf[256]; while(get_word(buf,256,stdin) != EOF){ printf("<<%s>>\n",buf); } return 0; } C言語ポインタ完全制覇という本のP67に載っていたプログラムをそのまま載せています。 get_word関数の中のif文で、EOFを返した時もループwhile(get_word(buf,256,stdin)により再入力するようなプログラムになっています。でも、「!=EOF」と記述されているのだから、EOFが返ったら終了だと思うのですが… なぜ再入力し続けるプログラム(無限ループ)になってしまっているのでしょうか? というか、私の環境で動作させたらおかしいだけじゃないでしょうか? よろしくお願いします。

専門家に質問してみよう