検索結果 6150 件

by みけCAT
1ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: コントローラを使いマス単位で動かす
返信数: 5
閲覧数: 969

Re: コントローラを使いマス単位で動かす

わからなければググるなどして考えるのがいいと思います。

ゲーム 前のフレーム 押されていない 判定 - Google 検索

↓ヒットしたサイトの例
【ゲーム】入力の基本
by みけCAT
1ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: 無限ループさせる方法教えてください
返信数: 2
閲覧数: 899

Re: 無限ループさせる方法教えてください

breakを消してみたんですができなくてどうしてもやり方がわかりません 何がしたいのですか? 「無限ループさせる」だけなら、今あるコードを全部消して int main(void) { for(;;); } だけで良いでしょう。 } while ((choice1 < 1) || (choice1 > 4)); return 0; } が } while ((choice1 >= 1) || (choice1 <= 4)); return 0; } にすればいいんじゃねーの ? 全ての整数は1以上または4以下なので、こうすると常に成り立つ条件式になる、ということですね。 もっとシンプルに } ...
by みけCAT
1ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: コントローラを使いマス単位で動かす
返信数: 5
閲覧数: 969

Re: コントローラを使いマス単位で動かす

Key[KEY_INPUT_RIGHT]のようなコントローラの各ボタンが連続で
押されているフレーム数が入る配列を作って使うか、
コントローラの各ボタンが前のフレームで押されていたかを記録しておき、
今のフレームで押されていて、かつ前のフレームで押されていない時のみ動くようにすることで、
一回だけ押すと一マスだけ動くようにできると考えられます。
by みけCAT
1ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: テキストファイルから構造体の配列に代入
返信数: 4
閲覧数: 757

Re: テキストファイルから構造体の配列に代入

humen[0].flag = 1; for (int i = 1; i < HUMEN_MAX; i++) { if (humen[i - 1].flag == 1)humen[i].flag = 0; if (humen[i - 1].flag == 0)humen[i].flag = 0; if (humen[i - 10].flag == 0)humen[i].flag = 2; if (humen[i - 1].flag == 2)humen[i].flag = 0; if (humen[i - 20].flag == 2)humen[i].flag = 1; if (i == H...
by みけCAT
1ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: テキストファイルから構造体の配列に代入
返信数: 4
閲覧数: 757

Re: テキストファイルから構造体の配列に代入

DxLib.hとして以下のコードを用意し、humen/君の名は.txtとして添付のテキストファイルを置いて実行したところ、 0バイトの出力が得られました。 #include <windows.h> #include <stdio.h> int chr; struct { char flag; int cnt; int knd; int place; bool lock = false; } humen[100000]; const int HUMEN_MAX = 100000; void WaitKey() {} void freopen_s(FILE** a, const char*, co...
by みけCAT
1ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: テキストファイルから構造体の配列に代入
返信数: 4
閲覧数: 757

Re: テキストファイルから構造体の配列に代入

もし何か足りなかたら言ってください。 変数?chrおよびhumen、定数?HUMEN_MAXの定義が書かれていないようです。 また、humenがhumen_t*型であると仮定すると、 printf("%s", &humen[i].flag); や printf("%s", &humen[k].flag); は、範囲外へのアクセスで未定義動作になりますね。 printf("%c", humen[i].flag); や printf("%c", humen[k].flag); のようにしたほうがいいでしょう。 上の引用部分、「足りなか」と「たら」の間に「っ」が足りないようですね。 また、 何か不...
by みけCAT
1ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: menuを自動生成するプログラム
返信数: 4
閲覧数: 910

Re: menuを自動生成するプログラム

mvprintw(3) manページ
mvprintw
mvprintw - man pages section 3: Curses Library Functions

mvprintfw関数の第一引数と第二引数はy, xの順番であるのに、
誤ってx, yの順番で座標を渡してしまっているのが原因であると考えられます。
オフトピック
x, yと書いているサイトもあるので、引っかかってしまったのかな…?
ncursesの使い方
by みけCAT
1ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: menuを自動生成するプログラム
返信数: 4
閲覧数: 910

Re: menuを自動生成するプログラム

menu関数を呼び出す場所の前に、以下の例のようなmenu関数の宣言

コード:

int menu(int x, int y, int koumoku, char menu[][255]);
または定義が必要です。

また、提示されているgame_hedder.hは、インクルードが無限に再帰してしまうなどの問題があるため、
適切な内容に書き換えるか、本体からのインクルードを外す必要があります。
by みけCAT
2ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: VMAとLMAについて
返信数: 2
閲覧数: 739

Re: VMAとLMAについて

「VMA LMA」でググった結果、 組み込みシステムにおけるアドレスの考え方 (VMA, LMAについて) - FPGA開発日記 などいろいろ出てきました。 このサイトの情報と照らし合わせて考えると、 ここでの「ローダがプログラムを読み込む」というのは、 CPUによるプログラムの 実行開始前 に用いる、 ローダ用のアドレス空間 を用いて読み込むことであり、 プログラムから取得できるアドレスはCPUによるプログラムの 実行中 に用いるアドレス空間、 すなわちVMAのアドレス空間が用いられると考えられます。 また、これは予想ですが、 リンカスクリプトはLMAの指定が必要な組み込みプログラムの開発で...
by みけCAT
2ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: 例外がスローされるとはどういうことなのか
返信数: 8
閲覧数: 951

Re: 例外がスローされるとはどういうことなのか

tanu_kichi さんが書きました:
2ヶ月前
1)>> if (origin_word == h_word)
のような文字列(char配列)の比較は、
size_t len_o = strlen(origin_word);
size_t len_h = strlen(h_word);
if ((len_o == len_h) && (strncmp(origin_word, h_word, len_o) == 0))
のようにするべきだと思います。
strcmp一発ではいけないと思う理由はありますか?
バッファの内容がNUL終端されていない場合にバッファオーバーランするというのは、strlenでも同じでしょう。
by みけCAT
2ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: vector配列に格納した単語に、二分探索を適用して、指定された単語を検索するプログラム
返信数: 7
閲覧数: 1077

Re: vector配列に格納した単語に、二分探索を適用して、指定された単語を検索するプログラム

自覚しているbinary_searchの所を除くと、
  • 戻り値の型がintでないmain関数をグローバルで宣言しているので、C++として不正
  • 「探索単語」の入力に1文字しか格納できないchar型を使用している
  • 複数文字の文字定数'$$' (値は処理系定義) を使用している
  • if文の条件式がtrueになっており、分岐にならない
の4箇所でしょうか?
ループ内でaが更新されず無限ループになるという問題もあるので、
if文の条件式とどっちがツッコミどころか怪しいですね。
また、ループの条件の比較演算子も、逆の方が良さそうです。
by みけCAT
2ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: 木構造編集プログラムのノードの削除機能について
返信数: 6
閲覧数: 1231

Re: 木構造編集プログラムのノードの削除機能について

2点の修正を加えて手元のVisual C++ 2008でコンパイルし、実行したところ、 以下の実行結果が得られ、削除対象ノードの子が削除ノードのあった位置に接続されること、 そして削除対象ノードに子が2個ある場合は削除されないことを確認できました。 YUKI.N>cl test.cpp Microsoft(R) 32-bit C/C++ Optimizing Compiler Version 15.00.30729.01 for 80x86 Copyright (C) Microsoft Corporation. All rights reserved. test.cpp C:\Program...
by みけCAT
2ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: 木構造編集プログラムのノードの削除機能について
返信数: 6
閲覧数: 1231

Re: 木構造編集プログラムのノードの削除機能について

「削除する関数」とは、deleteNode関数のことでしょうか? だとすると、 //方向指示に対応する左右ポインタから、削除対象ノードへのポインタを得る。 Node* pDeleteNode=new Node; if (direction == RIGHT) pDeleteNode = pNode->pRight; if (direction == LEFT) pDeleteNode = pNode->pLeft; のnew NodeをNULLに変えるといいでしょう。 なぜならば、ここで余計なノードを確保してしまうと、 その後の代入でメモリリークを起こす可能性がある上、 代入が行われない場合は...
by みけCAT
3ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: 文字列の標準入力について
返信数: 2
閲覧数: 1238

Re: 文字列の標準入力について

まず仕様をきちんと決めましょう。
・入力や出力はどのようなフォーマットですか?
・入力はどのくらいの長さまで対応しますか?
・入力から出力はどのように求めますか?
などなど…
by みけCAT
3ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: 関数を呼び出したが関数の中身がうまく機能しない
返信数: 4
閲覧数: 1432

Re: 関数を呼び出したが関数の中身がうまく機能しない

メインプログラムのif (talk == 0) { talkdrow(); }の部分でtalk.hの中に書いてある関数 talkdrow()の中の変数talkの値が変わらないため画面が展開しません。 これは本当ですか? 「メイン関数の中の変数talkの値が変わらないため画面が展開しません。」の間違いではないですか? talk == 1とtalk == 2の時の文字が描画されません。どうしたら描画されるでしょうか。 色の取得をグローバル変数の初期化時(→DxLib_Init()を呼ぶ前)ではなく DxLib_Init()を呼んだ後にすることで、正しく色を取得できるようにすると、 描画される可能...
by みけCAT
3ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: キーを使えるようにする。
返信数: 7
閲覧数: 1583

Re: キーを使えるようにする。

C++ではこのように式文を関数定義の外に書くことはできないからです。

コード:

init_stage(); // stage, pos の初期化
を関数定義の本体の中に入れるなどの修正方法が考えられます。
by みけCAT
3ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: キーを使えるようにする。
返信数: 7
閲覧数: 1583

Re: キーを使えるようにする。

コード:

extern int Key[256];
と書くと良さそうな気がします。
by みけCAT
3ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: キーを使えるようにする。
返信数: 7
閲覧数: 1583

Re: キーを使えるようにする。

roji さんが書きました:
3ヶ月前
そして、メインプログラム以外のプログラムにvoid Player_Update()という関数を作り
そこに

コード:

int Key[256];

int gpUpdateKey()
{
	char tmpKey[256];
	GetHitKeyStateAll(tmpKey);
	for (int i = 0; i < 256; i++)
		(tmpKey[i] == 0) ? (Key[i] = 0) : Key[i]++;
	return 0;
}
と書きたいですが
The XY Problemの疑いがあります。
なぜそのように書きたいのですか?
by みけCAT
3ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: ポインタを使って昇順に並び替える問題について
返信数: 2
閲覧数: 1294

Re: ポインタを使って昇順に並び替える問題について

普通の環境では、全角の&は演算子として使えません。
2個とも半角の&にするといいでしょう。

また、関数sort2の宣言を、それを呼び出している場所の前に追加する必要もありそうです。
by みけCAT
3ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: f=X^(-(t1)) + X^(-(t2)) + ... + X^(-(tn))の定義の仕方
返信数: 5
閲覧数: 1587

Re: f=X^(-(t1)) + X^(-(t2)) + ... + X^(-(tn))の定義の仕方

プログラムはやりたいことに合わせて書くのがいいと思います。
「X^(-(t1)) + X^(-(t2)) + ... + X^(-(tn))をfという変数で定義」
「f = X^(1.5) + X^(2.0) + X^(1.0) のように」
とはどういうことか、もう少し詳しく教えていただけますか?
by みけCAT
3ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: f=X^(-(t1)) + X^(-(t2)) + ... + X^(-(tn))の定義の仕方
返信数: 5
閲覧数: 1587

Re: f=X^(-(t1)) + X^(-(t2)) + ... + X^(-(tn))の定義の仕方

プログラミング言語が指定されていないようですが、例えばC++であればこのような感じでしょうか? #include <iostream> #include <iomanip> #include <vector> #include <string> #include <sstream> #include <cmath> class siki { // t1からtnを格納する std::vector<double> t; public: siki() {} // t1からtnの配列に基づき式を初期化する siki(const double* array, size_t n) : t(array, a...
by みけCAT
3ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: 文字数、単語数、行数の計数について
返信数: 8
閲覧数: 1678

Re: 文字数、単語数、行数の計数について

#6のupdateWord関数は、このような処理になっていますね。
20806-updateWord-matigai-20191015.png
現状のフローチャート
20806-updateWord-matigai-20191015.png (10.21 KiB) 閲覧数: 1464 回
例えばこのような処理にすると改善するかもしれません。
20806-updateWord-kaizen-20191015.png
改善案のフローチャート
20806-updateWord-kaizen-20191015.png (9.78 KiB) 閲覧数: 1464 回
by みけCAT
3ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: [C言語練習]配列を使用した文字のカウント
返信数: 2
閲覧数: 1319

Re: [C言語練習]配列を使用した文字のカウント

ソースコードを提示する際は、BBCodeが有効な(無効にしない)状態で、 BBCodeのcodeタグの開始タグと終了タグの組(開始タグが先)で囲んでいただける と、 見やすくてありがたいです。 scanf_s、_scanf_s_l、wscanf_s、_wscanf_s_l | Microsoft Docs によれば、scanf_s関数の%c指定子を使う際は、読み込み先の次の引数としてバッファサイズを指定しなければいけません。 また、文字列を読み込むには、%cではなく%sを使うのがいいでしょう。 %s指定子を使う際も、読み込み先の次の引数としてバッファサイズを指定しなければいけません 更に、式中...
by みけCAT
3ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: ポインタを用いて文字列を逆順にして表示する
返信数: 3
閲覧数: 1363

Re: ポインタを用いて文字列を逆順にして表示する

main関数内の変数sが未初期化のまま使用されているので、強制終了の原因になります。 sに(mallocで確保した領域などの)有効なバッファへのポインタを代入してから scanf以降を実行するようにしないといけません。 さらに、 for(i=0; i<n; i++){ s[i]=s[n-i]; } の部分も間違っていますね。 n文字の文字列の最後の文字はn-1番目 (0-origin) 交換する際は、一旦データを退避させる (不要な方法もあるが、わかりにくいと考えられる) 各要素を高々1回交換する というポイントを踏まえ、 for(i=0; i<n-i-1; i++){ /* 交換する要素がか...
by みけCAT
3ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: 末尾行表示について
返信数: 2
閲覧数: 1395

Re: 末尾行表示について

このコードには、 16行目:C++の規格ではグローバルなmain関数の戻り値の型はintでなければいけないのに、そうなっていない 30行目・33行目:読み込めたかを判定する前に次の処理に行ってしまうため、1回多くループが回ってしまうことにつながる 36行目・42行目:配列の範囲外の要素を読み込んでいる上、string型を要素とする配列(の先頭要素へのポインタ)を渡すべき場所にstring型のデータを渡している 42行目:1行処理するたびに出力しているので、余計な途中経過が出力される 45行目:最初の1行を読み込んだだけでファイルを閉じてしまうため、最初の1行しか読み込めない 49~87行目:イ...
by みけCAT
3ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: ディップスイッチの状態をLCDに表示したい
返信数: 2
閲覧数: 1395

Re: ディップスイッチの状態をLCDに表示したい

質問をよく理解できていない気がしますが、 ディップスイッチの状態が変わったときのみLCDを更新する、というのはどうでしょうか? int prev = 0x100; //ありえない値で初期化 while(1){ int status = PORTD; if (status != prev){ switch(status){ case DIPSW1: //DIPスイッチ lcd_cls(); // LCD画面のクリア lcd_locate(0,0); // LCDに文字入力 lcd_puts("MODE1"); break; case DIPSW2: lcd_cls(); lcd_locate(0...
by みけCAT
3ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: 苗字と名前を入力して表示したいです
返信数: 2
閲覧数: 1456

Re: 苗字と名前を入力して表示したいです

使い方がわからないなら、わかろうとしましょう。 「strcat_s」でググってみましたか? 手元でググってみると、2番目に以下のページが出てきました。 strcat_s、wcscat_s、_mbscat_s、_mbscat_s_l | Microsoft Docs このページによると、strcat_s関数は、 第1引数に書き換え対象のバッファへのポインタ、 第2引数に書き換え対象のバッファのサイズ、 第3引数に追加する文字列へのポインタを渡す仕様になっています。 kentyさんのコードでは、strcat_s関数の第2引数と第3引数を逆にしてしまっているため、 無効な場所から追加する文字列を読み...
by みけCAT
4ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: 画面の切り替えうまくできない
返信数: 3
閲覧数: 1648

Re: 画面の切り替えうまくできない

基本的な考え方としては、 「今のフレームの状態と入力に基づき、描画を行い、次のフレームの状態を作る」です。 どの画面を表示するのかというのも「状態」ですし、 どのメニューが選択されているかというも「状態」です。 以下のコードのように、変数で状態を管理し、状態に応じて処理を分けると良いでしょう。 他のポイントとしては、(通常行われるように)毎フレーム画面を初期化する場合、 printfDxの出力はフレームをまたいで残るので状態が変わる直前に行い、 DrawFormatStringやDrawGraphの出力はそのフレームだけに反映されるので毎フレーム行います。 なお、画像は毎フレーム読み込むのでは...
by みけCAT
4ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: 画面の切り替えうまくできない
返信数: 3
閲覧数: 1648

Re: 画面の切り替えうまくできない

まだ詳しく見ていないですが、DXライブラリ3大処理があちこちにあってよくないコードですね。
by みけCAT
4ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: addattacktimeの値が-1のままの原因がわかりません。
返信数: 5
閲覧数: 1692

Re: addattacktimeの値が-1のままの原因がわかりません。

addattacktimeを500より大きくするコードは無いようなので、 348行目(および184行目)の--addattacktimeによりaddattacktimeの値は減っていきます。 そして、addattacktimeが負になると、202行目のaddattacktime < 0が真になり、 205行目でaddattacktimeが0になります。 その後前述の通り348行目でaddattacktimeを減らすため、画面には-1と出るようです。 なお、「addattacktimeの値が-1のまま」と主張しているようですが、 手元での検証では左のキャラクターと右のキャラクターが同じ行にいると...
by みけCAT
4ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: 入力した文字の中から任意の文字の個数を数え、その個数を表示する方法
返信数: 3
閲覧数: 1833

Re: 入力した文字の中から任意の文字の個数を数え、その個数を表示する方法

修正してみました。 #include <stdio.h> int main(void) { char str[20 + 2] = ""; printf("Input a string:"); fgets(str, sizeof(str) ,stdin); int i; int er=0; for(i=2;str[i]!='\0';i++){ if( (str[i - 2] == 'e' || str[i - 2] == 'E') && (str[i] == 'r' || str[i] == 'R') ){ er += 1; } } printf("The total number of e*r...
by みけCAT
4ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: 入力した文字の中から任意の文字の個数を数え、その個数を表示する方法
返信数: 3
閲覧数: 1833

Re: 入力した文字の中から任意の文字の個数を数え、その個数を表示する方法

if文の中で比較せずに非0の数を代入しているので、常に真になる eやrの位置関係を考慮せずに判定している 20文字以下の文字列を入力するのに、バッファが20バイトしかなく、改行文字や終端文字が入らない 入力バッファを初期化していない上に、文字列が読み込まれていない可能性がある部分も判定の対象にしている 出力例ではInput a string:の後に空白が入っていないのに、コードでは空白が入ってしまっている 「大文字と小文字を区別する」は普通「読みが同じ文字であっても、大文字なのか小文字なのかが違えば違う文字とみなす」という意味であると考えられるが、出力例では大文字のEが使われているEarもe...
by みけCAT
4ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: PICマイコン
返信数: 2
閲覧数: 1783

Re: PICマイコン

システムの初期化をした後、
「A/D変換器の結果を読み取り、その結果に応じて出力を設定する」処理を約1msごとに繰り返しているようですね。
by みけCAT
4ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: ロックオンマークをロック中のみに描画したいがうまくいかない
返信数: 3
閲覧数: 1903

Re: ロックオンマークをロック中のみに描画したいがうまくいかない

修正方法は、例えば

1.
リンク先を適切なURLにしたリンクを投稿する。
もしくは、著作権などの問題が無ければ、ロックオンマークの画像を添付ファイルとして投稿する。

2.
lockImgeをこの時点で初期化するのはやめ、
lockonHandleに画像のハンドルを入れた後、
lockImgeをlockonHandle[0]、lockonHandle[1]、lockonHandle[2]のどれかで初期化するようにする。

3.
DrawFormatStringと同様に、lockが真のときのみlockImgeを描画するようにする。

とよさそうだと思います。
by みけCAT
4ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: ロックオンマークをロック中のみに描画したいがうまくいかない
返信数: 3
閲覧数: 1903

Re: ロックオンマークをロック中のみに描画したいがうまくいかない

とりあえずすぐにわかる間違いとしては、

1.
質問文中の「ロックオンマークの画像」がロックオンマークの画像ではなくGoogle フォトへのリンクになっている。

2.

コード:

	int lockonHandle[3];
	int lockImge = lockonHandle[3];
という部分において、配列の範囲外の読み込みをしている。

3.
lockImgeがロックオンの状態にかかわらず描画されるようになっている。
lockImgeが前述の範囲外の値のまま描画する可能性がある。

ですね。
by みけCAT
4ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: 二つのプログラムの違いに関して。
返信数: 6
閲覧数: 2262

Re: 二つのプログラムの違いに関して。

上のプログラムはループで+1されるのに、下のプログラムは一回+1されるだけと言われたのですがなぜでしょうか。 提示されたプログラムにループは含まれていないようですが、 「上のプログラム」ではif (lockonMove > 0)以降が最初のif文のブロックの 外にある ので Key[KEY_INPUT_R] == 1 && playerY == enemyYが 真かどうかにかかわらず 実行され、 「下のプログラム」ではif (lockonMove > 0)以降が最初のif文のブロックの 中にある ので Key[KEY_INPUT_R] == 1 && playerY == enemyYが 真...
by みけCAT
4ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: 二つのプログラムの違いに関して。
返信数: 6
閲覧数: 2262

Re: 二つのプログラムの違いに関して。

あたっしゅ さんが書きました:
4ヶ月前
 「上のプログラム」も「下のプログラム」も { と } の数が、あっていません。
「上のプログラム」も「下のプログラム」も、提示された範囲において { と } の対応は正常に見えます。
あたっしゅさんが「あっていません」とする根拠はなんですか?
最初に表示される範囲だけでなく、提示されたプログラム全体を見て判断しましたか?
by みけCAT
4ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: ドットVRゲームを作りたいです。
返信数: 2
閲覧数: 1917

Re: ドットVRゲームを作りたいです。

Ouxiyさんの気持ちまたは考えは書かれているようですが、質問は書かれていないようですね。
雑談であれば、フォーラムルールに基づきタイトルの最後に「[雑談]」とつけてください。
Ouxiyさんは登録してログインしているようなので、日記機能の利用もおすすめします。
by みけCAT
4ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: R(ロックオン)キーを押した後、A(攻撃)キーを押して攻撃する
返信数: 13
閲覧数: 2388

Re: R(ロックオン)キーを押した後、A(攻撃)キーを押して攻撃する

質問8. (8) では、変数player2 が消えてなくなるのを知っていますか? A,知りませんでした。なぜ無くなるのでしょうか。 質問9. (9) では、変数prokey が消えてなくなるのを知っていますか? A,知りませんでした。なぜ無くなるのでしょうか。 { ~ } (ブロック)の中でstaticなどの指定をせずに宣言された変数の有効期限は、 そのブロックの終わりまでです。 ブロックを抜けるときにこれらの変数はなくなり、 次にまたブロックの変数宣言のところに来るとまた新しく変数が作られます。 したがって、(8)ではplayer2が宣言されたブロックを抜けているのでplayer2はなくな...
by みけCAT
4ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: do~while文の無限ループがうまく動きません。
返信数: 2
閲覧数: 1843

Re: do~while文の無限ループがうまく動きません。

_kbhit関数を呼び出さずにそのアドレスを0と比較しているため、
キー入力があるかどうかにかかわらず_getch()でキーを読みに行ってしまっていますね。
ちゃんと_kbhit関数を呼び出し、戻り値をチェックするようにするといいでしょう。
by みけCAT
4ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: int box[4][7][2]の役割。
返信数: 28
閲覧数: 3426

Re: int box[4][7][2]の役割。

if (Key[KEY_INPUT_R] == 1 && playerY==enemyY) {}の中にif文でif (Key[KEY_INPUT_A] == 1)を書いたのになぜ反映されないのでしょうか。 if (Key[KEY_INPUT_R] == 1 && playerY==enemyY) { enemyImage = enemyGHandle[6]; if (Key[KEY_INPUT_A] == 1) { // アタック playerX = enemyX - 1; playerX = playerX; playerMove = 1; playerImage = playerGHan...
by みけCAT
4ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: 文字をモールス信号のwavにするプログラムでうまく出力できない
返信数: 3
閲覧数: 1846

Re: 文字をモールス信号のwavにするプログラムでうまく出力できない

とりあえずすぐに気付くこととしては、
4バイトしかない領域にstrcpyで終端のナル文字を含めて5バイトの文字列をぶち込んでいるので、
範囲外へのアクセスが発生し、未定義動作になります。
strcpyではなく、memcpyでサイズを指定してコピーするようにするといいでしょう。

また、せっかく2周目のループでデータを格納しても、
またdataに新しいバッファの領域を入れ、データを格納したバッファを投げ捨ててしまうのもよくないですね。
2周目はdataへの代入をしないようにするべきでしょう。
by みけCAT
4ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: これが何を意味しているのか教えてください
返信数: 1
閲覧数: 1758

Re: これが何を意味しているのか教えてください

オブジェクト?vのx座標またはz座標が60超かつ300未満かどうかで分岐する、という意味であると推測できます。
by みけCAT
5ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: int box[4][7][2]の役割。
返信数: 28
閲覧数: 3426

Re: int box[4][7][2]の役割。

かずまさんの解説についての確認への回答はかずまさんに任せます。 もう一つ疑問なのは、移動可能かどうかを確認するさいにidou配列が必要なのかなと思ってしまったことがあります。というもの、以下のように実際の座標を書いた際に // 描画する座標の配列 int teki[5][5][2] = { {{0}}, // どうせここには来ない {{0, 0}, {60, 60}, {100, 60}, {140, 60}, {0, 0}}, {{0, 0}, {50, 100}, {100, 100}, {150, 100}, {0, 0}}, {{0, 0}, {40, 160}, {100, 160}...
by みけCAT
5ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: 9マス上のマスを動く敵キャラを作るために時間の関数がほしいです。
返信数: 16
閲覧数: 2816

Re: 9マス上のマスを動く敵キャラを作るために時間の関数がほしいです。

どうもありがとうございました。そのような感じになります。 ただ、もう少し行いたいことがあります。 移動した瞬間に向きが切り替わり瞬間移動したようなエフェクトを付けたいです。 そこで私は以下のようにしました。 ClearDrawScreen(); // 裏画面をクリア if (move > 0 && ++move == 20) { move = 0; int playerphoto = gh[8]; // 移動終了 } をコード全体に付け足して、移動した後の状態はplayerphoto = gh[8]より真正面を向いたのままですが、 再び移動してから新しい座標でほんの一瞬だけ横を向くようにした...
by みけCAT
5ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: 9マス上のマスを動く敵キャラを作るために時間の関数がほしいです。
返信数: 16
閲覧数: 2816

Re: 9マス上のマスを動く敵キャラを作るために時間の関数がほしいです。

ランダム関数と時間の関数を使い、9マス上を毎秒1s事に敵キャラを9マス上のいずれかのパネルに移動させ、たまに数秒間その場に止まるようなプログラム こんな感じでしょうか? #include <stdio.h> #include <stdlib.h> #include <time.h> #include "DxLib.h" int Key[256]; int gpUpdateKey() { char tmpKey[256]; GetHitKeyStateAll(tmpKey); for (int i = 0; i < 256; i++) (tmpKey[i] == 0) ? (Key[i] = ...
by みけCAT
5ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: 9マス上のマスを動く敵キャラを作るために時間の関数がほしいです。
返信数: 16
閲覧数: 2816

Re: 9マス上のマスを動く敵キャラを作るために時間の関数がほしいです。

きちんと変数の意味を意識しましょう。 キャラの座標はnxとny。 これらの値を変える処理が無いので、キャラは動きません。 moveは移動の状態(時間)の管理用。 idouの各要素は5しかないのに、最大30になるmove(の±1程度の値)を添字に使ってしまうと、 範囲外へのアクセスが発生して危険です。 move = 1; move = move + 1; //移動 というのも意味がよくわかりません。これはどういう「移動」を表しているのでしょうか? さらに、move = 1; move = move - 1;だと、実質move = 0;であり、条件move > 0を満たせずに移動できなそうです。
by みけCAT
5ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: 9マス上のマスを動く敵キャラを作るために時間の関数がほしいです。
返信数: 16
閲覧数: 2816

Re: 9マス上のマスを動く敵キャラを作るために時間の関数がほしいです。

DXライブラリ置き場 リファレンスページ には「時間関係の関数」という見出しがあり、 GetNowCount  ミリ秒単位の精度を持つカウンタの現在値を得る GetNowHiPerformanceCount  GetNowCountの高精度バージョン GetDateTime  現在時刻を取得する の3関数が挙げられています。 また、C言語の標準ライブラリにも 時間を取り扱う関数群 があり、 Ouxiyさんも使われているtime関数をはじめとして様々な関数があります。 さらに、Windows APIにも、 GetLocalTime関数 や GetTickCount関数 などの時間や時刻を扱う関...
by みけCAT
5ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: 画像のように3D っぽい2Dの9マスA~I上をキャラにキー入力で移動させたい
返信数: 14
閲覧数: 3276

Re: 画像のように3D っぽい2Dの9マスA~I上をキャラにキー入力で移動させたい

迅速な解答感謝いたします。 こちらの方で見れますでしょうか。お手数をお掛けします https://onslaughta.imgur.com/all/?third_party=1 見れません。imgur: the simple 404 pageが出ます。 Imgurの現行仕様では、投稿した画像の画面の投稿した画像にマウスカーソルを当てると 点が3個描かれたボタンが出て、そこを押すと表示されるGet share linksを押すと BBCodeが表示されるので、それをコピーして使うといいでしょう。 例 投稿した画像の画面: https://imgur.com/a/168L9DD https://...
by みけCAT
5ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: 画像のように3D っぽい2Dの9マスA~I上をキャラにキー入力で移動させたい
返信数: 14
閲覧数: 3276

Re: 画像のように3D っぽい2Dの9マスA~I上をキャラにキー入力で移動させたい

例えば、DXライブラリの機能で実際に3Dで描画し、そこから座標の情報を得る方法があります。 たとえばこのような実装ができます。 #include <DxLib.h> #include <cmath> #include <sstream> // 自分の環境で3D描画が壊れたようなので、その対策モードの切り替え #if 1 #define SET_NO_3D #endif // 各キーが何フレーム押されているかをまとめて取得する int getKeyStatus(int keyStatus[256]) { char keyBuffer[256]; if (GetHitKeyStateAll(key...
by みけCAT
5ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: 画像のように3D っぽい2Dの9マスA~I上をキャラにキー入力で移動させたい
返信数: 14
閲覧数: 3276

Re: 画像のように3D っぽい2Dの9マスA~I上をキャラにキー入力で移動させたい

座標Eに関しては真ん中をEとして表せていると思います。 あとの残りは斜線っぽい感じの座標で、座標を指定して、そこにキャラが移動する形になると考えています。 [img​]https://mail.google.com/mail/u/0?ui=2&ik=65460f62c3&attid=0.1&permmsgid=msg-f:1642577236477548528&th=16cb9b4b386317f0&view=att&disp=safe[/img] イメージとして以下のようにドットキャラを置きます。 [img​]https://mail.google.com/mail/u/0?ui=2&ik...
by みけCAT
5ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: 画像のように3D っぽい2Dの9マスA~I上をキャラにキー入力で移動させたい
返信数: 14
閲覧数: 3276

Re: 画像のように3D っぽい2Dの9マスA~I上をキャラにキー入力で移動させたい

3D っぽくなるように座標を前もって指定して 指定した座標を配列に入れておきます。 (例として適当な値を入れてあるが、きちんと計算した方がいいかも?) int drawCoords[5][5][2] = { {{0}}, // どうせここには来ない {{0, 0}, {60, 60}, {100, 60}, {140, 60}, {0, 0}}, {{0, 0}, {50, 100}, {100, 100}, {150, 100}, {0, 0}}, {{0, 0}, {40, 160}, {100, 160}, {160, 160}, {0, 0}}, {{0}} // どうせここには来な...
by みけCAT
5ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: idou[ny + 1][nx + 1]を利用してif文でキャラを縦、横に動かしたいです。
返信数: 24
閲覧数: 3511

Re: idou[ny + 1][nx + 1]を利用してif文でキャラを縦、横に動かしたいです。

ありがとうございます。あの、ちなみに、私の載せたプログラムは後なにを付け足せば、右に一マス動くでしょうか。 以下のコードが元のコードです。 if ( nx == 3 && idou[nx + 1][ny + 0] == idou[3][2]) {// 移動可能にして、その座標に移動する //nx == 3は移動するxの座標として書きました。 idou[nx + 1][ny + 0] == idou[3][2]; playerphoto = gh[7]; } else if (nx == 1 && idou[nx + 1] == idou[2]) { // 移動不可能 playerphoto ...
by みけCAT
5ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: 最初に描画された画像から一瞬横に向くようにしたいです。
返信数: 3
閲覧数: 1912

Re: 最初に描画された画像から一瞬横に向くようにしたいです。

usao さんが書きました:
5ヶ月前
とりあえずplayerphotoの値をwhileループ内の先頭で毎回初期化している時点で
視認できるほど長い期間だけ値を保持できているとは思えないので,
「視認できるほど」どころか、書き換えたplayerphotoで描画した後、
それを画面の表示に反映する前に初期化したplayerphotoで上から描画してしまうので、
全く表示されないと予想できます。
by みけCAT
5ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: idou[ny + 1][nx + 1]を利用してif文でキャラを縦、横に動かしたいです。
返信数: 24
閲覧数: 3511

Re: idou[ny + 1][nx + 1]を利用してif文でキャラを縦、横に動かしたいです。

idou[nx + 1][ny + 0] となりidou[2 + 1][2 + 0] =idou[3][2] となるように書いてみたのですが、 idou[nx + 1][ny + 0] == idou[3][2]; は「idou[nx + 1][ny + 0]の値とidou[3][2]の値が等しいかを比較し、その結果にかかわらず何もしない」 というコードです。 Ouxiyさんは、このコードによって何をしてもらうことを期待したのでしょうか? 実行フィルのキャラは右に動かず静止したままでした。なぜでしょうか。 キャラを右に動かす(キャラのX座標を大きくする)コードが無いからですね。 また、ディス...
by みけCAT
5ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: idou[ny + 1][nx + 1]を利用してif文でキャラを縦、横に動かしたいです。
返信数: 24
閲覧数: 3511

Re: idou[ny + 1][nx + 1]を利用してif文でキャラを縦、横に動かしたいです。

ちなみに、 if (ny != 0) { // キャラが移動しようとしている場合 // 移動先に障害物が無いかをチェックする if (idou[my][mx] != 0) { // 障害物があるので、移動不可能 nx = 1; } else { // 障害物が無いので、移動可能 nx = 0; } はキャラのyに関しての移動できるかどうかの判断するプログラムの部分ですが、 x,y両方に関しての判断を行っています。 nyという変数名は、元のコードとの差分を少なくするために使っているだけで、y座標という意味ではありません。。 以下のようにny == 0 && idou[ny + 1] などのよう...
by みけCAT
5ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: idou[ny + 1][nx + 1]を利用してif文でキャラを縦、横に動かしたいです。
返信数: 24
閲覧数: 3511

Re: idou[ny + 1][nx + 1]を利用してif文でキャラを縦、横に動かしたいです。

どうか今の自分のコードに何が足りなくて何がダメだったのか知るため、動画のような動きをさせるためにどうすればいいのか勉強するために、 私のコードを修正した物を頂けないでしょうか。 まず第一に、「キャラがマップのどのマスにいるか」から「キャラを画面のどの位置に描画するか」に 変換するための処理が無いのがダメですね。 こんな感じでどうでしょうか? #include "DxLib.h" int Key[256]; // キーが押されているフレーム数を格納する // キーの入力状態を更新する int gpUpdateKey() { char tmpKey[256]; // 現在のキーの入力状態を格納す...
by みけCAT
5ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: idou[ny + 1][nx + 1]を利用してif文でキャラを縦、横に動かしたいです。
返信数: 24
閲覧数: 3511

Re: idou[ny + 1][nx + 1]を利用してif文でキャラを縦、横に動かしたいです。

どのような動作を「移動」と呼んでいるのかわかりませんが、 #11のコードで右キーにキャラが反応することを確認できました。 まず、charall.pngとして以下の画像を用意しました。 charall.png これを読み込める状態で#11のコードを実行すると、以下の画像のようになりました。 (4倍に拡大し、左上を切り抜いています) sukusyo1-trim-large.png DrawGraph(dx, dy, gh[5], FALSE);により、(dx, dy)すなわち(2, 2)の位置に gh[5]の画像が描画されていることが確認できます。 この状態で右キーを押すと、以下の画像のようになり...
by みけCAT
5ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: idou[ny + 1][nx + 1]を利用してif文でキャラを縦、横に動かしたいです。
返信数: 24
閲覧数: 3511

Re: idou[ny + 1][nx + 1]を利用してif文でキャラを縦、横に動かしたいです。

あの、int dx, dy = (2, 2);という書き方ではなぜdx = 2, dy = 2のように1個ずつ初期化されずに実質2になってしまうのですか?また実質2とは何の2でしょうか?座標ではないと思いますが、、、。 C++の規格書(のドラフト)である N3337 から引用します。 まず、8 Declaratorsの1より、変数宣言のうち型(と修飾子)を除いたdx, dy = (2, 2)にあたる部分の文法は init-declarator-list:   init-declarator   init-declarator-list , init-declarator init-decla...
by みけCAT
5ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: idou[ny + 1][nx + 1]を利用してif文でキャラを縦、横に動かしたいです。
返信数: 24
閲覧数: 3511

Re: idou[ny + 1][nx + 1]を利用してif文でキャラを縦、横に動かしたいです。

オフトピック
ちなみに、Pythonなら

コード:

dx, dy = (2, 2)
でdxにもdyにも2を代入できます。
どうしてもこのような書き方をしたいのであれば、Pythonを使うのもいいかもしれません。
DXライブラリも使えるようです。
例:PythonでDXライブラリを利用してみた - 気まぐれ雑記(仮)
by みけCAT
5ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: idou[ny + 1][nx + 1]を利用してif文でキャラを縦、横に動かしたいです。
返信数: 24
閲覧数: 3511

Re: idou[ny + 1][nx + 1]を利用してif文でキャラを縦、横に動かしたいです。

ポインタを使ってidou[ny + 1]の出力をint型(整数)と出来るということでしょうか? 「idou[ny + 1]の出力」の意味がよくわかりませんが、 idou[ny + 1]はint*型(ポインタ)になります。 (sizeof演算子に渡す場合などの例外は除く) 間接演算子*を用いてデリファレンスすることで、idou[ny + 1]からint型(整数)の値を得ることができます。 出力がidou[1]だった場合は進めると判断され、 idou[2]の場合は進めないと判断されるということでしょうか? 「出力」がidou[ny + 1]の値のことだと仮定すると、 &&演算子の左辺の条件により...
by みけCAT
5ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: idou[ny + 1][nx + 1]を利用してif文でキャラを縦、横に動かしたいです。
返信数: 24
閲覧数: 3511

Re: idou[ny + 1][nx + 1]を利用してif文でキャラを縦、横に動かしたいです。

nx==0でidou[nx + 1]がidou[1]の時移動可能にして、その座標に移動する、nx==1でidou[nx + 1]がidou[2]の時移動不可能 は、 if (nx == 0 && idou[nx + 1]==idou[1]) { // 移動可能にして、その座標に移動する } else if (nx == 1 && idou[nx + 1] == idou[2]) { // 移動不可能 } else { // 不明 } と書けます。 ただし、(nxがint型のとき)nx==0のとき常にnx+1は1、nx==1のとき常にnx+1は2なので、 各条件文の後半は常に成り立ち、実質nx...
by みけCAT
5ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: idou[ny + 1][nx + 1]を利用してif文でキャラを縦、横に動かしたいです。
返信数: 24
閲覧数: 3511

Re: idou[ny + 1][nx + 1]を利用してif文でキャラを縦、横に動かしたいです。

そのまんまidou[ny + 1]と書けばいいと思います。 まず、idouは「int型の要素5個の配列」型の要素5個の配列です。 idou[ny + 1]はidouの要素である「int型の要素5個の配列」であり、 式中では一部の例外を除いてその配列の先頭要素(int型)へのポインタに変換されます。 したがって、idou[ny + 1]は例えばint*型の変数に代入できます。 あとは、どう使うかですね。 提示されたコードには、 文法エラーがある 未初期化の自動変数の値(不定)が計算に使われている if文のカッコの後に余計なセミコロンがあり、条件分岐が効かない int playerX,player...
by みけCAT
5ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: 配列の1の位置をplayerX、playerYとしたい、
返信数: 7
閲覧数: 2207

Re: 配列の1の位置をplayerX、playerYとしたい、

idou[3][3]を int idou[5][5] = { {1,1,1,1,1 }, {1,0,0,0,1 }, {1,0,1,0,1 }, {1,0,0,0,1 }, {1,1,1,1,1 }, }; と書かなくても、 int idou[3][3] = { {0, 0, 0 }, {0, 1, 0 }, {0, 0, 0 } }; で9マス内での移動としてキャラを動かせるのでしょうか? はい。 移動先が範囲内かのチェックをして、範囲内の場合のみ動かすようにすればいいでしょう。 int idou[5][5]のように1で空0囲まないと9マス内の移動と出来ないのでしょうか。 いいえ。 ただし...
by みけCAT
5ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: 配列を座標として障害物かどうかなぜ判断できないのかについて
返信数: 4
閲覧数: 2011

Re: 配列を座標として障害物かどうかなぜ判断できないのかについて

申し訳ありません。 #3でidouの定義を int idou[5+1][5] としていますが、この+1はテストした時の消し忘れです。 int idou[5][5] としてください。 一応修正後のコード全体を貼ります。 #include "DxLib.h" #include <set> int Key[256]; // キーが押されているフレーム数を格納する // キーの入力状態を更新する int gpUpdateKey() { char tmpKey[256]; // 現在のキーの入力状態を格納する GetHitKeyStateAll(tmpKey); // 全てのキーの入力状態を得る for...
by みけCAT
5ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: 配列を座標として障害物かどうかなぜ判断できないのかについて
返信数: 4
閲覧数: 2011

Re: 配列を座標として障害物かどうかなぜ判断できないのかについて

どうか私の勘違いや間違いがなんなのか教えてください。 とりあえずわかりやすい間違いとして、 playerYについてのコメントに、「座標」のことだと考えられる「座表」という誤字がある 「座標32がキャラのいる座標」としたはずなのに、その後にいきなり謎の数字「24」がある (誤字で32のことだと考えられる) 「移動 し すると」という不自然な表現がある (「移動すると」を表す誤字と考えられる) 「出来なんでしょうか?」という不自然な表現がある (「出来な い んでしょうか?」を表す誤字と考えられる) 配列「idou」を使うはずなのに、「dou」としている誤字がある (iが変な位置にあるのが1件、...
by みけCAT
5ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: 配列の1の位置をplayerX、playerYとしたい、
返信数: 7
閲覧数: 2207

Re: 配列の1の位置をplayerX、playerYとしたい、

質問1に関しては 配列idou[3][3]の1の位置をplayerX、playerYとしたいです。 playerX、playerYに1の位置を入れたい、ということでしょうか? 以下のコードは、配列から1を探し、その位置をplayerXおよびplayerYに入れます。 // 探す対象の配列 int idou[3][3] = { {0, 0, 0 }, {0, 1, 0 }, {0, 0, 0 } }; // 結果を入れる変数 int playerX = -1, playerY = -1; // 配列から1を探し、結果を入れる (1が複数ある場合、最後に見つかったものの座標が入る) for (i...
by みけCAT
5ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: 原因を知りたい、バグを解決したい。
返信数: 4
閲覧数: 2110

Re: 原因を知りたい、バグを解決したい。

Ouxiy さんが書きました:
5ヶ月前
えーと、右のキーを押したときのみ、反映させるように書いたのに
なぜか右のキー以外のキーを押したときも反映されているので、その理由が知りたいです。
「反映させる」「反映されている」の意味がよくわからないので、教えてください。
具体的に、「どうなると予想したのに」「どうなってしまう」のですか?
by みけCAT
5ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: ロックマンエグゼのような3*3マスを移動できるようにしたい
返信数: 31
閲覧数: 4426

Re: ロックマンエグゼのような3*3マスを移動できるようにしたい

かずま さんが書きました:
5ヶ月前
「バッファ」って何ですか?
「バッファ」は、https://dixq.net/g/02_09.htmlに書かれている
「char *KeyStateBuf : すべてのキーの押下状態を格納するバッファのポインタ」
のことでしょうか?
by みけCAT
5ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: キーボードとキャラを動かくすための関数を深く理解したい
返信数: 7
閲覧数: 2192

Re: キーボードとキャラを動かくすための関数を深く理解したい

ありがとうございます。 なるほど、では bool 右キーが押されていたか = false; ループ { if (現在右キーが押されている) { if (右キーが押されていたか) { // 右キーが押され続けている } else { // 右キーがこのフレームで押された } 右キーが押されていたか = true; } else { // 右キーが話されている 右キーが押されていたか = false; } } 256のキーすべてに対して、以上のように書いてまとめたものが int Key[256]; // キーが押されているフレーム数を格納する // キーの入力状態を更新する int gpUpda...
by みけCAT
5ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: キーボードとキャラを動かくすための関数を深く理解したい
返信数: 7
閲覧数: 2192

Re: キーボードとキャラを動かくすための関数を深く理解したい

Ouxiy さんが書きました:
5ヶ月前
以下はキーボードを用いてキャラクターを動かす関数のプログラムです
キーボードの状態を得る関数のプログラムはあるようですが、キャラクターを動かす関数は見当たりません。
コピペ忘れでしょうか?
by みけCAT
5ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: キーボードとキャラを動かくすための関数を深く理解したい
返信数: 7
閲覧数: 2192

Re: キーボードとキャラを動かくすための関数を深く理解したい

前半の質問については、一旦保留とします、 そしてもう一つ、できれば、別表現で以上のプログラムをもっと簡単に書き直せないでしょうか? というのも、正直、「 フレーム 」や「 押下状態 」などの用語の理解に努めようとしたのですが、うまくいかず、もっとめんどうで地道にあえてわかりやすく簡単に書いたら理解できるような気がしました。 どのような表現を簡単と感じるかは人によるはずなので、わかりません。 例えばloop unrollをしたら「別表現」で「簡単」になるでしょうか? というのも https://dixq.net/g/02_09.html より 私が押したいキーボードは右、左、下、上の四つのみなの...
by みけCAT
5ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: 原因を知りたい、バグを解決したい。
返信数: 4
閲覧数: 2110

Re: 原因を知りたい、バグを解決したい。

まず、どうして描画先を裏ページにせずにScreenFlip();を使うことに こだわる のですか? ScreenFlip関数のリファレンス を見ると、 概略  フリップ関数、画面の裏ページ(普段は表示されていない)を 表ページ(普段表示されている)に反映する 解説  裏ページの内容を表ページに反映します。 (裏ページ、表ページについては 『SetDrawScreen』関数の解説を参照してください) 注…この関数を使用した後の裏ページの内容は環境によって変わりますので、ScreenFlip 関数を使用した後は ClearDrawScreen 等を使用して裏ページを初期化して下さい となっています...
by みけCAT
5ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: ロックマンエグゼのような3*3マスを移動できるようにしたい
返信数: 31
閲覧数: 4426

Re: ロックマンエグゼのような3*3マスを移動できるようにしたい

[★行いたいこと] 静止状態と移動状態では常に真正面を向いていましたが、移動する一緒んだけ横向きにして、移動し終わったら真正面に戻るようにしたいと思い、みけさんの描いた後のプログラムに自分のアイディアを入れてみました。(うまく機能していないですが) 「移動する一緒ん」というのは、「移動する一瞬(1フレーム)」のことでしょうか? だとすると、例えばこのようにするとできるでしょう。 (「横向き」というのはよくわかりませんが、gh[8]の代わりにgh[2]を描画すれば「横向き」になると仮定しました) #include "DxLib.h" int Key[256]; // キーが押されているフレーム...
by みけCAT
5ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: ロックマンエグゼのような3*3マスを移動できるようにしたい
返信数: 31
閲覧数: 4426

Re: ロックマンエグゼのような3*3マスを移動できるようにしたい

// カーソルキーの右が押されている if (Key[KEY_INPUT_RIGHT] == 1) { // 右に動けるなら動く if (playerX + 1 < MAP_WIDTH) playerX++; // 画面に出力 ScreenFlip(); // プレイヤーの画像を描画 while(playerX++){ DrawGraph(playerX, 0, gh[11], FALSE); } } としてみたところ、キャラが消えるのはわかるのですが、ステージも消えてしまうのはなぜでしょうか。 if (playerX + 1 < MAP_WIDTH) playerX++; によってplay...
by みけCAT
5ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: シューティングゲームについて
返信数: 1
閲覧数: 506

Re: シューティングゲームについて

ファイルenemydata.csvのオープンに失敗していると考えられます。
該当のファイルが正しいファイル名で適切な位置にあるか、
およびプログラム実行時のカレントディレクトリが意図通りかを確認してください。

また、ライブラリ内にチェックがあると仮定せず、
ファイルがオープンできたか(戻り値fpがNULLでないか)のチェックを明示的に行い、
オープンに失敗していた場合は先の処理に進まないようにした方が安全でしょう。
by みけCAT
5ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: ロックマンエグゼのような3*3マスを移動できるようにしたい
返信数: 31
閲覧数: 4426

Re: ロックマンエグゼのような3*3マスを移動できるようにしたい

別のバージョンも書いてみました。 #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 { // 押...
by みけCAT
5ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: ロックマンエグゼのような3*3マスを移動できるようにしたい
返信数: 31
閲覧数: 4426

Re: ロックマンエグゼのような3*3マスを移動できるようにしたい

質問に答えるのは難しそうな気がしたので、 とりあえずプレイヤーが3*3マスを移動できるプログラムを適当に書いてみました。 #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番のキーコードに...
by みけCAT
5ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: キャラを[0][0]~[2][2]の配列の間を移動させるようにしたい
返信数: 2
閲覧数: 2192

Re: キャラを[0][0]~[2][2]の配列の間を移動させるようにしたい

「キャラを[0][0]~[2][2]の配列の間を移動させる」というのは意味がよくわからないですが、 for文で解決できそうだと思います。 そもそも、「for文で解決」の定義がよくわかりません。 for (;;) { 解決するコード break; } とすれば「for文で解決」したことになるのでしょうか? このコードには 前の質問 のコードと同様に ScreenFlip();やClearDrawScreen();があちこちで呼ばれていて よくない SetDrawScreen(DX_SCREEN_BACK); (など) で描画先を裏画面にしていないのにScreenFlip();を使っている という...
by みけCAT
5ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: [DxLib]2DACTでの重力と地形判定
返信数: 4
閲覧数: 2122

Re: [DxLib]2DACTでの重力と地形判定

詳しく見てはいないですが、Player_maphit_*系の変数の値を設定した後、
それらの値を使った判定を行う前にプレイヤーの座標を更新してしまっているので、
これが「1フレームのラグ」になりそうですね。

そのため、Player_maphit_*系の変数の値の設定を
プレイヤーの座標の更新(Gravity関数の呼び出しまで)の後に持ってくると改善するかもしれません。
by みけCAT
5ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: 意図したキャラの移動とUPとDOWNについて。
返信数: 3
閲覧数: 2134

Re: 意図したキャラの移動とUPとDOWNについて。

一つは、+加算では、動画 ロックマンエグゼ のように きっちり一マス分動けないのですが、どんな関数をどのように使えば瞬間移動するように左右上下に動けるでしょうか? 「キーが押され始めたフレームでだけ」「一マス分座標を動かす」ようにするといいでしょう。 例えば 2.9章 全てのキーの入力状態を取得する のgpUpdateKey関数を使うことで、キーが何フレーム押されているかを取得できます。 二つ目は、keyを使いupで+bとするとy座標は下に下り、downで-bとするとyは上がるのですが、これは何故でしょうか? 仕様です。 なぜそのような仕様になっているかは、よくわかりません。 ちなみに、この...
by みけCAT
5ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: キャラの描画が出来ません。
返信数: 3
閲覧数: 2136

Re: キャラの描画が出来ません。

DrawGraph関数 の第3引数には画像のハンドルを渡さないといけないのに、 LoadDivGraph関数 の戻り値の0または-1を渡しているため、 画像を描画できない可能性が高いです。 また、仮にたまたまこれが画像のハンドルとして有効な値となり、画像が描画されたとしても、 すぐに ClearDrawScreen関数 により消されてしまうでしょう。 これが「なぜか反映されません。なぜでしょうか。」の答えです。 また、このコードには、他にも ・ SetDrawScreen(DX_SCREEN_BACK); を呼び出さずに ScreenFlip(); を呼び出している  (不自然なパターン、動...
by みけCAT
5ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: 背景をバックにキャラを動かす。
返信数: 5
閲覧数: 2377

Re: 背景をバックにキャラを動かす。

Ouxiy さんが書きました:
5ヶ月前
ちなみに、キャラはループに入れなくても描画できたのですが、なぜでしょうか。
キャラをループに入れなくても描画できるようなコードを書き、実行したからだと思います。
例えば、1.4章 画像をロードして表示するのコードでは、
ループを用いずにキャラを描画しています。
by みけCAT
5ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: 背景をバックにキャラを動かす。
返信数: 5
閲覧数: 2377

Re: 背景をバックにキャラを動かす。

ループ中で背景しか描画していないから、背景しか映らないのですね。
背景とキャラの描画を同じループに入れましょう。
by みけCAT
5ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: mac gccの使用者
返信数: 2
閲覧数: 2079

Re: mac gccの使用者

質問の意味がよくわかりません。 OS:mac, コンパイラ:gcc です。 そのgccは、GNU gccですか?それとも、Clangですか? (質問には関係ないかもしれませんが) visual studioをインストールしないと出来ないじゃないですか。 何をしたいのですか? そこで、それをインストールしてゲームをさあ作るとなった時、ゲーム作成に使用するコンパイラは、gccで出来ますか? どんなゲームをどんなプログラミング言語で作りたいかにもよりますが、 例えばCUIの単純なゲームであれば、C言語を用いてgccで出来るでしょう。 (visual studioをそこに絡めることができるかは、また別...
by みけCAT
5ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: 初心者です。教えてください
返信数: 2
閲覧数: 2021

Re: 初心者です。教えてください

Wandboxでコンパイル したところ、以下の警告が出ました。 prog.c: In function 'check': prog.c:58:7: warning: implicit declaration of function 'checkFrip' [-Wimplicit-function-declaration] 58 | if (checkFrip(y, x, turn, vec) == 1) | ^~~~~~~~~ prog.c: At top level: prog.c:63:1: warning: data definition has no type or storage ...
by みけCAT
6ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: c言語についてわからない問題があります。
返信数: 1
閲覧数: 1903

Re: c言語についてわからない問題があります。

フォーラムルールを読み、従ってください。
課題の丸投げ(問題文だけ書く事)は禁止です。
また、(ああfffさんの名前が該当するとは断言できませんが)いい加減な名前を使うこともいけません。
ああfffさんの質問はありますか?
by みけCAT
6ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: 平均を出すデータ
返信数: 2
閲覧数: 1904

Re: 平均を出すデータ

配列cが4要素しか確保されておらず、範囲外への読み書きが発生するため、未定義動作になります。
そして、範囲外への書き込みによりデータが破壊されたため、出力が変になったと考えられます。
配列cも配列bと同様に5要素確保するようにするといいでしょう。
(アクセス時の添字を修正する方法もありますが、こっちの方が簡単です)
by みけCAT
6ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: 指数関数について
返信数: 2
閲覧数: 1950

Re: 指数関数について

Wandboxで実行 した結果は t = 0.0000 0.7854 1.5708 2.3562 3.1416 3.9270 4.7124 5.4978 6.2832 1th exp = 7.2832 8.2832 9.2832 10.2832 11.2832 12.2832 13.2832 14.2832 15.2832 1th err = 16.2832 17.2832 18.2832 19.2832 20.2832 21.2832 22.2832 23.2832 24.2832 3th exp = 25.2832 26.2832 27.2832 28.2832 29.2832 30.2...
by みけCAT
6ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: 関数の値の保存
返信数: 3
閲覧数: 1946

Re: 関数の値の保存

ソースコードを提示する際は、BBCodeが有効な(無効にしない)状態で、 BBCodeのcodeタグの開始タグと終了タグの組(開始タグが先)で囲んでいただける と、 見やすくてありがたいです。 Wandboxで実行 したところ、 prog.c: In function 'bisec': prog.c:18:1: warning: 'a' is used uninitialized in this function [-Wuninitialized] 18 | double datax1[a],datax2[b]; | ^~~~~~ prog.c:18:1: warning: 'b' is us...
by みけCAT
6ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: メモ帳からカンマ付き文字列のデータの読み込みが出来ません。
返信数: 54
閲覧数: 5785

Re: メモ帳からカンマ付き文字列のデータの読み込みが出来ません。

オフトピック
プログラマ見習い さんが書きました:
6ヶ月前
かめのこのこのさん。
プログラマ見習い さんが書きました:
6ヶ月前
みけCTAさん。
名前の間違いがみられますね。
ここもコピペするといいかもしれません。
by みけCAT
6ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: メモ帳からカンマ付き文字列のデータの読み込みが出来ません。
返信数: 54
閲覧数: 5785

Re: メモ帳からカンマ付き文字列のデータの読み込みが出来ません。

では256種類を超えるにはunsigned char型をunsigned int型にすれば良いのではと思い いくらmapdataの要素を格納する一時変数をunsigned int型にしても、 肝心のmapdataの要素(やキャラクターのkind)がcharのままでは、 charの範囲を超えるデータを読み込むことはできません。 したがって、拡張するならここも拡張するべきです。 一応、新しいのをアップロードします。間違っている部分をもう少し詳しく教えてください。 map0.txt 0000000000111111111100000000001111111111 00000000000000000...
by みけCAT
6ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: メモ帳からカンマ付き文字列のデータの読み込みが出来ません。
返信数: 54
閲覧数: 5785

Re: メモ帳からカンマ付き文字列のデータの読み込みが出来ません。

 気になる所があったので質問します。  「16進数で書けば256種類のデータを扱える」点について、256種類が限界である理由をchar型の限界が256にあると理解していたので、では256種類を超えるにはunsigned char型をunsigned int型にすれば良いのではと思い、、unsigned int型にしてコンパイルした所、0x11の部分が表示されなくなりました。  0x11の10進数の17で、0xAAは10進数の170なので、unsignedのないchar型だと0x11がマイナスの部分に入ってしまう事が原因だと理解していたので、unsigned int型0x11でも表示されない事...
by みけCAT
6ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: メモ帳からカンマ付き文字列のデータの読み込みが出来ません。
返信数: 54
閲覧数: 5785

Re: メモ帳からカンマ付き文字列のデータの読み込みが出来ません。

このようなコードを書いてみました。 strchrおよびstrcmpを使うために、 #include <DxLib.h> の後ろに #include <cstring> を追加してください。 //メモ帳からマップデータを読み込み void MapLoad(){ //各キャラクターのデータを初期化します。 ZeroMemory(charadata,sizeof(charadata)); char buf[1024]; sprintf_s(buf,1024,"media/map%d.txt",1); //ファイル名を用意する int fp; //ファイルハンドル fp=FileRead_open(b...
by みけCAT
6ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: メモ帳からカンマ付き文字列のデータの読み込みが出来ません。
返信数: 54
閲覧数: 5785

Re: メモ帳からカンマ付き文字列のデータの読み込みが出来ません。

どう直せばいいかを考えるのは難しそうだったので、 とりあえず、コンマで区切ってデータを読み込む部分を作ってみました。 変換の方法は、何がしたいのかがわからないのでわかりません。 やりたいことやその実装に応じて適宜行ってください。 ただし、少なくとも、指摘されている通りchar型に複数の文字は (使う文字の集合を決めて自分でエンコードするなどの工夫をしない限り)入りません。 #include <DxLib.h> #include <cstdio> #include <vector> #include <string> // 対応していない環境用 //#define sprintf_s snpri...
by みけCAT
6ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: どうして出力結果がおかしくなるのか教えてください。
返信数: 2
閲覧数: 2014

Re: どうして出力結果がおかしくなるのか教えてください。

GetWord関数内において、
入力によっては未初期化の自動変数lenの値が計算に使用されてしまい、未定義動作となります。
例えば、入力の最初の文字が空白などでなかったり、
入力の途中で空白などが2個以上連続せず1個だけ現れた時に、未定義動作となります。
入力にかかわらずlenを初期化してから処理をするようにするといいでしょう。
by みけCAT
6ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: タイピングゲーム
返信数: 3
閲覧数: 1961

Re: タイピングゲーム

変数nyuが28行目で0に初期化された後、更新されることなく78行目で割る数として使われています。
そのため、ゼロ除算で強制終了すると予測できます。
by みけCAT
6ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: 配列とfor文を使っているのに画像が一つしか表示されない。
返信数: 25
閲覧数: 4006

Re: 配列とfor文を使っているのに画像が一つしか表示されない。

「初期化」のはずなのに毎フレーム呼び出してしまっているため、
最初のキャラクターの種類と情報が破壊されるはずだと思います。
本当にこのソースコードで正常に動作していますか?
by みけCAT
6ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: 配列とfor文を使っているのに画像が一つしか表示されない。
返信数: 25
閲覧数: 4006

Re: 配列とfor文を使っているのに画像が一つしか表示されない。

プログラマ見習いさんに見つけられないだけで、プログラムに間違いがある可能性が高いと考えられます。
差し支えなければ、分割したソースコード(コンパイルできる一式)を見せていただけますか?
また、デバッガが使える環境であれば、デバッグ情報をつけるモードでコンパイルし、デバッガ上で実行することで、
アクセス違反などで強制終了した場所がわかる可能性があります。
by みけCAT
6ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: 意図しない出力がでます。
返信数: 4
閲覧数: 2284

Re: 意図しない出力がでます。

numはstaticではないので、
keisanが呼び出されるたびに新しいnumが作られ、それに対する書き込みが行われます。
再帰呼び出しした先では新しいnumに対する操作を行い、呼び出し元のnumは参照しません。

詳細検索ページへ移動する