|
Name: ぬっち ..初心者(8,366ポイント)
Date: 2009/03/09(月) 12:26
No:30321
|
|
Title: 配列の大きさをコマンド行の引数から取得する方法について
|
|
こんにちは。
数時間考えてもうまくいかなかったことがあったのでここで質問させていただきます。
配列の大きさをコマンドラインの引数から取得したいのですがどうにも上手くいきません。
出ているエラーは配列数を指定している行での「定数式が必要」というものです。
atoi()がint型なんで大丈夫だとは思ったのですが、何がいけないのでしょう。
考えた結果出来たプログラムは以下の通りです。
#include<stdio.h>
#include<stdlib.h>
int main(int ex,char *exv[]){
int n;
n=atoi(exv[1]);//この変数をコマンドライン引数から取得
double a[atoi(exv[1])*atoi(exv[1])];//配列数はn*n個
double b[atoi(exv[1])];//もうひとつの配列数はn個
・・・・(この辺り数値計算部分なので今回の質問と関係ないと思い省略します。)
}
説明等かなり雑な部分がありますがよろしくお願いします。
226ポイント を手に入れた。
|
|
|
|
Name: バグ ..ハッカー(153,254ポイント)
Date: 2009/03/09(月) 12:44
No:30322
|
|
Title: Re:配列の大きさをコマンド行の引数から取得する方法について
|
|
こういう場合は、メモリを動的に確保する必要があります。
malloc関数を調べてみてください。
29ポイント を手に入れた。
|
|
|
|
|
Name: non ..プログラマー(38,353ポイント)
Date: 2009/03/09(月) 13:18
No:30325
|
|
Title: Re:配列の大きさをコマンド行の引数から取得する方法について
|
|
「ISO/IEC 9899:1999 - Programming Language C」(略称 C99) 仕様のコンパイラを使うという方法もアリ。
27ポイント を手に入れた。
|
|
|
|
|
Name: TOMONORI ..入門者(2,745ポイント)
Date: 2009/03/09(月) 13:23
No:30326
|
|
Title: Re:配列の大きさをコマンド行の引数から取得する方法について
|
|
配列の要素数はコンパイラが理解できる必要があります。
したがって実行時に値が決まるような配列のサイズはコンパイラが承認しません。
バグさんの仰る様にCのメモリ確保用の関数を利用するか、
C++のコンテナを利用するべきです。
コメントの入れ方からしてC++でもよさそうなので、個人的には
コンテナの利用をお勧めします。
追記:
>> nonさん
C99・・・
162ポイント を手に入れた。
|
|
|
|
|
Name: toyo ..プログラマー(27,006ポイント)
Date: 2009/03/09(月) 15:28
No:30329
|
|
Title: Re:配列の大きさをコマンド行の引数から取得する方法について
|
|
gcc拡張でも配列の宣言に変数が使えますよ
でも一般的には配列の宣言では変数は使えないと思ってた方がいいでしょう
56ポイント を手に入れた。
|
|
|
|
|
Name: ぬっち ..初心者(8,426ポイント)
Date: 2009/03/10(火) 11:30
No:30369
| 解決!
|
Title: Re:配列の大きさをコマンド行の引数から取得する方法について
|
|
たくさんの方々返答ありがとうございます。
やはり配列の大きさを取得するというのは難しいんですね・・・。
ですがバグさんの仰った、malloc関数というものに興味を持ったのでこの辺を含めて勉強してみます。
どうもありがとうございました^^
60ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..比類無きプログラマー(86,894ポイント)
Date: 2009/03/10(火) 13:33
No:30378
|
|
Title: Re:配列の大きさをコマンド行の引数から取得する方法について
|
|
> やはり配列の大きさを取得するというのは難しいんですね・・・。
難しいかどうかは個人差があるので何ともいえませんが、可能かどうかであれば、言語や処理系に依存するとしかいえません。
必要な情報さえ提示すれば、何とかなるかもしれません。
51ポイント を手に入れた。
|
|
|
|
Name: M ..かけだし(1,255ポイント)
Date: 2009/03/08(日) 22:58
No:30289
|
|
Title: 画像ファイルとその他のデータをひとつのファイルに保存
|
|
Borland C++ において DXライブラリ を使っている者です。
今、セーブ/ロード画面にサムネイルを表示させようとしています。
DXライブラリのGetDrawScreenGraph関数を使ってスクリーンをキャプチャして画像をbmp形式で保存、
その後、ゲームを再起動して読み込み、表示する事はできます。
また、セーブデータだけを、.datファイルにして保存する事もできます。
問題は、これら二つのファイル(.dat と .bmp) データをひとつの.datファイルにして保存したいのですが、
コードがまったく思いつきません。
サムネイルであるbmp形式のデータは、80×60のサイズです。
セーブデータは、クラスであり、クラスのメンバー変数に構造体の配列があります。
class playerInfo {
int numNow;//現在保存されているデータ数。
int activeUserNum;//現在アクティブなデータのインデックス。
struct userData allList[10];//10人分のセーブデータの配列
int slotGraphHandle[10];
//この後は関数に続く
.datのセーブデータは、今はバイナリ書き込み形式でクラスのメンバー関数内で以下のように保存しています。
fwrite(this, sizeof(playerInfo), 1, fp);
fpは FILE* です。
画像の保存も、DXライブラリの関数を利用して以下のようにしています。
SaveDrawScreen( 0 , 0 , 80 , 60 , "save/SaveDat-1.bmp");
こうなると、一度画像をファイルに保存してから、バイナリとして読み込み、
セーブデータのクラスのメンバー変数にそのバイナリを保存するためのメンバー変数が欲しいのかと
思ったのですが、ファイルのサイズからしてどうメンバー変数にするか思いつきません。
他には、画像データをセーブデータに上書きではなく、加算するように書き込めばいいのかと思いました。
この場合、セーブした.datから直接画像としては読み込めないので、一度画像の部分だけを読み込み、bmpとして一時的に保存しなおして
そのファイルをDXライブラリの関数を用いて読み込み、一時的に作ったbmpを消してしまえばいいのでしょうか?
ですが、一部分だけをbmpに書き出すコードが分かりません。
よろしくお願いします。<(_ _)>
891ポイント を手に入れた。
|
|
|
|
Name: SooA [URL] ..初心者(6,900ポイント)
Date: 2009/03/09(月) 02:29
No:30296
|
|
Title: Re:画像ファイルとその他のデータをひとつのファイルに保存
|
|
範囲が小さいのでピクセル単位で
取得&描画してみてはどうでしょう。
■保存
1.空のグラフィックを作って現在の画面をコピーする。
部分的に抜き出す場合は抜き出すサイズと同じサイズの
グラフィックを作成してコピーする。
MakeGraph();// グラフィックの作成
GetDrawScreenGraph();// 描画画面の取得
2.コピーしたグラフィックを 80*60サイズで裏画面に描画。
DrawModiGraph();// 自由変形描画
3.80*60の領域の色をピクセル単位で取得しデータに渡す。
GetPixel;// 色の取得
■読み込み
1.裏画面にセーブデータからピクセル復元。
DrawPixel;// 点の描画
2.空のグラフィック(80*60)を作成して裏画面の80*60の範囲をコピー。
241ポイント を手に入れた。
|
|
|
|
|
Name: SooA [URL] ..初心者(6,928ポイント)
Date: 2009/03/09(月) 02:41
No:30297
|
|
Title: Re:画像ファイルとその他のデータをひとつのファイルに保存
|
|
追記
呼び出し時にピクセル単位で復元すると
時間が掛かるのでBMP形式に変換して保存すれば
CPUで扱うイメージとしてデータを渡せます。
BMP画像の保存形式の説明が嫌だったのでピクセル単位にしました><;
ので、詳しくはWeb検索で調べてください。
28ポイント を手に入れた。
|
|
|
|
|
Name: GPGA ..熟練のプログラマー(60,271ポイント)
Date: 2009/03/09(月) 05:13
No:30299
|
|
Title: Re:画像ファイルとその他のデータをひとつのファイルに保存
|
|
DXライブラリの関数を見たかぎりでは、一度ファイルに保存して、それを読み込んだほうが楽そうです。
読み込みと書き込みのサンプルを作ってみました。
1セーブ情報+サムネイルを1ファイルとして扱っています。
Zキーで保存、Xキーでロードです。
アプリ起動→Zキー投下→アプリ終了→アプリ起動→Xキー投下の順で、サムネイルを保存し
保存したサムネイルを読み込んで表示していることが分かると思います。
#include "DxLib.h"
#include <iostream>
#include <fstream>
#include <vector>
#include <time.h>
struct userData {
int a;
};
/*!
* @brief セーブファイルを書き込みます。
*
* @param szFileName 書き込むファイル名
* @param data 書き込むユーザーデータへの参照
*
* @return 正常に終了した場合は true を返します。
*/
bool Save(const char* szFileName, const userData& data) {
// 画面をセーブ
int ret = SaveDrawScreen(0, 0, 80, 60, "save/temp.bmp");
if (ret != 0) {
return false;
}
// ファイルを開く
std::ifstream ifs("save/temp.bmp", std::ios::in | std::ios::binary);
if (!ifs.is_open()) {
return false;
}
// バッファの確保
ifs.seekg(0, std::ios::end);
std::vector<char> buf(ifs.tellg());
ifs.seekg(0, std::ios::beg);
// ファイル読み込み
ifs.read(&buf[0], buf.size());
// ファイルを閉じて、削除
ifs.close();
DeleteFile("save/temp.bmp");
// セーブファイルを作成
std::ofstream ofs(szFileName, std::ios::out | std::ios::binary);
if (!ofs.is_open()) {
return false;
}
ofs.write((const char*)&data, sizeof(data)); // ユーザーデータ書き込み
size_t size = buf.size();
ofs.write((const char*)&size, sizeof(size)); // BMPのファイルサイズを書き込み
ofs.write(&buf[0], buf.size()); // BMPの書き込み
return true;
}
/*!
* @brief セーブファイルを読み込みます。
*
* @param szFileName 読み込むファイル名
* @param data 読み込むユーザーデータへの参照
* @param handle 読み込むグラフィックハンドルへの参照
*
* @return 正常に終了した場合は true を返します。
*/
bool Load(const char* szFileName, const userData& data, int& handle) {
// ファイルを開く
std::ifstream ifs(szFileName, std::ios::in | std::ios::binary);
if (!ifs.is_open()) {
return false;
}
// ユーザーデータの読み込み
ifs.read((char*)&data, sizeof(data));
// BMPデータの読み込み
size_t size;
ifs.read((char*)&size, sizeof(size)); // ファイルサイズを読み込み
std::vector<char> buf(size); // サイズ分のバッファを確保して
ifs.read(&buf[0], buf.size()); // 確保したバッファにBMPデータを読み込む
// グラフィックハンドルの生成
handle = CreateGraphFromMem(&buf[0], buf.size());
return true;
}
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
ChangeWindowMode(TRUE);
// DXライブラリ初期化処理
if( DxLib_Init() == -1 ) return -1 ;
// 裏画面を使用
SetDrawScreen(DX_SCREEN_BACK);
// BOXの色をランダムで生成
srand((unsigned int)time(NULL));
unsigned char r = rand();
unsigned char g = rand();
unsigned char b = rand();
// ロード用グラフィックハンドル
int handle = -1;
// 仮のユーザーデータ
userData data;
// キー用
char key[256] = { 0 };
char keyBack[256] = { 0 };
// 終了メッセージがくるまでループ
while(ProcessMessage() == 0) {
// キー取得
memcpy(keyBack, key, sizeof(keyBack));
GetHitKeyStateAll(key);
if ((key[KEY_INPUT_Z] & ~keyBack[KEY_INPUT_Z]) != 0) {
// 現在の画面を保存
Save("save/save.dat", data);
} else if ((key[KEY_INPUT_X] & ~keyBack[KEY_INPUT_X]) != 0) {
// 保存したサムネイルを読み込む
Load("save/save.dat", data, handle);
}
// 画面の初期化
ClearDrawScreen();
// サムネイルとりこみように、矩形を描画
DrawBox(0, 0, 80, 60, GetColor(r, g, b), TRUE);
// サムネイルが読み込まれていれば描画
if (handle != -1) {
DrawGraph(0, 120, handle, FALSE);
}
// 裏画面の内容を表画面に反映
ScreenFlip();
WaitTimer(100);
}
// ロードされていたら画像解放
if (handle != -1) {
DeleteGraph(handle);
}
// DXライブラリ使用の終了処理
DxLib_End() ;
// ソフトの終了
return 0 ;
}
1,712ポイント を手に入れた。
|
|
|
|
|
Name: M ..かけだし(1,699ポイント)
Date: 2009/03/09(月) 06:03
No:30300
|
|
Title: Re:画像ファイルとその他のデータをひとつのファイルに保存
|
|
>GPGA 様
ちゃんと動きました!!
まだ、コードの内容を理解していませんが、時間をかけて読んでみます。
皆さんありがとうございました。
36ポイント を手に入れた。
|
|
|
|
|
Name: M ..かけだし(1,776ポイント)
Date: 2009/03/09(月) 10:47
No:30311
|
|
Title: Re:画像ファイルとその他のデータをひとつのファイルに保存
|
|
すいません、詰まってしまいました。。。
教えていただいたコードを元に、複数のサムネイル画像を保存できるようにしたものです。
//StopScreenImage は、800×600の画像へのハンドル
DrawGraph(0,0,StopScreenImage,false);
ScreenFlip();
WaitKey();//ココでは、正常に表示される。
for(int i = 0; i <10;i++){
DrawBox(0,0,80,60,Black,true);
if(i == selection){ //selectionというのは、選択しているデータ番号とします。
DrawExtendGraph(0, 0, 80, 60, StopScreenImage , 0 );
DrawGraph(0,0,StopScreenImage,false);
ScreenFlip();
WaitKey();//ここで、なぜか↑と同じように表示されると思ったのに真っ白になります。
}
else if(isOccupied[i])//i番目のデータはすでに登録されているなら。
DrawExtendGraph(0, 0, 80, 60, slotGraphHandle[i] , 0 ) ;//今保存されているハンドルの画像を描画。
else
DrawString(0,0,"EMPTY",White);
ScreenFlip();
SaveDrawScreen( 0 , 0 , 80 , 60 , "save/temp.bmp") ;
// ファイルを開く
ifstream ifs("save/temp.bmp", ios::in | ios::binary);
// バッファの確保
ifs.seekg(0, ios::end);
vector<char> buf(ifs.tellg());
ifs.seekg(0, ios::beg);
// ファイル読み込み
ifs.read(&buf[0], buf.size());
// ファイルを閉じて、削除
ifs.close();
DeleteFile("save/temp.bmp");
size_t size = buf.size();
ofs.write((const char*)&size, sizeof(size)); // BMPのファイルサイズを書き込み
ofs.write(&buf[0], size); // BMPの書き込み
}
このようなコードをすると、最初は、キャプチャした画像が表示され
次に何かキーを入力すると、真っ白な画面が表示されてしまいます。
この時、本来は同じキャプチャした画像が表示されるはずなのですが・・・
配列のサイズはどれも、10で宣言してあります。
何が原因で、画像が表示されなくなってしまったのでしょう?
443ポイント を手に入れた。
|
|
|
|
|
Name: M ..かけだし(1,734ポイント)
Date: 2009/03/10(火) 07:10
No:30362
| 解決!
|
Title: Re:画像ファイルとその他のデータをひとつのファイルに保存
|
|
な、直りました・・・なぜ!?ww
とにかく助かりました<(_ _)>
35ポイント を手に入れた。
|
|
|
|
|
Name: GPGA ..熟練のプログラマー(60,541ポイント)
Date: 2009/03/09(月) 22:07
No:30353
|
|
Title: Re:隠された領域の保障
|
|
試してみたところ、私の環境では問題なく文字が消えますね。
Windows XP Professiional SP3
Visual Studio 2008 Standard Edition
Vistaの環境がないので、なんとも言えませんね。
83ポイント を手に入れた。
|
|
|
|
|
Name: たか ..初心者(7,575ポイント)
Date: 2009/03/09(月) 22:19
No:30356
|
|
Title: Re:隠された領域の保障
|
|
> SooAさん
なんてことはないです。
いろいろ試してみましたが原因が分かりませんでした。
Vistaの環境でどなたか試してもらえないでしょうか。
35ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 [URL] ..熟練のプログラマー(69,667ポイント)
Date: 2009/03/09(月) 23:42
No:30360
|
|
Title: Re:隠された領域の保障
|
|
Vistaの環境なので試してみました。
どうやら Aero 機能がオンになっていると、バーなどの透明部分の表示に対応するために消えないようですね。
Aero 機能を切ると、きちんと消えます。
(Aero 機能がオンでも、デスクトップ外に移動させると消えます)
106ポイント を手に入れた。
|
|
|
|
|
Name: たか ..初心者(7,606ポイント)
Date: 2009/03/10(火) 00:35
No:30361
| 解決!
|
Title: Re:隠された領域の保障
|
|
ウィンドウをデスクトップ外に移動させてみると消えました。
自分の環境はHomeBasicなのでAeroは有効ではないはずなのですが・・・。
検証有難うございました。おかげですっきりしました。
31ポイント を手に入れた。
|
|
|
|
Name: ざこ ..プログラマー(29,204ポイント)
Date: 2009/03/09(月) 18:40
No:30341
|
|
Title: MoveFile関数
|
|
MFCのMoveFile関数についてご質問です。移動したいファイルを同一名のファイルが移動先のフォルダにある場合、
移動できませんよね。これを移動できるようにできませんか? 別の関数でも構いません。上書き もしくは
同じものを移動させる この2通りのやり方について知りたいです。
74ポイント を手に入れた。
|
|
|
Name: POC ..ぴよぴよ(283ポイント)
Date: 2009/03/09(月) 16:34
No:30333
|
|
Title: マップ上での・・・
|
|
お久しぶりです。
今RPGのゲームを作っています。
移動処理はできたのですが、建物の中などに入った時の切り替えがわかりません。
参考にできるサイトも見つからないので、よろしければサンプルコードを作ってもらいないでしょうか?
フィールド上100×100
建物10×10
くらいの大きさでよろしくお願いします。
無理を言ってしまい申し訳ないです。
開発環境は
Visual C++ 2008
です。
160ポイント を手に入れた。
|
|
|
|
Name: BEMANI ..上級者(19,490ポイント)
Date: 2009/03/09(月) 17:08
No:30335
|
|
Title: Re:マップ上での・・・
|
|
>>POCさん
ライブラリは何を使っているのでしょうか?
おそらくDxLibなんではないかなと思うので、その前提でお話します。
まずは、http://dixq.net/g/で、
基礎を勉強するといいのではないでしょうか。
すでに、画像を読み込む・表示するなどが出来ているのであれば
マップを切り替えるタイミングで画像読み込み・表示を行えばいいと思います。
画像の読み込みは、最初に読み込むのか、切り替え時に読み込むのかはPOCさん御自身で決めて下さい。
あと、規約に「丸投げは禁止」とあるので、
自分で考えてソース作り、うまく動作しないなどの問題が起こった場合、
質問されると良いかと思います。
246ポイント を手に入れた。
|
|
|
|
|
Name: hss12 ..初心者(5,037ポイント)
Date: 2009/03/09(月) 21:54
No:30350
|
|
Title: Re:マップ上での・・・
|
|
そのサイトの34節が参考になると思います。
私なら
switch(function_status){
case 0:
フィールドにいるときの処理
建物に入ったら、function_status=1;
break;
case 1:
建物にいるときの処理
建物からでたら、function_status=0;
break;
のように書きます。
104ポイント を落としてしまった。
|
|
|
|
Name: MNS ..かけだし(1,813ポイント)
Date: 2009/03/09(月) 18:15
No:30337
|
|
Title: 互いに参照しあうクラス
|
|
class A と class B があったとき、
クラスAがBのインスタンスを持ち、BがAのポインタを持つ。
また、クラスAとクラスBは別のヘッダファイルに存在している。
こういう条件の場合、どのようなコードを書けばいいのでしょうか?
たとえば、
----A.h----
#include "B.h"
class A
{
B mB;
void Print();
};
----B.h----
#pragma once
#include "A.h"
class B
{
A* mpA;
void Print();
};
とすると、エラーが出てしまいます。
どなたか、回答お願いします。
246ポイント を手に入れた。
|
|
|
|
Name: GPGA ..熟練のプログラマー(60,370ポイント)
Date: 2009/03/09(月) 18:20
No:30338
|
|
Title: Re:互いに参照しあうクラス
|
|
----B.h----
#pragma once
class A;
class B
{
A* mpA;
void Print();
};
66ポイント を手に入れた。
|
|
|
|
|
Name: MNS ..かけだし(1,872ポイント)
Date: 2009/03/09(月) 18:28
No:30339
|
|
Title: Re:互いに参照しあうクラス
|
|
すばやい回答ありがとうございます!
前方宣言というものですよね。
聞くべきだったのは、こちらの方だったのかもしれません。
たとえば、そのようなコードを書いた場合、
----B.h----
#include "B.h"
void B::Print()
{
mpA->Print();
}
このように、クラスAのprint関数をクラスBのprint関数で使おうとすると、
「認識できない型 'A' が使われています」というようなエラーが発生します。
(※AのPrint関数はpublicであるとします)
重ねて質問することになってしまい、申し訳ないです。回答お願いします。
59ポイント を手に入れた。
|
|
|
|
|
Name: GPGA ..熟練のプログラマー(60,452ポイント)
Date: 2009/03/09(月) 18:54
No:30342
|
|
Title: Re:互いに参照しあうクラス
|
|
>----B.h----
----B.cpp----の間違いだったとして
#include "B.h"
#include "A.h"
void B::Print()
{
mpA->Print();
}
82ポイント を手に入れた。
|
|
|
|
|
Name: MNS ..かけだし(1,920ポイント)
Date: 2009/03/09(月) 19:19
No:30345
| 解決!
|
Title: Re:互いに参照しあうクラス
|
|
ああ、そうです。B.cppの間違いです・・。
そのようにしたら、見事、実行できました!
ご回答ありがとうございました。
48ポイント を手に入れた。
|
|
|
|
Name: xyz ..ぴよぴよ(27ポイント)
Date: 2009/03/07(土) 18:09
No:30223
|
|
Title: ホームページのコードミス
|
|
今更ですが、ゲームプログラミングの
〜入門編〜(基本的な関数の使い方)の14のコードが間違ってますよ。
多分しっかり理解しながらコードをコピーした人なら分かるから問題ないと思いますが
27ポイント を手に入れた。
|
|
|
|
Name: box ..ハッカー(136,841ポイント)
Date: 2009/03/07(土) 19:22
No:30225
|
|
Title: Re:ホームページのコードミス
|
|
せっかく指摘なさるのでしたら、
どこがどのように間違っているかを
書き添えられる方がよいと思います。
27ポイント を手に入れた。
|
|
|
|
|
Name: ouh ..入門者(3,485ポイント)
Date: 2009/03/08(日) 01:33
No:30256
|
|
Title: Re:ホームページのコードミス
|
|
どこも間違っていないように思います。
私もどこが間違っているのか知りたいので是非お願いします。
実行結果では背景が描かれているのにコードには背景を描画する
処理がないということでしょうか?
67ポイント を手に入れた。
|
|
|
|
|
Name: xyz ..ぴよぴよ(77ポイント)
Date: 2009/03/09(月) 18:01
No:30336
| 解決!
|
Title: Re:ホームページのコードミス
|
|
言葉が大いに足りませんでしたね
画像かコードかどちらかが間違っているという話です
コード自体は問題なく動きます。
どうでもいい話ですが今ついでに調べて気づいたんですが、
リファレンスはPlaySoundFile( "test.wav" , DX_PLAYTYPE_BACK ) ;なんですね。
試したら動きませんでした。このサイトのコードは問題なく動きます。
いやほんとどうでもいい話でした。
初投稿でしたが、これからも何かとよろしくお願いします。
50ポイント を手に入れた。
|
|
|
|
Name: kaiten ..初心者(8,797ポイント)
Date: 2009/03/07(土) 16:57
No:30219
| 解決!
|
Title: DxLibで通信時のバグ
|
|
どうもすいません、kaitenです。
自力で何とかしようと一週間ほど悩んだのですが手も足も出ないので質問させていただきます。
現在、VC++2008EE、vista、DxLibで通信プログラムを組んでおり、受信時に領域外エラーが発生してしまいます。
ソースはすべて添付するのでそちらを見てください。
Sessionが親、Session2が子です。Session2を相手が開いていないとSessionはmissと表示して終了します。
チャットを作るためなので文字列の送受信を行っています。半角50文字まで送受信できるようにしようとしたのですが、半角18文字以上だと受信側がおちてしまいます。
VCのデバッガで追ってみようかと思ったのですがソースが表示できないとなり、逆アセンブルしようとしたので諦めました。
情報が不足でしたら言っていただければ出せる限り書きます。どうかよろしくお願いします。
113ポイント を手に入れた。
|
|
|
|
Name: Justy ..伝説なるハッカー(326,948ポイント)
Date: 2009/03/07(土) 17:55
No:30222
|
|
Title: Re:DxLibで通信時のバグ
|
|
>半角18文字以上だと受信側がおちてしまいます
S_network::Draw() の buf2.insert(now+width, "\n") が怪しそうですね。
buf2には送られてきた最大 50文字の文字列が入っているはずですが、それに対して
挿入しようとしている位置が now+width …… widthは320なので
文字列の 320以降の位置に挿入しようとしています。
当然そんな位置に文字列はないので、これはまずいでしょう。
18文字という境界は while(num*size>width) が実行されるかどうかの
境目だったのではないでしょうか。
269ポイント を手に入れた。
|
|
|
|
|
Name: kaiten ..初心者(8,673ポイント)
Date: 2009/03/09(月) 15:21
No:30328
|
|
Title: Re:DxLibで通信時のバグ
|
|
Justyさん、ありがとうございます。
ご指摘の通りで、丸々消したところ解決しました。
DrawFormatStringがそもそも\nに非対応であることをすっかり忘れていました。よくよく考えたら意味ない処理……
これで解決とします。結果的とはいえ不適切な題名をつけてしまい申し訳ございません。
124ポイント を落としてしまった。
|
|
|
|
Name: ひよこ ..上級者(20,645ポイント)
Date: 2009/03/09(月) 10:37
No:30309
|
|
Title: 構造体について
|
|
構造体についてゲームプログラムの館18章の構造体でキャラクタデータを作るで
typedef struct{
int x,y,img;
}ch_t;
でch_tという名前のx,y,imgができあがるって書いてあるんですが
ch.x、ch.yとプログラムにはあるのはどうしてでしょうか?
さらにch_t ch;というのはどういう意味でしょうか?
87ポイント を手に入れた。
|
|
|
|
Name: TOMONORI ..入門者(2,535ポイント)
Date: 2009/03/09(月) 11:27
No:30314
|
|
Title: Re:構造体について
|
|
typedef struct{
int x, y, img;
}ch_t;
というのは、
struct ch_t{
int x, y, img
};
とほぼ同じで新しい"型"(intやdoubleの仲間)を創ります。
前者で作り出される型の名前は"ch_t"、後者では"struct ch_t"となります。
前者の場合ch_tは型の名前なので、
ch_t ch;
とすることでch_t型の変数chを宣言できます。
ch_t型は内容物としてint型の変数x, y, imgを持っています。
ch.xとはch_t型である変数chの持っている変数xの意味です。
構造体を自分で定義してみたりすると、もっと見通しのよい理解が得られると思います。
169ポイント を手に入れた。
|
|
|
|
|
Name: ひよこ ..上級者(20,687ポイント)
Date: 2009/03/09(月) 11:38
No:30317
|
|
Title: Re:構造体について
|
|
ch_t型の変数chと内容物のx,y,imgを組み合わせてch.x,ch.yとなるのですね
42ポイント を手に入れた。
|
|
|
|
|
Name: TOMONORI ..入門者(2,583ポイント)
Date: 2009/03/09(月) 13:14
No:30324
|
|
Title: Re:構造体について
|
|
組み合わせる・・・まあ、そうですね。
基本的に何かの中身を参照する場合に.(ピリオド)を使うと考えておけば
いいと思います。
48ポイント を手に入れた。
|
|
|
|
|
Name: ひよこ ..上級者(20,719ポイント)
Date: 2009/03/09(月) 13:24
No:30327
| 解決!
|
Title: Re:構造体について
|
|
プログラムの意味はわかりました。TOMONORIさんありがとうございました。
32ポイント を手に入れた。
|
|
|
|
Name: ヒロ ..入門者(3,148ポイント)
Date: 2009/03/08(日) 21:49
No:30287
|
|
Title: 未解決の外部シンボル
|
|
前回はありがとうございました。
あれから此処で公開されているプロジェクトの中にフォルダを作って、その中で龍神録プログラミングの館を参考にしてゲームを作っているのですが、13章に相当するところで37ものエラーが出てしまいました。
全て「項目名.obj : error LNK2001(2019): 外部シンボル ""------"は未解決です。」と出るのですがどうすれば良いのでしょうか?
今回もDLしたプロジェクトではきちんとコンパイルされます。
使っているものはMicrosoft Visual C++ 2008 Express Editionです。
具体的には下のような内容のエラーが出てきます(このようなエラーが37個出てきます)
1>char.obj : error LNK2001: 外部シンボル ""struct ch_t ch" (?ch@@3Uch_t@@A)" は未解決です。
187ポイント を手に入れた。
|
|
|
|
Name: 御津凪 [URL] ..熟練のプログラマー(69,086ポイント)
Date: 2009/03/09(月) 10:12
No:30304
|
|
Title: Re:未解決の外部シンボル
|
|
グローバル変数の宣言に問題がある可能性があります。
上記のようなエラーでは、
struct ch_t 型 の、 ch という変数が定義されていない状態です。
(extern で変数が宣言されているが、実体の変数が見つからなかったということ)
extern 周りについては、竜神録プログラミングの5章を確認するか、検索してみてください。
ちなみに、
「外部シンボル "------"は未解決です。」
といった類のエラーは実体が存在しないことを意味しています。
148ポイント を手に入れた。
|
|
|
|
|
Name: ヒロ ..入門者(3,268ポイント)
Date: 2009/03/09(月) 10:14
No:30305
|
|
Title: Re:未解決の外部シンボル
|
|
自己解決致しました。
main.cppの定数定義の識別子の名前が違うという初歩的なミスでした^^;
コンパイルはできるようになったのですが生成したexeファイルを実行するとread errorになってしまいます。
必要な画像等は入っていると思うのですが・・・
ご指導お願いします。
120ポイント を手に入れた。
|
|
|
|
|
Name: ヒロ ..入門者(3,315ポイント)
Date: 2009/03/09(月) 10:18
No:30306
|
|
Title: Re:未解決の外部シンボル
|
|
御津凪様ありがとうございます。
何度も何度も手間かけてしまってすいません。
仰るとおりです。存在しない識別子を入力したのですから変数が見つからなくて当然ですね^^;
47ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 [URL] ..熟練のプログラマー(69,260ポイント)
Date: 2009/03/09(月) 10:37
No:30308
|
|
Title: Re:未解決の外部シンボル
|
|
exe ファイルを直接実行すると、作業ディレクトリが exe ファイルの場所になります。
このとき、開くファイルパスが "char.bmp" だった場合、 "char.bmp" が exe ファイルと同じ場所になくてはなりません。
また、VC++ から「デバッグ実行」などで実行させた時は、デフォルトで作業ディレクトリが
ソリューションファイル(*.sln)のある場所になります。
そのため、直接 exe ファイルを開くのとでは作業ディレクトリが違うことになり、
VC++ から実行出来たのに、 exe ファイルから開くと実行できない、
といったことが起こります。(データの置き場所によっては逆もあり)
これを回避するには、プロジェクトのプロパティにあるデバッグカテゴリで、
作業ディレクトリを、"$(OutDir)" と記入("は不要)してください。
恐らくこれで双方とも exe ファイルのある場所を基点にファイルを探してくれるはずです。
174ポイント を手に入れた。
|
|
|
|
|
Name: ヒロ ..入門者(3,382ポイント)
Date: 2009/03/09(月) 10:42
No:30310
|
|
Title: Re:未解決の外部シンボル
|
|
すいません。書き方が悪かったですね。
デバッグ実行をしたときもexeファイルを実行したときも両方でエラーが出てしまっています。
12章まではきちんと実行されたのですが・・・
67ポイント を手に入れた。
|
|
|
|
|
Name: ヒロ ..入門者(3,450ポイント)
Date: 2009/03/09(月) 11:27
No:30315
| 解決!
|
Title: Re:未解決の外部シンボル
|
|
申し訳ないです。こちらも自己解決しました。
エクセルデータを再入力したところ正常に作動しました。
皆さまご迷惑をおかけしました。
これからはもっと自分で色々試してから書き込ませて頂きます。
68ポイント を手に入れた。
|
|
|
|
|
Name: Mist ..熟練のプログラマー(54,530ポイント)
Date: 2009/03/08(日) 16:58
No:30277
|
|
Title: Re:キャラクターの移動速度が
|
|
graf.cppの39行目からの「フィールド描画」の描画で、「画面外は描画しない処理※1」とコメントしているけど未実装のようですね。
全部描画しているからマップ広げたら遅くなったんじゃないでしょうか。
62ポイント を手に入れた。
|
|
|
|
|
Name: s-rush ..プログラマー(36,989ポイント)
Date: 2009/03/08(日) 17:42
No:30278
|
|
Title: Re:キャラクターの移動速度が
|
|
>>「画面外は描画しない処理※1」とコメントしているけど未実装のようですね。
どのような処理というかアルゴリズムが思い浮かばなかったので^^;
どのような感じで実装すればよろしいのでしょうか?
自分の位置を中心にY方向±10、X方向に±8の範囲を描画する
という感じでいいのでしょうか?
77ポイント を手に入れた。
|
|
|
|
|
Name: Mist ..熟練のプログラマー(54,775ポイント)
Date: 2009/03/08(日) 18:06
No:30279
|
|
Title: Re:キャラクターの移動速度が
|
|
> 自分の位置を中心にY方向±10、X方向に±8の範囲を描画する
まぁ、そういう方法でもいいと思いますけどちょっと計算すればそのマップチップが表示される範囲に含まれているかどうかはすぐにわかると思いますよ。
こういうのは自分で考えられるのが一番と思います。
一応、以下に私のやり方書いておきますのでどうしても思いつかない場合に見てください。
(以下の数行をマウスでドラッグすると見ることができます)
マップチップの一つの大きさが32*32ですから、あるマップチップが画面に表示されるかどうかは描画座標が以下の条件を満たしている場合になります。
-32 < 描画X座標 < 表示領域のX方向サイズ(640)
-32 < 描画Y座標 < 表示領域のY方向サイズ(480)
245ポイント を手に入れた。
|
|
|
|
|
Name: s-rush ..プログラマー(37,127ポイント)
Date: 2009/03/08(日) 22:02
No:30288
| 解決!
|
Title: Re:キャラクターの移動速度が
|
|
Mistさん、ご回答ありがとうございました。
おかげで解決することができました^^
ちなみに、ドラッグするとこなく解決したのですが、
私がはじめに定義した(?)描画範囲が違っていました^^;
-32 < 描画X座標 < 表示領域のX方向サイズ(640)+32
で考えていました・・・
ここんところを参考にさせていただいて修正しましたけど。
104ポイント を手に入れた。
|
|
|
|
Name: ユカイ ..かけだし(1,544ポイント)
Date: 2009/03/08(日) 12:20
No:30268
|
|
Title: 捕まえた数のカウント
|
|
またまた質問ですが、捕まえた敵の数をカウントして表示するプログラムを作りたいのですがわかりません。
おそらく、捕まえた敵が入っている箱?変数?を表示すればいいんだと思うのですが。
どういった表記にすればいいのでしょうか?
55ポイント を手に入れた。
|
|
|
|
Name: s-rush ..プログラマー(37,289ポイント)
Date: 2009/03/08(日) 12:41
No:30269
|
|
Title: Re:捕まえた数のカウント
|
|
static int hold;
とどこかに宣言しておいて、
敵をつかまえたらholdをインクリメントする。
これでいいんではないでしょうか?
static変数にする必要はないかもしれませんが・・・
91ポイント を手に入れた。
|
|
|
|
|
Name: ユカイ ..かけだし(1,516ポイント)
Date: 2009/03/08(日) 13:22
No:30274
|
|
Title: Re:捕まえた数のカウント
|
|
それをヒントにさせていただき、こんなのができました。
まぁ、友人に手伝ってもらったんですけどね^^;
28ポイント を落としてしまった。
|
|
|
|
Name: ユカイ ..かけだし(1,428ポイント)
Date: 2009/03/07(土) 12:00
No:30204
|
|
Title: 敵の増やし方
|
|
度々すみません。
今度は敵を捕まえるとまた増えるというものをつくりたいのですが、わかりません。
つまり、最初6匹敵がいて、1匹捕まえるとまた別のところに1匹出現するというものです。
1匹ずつ増やすのは
for(i=0;i<6;++i)
{
if(enemy[i].exist==0)//敵が存在していたら
{
enemy_walk(&enemy[i]);
enemy[i].img=enemy_image[(enemy[i].x%32+enemy[i].y%32)/8 + enemy [i].muki*4];
DrawGraph( enemy[i].x , enemy[i].y , enemy[i].img , TRUE );
}
をいじればいいという感じはわかります。どう変更すればいいのでしょう?
209ポイント を手に入れた。
|
|
|
|
Name: kazuoni [URL] ..比類無きプログラマー(71,338ポイント)
Date: 2009/03/07(土) 21:28
No:30232
|
|
Title: Re:敵の増やし方
|
|
規約は読んでくださいね。
プレタグがありません。
変更する場所はその下です。
if(enemy[i].bright_operation!=0)
{
....
}
else
{
1,存在フラグを元に戻す
2,座標、向きをランダムで決定
}
こんな感じですかね。
座標をランダムで出すのは敵の初期化の際に使ってますので、
ここを関数化したほうがよさそうですね。
そしたら2で使えます。
163ポイント を手に入れた。
|
|
|
|
|
Name: s-rush ..プログラマー(37,273ポイント)
Date: 2009/03/07(土) 22:26
No:30239
|
|
Title: Re:敵の増やし方
|
|
for(i=0;i<6;++i)
{
if(enemy[i].exist==0)//敵が存在していたら
{
enemy_walk(&enemy[i]);
enemy[i].img=enemy_image[(enemy[i].x%32+enemy[i].y%32)/8 + enemy[i].muki*4];
DrawGraph( enemy[i].x , enemy[i].y , enemy[i].img , TRUE );
}
・・・
}
この処理は、敵の移動に関する処理ですね。
なので、ここをいじるのではなく、kazuoniさんのおっしゃる通り、
その次の条件です。
PS
この前ご質問されていたクリア表示は実装できたのでしょうか?
プログラムを見た感じだと、その部分はまだ作られていないようですが・・・
234ポイント を手に入れた。
|
|
|
|
Name: ibis ..上級者(18,155ポイント)
Date: 2009/03/04(水) 22:46
No:29995
|
|
Title: アロケータ
|
|
std::allocatorがちょっとわからないです。
下記のようなメンバ関数があるのですが、期待通りの動作をしてくれません。
//template<typename, typename>class Block;
//typedef T ValueType;
//typedef Block<T, std::allocator<T> > BlockType;
//std::allocator<T> &value_allocator;
//std::allocator<Block<T, std::allocator<T> > > &block_allocator;
BlockType *allocate_one(ValueType &value){
ValueType *v = value_allocator.allocate(1);
value_allocator.construct(v, value);
BlockType *b = block_allocator.allocate(1);
block_allocator.construct(b, BlockType(v, 1));
/**/std::printf("%p, %p", v, b);
return b;
}
・value_allocator.allocateが毎回同じ値を返す。(初めてblock_allocator.allocateを呼ぶときの返り値よりも0x10だけ小さいアドレスを毎回返してくる)
・value_allocator.constructによってvが指してる値は変わらない。
gccとbcc32で試しましたが、どちらもこのような動作をします。
block_allocatorは普通に動くんですが。
なぜこうなるのか全くわからないです。
お手数ですが御教授願います。
326ポイント を手に入れた。
|
|
|
|
Name: TOMONORI ..かけだし(2,366ポイント)
Date: 2009/03/07(土) 16:18
No:30218
|
|
Title: Re:アロケータ
|
|
> value_allocator.allocateが毎回同じ値を返す
呼び出すごとにメモリを開放しているならそうなるとおもいます。
> 初めてblock_allocator.allocateを呼ぶときの返り値よりも0x10だけ小さいアドレスを毎回返してくる
繰り返して実行するなら大きなアドレスを返すと思いますけど・・・
一応BCCとVC++でやったら大きな値返してましたよ?
> value_allocator.constructによってvが指してる値は変わらない。
これも自分のところではちゃんと変化しました。
再現可能な形でほか(Blockとか)の実装も挙げてもらえますか?
あと最初の2文、
> //std::allocator<T> &value_allocator;
> //std::allocator<Block<T, std::allocator<T> > > &block_allocator;
の&の意味がよくわからないのですが、どういう意味でしょうか?
77ポイント を手に入れた。
|
|
|
|
|
Name: ibis ..上級者(18,361ポイント)
Date: 2009/03/07(土) 21:02
No:30230
|
|
Title: Re:アロケータ
|
|
ご返答ありがとうございます。
>呼び出すごとにメモリを開放しているならそうなるとおもいます。
開放はしてないはずなんですが・・・
>再現可能な形でほか(Blockとか)の実装も挙げてもらえますか?
やっぱり他の箇所に原因があるかもしれないですか・・・
一応実行可能ファイルも含めて添付しときます。
>&の意味がよくわからないのですが
アロケータのインスタンスが別の所にありまして、メンバとしてはそれの参照を保持してます。
149ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..伝説なるハッカー(327,332ポイント)
Date: 2009/03/07(土) 22:05
No:30234
|
|
Title: Re:アロケータ
|
|
>開放はしてないはずなんですが・・
解放しているように見えますよ。
block_allocator.construct(b, BlockType(v, 1));
この BlockType(v, 1)を引数に construct()が終わった後、
BlockTypeのデストラクタが実行されて、deallocate()されています。
194ポイント を手に入れた。
|
|
|
|
|
Name: ibis ..上級者(18,398ポイント)
Date: 2009/03/08(日) 00:49
No:30253
|
|
Title: Re:アロケータ
|
|
あ、一時オブジェクトのデストラクタですか。
Blockクラスに開放フラグつけてみたら正常に動きました。
ありがとうございます。
37ポイント を手に入れた。
|
|
|
|
Name: nayo ..初心者(8,855ポイント)
Date: 2009/03/07(土) 20:12
No:30228
|
|
Title: クラス管理について
|
|
現在C++でDirectXを用いた見た目3Dの2D格闘ゲームを作っています
やっとDirectXの処理が出来たのでいざプレイヤーを作ろうと思ったところで少し困りました
簡単に書くと
Objクラス ← Playerクラス ← キャラクターA・キャラクターB・キャラクターC・……
とPlayerクラスを派生させて各キャラクターを作ろうと思ったのですが、
これらのキャラクターのクラスを管理するにはどうすればよいのでしょうか
例えばプレイヤーの選択に応じて
必要なキャラクターのクラスをインスタンス化し、ゲーム内で対戦に使う、ということです
同じ型のクラスなら宣言一つで終わりますが
複数のキャラクタークラスがある場合、全部のクラスのポインタを宣言しておかないといけないのでしょうか
何か上手い実装方法があったらご教授お願いします
317ポイント を手に入れた。
|
|
|
|
Name: Justy ..伝説なるハッカー(327,138ポイント)
Date: 2009/03/07(土) 20:49
No:30229
|
|
Title: Re:クラス管理について
|
|
>複数のキャラクタークラスがある場合、全部のクラスのポインタを宣言しておかないといけないのでしょうか
その方法だと 100種類いたら、100個の異なるポインタを宣言しなくてはならなく
なるので、まずNGでしょう。
プレイヤークラスが十分に抽象化されているのであれば、
オーソドックスな1対1の場合、対戦するキャラクタークラス2つのインスタンスを
プレイヤークラス2つのポインタとして、保存しておけば事足りると思います。
190ポイント を手に入れた。
|
|
|
|
|
Name: nayo ..初心者(8,867ポイント)
Date: 2009/03/07(土) 22:16
No:30235
|
|
Title: Re:クラス管理について
|
|
早速の回答ありがとうございます
しかし自分の力が付いていかず…
プレイヤークラスが十分に抽象化されていた場合、
キャラクタークラスのインスタンスをプレイヤークラスのポインタとして保存できるのでしょうか
それともプレイヤークラスから派生せず、プレイヤークラス内で処理を分けて同じ型として管理しておくのでしょうか
せっかくお答えしていただいたのに申し訳ないです
12ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..伝説なるハッカー(327,662ポイント)
Date: 2009/03/07(土) 22:44
No:30242
|
|
Title: Re:クラス管理について
|
|
>キャラクタークラスのインスタンスをプレイヤークラスのポインタとして保存できるのでしょうか
出来ます。
class Object
{
public:
virtual ~Object() {}
};
class Player : public Object {};
class CharacterA : public Player {};
class CharacterB : public Player {};
Player *playerA = new CharacterA;
Player *playerB = new CharacterB;
Object *objA = playerA;
Object *objB = new CharacterB;
派生したクラスのインスタンスは基底クラスのポインタや参照で受けることができますよ。
試してみてください。
6章:継承
http://www5c.biglobe.ne.jp/~ecb/cpp/06_07.html
330ポイント を手に入れた。
|
|
|
|
|
Name: nayo ..初心者(8,912ポイント)
Date: 2009/03/07(土) 23:02
No:30249
| 解決!
|
Title: Re:クラス管理について
|
|
うをw まさかこんなテクニックがあったとは…
自分のやりたかったことがこれで実現できます
C++便利ですね
毎回素晴らしい回答ありがとうございます
45ポイント を手に入れた。
|
|
|
|
Name: kazuoni [URL] ..比類無きプログラマー(70,879ポイント)
Date: 2009/03/06(金) 22:29
No:30172
|
|
Title: テトリスのクラスについて
|
|
お邪魔します。
C++の入門を終え、
「いざ、プログラムを組もう!」って思ったんですが、
組んでいくと結局C言語の時と変わらない感じになりそうなんです。
まだいまいちオブジェクト指向っというものがしっくりきてません。。
まずテトリスから始めようと思ったのですが、
何をクラス化していいのかがよくわからないんです。
もし皆さんがC++でテトリスを作ろうとしたとき、
設計の段階で、ここはクラス化にっというのはどこら辺でしょうか?
ゲーム的には普通のテトリスに得点をつけたり、ホールドをつけたりできたらいいなっと
思っていますが、敷居が高いならば、まずは基本構造だけで十分です。
はっきりしない質問で申し訳ありません。
方針をお聞きしたかったんです^^;
よろしくお願いします。
146ポイント を手に入れた。
|
|
|
|
Name: BEMANI ..上級者(18,730ポイント)
Date: 2009/03/07(土) 04:40
No:30196
|
|
Title: Re:テトリスのクラスについて
|
|
>>kazuoniさん
自分がクラスを作る時のやり方を書いてみます。
まず、何が必要なのかをゲームに必要なパーツ毎に挙げていきます。
例えば、ブロック、面遷遷移、スコアなど。
パーツをある程度挙げられたら、そのパーツにはどんな変数・関数がいるのかを挙げてみます。
ブロック・スコアなど、描画の対象となるものは座標や描画関数などが要ると思いますので、
かぶった変数・関数を親クラスとし、これを継承。派生して子を作成する・・・と言う感じです。
自分はクラスの設計が難しいと感じているのか、色々こんがらがっていますが、
まずは作ってみて「ここ同じものがかぶってるな」と思ったら親クラスに放り込んでます。
全然参考にならないかもしれませんが;
組み始めないと何も分からないので、まずは組んでみるといいと思います。
186ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(153,225ポイント)
Date: 2009/03/07(土) 10:42
No:30200
|
|
Title: Re:テトリスのクラスについて
|
|
私だったら…
1:テトリミノを制御するクラス
2:フィールドを制御するクラス
3:ゲーム全体の流れを制御するクラス
4:描画関連のクラス
5:キー入力に関するクラス
3、4、5は纏めても良いかもしれないですね(^_^;)
ただ、分けておくと、環境が変わっても修正が最小限で済むので楽なんですよね。
151ポイント を手に入れた。
|
|
|
|
|
Name: kazuoni [URL] ..比類無きプログラマー(71,175ポイント)
Date: 2009/03/07(土) 21:03
No:30231
| 解決!
|
Title: Re:テトリスのクラスについて
|
|
BEMANIさん、バグさんご回答ありがとうございます。
今まで外部変数を使いながらのプログラミングをしていたので、
それを使わずにどうクラスで解決するかを悩んでました。
ちょっと設計しましたが、プログラムはほとんどクラスのメンバ関数で埋まってます。
これがいいかどうかよくわからないんですが・・・
いったんこれで組んでみます。
恐らく躓く気がしますが・・・まず一度試して、それから改善点を
見つけていきたいと思います。
今回はこれで解決とさせていただきますが、
また躓いたらご指導のほどよろしくお願いします。
お二方、ご回答ありがとうございました。またよろしくお願いします。
173ポイント を手に入れた。
|
|
|
|
Name: trx ..かけだし(2,205ポイント)
Date: 2009/03/07(土) 13:09
No:30207
|
|
Title: プレーステーション3コントローラー
|
|
Cとは、ちょっと違う質問なのですが、playstation2のコントローラーは、コンピューターは認識して、コントロールも効きますが、playstation3のコントローラーは、認識はしますが、コントロールは効きません。どうしてですが。playstation3のコントローラも動かせるプログラムは書けるのですか?
88ポイント を手に入れた。
|
|
|
|
Name: めいらる ..かけだし(1,688ポイント)
Date: 2009/03/07(土) 14:34
No:30214
|
|
Title: Re:プレーステーション3コントローラー
|
|
PS3コントローラ専用のドライバいれました?
私はPS3コントローラでやってますがDXライブラリ製ソフトもそれ以外のゲームも問題なく動作していますよ(^ω^)
41ポイント を手に入れた。
|
|
|
|
|
Name: trx ..かけだし(2,301ポイント)
Date: 2009/03/07(土) 15:15
No:30215
|
|
Title: Re:プレーステーション3コントローラー
|
|
まずコントロールパネルにあるゲームコントローラで
各ボタンの割り当てを確認してみてください。
は、やって見ました。
専用ドライバは、どうやって入れましたか?
playstation2の場合、自動的にドライバを入れて下さいと出てきましたけど。
73ポイント を手に入れた。
|
|
|
|
|
Name: めいらる ..かけだし(1,717ポイント)
Date: 2009/03/07(土) 17:35
No:30221
|
|
Title: Re:プレーステーション3コントローラー
|
|
PS3のドライバは公式ドライバが存在しないので検索で探してください
運がよかったらどこかにあるかもです
29ポイント を手に入れた。
|
|
|
|
Name: 蒼夜 ..ぴよぴよ(54ポイント)
Date: 2009/03/06(金) 18:38
No:30144
|
|
Title: 第5章の宣言の仕方のついて
|
|
宣言の仕方で"「main.cpp」「graph.cpp」「load.cpp」にある変数の宣言部と、extern宣言を全て消してください。"と書いてあったのですが、どこを消せばいいか分かりません。教えてください。
28ポイント を手に入れた。
|
|
|
|
Name: Kou ..入門者(2,897ポイント)
Date: 2009/03/07(土) 13:54
No:30211
|
|
Title: Re:第5章の宣言の仕方のついて
|
|
「main.cpp」
・externと先頭に表記されている文をすべて消す。
・extern宣言文のすぐ下にある「int 〜;」「ch_t ch;」の2行を消す。
「graph.cpp」・「load.cpp」
・extern宣言文をすべて消す。
これだけですよ^^
ファイルを開くと一番上からほんの少し下にあるので、すぐにわかると思います。
但し、「GV.h」・「function.h」が講座中で指定されている内容にキチンとなっている事が条件です。
131ポイント を手に入れた。
|
|
|
|
Name: yuuki ..かけだし(1,097ポイント)
Date: 2009/03/07(土) 10:34
No:30198
|
|
Title: project
|
|
いろいろと混乱してきたので、最初から始めようとしたのですが、projectをDLして、+Lhacaに解凍してもらっても、そのデータは空ファイルです。と言われます。
この場合、どうすればいいのでしょうか?
52ポイント を手に入れた。
|
|
|
|
Name: BEMANI ..上級者(18,835ポイント)
Date: 2009/03/07(土) 10:38
No:30199
|
|
Title: Re:project
|
|
>>yuukiさん
詳しくはちょっと良く分からないですが、
もしかすると最近よく見かけるDownLoadエラーかもしれません。
再度DownLoadに挑戦するか、時間を置いて試してみるなどしてみてください。
もし、DownLoad出来た時、またこのような事態にならないように
どこかにそのプロジェクトをバックアップしておいた方がいいと思います。
105ポイント を手に入れた。
|
|
|
|
|
Name: toyo ..プログラマー(26,950ポイント)
Date: 2009/03/07(土) 11:35
No:30202
|
|
Title: Re:project
|
|
以前から話題になっているダウンロードできない現象です
私もIEでリンククリックだとうまくダウンロードできませんね
私の環境ではIEでは右クリックして「対象をファイルに保存」だとうまく出来ます
またFirefoxでも普通にダウンロードできます
118ポイント を手に入れた。
|
|
|
|
|
Name: SooA [URL] ..初心者(6,588ポイント)
Date: 2009/03/07(土) 14:01
No:30212
|
|
Title: Re:project
|
|
インターネット一時ファイルを削除してもダメですか?
ブラウザのメニューから
ツール
↓
インターネットオプション
↓
インターネット一時ファイルの
ファイル削除ボタン
(全てのオフライン コンテンツを削除)
98ポイント を手に入れた。
|
|
|
|
Name: TKOZ ..上級者(19,724ポイント)
Date: 2009/03/06(金) 20:47
No:30153
|
|
Title: STGゲームの古いソースなのですが…
|
|
Vectorに登録されているのですが、ユーザー様からバグ報告を頂きました。
なので、せっかくメールを頂いた熱いユーザー様の気持ちを汲み取って
もう一度やる気になっている訳ですが、スコアランキングを
付加しようとしています。
しかし、スコアネームを入力するところ(Enterキーを押す)でエラー表示がされ、
強制終了してしまいました。
ソースは、結構自分の中では巨大なのですが、エラー箇所が分かりましたので、
score.cppのScoreSort(str2,sys.point);という部分です。これをコメント化すれば、
いいのですが、それでは、前に進まないので、困っています。
それ以外にも、原因がありそうですが、ポインタの知識が皆無な為、
無茶な事をやっているかもしれません。
開発環境は、WindowsXP Pro VisualC++6.0です。
ソースをアップロードしますので、どうかよろしくお願いします。
dataフォルダの画像等のデータは巨大なのでアップロードしますが、分割して、アップロードします。
250ポイント を手に入れた。
|
|
|
|
Name: TKOZ ..上級者(19,752ポイント)
Date: 2009/03/06(金) 20:50
No:30154
|
|
Title: Re:STGゲームの古いソースなのですが…
|
|
画像データ(dataフォルダ内のデータ)を2回に分けてアップロードします。
28ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..伝説なるハッカー(326,235ポイント)
Date: 2009/03/06(金) 22:14
No:30169
|
|
Title: Re:STGゲームの古いソースなのですが…
|
|
>ScoreSort
ソースを眺めてみました。
全体的に fopenで開いた時にエラーチェックをしていないですよね?
ScoreSortもそうで、score.datを開いてデータを読み取ろうとしていますが、
そのデータはどこかにありますか?(確認した限りみつかりませんでした)
無い場合読み取れないので 変数 fpは NULLなので、fscanfで落ちるかもしれません。
140ポイント を手に入れた。
|
|
|
|
|
Name: TKOZ ..上級者(19,946ポイント)
Date: 2009/03/07(土) 03:58
No:30193
|
|
Title: Re:STGゲームの古いソースなのですが…
|
|
Justyさん、ありがとうございます。
おかげで、エラーで強制終了は無くなりました。
Justyさんの言うとおりで、score.datを作成していなくて、
作成したら、うまくいきました。
あと、得点の変数をいじってなかったので、直したら、上手く
score.datが更新されました。
2倍のポイントを手に入れた! 188ポイント を手に入れた。
|
|
|
|
|
Name: TKOZ ..上級者(19,979ポイント)
Date: 2009/03/07(土) 03:59
No:30194
| 解決!
|
Title: Re:STGゲームの古いソースなのですが…
|
|
Justyさん、ありがとうございました。
解決をクリックするのを忘れてました。。。
33ポイント を手に入れた。
|
|
|
|
Name: 杏仁豆腐 ..ぴよぴよ(40ポイント)
Date: 2009/03/06(金) 21:46
No:30162
|
|
Title: PlayMusicについて
|
|
初めまして、サンプルなのに動かなくて困ってます。ご教授お願いします。
15章でPlayMusic関数、PlaySound関数を使用して音楽を流すコードが紹介されていますが、うまくいきません。
14章以前のプログラムは全て正常に動いています。
mp3,midi形式のファイルは再生することができず、wav形式だけは再生することができています。
サンプルのまま使っているのでコード的な問題はないと思うのですが、残るはDXライブラリ導入の失敗しか思いつきませんでしたので、確認しましたが改善せず。
VisualStudio 2005 ProEditionですので以下の説明通りに導入しました。
http://homepage2.nifty.com/natupaji/DxLib/dxuse_vc2005.html
何か問題点が思い浮かびましたらお願いします。
40ポイント を手に入れた。
|
|
|
|
Name: Justy ..伝説なるハッカー(326,249ポイント)
Date: 2009/03/06(金) 22:26
No:30171
|
|
Title: Re:PlayMusicについて
|
|
PlaySound()は旧関数なので、PlaySoundFile()を使用してみてください
(引数は同じなので関数名だけ差し替えてください)。
それで改善されない場合は DXライブラリが出力するデバッグ用のログファイル(大抵は Log.txt)に
何か再生できないエラーなどが記載されているかもしれません。
確認してみてください。
14ポイント を手に入れた。
|
|
|
|
|
Name: 杏仁豆腐 ..ぴよぴよ(67ポイント)
Date: 2009/03/06(金) 23:33
No:30178
|
|
Title: Re:PlayMusicについて
|
|
Justyさんありがとうございます。
PlaySoundFile関数を使っても結果は同じでした。
logで気になる部分としては
852: 総サウンドメモリ領域:0.00KB 空きサウンドメモリ領域:0.00KB
という表示が出たのとmidファイル再生時のみ下記エラーがlogに残っていました。
1161: 音声ファイルのPCMへの変換に失敗しました
1162: 右記の音声ファイルのロードに失敗しました_2:test.mid
引き続きお願いします。
27ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..伝説なるハッカー(326,201ポイント)
Date: 2009/03/06(金) 23:57
No:30182
|
|
Title: Re:PlayMusicについて
|
|
>総サウンドメモリ領域:0.00KB 空きサウンドメモリ領域:0.00KB
こちらは特に問題ありません。
>音声ファイルのPCMへの変換に失敗しました
>1162: 右記の音声ファイルのロードに失敗しました_2:test.mid
えーと、midiを再生する場合は PlaySoundFile()ではなく PlayMusic()を
使ってみてください。
48ポイント を落としてしまった。
|
|
|
|
|
Name: 杏仁豆腐 ..ぴよぴよ(200ポイント)
Date: 2009/03/07(土) 00:25
No:30185
|
|
Title: Re:PlayMusicについて
|
|
Justyさんありがとうございます。
midi形式はPlaySound関数
mp3形式はPlaySoundFile関数ですね。参考にします。
logを見てみましたが、特に失敗という項目が見当たりませんね。
572: 周期的エフェクトの作成に失敗しました。
というのが二つ出てますが、ジョイパットの辺りなので関係なさそうですね。
引き続き何か気づきましたらお願いします。
133ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..伝説なるハッカー(326,679ポイント)
Date: 2009/03/07(土) 01:29
No:30189
|
|
Title: Re:PlayMusicについて
|
|
そうなると、後はやれることはそれほど多くありません。
・ ファイルのパスが合っているか確認してください。
・ Windows media playerなどでその mp3が再生できるか確認してください。
・ 別の mp3を試してください。
・ mp3をPlaySoundFile()で再生したとき 、
その戻り値はどうなっていますか?
・ mp3をPlayMusic()で再生してみて下さい。
その戻り値はどうなっていますか?
>midi形式はPlaySound関数
違います。PlayMusic()です。
2倍のポイントを手に入れた! 478ポイント を手に入れた。
|
|
|
|
|
Name: 杏仁豆腐 ..ぴよぴよ(331ポイント)
Date: 2009/03/07(土) 02:07
No:30192
| 解決!
|
Title: Re:PlayMusicについて
|
|
セルシオさん、Justyさんありがとうございます。
ミュートではありませんでした。
パスもOKです。
mp3の再生もできました。
別のMP3でも再生できませんでした。
戻り値を調べようとして書き直してたら何故か再生されました^^;
サンプルコードに戻しても再生されているので、何が原因だったのかさっぱりです。
お二方ありがとうございました!
131ポイント を手に入れた。
|
|
|
|
Name: スー ..ぴよぴよ(89ポイント)
Date: 2009/03/05(木) 01:28
No:30007
|
|
Title: 綺麗なエフェクトの作り方
|
|
今シューティングゲームを作っているのですが、見た目が綺麗なボムの作り方がわかりません。
皆さんがどのようにボムなどのエフェクトを作っているのか教えて頂けたらありがたいです。
89ポイント を手に入れた。
|
|
|
|
Name: スー ..ぴよぴよ(266ポイント)
Date: 2009/03/05(木) 01:42
No:30013
|
|
Title: Re:綺麗なエフェクトの作り方
|
|
>キレイではないかもしれませんが、
>龍神録プログラミングの館のボムの作り方とか参考にならないでしょうか?
龍神録のボムはとても綺麗だと思います。
画面の暗さの調整、αブレンドなどは参考にさせてもらっています。
ですが、ボムの元の画像を作ることができません。
一応フォトショップを持っていますが、宝の持ち腐れ状態です><;
ここのサイト見ろ!などがありましたら是非教えてください。
177ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) ..ウィザード(1,003,183ポイント)
Date: 2009/03/05(木) 01:51
No:30014
|
|
Title: Re:綺麗なエフェクトの作り方
|
|
う〜ん、私も絵を描くのは人一倍ヘタクソですが、ボカシでテキトーに書いたらあんなボムの画像くらいなら作れますよw
素材の画像みてもらったら解ると思いますが、めっちゃブラシで適当に書いただけです。
もしイラストやエフェクトの絵を勉強したいなら書店に行ってそういう本を買って練習してみてはどうでしょう。絵の事はよくわかりませんが・・。
イラスト書くのが好きな人は沢山いるのでそういうコミュとか掲示板でアドバイス受けるのもありかもしれません。
ここの常連さんならBIMANIさんとかすごくイラストうまいですよ。BIMANIさん見てますかね〜?
268ポイント を手に入れた。
|
|
|
|
|
Name: BEMANI ..上級者(18,104ポイント)
Date: 2009/03/05(木) 03:41
No:30017
|
|
Title: Re:綺麗なエフェクトの作り方
|
|
>>スーさん
PhotoShopのバージョンは何でしょう〜。
(自分と同じ7.0だと少しくらいは解るかもしれません)
あと、どんな画像が作りたいのでしょうか?
>>管理人さん
見てますよ〜。
ちなみに、PhotoShopの使い方自体は本を読んで勉強した訳ではないので
書籍に関しては何もアドバイス出来ないです、ごめんなさい;
弾の画像を作るだけでしたら画力とかは一切いらないですよ〜
91ポイント を手に入れた。
|
|
|
|
|
Name: スー ..ぴよぴよ(430ポイント)
Date: 2009/03/05(木) 12:33
No:30041
|
|
Title: Re:綺麗なエフェクトの作り方
|
|
>素材の画像みてもらったら解ると思いますが、めっちゃブラシで適当に書いただけです。
適当にやってあのような画像を作れるのは羨ましいです。
書籍も探してみましたが写真の加工方法が大半で、ゲームにつかえそうなエフェクトが載っている本は少なく
買うことは断念しました。
>PhotoShopのバージョンは何でしょう〜。
PhotoShopのバージョン7.0です。
目標は式神の城の結城 小夜の光鴉陣です。光の帯の表現とかがよくわからないです。
弾の画像はドット絵ソフトでなんとか作ることができました。
164ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) ..ウィザード(1,003,434ポイント)
Date: 2009/03/05(木) 12:48
No:30044
|
|
Title: Re:綺麗なエフェクトの作り方
|
|
私もフォトショは使いながら覚えま・・いや、覚えたとはいえないか^^;
そのせいで大半の機能は使ってないはずです;
私も7.0使ってます。BEMANIさんも7.0らしいです。
まず、あれこれ自分で書いてみたらいいんじゃないでしょうか?
インターフェイスわかりやすいですし、アイコンみたら何するものかわかると思いますし。
レイヤーとかの機能の意味がわかっていれば充分だと思います。
鉛筆で書いてみたり、ブラシで書いてみたりぼかして見たり
レイヤーの効果で薄くしてみたり。
あとフィルタ関連は一通り全部試してみて覚えるのが一番かと。
以前レーザーの作り方を動画で紹介したことあります。
http://www.nicovideo.jp/watch/sm6055308
何かの参考になればどうぞ
小夜の光鴉陣が何かよくわからないですが、
光系ってただ白を加算ブレンドすればいいので結構楽な部類だと思います。
ブラシで適当にモワモワしたものを書いて、プログラムで加算ブレンドすると光っぽくみえますよ。
加算ブレンドで光を表現するサンプルはサンプルプログラミングの館の川のサンプルで使っています。
251ポイント を手に入れた。
|
|
|
|
|
Name: BEMANI ..上級者(18,697ポイント)
Date: 2009/03/05(木) 17:11
No:30069
|
|
Title: Re:綺麗なエフェクトの作り方
|
|
>>スーさん
PhotoShop7.0ですか〜。
そしたら、新規作成をすると画面右に「背景」というレイヤーが一枚あると思います。
(デフォルトですと、真っ白のキャンバス(背景)が出来あがると思います)
もし、これからPhotoShopを使って画像作る! という場合
この「背景」レイヤーには何も描かないようにした方がいいです。
(例として一つ理由を挙げると、後で透過処理がやりやすいなど)
新規作成の後には必ず、「背景」レイヤーの上に「新規レイヤー」を作ってください。
(上のメニューから「レイヤー→ 新規→ レイヤー→ OK」)
そうすると、「背景」の上に「新規レイヤー」が出来あがると思いますので、
こちらに絵を描くようにしてください。
この「新規レイヤー」に絵を描いたあと
「消しゴムツールのアイコン長押し→ マジック消しゴムツール」と選び、
背景レイヤーを選択してクリックすると、透過処理されます。
後は「〜.png」等で保存すればOKです。
弾をぼかすのであれば、上のメニュー「フィルタ→ ぼかし→ ぼかし(ガウス)」を選択すれば
ぼかすことが可能です。
>目標は式神の城の結城 小夜の光鴉陣です。光の帯の表現とかがよくわからないです。
同じく光鴉陣というものが解らないです。
これだ〜という画像があれば何かアドバイス出来るかもしれませんね〜。
593ポイント を手に入れた。
|
|
|
|
|
Name: 桃印 ..初心者(6,967ポイント)
Date: 2009/03/05(木) 19:31
No:30084
|
|
Title: Re:綺麗なエフェクトの作り方
|
|
はじめまして、スーさん。
ちょっと気になったのでレスさせていただきます。
もしかして、小夜の光鴉陣ってこんな感じで良いですか?(添付ファイル参照)
こんなので良ければ作り方お教えしますが……というか、解説書いてたんですが間違えてブラウザ閉じちゃいました。なのでスーさんの返答次第ということにさせていただきます。
この画像を加算描画で自機から四方にずばばーっと伸ばしてやれば、それっぽくなるんじゃないかな?
ちなみにこれ、3分ぐらいでできます(笑
153ポイント を手に入れた。
|
|
|
|
|
Name: スー ..ぴよぴよ(692ポイント)
Date: 2009/03/06(金) 00:57
No:30108
|
|
Title: Re:綺麗なエフェクトの作り方
|
|
↑光鴉陣です。これが中央に集まってきます。
>管理人さん
レーザーの作り方とても参考になりました。
しかし、ぼかしってすごいですね。ぼかしの使い方がわかった気がします。
加算ブレンドなどはいろいろ試して覚えたいと思います。
>BEMANIさん
φ(.. ) メモメモ
参考になります。
>桃印さん
すごく光鴉陣に見えます。
是非作り方を教えてください。
2倍のポイントを手に入れた! 262ポイント を手に入れた。
|
|
|
|
|
Name: 桃印 ..初心者(7,277ポイント)
Date: 2009/03/06(金) 08:27
No:30111
|
|
Title: Re:綺麗なエフェクトの作り方
|
|
式神の城は前に一度ちょろっとやっただけだったのであいまいな記憶便りだったんですが、スーさんが求めているものと一致していたようでなによりです。
それでは解説を始めますが、まず私が使用しているのはPhotoshopCS3です。しかし使用するのは7.0にもある(と思う)機能ばかりなのでご安心ください。またphotohopの基本的な操作については省略します。レイヤーの概念や基本ツールの使い方が分かるものとして解説いたします。分からない動作がありましたらヘルプか講座サイトなどを参考にしてみてください(すいません投げっぱなしで;
では、以下長いですが解説です。急ぎ書いたので誤字脱字はご勘弁を。
さて、それでは「ゆらめく炎のような光の帯」のエフェクトを作りたいと思います。
まず200px×50pxぐらいの大きさで新規ファイルを作成します。すると「背景」レイヤーが一つある名前未設定のファイルが作成されます(背景でない場合でもとりあえずレイヤーが一枚あるはず)。たぶんレイヤーは白色か透明に初期設定されてると思うので、色を選んで黒で塗りつぶしてください。選択範囲->全てを選択で塗りつぶしツールを使えばできます。
次に、ベースとなる光の部分を作りましょう。画像ではシアンカラー(水色)の部分がそうです。
まず「描画色から透明色へ」という設定のグラデーションツールを選択し、自分のつけたい色を適当に選びます。グラデーションツールは、クリックした場所からドラッグした場所までグラデーションを引いてくれます。クリックの根元から後ろは塗りつぶし、ドラッグ先端は透明のまま、という感じです。
先ほど黒に塗りつぶした「背景」レイヤーの最下段から、画像中ごろからちょっと上ぐらいまでクリックドラッグでグラデーションを引きます。すると任意の色から黒い色にグラデーションする画像が出来たと思います。これでベースの光の部分は完成です。
ベースを作り終えたら、根元の強い光の部分を作ります。画像では白色になってる部分がそうです。
まず新しいレイヤーを作ります。レイヤーを新規作成すると、レイヤーパレットが上から「新規レイヤー」「背景」となってると思います。今から新規レイヤーを描画するので、新規レイヤーを選択してください。
先ほどと同じように「描画色から透明色へ」のグラデーションツールで、色は白色を選択してください。真っ白です。それで同じく最下段からほんの少し上までドラッグします。先ほどの時もそうですが、ドラッグの最中に傾いたまま話すとグラデーションが斜めにつくので、ちゃんとずれてないか見ながらグラデーションかけてください。
さて、グラデーションをかけると画像が「白」→(最下段ちょっと上から)「任意色」→(画像中ごろから)「黒」というようなレーザーっぽい画像になったと思います。これだけでもうそれっぽいですね。
さて、最後に作るのは「青白い部分のもやもやです」。
たぶんスーさんはここの作り方が分からなくて困っていたんじゃないでしょうか。
このもやもやを作るにはphotoshopの「フィルタ」を使います。このフィルタは画像加工や作成にあたって凄く凄く多様する機能なので、コレを機に覚えてみてください。
それでは、また新しくレイヤを作ります。同じくレイヤーの新規作成で良いですが、このレイヤは「背景」と「白グラデ」の二つのレイヤーの間に持ってきてください。背景レイヤーを選択しつつ新規作成か、新規作成をした後にレイヤーウィンドウ操作で真ん中に持ってくるのどちらでも構いません。
新規にレイヤを作成したら、レイヤーの設定を「通常」から「オーバーレイ」に変えます。これはレイヤーの描画情報を変更するもので、DXライブラリにもある加算乗算アルファ描画みたいなもんだと思ってください。
最後に、このオーバーレイレイヤーにもやもやを書きます。色の「描画色」を黒、「背景色」を白してください。
色を選択したら、ツールバーの「フィルタ」を選択し、ダウンして現れた項目の「描画->雲模様1」を選びます。すると画面一面に何か灰色っぽいもやもやが出来たと思います。そう、これは文字通り描画色と背景色の二色で雲っぽいもやもやを作成する機能なのです。
しかしこれではもやもやが大雑把すぎるので、このもやもやの目を細かくしていきたいと思います。同じくツールバーの「フィルタ」から「描画->雲模様2」を選択して実行します。すると黒と白の色合いが変わると思います。この雲模様2は、描画色と背景色の二色で指定の画像に雲模様の変化をつけていく(分かりにくいですが;)みたいな機能です。これを連打すると段々目が細かくなっていきますので、お好みのもやもやになるまで連打していきましょう。たぶんctrl+Fで繰り返しができるはずです。
お好みのもやもやが描けたらそこで雲模様2を終了、あとはレイヤーを結合するなりそのまま保存するなりして、pngで書き出してやれば先ほど私が作った画像と同じものができると思います。これで解説を終了します。
今回は「フィルタ」の雲模様だけを使いましたが、他にも「ぼかし->ガウスぼかし」や「移動ぼかし」や「放射状ぼかし」、極座標やピクセレートなども製作に使えると思いますので、別個に勉強してみてください。使いながら覚えるのが一番だとは思いますがw
それでは長くなりましたが、これにて。
分からない部分が何かあればお申し付けくださいなー。
310ポイント を手に入れた。
|
|
|
|
|
Name: BEMANI ..上級者(18,354ポイント)
Date: 2009/03/06(金) 14:38
No:30128
|
|
Title: Re:綺麗なエフェクトの作り方
|
|
桃印さんが仰った機能は7.0にもあるので全く問題なく作成できるかと思います。
余談になりますが、その絵を一枚だけ使うのならいいですが、
もし画像を横にずらーっと並べる時を考慮したとすると
恐らく画像の繋ぎ目があるのではないかな〜と感じました。
ですので、画像のループ処理も合わせてやるといいと思います。
ただ、繋ぎ目が目立たない可能性もありますので実際作って描画して調整するといいでしょう。
3ポイント を手に入れた。
|
|
|
|
|
Name: スー ..ぴよぴよ(717ポイント)
Date: 2009/03/07(土) 01:34
No:30190
| 解決!
|
Title: Re:綺麗なエフェクトの作り方
|
|
>桃印さん
丁寧な説明ありがとうございます。無事に作ることができました。
これを機にフォトショップのいろいろな機能を勉強してみようと思います。
>Dixqさん
YouTubeとかニコニコを探してみたのですが見つからなかったです。
自分が持っているゲームもPS2なので動画を撮ることもできません。
すみません。
>BEMANIさん
アドバイスありがとうございます。
ぼかしをうまく使ってループっぽいのができました。
Dixqさん、BEMANIさん、桃印さん
無事に光鴉陣っぽいのが作ることができました。
どうもありがとうございました。
25ポイント を手に入れた。
|
|
|
|
Name: セルシオ ..ぴよぴよ(91ポイント)
Date: 2009/03/05(木) 16:19
No:30067
|
|
Title: ゲーム系企業さんの提出作品について
|
|
現在就職活動まっしぐらの者ですが
ゲームプログラミングの館と龍神録の館を利用して作った作品(自作)を
ゲーム系企業さんの提出作品として出してもいいでしょうか?
↑のようなことがどこにも書いていなかったので(書いてあるのは卒業制作、または教育機関等の課題として提出)しか書いてなかったので、C言語何でも質問掲示板を借りて
ゲーム系の企業さんの提出作品として提出していいのかの確認がとりたいです。
91ポイント を手に入れた。
|
|
|
|
Name: Justy ..伝説なるハッカー(326,095ポイント)
Date: 2009/03/05(木) 22:39
No:30102
|
|
Title: Re:ゲーム系企業さんの提出作品について
|
|
>提出作品として提出していいのかの
出していいかの是非については Dixqさんの判断次第ですが、個人的な考えを申しますと、
提出先にも一応尋ねた方がいいかと思いますし、どちらか言えばやめておいたほうが無難です。
というのも評価基準・採用基準は企業によってまちまちなので、
中には提出先ではそういうのをNGとしているかもしれませんし、
OKだったとしても一部の例外を除いて評価を悪くするかもしれません
ちなみに一部の例外というのは、たとえば
・ オリジナルの館のコードや要素がかけらも無くなるくらい改変されている、
或いは利用にしたところが非常に少ない場合
・ メインの作品が別にあり、館を利用して作った方はおまけで添付した場合
・ オリジナルの館のコードや要素は土台であり、自分で追加したところ評価してほしい場合
例)館を利用して弾幕 STGを作り、その上で独自に開発したイカサマなしで
激しい弾幕の中最終的に全ての弾を自然な動きで避けきる学習型のプレイヤーAIを搭載した
とか(他にもあるとは思いますが)明確な理由がある場合です。
多分こういうのなら提出先が問題なければ、構わないかと思います。
が、そうでないとしたらなぜ館を利用したのか納得のできる理由と、
どこをどう変えた(どこからが自分のコードなのか)を明確にしないと
採用担当者は心理的にマイナス要素を抱えた状態で評価することになりますし
そこに「キラリと光る何か」がないと厳しいかもしれません。
373ポイント を手に入れた。
|
|
|
|
|
Name: dic ..上級者(15,102ポイント)
Date: 2009/03/05(木) 22:58
No:30104
|
|
Title: Re:ゲーム系企業さんの提出作品について
|
|
私もゲーム系の企業への就職を目指してますが
仮に通ったとすると、これだけの技量はあるんだと判断されるのではないでしょうか
関係者ではないので一般応募者の話でした
83ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 [URL] ..熟練のプログラマー(67,021ポイント)
Date: 2009/03/06(金) 00:00
No:30106
|
|
Title: Re:ゲーム系企業さんの提出作品について
|
|
ゲーム企業に実際に面接に自作ゲームを提出したことのある私からの話です。
(その企業で働いています)
私のときは、プログラム作品は事前提出で、面接の時にその作品について話す形でした。
(恐らくどこも同じような順序だと思いますが)
その時聞かれたのが、主に提出作品についてでした。
(製作期間やどこらへんが苦労したかなど)
面接ではそのほかに、
・好きなゲームジャンルやソフト
・最近やってるゲーム・やってみたいゲーム
・そのゲームで興味があると思うところ
・提出したプログラミング言語以外に扱うことの出来る言語
・DLL形式ファイルを作成したことがあるかどうか
・当たり判定を自力で書くことが出来るか
などが質問されました。
ちなみに提出した作品は落ちものパズルゲームで、
・製作期間は丸三日
・C言語+DirectX で作成(なぜかこれで驚かれた)
・SEあり・BGMなし
・若干バグあり
の中途半端な状態でした。
それでも採用されたのは、企業が求める技量があったからなのかもしれません。
と書くと変な意味でとられそうですが、
要は他作者のソースを利用した作品でも、自分自身の技量が相手側に伝わるかどうかです。
提出にソースも添付しておくと、どの程度の技量かが分かりやすくなります。
一緒にゲームを作る方々にとって、そこが一番重要だったりしますので。
411ポイント を手に入れた。
|
|
|
|
|
Name: セルシオ ..ぴよぴよ(260ポイント)
Date: 2009/03/06(金) 02:28
No:30109
|
|
Title: Re:ゲーム系企業さんの提出作品について
|
|
>>Justyさん
忠告ありがとうございます
キラリと光る何かですか・・・ がんばってみますね^^
>>dicさん
もしそのように判断されたら 就いたあとが怖いですね^^;
>>御津凪さん
面接での質問内容参考になります!(タイトルとは関係ないですけど)
そのとき提出したDXライブラリなんでしょうか?
あと、DLL形式ってなんですか?^^; 勉強不足でわからないです><;
Dixqさんもし見ているのであれば大丈夫なのかどうなのかお返事が聞きたいです><;
169ポイント を手に入れた。
|
|
|
|
|
Name: array [URL] ..熟練のプログラマー(48,319ポイント)
Date: 2009/03/06(金) 07:20
No:30110
|
|
Title: Re:ゲーム系企業さんの提出作品について
|
|
文章だけでは、どこまでオリジナルな作品になってるのかわかりにくいと思うので、Dixqさんに制作したゲームを直接見てもらった方がDixqさんも回答しやすいと思いますよ。
Dixqさんのメールアドレスは
「dixqhp☆gmail.com」☆は@
に送れば大丈夫だと思います。
119ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) ..ウィザード(1,003,573ポイント)
Date: 2009/03/06(金) 09:35
No:30112
|
|
Title: Re:ゲーム系企業さんの提出作品について
|
|
こんにちは。今忙しい時期ですね。
一応規約にある
ここのプログラムコードを利用して制作したゲームを卒業制作、または教育機関等の課題として提出する場合
の部分にこの類のことは含めさせていただいています。
結論から申し上げますと、ご自身の責任の上で好きなように使っていただいて結構です。
規約は設置させて頂いていますが、あっても事実上無いに等しいんですよね・・。
年始から50通以上卒業制作や課題の類として提出していいかという連絡をして頂きました。
しかしそのほとんど全ては名前も提出先も具体的な内容も無く
「こんにちは。卒業制作で参考にしたいんですがいいですか?」
みたいな短文一行でした。
本名や提出先を教えて欲しいとは書いてないのでそれでいいのですが、
報告してもらっても本名と提出先の大学名や専門学校名、企業名がわからないと把握も出来ないし、
どこの誰がどういう形で使っているのかわかりませんから、この報告は事実上無かったも同然なんですよね。
作品がどんなものかもわからないのに承諾も何も無いと思います。
「いいですか?」>「いいですよ」と言うなら最初からいいと書いておけばいいじゃないかと思われるかもしれません。
ただ「ばれなきゃコピーでいいや」と思うのではなく「報告したからにはきちんと作ろう!」と思っていただきたいなと思い、規約を設置させて頂きました。
以前「ここの館の内容と全く同じ内容のものが卒業制作として提出されている」という報告を受けましたがそのような報告はあまり受けたくないものです・・。
セルシオさんがどの程度オリジナル要素を詰め込んで、制作されているのかわからないので、的外れな言動かもしれませんので、一般的な事実としてお聞き下さい。
採用側は、誰かが作ったプログラムを改良しただけで提出された場合や他人に作ってもらった場合などもきちんと見分けようとしてくると思います。
実際誰かのプログラムをコピーしたり作ってもらったり、そういうことをする人はいると思います、
だから企業もそういう事は想定しているとおもいます。
作品だけ見て良いと思ったから採用したのに、実際雇ってみたらその人には全く作り上げる力は無かったなんてことにはなりたくないと思うはずです。
また、ゲーム会社なら、採用側はネット上で情報収集出来そうなゲームプログラム系のサイトはチェック済みだと思います。
コードを引用できそうなサイトも確認済みだと思いますし、プログラムにコピー部分があれば見抜かれる可能性は低くないと思います。
ある記事で読みましたが、
ネットに書いてあった「ウケのよかった志望動機」を参考に、志望動機を書いたら、面接で
「それ○○の書き込みを見たんじゃなくて、自分の志望動機なの?」と聞かれた
なんて事があるようです。
採用側はあらゆることを調べてくると思います。
また、面接官もプロですから、
話している途中、何かウソを言えばすぐに見抜かれると思います。
例えば具体的にどこかのプログラムについて言及された時、それについて
「う〜ん、そのソースコードはよくわかりません」とか「結構前に作ったので忘れました」とか言ってしまうと典型的な例になってしまうと思います。
仮に合格通知が来ても、「履歴書や面接で虚偽の言動をした」と後から判明した場合、取り消される場合があります。
せっかく合格したのに、合格後もそのような連絡が無いかビクビクしながら過ごさないといけないのは残念だと思います。
現在、とても就職活動が難しい時期だと思いますが、だからこそ完璧な状態で挑めるよう頑張って欲しいと思っています。
良い企業への就職が決まる事、お祈りしています。
135ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 [URL] ..熟練のプログラマー(67,603ポイント)
Date: 2009/03/06(金) 10:49
No:30117
|
|
Title: Re:ゲーム系企業さんの提出作品について
|
|
>> セルシオさん
> そのとき提出したDXライブラリなんでしょうか?
いえ。DXライブラリが内部で使用している DirectX を使ってます。
(DXライブラリ は DirectX を簡単に扱えるように作られています)
DirectX は高度なゲーム製作に必要な基本ライブラリ(OpenGLなどもある)なので、
実質、DirectX のゲームを一から自作したということになります。
> あと、DLL形式ってなんですか?^^;
簡単に言うと、システムディレクトリとかにずらーっとある、
アイコンに歯車の付いた、拡張子が dll のファイルです。
単体では実行せず、別の実行ファイルから読み込まれて実行することが出来るプログラム形式です。
実際はゲーム製作に DLL は使いませんが、
社内ツール製作などで特殊形式のデータを作ったりすることがあるので、
この質問は恐らく exe 実行形式以外でのコンパイル設定が出来るかを問われたのだと思います。
ちなみに、
ゲーム系企業では即戦力となる可能性が高いと思うので、その点も考慮して挑んでください。
そうでないと、就いてからひいひい言うことになります。(それでは楽しくないですからね)
私からも就職が決まることを応援しますよ。
(私は未成年ながら就職直後に即戦力とされた方です)
336ポイント を手に入れた。
|
|
|
|
|
Name: セルシオ ..ぴよぴよ(578ポイント)
Date: 2009/03/07(土) 01:15
No:30187
| 解決!
|
Title: Re:ゲーム系企業さんの提出作品について
|
|
>>arrayさん
すみません実はまだゲームプログラミングの館で勉強させていただいているので
制作はできてないんです><;
>>Dixqさん
すみません実はまだゲームを制作できてないんです。(作りかけでもない)
確かに企業さんからとしたら、自分でちゃんと作ったやつが見たいですよね。
たしかにコピーはいけませんね。
もし龍神録の館を利用して作ったとき(利用しなくて違うゲームをDXライブラリを使って作ったとき)
ゲーム本体を添付して言いますね。
お祈りありがとうございます。m(_ _)m
>>御津凪さん
DirectXって難しくないですか?専門学校のほうでやっていましたけど毎回の課題に
ヒーヒー言わされていましたよ
御津凪さん応援ありがとうございます。m(_ _)m
318ポイント を手に入れた。
|
|
|
|
Name: Dixq (管理人) [URL] ..伝説なるハッカー(998,412ポイント)
Date: 2009/03/02(月) 05:16
No:29770
|
|
Title: ■ 3/7 ソフトウェア技術研究会 開催内容詳細-連絡事項 ■
|
|
いよいよ第一回ソフトウェア技術研究会[大阪]の開催が今週に迫ってきました。
改めて詳しい開催内容をお伝えします。
※直前まで募集しておりますので、参加希望の方は参加申し込みフォームよりお願いします。
■会費について
研究会は一人900円となります。申し訳有りませんが、今回は発表者、講演者を含め、全員から集めさせて頂くこととさせて頂きましたのでよろしくお願いいたします。懇親会は2000円のコースと1200円の飲み放題オプションを付けて合計3200円となります。
■お金について
当日は受付をスムーズに行えるようにする為、事前に封筒などにお釣りの必要ない金額を入れて持って来て頂けると幸いです。研究会と懇親会に両方参加される場合は4100円となります。受付でお渡し下さい。
■懇親会キャンセルについて
キャンセルの場合は早めに連絡頂けると幸いです。体調不良や事故、交通トラブルなど緊急の場合の当日キャンセルのご連絡もdixqhp@gmail.comまでご連絡お願いします(携帯に転送されますので)。
■スケジュール、会場について
スケジュールは以下の通りで行います。http://dixq.net/kk/4_sukejuru/
会場は「会議室2」の大きな部屋に変更になったのでご注意下さい。
■持ってくるもの
筆記用具、会費、情熱
■メンバー一覧について
メンバー紹介にて掲載させていただいている内容 http://dixq.net/kk/3_shoukai/ で
参加申し込みフォームから申し込みを頂いていない方は備考以外に「-」が入っている部分がある場合があります。
お手数ではありますが、お時間のある時にでも参加申し込みフォームからの申し込みをお願いしますm(_ _)m
■その他
懇親会会場は谷町四丁目駅から徒歩1分の居酒屋です。研究会会場から800m位(徒歩10分?)距離があるので、ご了承下さい^^;
また、研究会については「研究会の掲示板 http://dixq.net/kk/BBS/」もご利用下さい。
■発表者・講演者の方へ
当日はパワーポイント、紙による配布資料が利用できます。こちらで簡単な冊子を作りますので、3/5までに資料を送って頂ければありがたく思います。パワーポイントや配布資料のデータを2日前までに送っていただかなかった場合の資料は各自で用意して頂きますようお願いします。また、メール添付にて送っていただいた方は「受け取りました」の返信がある事をご確認ください。
当日パワーポイント(2003まで)のデータを持ってくる方はフラッシュメモリなどに入れてお持ちになるか、CDロムなどに焼くか、マイノートPC持参等でお願いします。
1,043ポイント を手に入れた。
|
|
|
|
Name: Mist ..熟練のプログラマー(53,234ポイント)
Date: 2009/03/02(月) 10:09
No:29775
|
|
Title: Re:■ 3/7 ソフトウェア技術研究会 開催内容詳細-連絡事項 ■
|
|
発表会資料早く作らねば… フッ(*´_ゝ`)。o○(ガンバッテミルサ…)
2倍のポイントを手に入れた! 52ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) ..ウィザード(1,002,703ポイント)
Date: 2009/03/05(木) 01:30
No:30008
|
|
Title: Re:■ 3/7 ソフトウェア技術研究会 開催内容詳細-連絡事項 ■
|
|
kazuoniさんと、きらりんさん、もしよければ当日の緊急連絡先教えていただけますでしょうか?
研究会ホームページの参加フォームから参加申請をして頂けると幸いです。
電話番号が難しければ携帯のメールアドレスだけでも結構ですので。
69ポイント を手に入れた。
|
|
|
|
|
Name: 組木紙織 [URL] ..比類無きプログラマー(70,264ポイント)
Date: 2009/03/06(金) 19:09
No:30147
|
|
Title: Re:■ 3/7 ソフトウェア技術研究会 開催内容詳細-連絡事項 ■
|
|
>一応前日まではNew!内にあげておこうと思いますので、雑談でもいいので気軽に書き込み下さいw
というので、完全な雑談です。
風邪引きました。
plus
先ほど参加予定者のリスト見たら予想以上に多かったことにびっくりです。
緊張しそうだな。
135ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) ..ウィザード(1,003,691ポイント)
Date: 2009/03/06(金) 20:24
No:30152
|
|
Title: Re:■ 3/7 ソフトウェア技術研究会 開催内容詳細-連絡事項 ■
|
|
>>組木紙織さん
う、大丈夫ですか^^;
私は管理人+主催者+会長ということで、私が休んだら一体誰が進行するんだということになるので、
風邪だけは引かないよう頑張ってます・・・が!
のどが痛いですorz
>緊張しそうだな。
実は今から既に緊張している管理人です。
当日は頑張って行きましょう!楽しみにしています。よろしくお願いします^^
68ポイント を手に入れた。
|
|
|
|
|
Name: たいちう ..プログラマー(25,365ポイント)
Date: 2009/03/06(金) 23:33
No:30179
|
|
Title: Re:■ 3/7 ソフトウェア技術研究会 開催内容詳細-連絡事項 ■
|
|
緊張されている他の発表者の方々にも大変申し訳ない連絡なのですが、
明日は出席できなくなってしまいました。
1時間ほど前に連絡があったのですが、今日私の両親が群馬県で交通事故を起こし
2人とも入院しているとのことでした。詳細はまだ聞けてないのですが、
骨折はあるものの入院は2〜3日ですみそうなので、幸い大事には至ってないようです。
群馬は父の出身地で頼れる親戚も多いのですが、さんざん親不孝をしてきましたので、
明日、群馬に行ってこようと思います。
珍しく早めに準備ができていたので発表も楽しみにしていたのですが、
(だから悪いことが起きた?)このような理由で欠席とさせてください。
残念ですが私の発表の内容は、パワーポイントを流して失笑していただいたり、
ソースコードを見てダメ出しをしていただいたり、なかったことにしたりして下さい。
近日中に話すつもりだった内容も何かの形でまとめたいと思います。
常連回答者の方々にはやさしめの内容だと思いますので、その気になってくれさえすれば
代わりに発表してもらうことも十分可能でしょう。
大変ご迷惑をお掛けしてしまい申し訳ありません。
明日の盛会を祈っています。
207ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) [URL] ..ウィザード(1,003,818ポイント)
Date: 2009/03/07(土) 00:03
No:30183
|
|
Title: Re:■ 3/7 ソフトウェア技術研究会 開催内容詳細-連絡事項 ■
|
|
>>たいちうさん
是非ご両親の方を大事にして下さい。
事故に合われたということでご心配のことと思います。
懇親会のコースのキャンセルも恐らく朝一でキャンセルすれば料金を取られずに済むと思います。
こちらのことは心配して頂かなくて大丈夫ですので。
今回の研究会が成功すれば継続的に行っていきたいと思っておりますので、是非またの機会にお願いします。
ご両親の一日も早いご回復お祈りしています。
87ポイント を手に入れた。
|
|
|
|
Name: ひよこ ..上級者(20,334ポイント)
Date: 2009/03/06(金) 22:02
No:30165
|
|
Title: なぜだか
|
|
なぜだか一階進むと表示の色が変わってしまうのですがどうすればいいでしょうか?
ソースは添付してあります。
41ポイント を手に入れた。
|
|
|
|
Name: ひよこ ..上級者(20,380ポイント)
Date: 2009/03/06(金) 22:04
No:30167
|
|
Title: Re:なぜだか
|
|
サンプルプログラムをめざしている脱出ゲームについてです。タイトル消してしまったようですみません。
46ポイント を手に入れた。
|
|
|
|
Name: ヒロ ..入門者(2,892ポイント)
Date: 2009/03/06(金) 21:01
No:30159
|
|
Title: ライブラリが開かない
|
|
初投稿となりますヒロと申します。
此処のプロジェクトを元にゲームを作ろうと思い、此処で公開されているプロジェクトの1章とincludeフォルダの部分をコピーして4章までの工程を書き上げてコンパイルしようとしたところ
「ファイル '..\include\DxLib_d.lib' を開くことができません。」
と表示されてコンパイルできません。
もととなる部分は公開されているプロジェクトの4章と変わらないのですがどこがいけないのでしょうか?
ちなみに龍神録プロジェクトファイルのなかに入ってるときはコンパイルされます。
189ポイント を手に入れた。
|
|
|
|
Name: 御津凪 [URL] ..熟練のプログラマー(68,837ポイント)
Date: 2009/03/06(金) 21:46
No:30163
|
|
Title: Re:ライブラリが開かない
|
|
プロジェクトの設定を変えない限り、別フォルダ上で作業する場合は、
ライブラリファイル等の場所も同じように構成する必要があります。
(上記の場合、プロジェクトのある場所の上の階層にある include フォルダの DxLib_d.lib を開こうとしています)
105ポイント を手に入れた。
|
|
|
|
|
Name: ヒロ ..入門者(2,961ポイント)
Date: 2009/03/06(金) 22:49
No:30174
| 解決!
|
Title: Re:ライブラリが開かない
|
|
返信ありがとうございます。
DLしたフォルダ内に作成したプロジェクトを移動させたところちゃんとコンパイルされました!
御津凪さんありがとうございました!
69ポイント を手に入れた。
|
|
|
|
Name: ざこ ..プログラマー(28,411ポイント)
Date: 2009/03/06(金) 15:28
No:30130
|
|
Title: レジストリ
|
|
先日のプログラムにレジストリの機能をいれようとおもいましたがいきづまってしまいました。
エデットボックス入力した値をリストビューに貼り付けます。
それを複数回やります。その値をレジストリに格納します。
CString str_index
int index=-1;
while((index=m_list.GetNextItem(index,LVNI_ALL))!=-1){
str_index=m_list.GetItemText(index,0);//一行ずつ格納?しているつもりです。
AfxGetApp()->WriteProfile("Reg","拡張子",str_ed1);//str_ed1にはEDIT箱で入力した文字列が入っている。
}
これでやると何回入力しても最後の行に表示されている値str_ed1しか保存されません。
おそらく1回1回更新されつづけてるのだとは思います。対策を教えて下さい。
292ポイント を手に入れた。
|
|
|
|
Name: バグ ..ハッカー(152,695ポイント)
Date: 2009/03/06(金) 15:50
No:30131
|
|
Title: Re:レジストリ
|
|
質問の意味がよくわかりません。
>>エデットボックス入力した値をリストビューに貼り付けます。
>>それを複数回やります。その値をレジストリに格納します。
レジストリに格納したいのは、リストビューのアイテムなのか、エディットボックスに書き込まれたテキストなのか判断できません。
>>while((index=m_list.GetNextItem(index,LVNI_ALL))!=-1){
>>str_index=m_list.GetItemText(index,0);//一行ずつ格納?しているつもりです。
>>AfxGetApp()->WriteProfile("Reg","拡張子",str_ed1);//str_ed1にはEDIT箱で入力した文字列が入っている。
>>}
そもそも、このループはどのタイミングで呼ばれるのですか?
仮に、リストビューへアイテムが追加されるたびに呼ばれ、格納するのはエディットボックス内の文字列だと仮定すると、キーとセクションを毎回違うものに変更してやらなければ、毎回同じ場所へ書き込み更新されるだけです。
314ポイント を手に入れた。
|
|
|
|
|
Name: YuO ..プログラマー(30,399ポイント)
Date: 2009/03/06(金) 15:52
No:30132
|
|
Title: Re:レジストリ
|
|
> おそらく1回1回更新されつづけてるのだとは思います。
レジストリの同一キーの同一名の項目への出力は,最後に書き込んだ物が残ります。
> 対策を教えて下さい
出力する段階で,出力したい物を作り出してしまえばよいです。
具体的な方法は,「何があって何をしたいのか」がきっちりと説明されていないので示せませんが。
51ポイント を手に入れた。
|
|
|
|
|
Name: ざこ ..プログラマー(28,540ポイント)
Date: 2009/03/06(金) 15:59
No:30133
|
|
Title: Re:レジストリ
|
|
エデットボックスに書かれたテキストがリストビューのアイテムなので中身自体は同じ物だと思います。
この場合メインのダイアログボックスのクラス内にあるリストビューのアイテムを格納しようとしています。
ループのタイミングはウィンドウが閉じたときですつまりOnDestroy関数の中で呼ばれています。
129ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(153,074ポイント)
Date: 2009/03/06(金) 16:08
No:30134
|
|
Title: Re:レジストリ
|
|
>>エデットボックスに書かれたテキストがリストビューのアイテムなので中身自体は同じ物だと思います。
これは違うんじゃないですか?
>>エデットボックス入力した値をリストビューに貼り付けます。
>>それを複数回やります。その値をレジストリに格納します。
最初にこう書いているのですから、エディットボックスに書かれた文字列は、最後に入力された文字列であって、リストビューの中身と同じではありませんよね?
>>この場合メインのダイアログボックスのクラス内にあるリストビューのアイテムを格納しようとしています。
>>ループのタイミングはウィンドウが閉じたときですつまりOnDestroy関数の中で呼ばれています。
ということは、エディットボックスの中身ではなく、リストビューのアイテムをレジストリに格納するという事ですよね?
379ポイント を手に入れた。
|
|
|
|
|
Name: ざこ ..プログラマー(28,606ポイント)
Date: 2009/03/06(金) 16:12
No:30136
|
|
Title: Re:レジストリ
|
|
>>出力する段階で,出力したい物を作り出してしまえばよいです。
しかしどれくらいの行かもわからないのに全て用意できるものですか?
それとも予め10個までと決めといて10個作ってそれ以上は不可とかでしょうか
確かにエデットボデックスの中身はリストビューでは最後の行のものですね。
レジストリはまだ不慣れですが、1回入力するごとにレジストリを別々で保存は無理なようですね。
エデットボックスに文字を打ち度に内容が保存される と思っていました。
保存するのはリストビューの内容で構いません。上記の画像では4行ですが何行かは決まっておりません。
※このプログラムはドラッグ&ドロップしたファイルを拡張子別にそれぞれのフォルダに移動させるという
ものです。
66ポイント を手に入れた。
|
|
|
|
|
Name: SooA [URL] ..入門者(4,659ポイント)
Date: 2009/03/06(金) 16:54
No:30139
|
|
Title: Re:レジストリ
|
|
現在のリスト行数は取得できますよね?
でしたら、
1.リストに変更が加えられた。
2.レジストリキーの有無をチェック
3.あれば削除、無ければ作成
4.リスト内容で行数の分だけ新たに書き直す。
5.戻る
最も単純にするとこうなります。
これが出来たらレジストリの内容と
リストの内容を比較して必要なら書き込むといった
処理に変更してみましょう。
132ポイント を手に入れた。
|
|
|
|
|
Name: ざこ ..プログラマー(29,130ポイント)
Date: 2009/03/06(金) 17:56
No:30142
|
|
Title: Re:レジストリ
|
|
レジストリに保存
int reg=0;
if(reg==0){
AfxGetApp()->WriteProfileString("Reg_Drop1","拡張子",str_ed1)
m_list.InsertItem(0,(LPCSTR)str_ed1);
reg++;
}
else if(reg==1){
AfxGetApp()->WriteProfileString("Reg_Drop2","拡張子",str_ed1)
m_list.InsertItem(1,(LPCSTR)str_ed1);
reg++;
}
else if(reg==2){
AfxGetApp()->WriteProfileString("Reg_Drop3","拡張子",str_ed1)
m_list.InsertItem(2,(LPCSTR)str_ed1);
reg++;
}
としました。ややグダグダな書き方になってしまいましたが、一応ちゃんと登録はできています。
1回リストビューに書き込むごとにレジストリに保存し、変数を使って調節しています。
レジストリを読み込む
CString expand;
int R=0;
if(R==0){
espand=AfxGetApp()->GetProfileString("Reg_Drop1","拡張子",NULL);
R++;
m_list.InsertItem(0,(LPCTSTR)expand);
}
else if(R==1){
espand=AfxGetApp()->GetProfileString("Reg_Drop2","拡張子",NULL);
R++;
m_list.InsertItem(1,(LPCTSTR)expand);
}
else if(R==2){
espand=AfxGetApp()->GetProfileString("Reg_Drop3","拡張子",NULL);
R++;
m_list.InsertItem(2,(LPCTSTR)expand);
}
としましたがこちらは問題があります。3つ分レジストリを保存したはずですが最初のレジストリの分しか
表示されないです。やや強引ですかね? 何かおかしい所あればご指摘ください
524ポイント を手に入れた。
|
|
|
|
|
Name: SooA [URL] ..初心者(5,170ポイント)
Date: 2009/03/06(金) 20:06
No:30149
|
|
Title: Re:レジストリ
|
|
サンプル
void CMyView::OnButton1()
{
// TODO: この位置にコントロール通知ハンドラ用のコードを追加してください
CListBox *List = (CListBox*)GetDlgItem( IDC_LIST2 );
if( List->GetCount() != 4 )
{
List->InsertString( -1, "AAA") ;
}
}
void CMyView::OnButton2()
{
// TODO: この位置にコントロール通知ハンドラ用のコードを追加してください
CListBox *List = (CListBox*)GetDlgItem( IDC_LIST2 );
if( List->GetCurSel() != LB_ERR )
{
List->DeleteString( List->GetCurSel() ) ;
}
}
ボタン1でリストに AAA という項目を追加し、
ボタン2で選択項目を削除しています。
リストは現在の行数を調べて4行までしか追加できないようにしています。
あとは、各ボタンの処理の後に
レジストリキー(親)の有無をチェックし、
あれば削除、無ければ作成し、(もしくは子のデータを全て削除)
リスト内容で行数の分だけ新たに書き直す関数を
追加してやればいいわけです。
349ポイント を手に入れた。
|
|
|
|
|
Name: SooA [URL] ..初心者(5,901ポイント)
Date: 2009/03/06(金) 22:03
No:30166
|
|
Title: Re:レジストリ
|
|
最初に書いた
1.リストに変更が加えられた。
2.レジストリキーの有無をチェック
3.あれば削除、無ければ作成
4.リスト内容で行数の分だけ新たに書き直す。
5.戻る
をプログラムにするとこんな感じになります。
自分はデフォで Win32API 使ってるんで置き換えて考えてください。
取りあえず Code と String の二つの仮データを保存しています。
Code と String のデータを HKEY_CURRENT_USER 下の
"Software\\ListTest" に作成します。
サンプル2
void CListTest2View::RegWrite()
{
HKEY HKey ;
int n ;
char Code[3][256] = { "txt", "exe", "dat" } ;
char String[3][256] = { "AAA", "BBB", "CCC" } ;
// 既にレジストリがあれば削除
RegDeleteKeyA( HKEY_CURRENT_USER, "Software\\ListTest" );
// レジストリを作成
if( RegCreateKeyExA( HKEY_CURRENT_USER, "Software\\ListTest", 0, NULL,
REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &HKey, NULL ) == ERROR_SUCCESS )
{
for( n=0; n < 3; n++ )
RegSetValueExA( HKey, Code[n], NULL, REG_SZ, (LPBYTE)&String[n], sizeof( String[n] ) ) ;
RegCloseKey( HKey ) ;
}
}
void CListTest2View::OnButton1()
{
// TODO: この位置にコントロール通知ハンドラ用のコードを追加してください
CListBox *List = (CListBox*)GetDlgItem( IDC_LIST1 ) ;
if( List->GetCount() != 4 )
{
List->InsertString( -1, "AAA") ;
}
RegWrite();
}
void CListTest2View::OnButton2()
{
// TODO: この位置にコントロール通知ハンドラ用のコードを追加してください
CListBox *List = (CListBox*)GetDlgItem( IDC_LIST1 ) ;
if( List->GetCurSel() != LB_ERR )
{
List->DeleteString( List->GetCurSel() ) ;
}
RegWrite();
}
731ポイント を手に入れた。
|
|
|
|
Name: ちゅん ..ぴよぴよ(527ポイント)
Date: 2009/03/06(金) 16:50
No:30138
|
|
Title: 構造体のリスト
|
|
初めまして、C言語の勉強中の者です。
構造体をリストの末端に書き加える関数を作ろうとしているのですが、上手くいきません。
使用ソフトはMicrosoft VC++で、ソースは以下の通りです。
#include<list>
typedef struct _hoge{
int x, y, z;
}hoge_t;
std::list<int> *intlist;
hoge_t *hoge_add(int x, int y, int z)
{
hoge_t *hoge;
hoge = (hoge_t *)malloc(sizeof(hoge_t)); //メモリ領域確保
hoge = new hoge_t();
hoge->x = x;
hoge->y = y;
hoge->z = z;
intlist = intlist->push_back(hoge);
return hoge;
}
これをビルドすると、以下のように出ます。
error C2664: 'std::list<_Ty>::push_back' : 1番目の引数を 'hoge_t *' から 'const int &' に変換できません。
with
[
_Ty=int
]
理由: 'hoge_t *' から 'const int' へは変換できません。
この変換が可能なコンテキストはありません。
このソースは自動生成ダンジョンを作ってみたく思い、
こちらのサイト様→http://racanhack.sourceforge.jp/rhdoc/index.html
のソースを自分なりにC++に翻訳しようとしたものです。
なので少し厚かましいとも思いますが、上記のサイト様のソースに沿った方法でご教授願えますでしょうか。
どなたか、宜しくお願いします。
527ポイント を手に入れた。
|
|
|
|
Name: ouh ..入門者(2,782ポイント)
Date: 2009/03/06(金) 18:31
No:30143
|
|
Title: Re:構造体のリスト
|
|
まず、「構造体をリストの末端に書き加える」ということなので
リストの宣言は
std::list<int> *intlist;
ではなくて構造体のリストにしないと。
あと
hoge_t *hoge;
hoge = (hoge_t *)malloc(sizeof(hoge_t)); //メモリ領域確保
hoge = new hoge_t();
ここは
hoge_t* hoge = new hoge_t;
だけでいいんじゃないでしょうか?
あと、
intlist = intlist->push_back(hoge);
ここですが、
push_back()の戻り値はvoidです。
intlistにpush_back()できるのはintです。
構造体を格納するリストとそのリストへpush_back()する関数を
作るだけなら小難しくポインタ使ったりしなくても
void hoge_add(std::list<hoge_t>& hogehoge, int x, int y, int z) {
hoge_t hoge;
hoge.x = x;
hoge.y = y;
hoge.z = z;
hogehoge.push_back(hoge);
}
でよくないですか?
※ご提示のリンク先を全く見ていないので私の言ってることは
もしかしたらまったくのお門違いかもしれません。
223ポイント を手に入れた。
|
|
|
|
|
Name: ouh ..入門者(2,907ポイント)
Date: 2009/03/06(金) 18:40
No:30145
|
|
Title: Re:構造体のリスト
|
|
せっかくC++なので、hoge_add()を作るのではなく、構造体に
コンストラクタを作っておけばhoge_add()は不要になると思い
ますよ。
struct _hoge {
int x;
int y;
int z;
_hoge(int _x, int _y, int _z) : x(_x), y(_y), z(_z) {}
} hoge_t;
125ポイント を手に入れた。
|
|
|
|
|
Name: ouh ..入門者(2,949ポイント)
Date: 2009/03/06(金) 18:42
No:30146
|
|
Title: Re:構造体のリスト
|
|
↑ "struct" の前に typedef 入れるの忘れました...
スレ汚してすみません。
42ポイント を手に入れた。
|
|
|
|
|
Name: ちゅん ..ぴよぴよ(812ポイント)
Date: 2009/03/06(金) 19:40
No:30148
|
|
Title: Re:構造体のリスト
|
|
>>ouhさん
newには動的確保の項目もあったんですね、見逃していました。
std::list<hoge_t> hogehogeは一度勘で試してみたんですが、それでも
error C2664: 'std::list<_Ty>::push_back' : 1 番目の引数を 'hoge_t *' から 'const hoge_t &' に変換できません。(新しい機能 ; ヘルプを参照)
with
[
_Ty=hoge_t
]
理由: 'hoge_t *' から 'const hoge_t' へは変換できません。
コンストラクタはソース型を持てません、またはコンストラクタのオーバーロードの解決があいまいです。
というエラーが出てしまいます。
>_hoge(int _x, int _y, int _z) : x(_x), y(_y), z(_z) {}
見たことないです。
探そうにも記号が多くて検索に上手く引っかからないし…
良ければ、これの使い方か、これについて詳しく載っているサイトを教えていただけますでしょうか。
285ポイント を手に入れた。
|
|
|
|
|
Name: Mist ..熟練のプログラマー(54,136ポイント)
Date: 2009/03/06(金) 20:14
No:30150
|
|
Title: Re:構造体のリスト
|
|
> 良ければ、これの使い方か、これについて詳しく載っているサイトを教えていただけますでしょうか。
「初期化リスト」でググってみるとよいでしょう。
14ポイント を手に入れた。
|
|
|
|
|
Name: ouh ..入門者(3,344ポイント)
Date: 2009/03/06(金) 20:50
No:30155
|
|
Title: Re:構造体のリスト
|
|
私が添付したファイルのコードはコンパイルできると思います。
std::list<hoge_t> hogehoge;
とした場合は、実際にhoge_tを作るときは、
hoge_t* hoge = new hoge_t;
ではなく
hoge_t hoge;
として、
hogehoge.push_back(hoge);
とします。
_hoge(int _x, int _y, int _z) : x(_x), y(_y), z(_z) {}
は、_hoge のメンバである x, y, z をコンストラクタで初期化するときに
こう書きます。
_hoge で言えば、
typedef struct _hoge {
int x;
int y;
int z;
_hoge(int _x, int _y, int _z) : x(_x), y(_y), z(_z) {}
} hoge_t;
としておけば、実際に _hoge の変数 hoge を宣言するときに
hoge_t hoge(1, 2, 3);
と書けばxを1、yを2、zを3で初期化できます。
宣言と同時に初期化できてしまうので、
hoge_t hoge;
hoge.x = 1;
hoge.y = 2;
hoge.z = 3;
と書かなくてすみます。
そうすればhoge_add()という関数は必要なくなります。
_hoge(int _x, int _y, int _z) {
x = _x;
y = _y;
z = _z;
}
と書くのと同じことです(厳密に言うと同じではないんですが、
結果は同じになります)。
C++の入門書であれば必ずこういうコンストラクタの宣言の仕方が
解説されていると思います。ただし、多分構造体のところではなく
クラスのところで解説されていると思います。
ここに詳しく書かれてました↓
http://www.02.246.ne.jp/~torutk/cxx/constructor/index.html
C++ コンストラクタ 初期化子
というキーワードでググるといっぱい見つかります。
395ポイント を手に入れた。
|
|
|
|
|
Name: ちゅん ..かけだし(1,053ポイント)
Date: 2009/03/06(金) 21:54
No:30164
| 解決!
|
Title: Re:構造体のリスト
|
|
>>ouhさん
こんなにも尽力くださって、本当にありがとうございます。
初期化リストの件、良く理解できました。
C++はCの上位互換ということで、取り敢えずCの入門書のみを買ってC++はネット頼りとなっております。
その上に勉強を始めてまだ日も浅いので、このようなことを教えていただけると大いに助かります。
コードの方も指示通りにビルドし直したところ、無事にコンパイルできました。
最終目的は自動生成ダンジョンの作成なので、
教えていただいたことを参考にした上でもう一度頑張ってみます。
なので、これにて解決とさせていただきます。
ありがとうございました。
223ポイント を手に入れた。
|
|
|
|
Name: TH ..入門者(2,620ポイント)
Date: 2009/03/04(水) 00:39
No:29926
|
|
Title: 弾の透かし方
|
|
仏の顔も三度までと言うのに四回目の投稿…
掲示板の投稿者に自分の名前が並ぶと泣きたくなります…
と御託を並べても仕方が無いので本題に入らせていただきます。
よく東方では「弾が発射される時に少し弾がぼかされてから描画される」事があります。
また、この「弾がぼかされている状態」では弾に当たり判定がなく、また自機と座標が近い場合
その弾が表示されないという事もあります。
例によってこれを実装しようとして行き詰ってしまいました…。
特に分からないのは前者なんです。
弾をぼかす、というのはどういう処理をすればいいのか皆目検討が尽きません。
後者は、弾毎にboss_shot.bullet[n].min_time といった感じに
弾のあたり判定を持つ時間を決めておき、boss_shot.bullet[n].cntがそれを超えた場合に
当たったか当たってないかを判定するようにしようと思っているのですが、
「自機と座標が近い場合」というのをどうするのか分からないのです。
分からない分からないと言って酷く情けなくなってきます。
実際に自機ショットと敵の当たり判定処理、敵ショットと自機の当たり判定処理なども
「何となく三平方の定理使うのかな」と思っているぐらいでさっぱりでございます…。
質問内容に曖昧な点がありましたら出来るだけ早く対応したいと思いますので
何とぞお願いいたします。
461ポイント を手に入れた。
|
|
|
|
Name: nayo ..初心者(8,073ポイント)
Date: 2009/03/04(水) 02:32
No:29930
|
|
Title: Re:弾の透かし方
|
|
ぼかすのではなくアルファブレンドで少し半透明にして、ではダメなんですかね?
ぼかすといっても色々なぼかし方があるので具体的な例があれば答えやすいかも
東方だとそもそも発射直後は別の弾の画像が見えていて徐々にその弾を薄くしつつ別の弾の画像を濃くしていく、
などとしている場合もあるような気がします(確信は持てませんが
発射直後は当たり判定が無いようにしたい、というのは今考えているようなやり方でいいと思います
当たり判定が有効になるまでの時間をセットして、毎フレームそのカウントを減少させ、
値が0以下になったら当たり判定処理をする、といった感じでしょうか
自機付近では弾が発射されないようにしたい、ということに関しては
龍神録の館の敵弾発射関数で考えるなら
// プレイヤーと弾の距離がrange以下(近い)なら真値を返す
// float x, float yとなってますがここは適宜自分の変数の型に直して下さい
// もし当たり判定を円で考えているならrangeをプレイヤーの当たり判定半径と同じにすれば当たり判定もできます
// pow( a, b ) …… aのb乗を返す関数
bool CheckShotOK( float x, float y, float range )
{
// 三平方の定理より中心(x,y)、半径rangeの円内にプレイヤーが居たら
if( pow( (プレイヤーx座標 - x),2 ) + pow(プレイヤーy座標-y),2 ) < pow( range, 2 ) )
{ // 範囲内なので真値を返す
return TRUE;
}
// 範囲外なので偽値を返す
return FALSE;
}
// 100カウント中に10発、自機に向かって直線発射(常に自機狙い)
void shot_bullet_H001( int n )
{
int t = shot[n].cnt;
int k;
// 100カウント中10カウントに1回
if( t >= 0 && t < 100 && t % 10 == 0 )
{ // 敵がいて、弾が登録可能なら
if( shot[n].flag != 2 && ( k = shot_search(n) ) != -1 )
{
shot[n].bullet[k].x = enemy[shot[n].num].x; // x座標
shot[n].bullet[k].y = enemy[shot[n].num].y; // y座標
if( CheckShotOK( shot[n].bullet[k].x, shot[n].bullet[k].y, 20 ) )
{ // もしプレイヤーが発射位置に近すぎたら発射フラグは立てずに終わる
return;
// もしfor文で同時に複数方向や複数個所から発射しているなら
// returnをcontinueに変えるといいかも
}
shot[n].bullet[k].knd = enemy[shot[n].num].blknd2; // 弾登録
shot[n].bullet[k].angle = shotatan2( n ); // 角度
shot[n].bullet[k].flag = TRUE; // フラグ
shot[n].bullet[k].col = enemy[shot[n].num].col; // 色
shot[n].bullet[k].cnt = 0; // カウンタ
shot[n].bullet[k].spd = 3; // スピード
se_flag[0] = 1; // 効果音
}
}
}
などと、弾の発射フラグを立てる前にプレイヤーとの距離を調べ、
近いなら発射フラグを立てずに終了するといいかと思います
132ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) ..ウィザード(1,000,804ポイント)
Date: 2009/03/04(水) 10:38
No:29940
|
|
Title: Re:弾の透かし方
|
|
優曇華みたいなやつですかね?
http://www.nicovideo.jp/watch/sm548146
3:41〜
う〜ん、アルファブレンドで薄くして、周辺に同じ画像を何度も書いてみてはどうでしょう?
SetDrawBlendMode( アルファ, (この値は何度かやって調整) );
//1ピクセル離れた周辺に描画
for(i=0; i<N(この値は何度かやって調整); i++){
DrawGraphF( x+cos(PI2/N*i)*1, y+sin(PI2/N*i)*1, ...);
}
//2ピクセル離れた周辺に描画
for(i=0; i<N(この値は何度かやって調整); i++){
DrawGraphF( x+cos(PI2/N*i)*2, y+sin(PI2/N*i)*2, ...);
}
//中心に描画
DrawGraphF( x, y, ...);
やってみないとうまくいくかどうかわかりませんが、こんな感じでどうでしょうか?
当たり判定についてはすでに館で実装済みですよね。
弾に当たり判定処理をするかどうかのフラグを作り、それがオフになっている弾は当たり判定を計算しないようにすればいいと思います。
415ポイント を手に入れた。
|
|
|
|
|
Name: TH ..入門者(2,892ポイント)
Date: 2009/03/04(水) 21:41
No:29987
|
|
Title: Re:弾の透かし方
|
|
>>nayoさん
回答ありがとうございます。
サンプルまで作って頂き、恐縮です…。
当たり判定は円で行われていたのですか。
またソースコードを凝視する作業になりそうです…。
>>Dixqさん
ウィザードおめでとうございます。
優曇華の…とは少し違うのでしょうか。キスメのキャプチャーウェブみたいな感じですね。
http://www.nicovideo.jp/watch/sm6318452 コレの2:31ぐらいです。
低画質ですが…。
弾の発射している瞬間は紫色に弾の周辺がぼけていますよね(たぶん)
それを実装したいのですが…
それと、この場合タイトルは弾のぼかし方でしたね。
申し訳ございません・・・
272ポイント を手に入れた。
|
|
|
|
|
Name: TH ..入門者(2,943ポイント)
Date: 2009/03/06(金) 16:18
No:30137
| 解決!
|
Title: Re:弾の透かし方
|
|
>>Dixq
なるほど。
確かにそれならぼかしたように見えますね。
ありがとうございました。
51ポイント を手に入れた。
|
|
|
|
Name: sanada ..ぴよぴよ(61ポイント)
Date: 2009/03/05(木) 17:15
No:30070
|
|
Title: Visualstadio2005ACについて
|
|
以前、上記のソフトでホームページを作れるというようなスレを見た気がするのですが
htmlで書けるということなのでしょうか?
C++での開発しかしたことがないため詳しいことが分かりません><
61ポイント を手に入れた。
|
|
|
|
Name: sanada ..ぴよぴよ(161ポイント)
Date: 2009/03/06(金) 13:42
No:30125
|
|
Title: Re:Visualstadio2005ACについて
|
|
たかぎさん
できました><
ありがとうございます。
ただ問題がありまして新規で作り始めればデバック(Ctrl+F5)ができるのですが
あらかじめ作ってあるindex.htmlなどをVSで開くと編集画面が少し変わりデバックできなくなってしまいます。
デバック画面を確認しながら作りたいのですが何か方法はないでしょうか?
100ポイント を手に入れた。
|
|
|
|
Name: tororo ..ぴよぴよ(91ポイント)
Date: 2009/02/28(土) 18:29
No:29574
|
|
Title: exeファイルについて
|
|
はじめまして このサイトを参考にさしてもらっていますtororoです
C++2008を使っているのですが、使い終わると極端に遅くなり
使った物のexeファイルがメモリを全部使ってしまいます
どうしたらいいのでしょうか
91ポイント を手に入れた。
|
|
|
|
Name: 御津凪 [URL] ..熟練のプログラマー(64,010ポイント)
Date: 2009/02/28(土) 18:37
No:29576
|
|
Title: Re:exeファイルについて
|
|
> 使った物のexeファイルがメモリを全部使ってしまいます
それは、VC++2008 で作成した実行ファイルのことですか?
ソースを調べなければ明確な答えは分かりませんし、
余りにも情報が少なすぎます。
この情報だけで判断できるのは、その実行ファイルがメモリを確保し続けていることぐらいです。
(&使い終わったメモリを解放していない)
そうしないようにしてくださいとしか答えようがないです。
解決を望むならソースを載せるなど、もっと情報が欲しいです。
*ソースを載せる際は、ページ上端にある、規約と注意事項を呼んでからお願いします。
204ポイント を手に入れた。
|
|
|
|
|
Name: tororo ..ぴよぴよ(166ポイント)
Date: 2009/02/28(土) 19:18
No:29579
|
|
Title: Re:exeファイルについて
|
|
ソースはこのサイトの物をつかっています
最初は大丈夫なんですが4〜5分たつと
遅くなりコンパイルすら
出来なくなってしまいます
御津風様わざわざお答え本当に
ありがとうございますm(_ _)m
75ポイント を手に入れた。
|
|
|
|
|
Name: dic ..上級者(15,019ポイント)
Date: 2009/02/28(土) 20:11
No:29582
|
|
Title: Re:exeファイルについて
|
|
ご使用のパソコンのスペックなども あわせて書くと返事が返ってくるでしょうね
28ポイント を手に入れた。
|
|
|
|
|
Name: cosmo ..初心者(6,225ポイント)
Date: 2009/02/28(土) 23:28
No:29594
|
|
Title: Re:exeファイルについて
|
|
>ソースはこのサイトの物をつかっています
これだけでは分かりません。
このサイトのどの部分のソースコードを使っていますか?
>最初は大丈夫なんですが4〜5分たつと
遅くなりコンパイルすら
出来なくなってしまいます
やはりこれはメモリーリークでしょう。
情報が少ないので、これぐらいしか回答出来ません。
ソースコード中にメモリを開放するコードを書いていますか?
コンパイラだけではなく、OSやスペックの情報も書きましょう。
それに…御津風 →御津凪ですよ。人の名前は間違えないようにしましょう。
御津凪さんに代わって指摘させて頂きます。
319ポイント を手に入れた。
|
|
|
|
|
Name: tororo ..ぴよぴよ(240ポイント)
Date: 2009/03/01(日) 08:34
No:29612
|
|
Title: Re:exeファイルについて
|
|
ソースはこのサイトの入門編の3番を使っています
OSはXPです
後、メモリ開放とググってみても
C++ 2008のことは出てきません
御津凪様へ
本当に名前を間違ってすみませんでした
これからは人の名前を間違えないようにします
74ポイント を手に入れた。
|
|
|
|
|
Name: cosmo ..初心者(6,763ポイント)
Date: 2009/03/01(日) 08:55
No:29614
|
|
Title: Re:exeファイルについて
|
|
おかしいですね…手順通りにやっていれば、メモリーリークはおきない筈なんですが…
う〜ん…このサイトの入門編の3番を使っているとすると、
そちらのソースコードがどの様になっているか分からないので
ソースコード中に
int DxLib_End( void ) ;
が抜けていませんか?
…としか言いようが無いです。
(あまりDXライブラリを使った事がないので違っていたらすいませんm(_ _)m)
もう一つ。
必要な環境を満たしていますか?
必要な環境:
・Microsoft Windows XP Service Pack 2 または Service Pack 3 では、
RAM(メモリ) : 192 MB 以上 (384 MB を推奨)
プロセッサ(CPU) : 1 GHz 以上 (1.6 GHz を推奨) です。
268ポイント を手に入れた。
|
|
|
|
|
Name: tororo ..ぴよぴよ(297ポイント)
Date: 2009/03/03(火) 20:48
No:29887
|
|
Title: Re:exeファイルについて
|
|
やはり 何をしてもだめです
新しいパソコンに変えるまでプログラムを
がまんしますトホホ(泣)
これにこたえてくれた
dic様 cosmo様 バグ様
御津凪様 本当にありがとうございます
57ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) ..ウィザード(1,001,209ポイント)
Date: 2009/03/04(水) 10:53
No:29942
|
|
Title: Re:exeファイルについて
|
|
ほかの方もおっしゃっていますが、マシンのスペックはどれ位ですか?
後、症状としては、プログラムを終了しているのに、プログラムは動き続け、裏でドンドンメモリを食っているということでしょうか?
それはタスクマネージャーなどで調べたのでしょうか?
プログラムを実行するとタスクマネージャーのプロセスに表示されますよね。
プログラムを終了した時、そのプログラムは消えずに残るか、メモリ使用量はいくらになっているか確認してください。
35ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(151,012ポイント)
Date: 2009/03/04(水) 11:20
No:29943
|
|
Title: Re:exeファイルについて
|
|
かなり前のことですが、DXライブラリを使用したアプリケーションをウィンドウの右上の×ボタンで終了させると、正常に終了せず、プロセスが残ったままになった事がありました。
今回の件と直接関係があるかどうかは不明ですが…(^_^;)
50ポイント を手に入れた。
|
|
|
|
|
Name: cosmo ..初心者(8,029ポイント)
Date: 2009/03/04(水) 11:54
No:29944
|
|
Title: Re:exeファイルについて
|
|
>>バグさん
>かなり前のことですが、DXライブラリを使用したアプリケーションをウィンドウの右上の×ボタンで終了させると、正常に終了せず、プロセスが残ったままになった事がありました。
不思議ですね…DXライブラリの不具合なんでしょうか?
DXライブラリの終了処理が上手くいっていないのか、
Windowsにウィンドウが破棄されたメッセージが伝わっていないのか…
2倍のポイントを手に入れた! 200ポイント を手に入れた。
|
|
|
|
|
Name: s-rush ..プログラマー(35,154ポイント)
Date: 2009/03/04(水) 13:24
No:29946
|
|
Title: Re:exeファイルについて
|
|
私もバグさんと同じ現象が起きたことがあります。
実行ファイルを消去しようとしたり、コンパイルしようとした時に、
まだ使用中と表示されできませんでした。
kazuoniさん同様、すぐに再起動しましたが・・・
ちなみにOSはVistaです。
XPを使っていた時は、このような現象は起きませんでした。
66ポイント を手に入れた。
|
|
|
|
|
Name: tororo ..ぴよぴよ(489ポイント)
Date: 2009/03/06(金) 12:06
No:30121
|
|
Title: Re:exeファイルについて
|
|
プログラムを終了してから
タスクマネージャーを見ると
メモリ使用率が100%になっています
それにそのファイル(○○.exe)が消えずにずっと残っています
スペックは CPU 2.50GHz
RAM 448MB です
2倍のポイントを手に入れた! 192ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 [URL] ..熟練のプログラマー(68,058ポイント)
Date: 2009/03/06(金) 12:21
No:30122
|
|
Title: Re:exeファイルについて
|
|
と、いうことは、そのプログラムが後始末部分で
関係ないメモリ確保の無限ループをする暴走に陥っている可能性が高いです。
ソースの終了付近(DxLib_End() 付近)に複数のブレイクポイントを設定して、
デバッグ実行してみてください。
(詳しいやり方は過去ログにあるので、ここでは割愛します)
プログラム終了の瞬間、設定したポイントのどこかで止まるはずなので、
F5 で引っかからなくなる箇所を探してください。
引っかからなくなり、同じ症状が現れたら直前の場所(あるいはその直後)が原因です。
(もし、何度も通るようであればそこはループ処理をしています)
以上の方法で原因を探してみてください。
235ポイント を手に入れた。
|
|
|
|
Name: situmon ..上級者(22,186ポイント)
Date: 2009/03/05(木) 20:16
No:30090
|
|
Title: 敵キャラをきれいに書く
|
|
東方のような敵キャラ(きれいで鮮明な)はどのようにできているのですか?
また皆さんはどのように描写しましたか?
34ポイント を手に入れた。
|
|
|
|
Name: BEMANI ..上級者(18,351ポイント)
Date: 2009/03/05(木) 20:48
No:30093
|
|
Title: Re:敵キャラをきれいに書く
|
|
>>situmonさん
東方のキャラ(自機・敵含め)がどのように出来ているか解りませんが
自分が作成しているゲームでは以下の方法を取っています。
・ドット絵(自機・敵)
・少し大きめにキャラを描いて画像を縮小する
・描いた画像をそのまま使う
63ポイント を手に入れた。
|
|
|
|
Name: 糖 ..ぴよぴよ(648ポイント)
Date: 2009/03/05(木) 00:49
No:30001
|
|
Title: ウィンドウのアイコンを変更したいのですが…
|
|
2回目の質問になります。
DXライブラリを使用してゲームを作成しているのですが、
ウィンドウの左上に表示されるアイコンをオリジナルのものに変更することは可能でしょうか?
実行ファイル(ビルドで作成されるexeファイル)のアイコンは本家DXライブラリのページで
変更方法を確認し、オリジナルのアイコンへ変更することができましたが、
それではウィンドウのアイコンは変更されませんでした…
デフォルトのものだと味気無いので変更できればと思い質問させていただきました。
DXライブラリではウィンドウ左上のアイコンを変更することは出来ないのでしょうか?
どなたかご教授お願い致します。
113ポイント を手に入れた。
|
|
|
|
Name: nayo ..初心者(8,478ポイント)
Date: 2009/03/05(木) 01:24
No:30006
|
|
Title: Re:ウィンドウのアイコンを変更したいのですが…
|
|
私のVisual C++ 2008 Express Editionの環境の場合、
まずアイコンファイルを用意(今回はicon_1.ico、icon_2.ico)して、プロジェクトにヘッダファイルを追加
名前は分かりやすくresource.hなど
内容は
#define IDI_ICON1 102
#define IDI_ICON2 103
としておきます
また、メモ帳でresource.rcというファイルを作り、内容は
#include "resource.h"
IDI_ICON1 ICON "icon_1.ico"
IDI_ICON2 ICON "icon_2.ico"
とします
ソリューションエクスプローラーのリソースファイルの中に
icon_1.ico、icon_2.ico、resouce.h、resource.rcを追加しておくといいです
あとはresource.hをインクルードして
SetWindowIconID( IDI_ICON2 );
とDxLib_Init();前に呼び出せばアイコンが変わるはずです
このときウィンドウ左上のアイコンがicon_2.icoになり、生成される.exeファイルのアイコンがicon_1.icoになります
これで確実にアイコンが変わるかといわれるとちょっと自信ないです
他の環境のやり方は分からないです
また無駄な操作があるかもしれません
405ポイント を手に入れた。
|
|
|
|
|
Name: 糖 ..ぴよぴよ(690ポイント)
Date: 2009/03/05(木) 22:31
No:30101
| 解決!
|
Title: Re:ウィンドウのアイコンを変更したいのですが…
|
|
nayoさん>
教えていただいたとおりにやってみたところウィンドウのアイコンを変更することが出来ました!!
どうもありがとうございました!!
42ポイント を手に入れた。
|
|
|
|
Name: ざこ ..プログラマー(28,044ポイント)
Date: 2009/03/05(木) 19:21
No:30081
|
|
Title: キャスト
|
|
void CDragDropDlg::OnDropfile(HDROP hDropInfo)
{
long files;
char filename[256];
files=DragQueryFile(hDropInfo,0xFFFFFFFF,filename,256);
DragQueryFile(hDropInfo,0xFFFFFFFF,filename,256);
CString Cname=getFileName(filename);//getFileNameはフルパスからパス名を取り出す関数
char *Newname=strcat(str_ed2,Cname);//問題の箇所
}
str_ed2にはC:\Documents and Setting ●●"が
Cnameにはtest.txtが入っています。
この2つを連結させたいのです。(※str_ed2hはCString型)
CString型からchar *型にキャストしたいのですができますでしょうか?
(LPCSTR)でキャストすればconst char*にはキャストできるみたいですが。
239ポイント を手に入れた。
|
|
|
|
Name: バグ ..ハッカー(152,188ポイント)
Date: 2009/03/05(木) 19:37
No:30085
|
|
Title: Re:キャスト
|
|
CStringクラスには、GetAt、GetBufferというメンバ関数があり、キャストではありませんが、おそらく望んでいる事ができると思います。これらを調べてみてください。
しかし、CString同士で連結するだけなら、str1 + str2みたいな事もできますよ?
2倍のポイントを手に入れた! 194ポイント を手に入れた。
|
|
|
|
|
Name: toyo ..プログラマー(26,743ポイント)
Date: 2009/03/05(木) 19:53
No:30087
|
|
Title: Re:キャスト
|
|
キャストしなくてもそのままでできそうな気がしますが質問されているということはうまくいかなかったんですよね
(strcatの第2引数はconst char*なのでむしろLPCTSTRにキャストするほうが望ましいですが)
何かエラーが出たのでしょうか
str_ed2には文字列を追加する十分な領域が残ってますか
131ポイント を手に入れた。
|
|
|
|
|
Name: ouh ..入門者(2,559ポイント)
Date: 2009/03/05(木) 19:55
No:30088
|
|
Title: Re:キャスト
|
|
こんな感じでできませんか?
char Newname[_MAX_PATH];
strcpy(Newname, (LPCTSTR)(str_ed2 + Cname));
40ポイント を手に入れた。
|
|
|
|
|
Name: ざこ ..プログラマー(28,119ポイント)
Date: 2009/03/05(木) 20:59
No:30094
|
|
Title: Re:キャスト
|
|
あれおかしいな・・どっちかがchar * でどっちかがCString ような・・
CString から char *に変換できません というエラーだったので(逆かも)
75ポイント を手に入れた。
|
|
|
|
|
Name: toyo ..プログラマー(26,832ポイント)
Date: 2009/03/05(木) 21:20
No:30098
|
|
Title: Re:キャスト
|
|
とりあえずstrcat( )の第1引数にCStringは使えません。キャストもできません。
NewnameをCString型にするのはだめですか。
MFCなら全部CStringでやるのがいいのでは。
46ポイント を手に入れた。
|
|
|
|
Name: hss12 ..ぴよぴよ(734ポイント)
Date: 2009/03/01(日) 23:01
No:29697
|
|
Title: 太鼓の鉄人のプログラムを改造中ですが
|
|
こんにちは。
サンプルプログラミングの館の太鼓の鉄人のプログラムを改造しているのですが、
今、赤青の2色から4色に増やすところまで成功したのですが、ini.cppの
humen[i].knd=c-'0';
のc-'0'はどういう意味なのでしょうか?
あと、これだと9色までしかできないので、
humenのtxtデータを、aなら10、bなら11、cなら12のようにすればいけるかと思ったのですが、
この変換をうまく書く方法はありますか?
ちなみに色ではなく文字を流そうと思っています。タイピングソフトのような感じです。
188ポイント を手に入れた。
|
|
|
|
Name: SCI ..中級者(13,767ポイント)
Date: 2009/03/01(日) 23:06
No:29702
|
|
Title: Re:太鼓の鉄人のプログラムを改造中ですが
|
|
>humen[i].knd=c-'0';
>のc-'0'はどういう意味なのでしょうか?
「文字」から「数値」に変換しています。
文字である「'0'」と数値「0」が別の値である、というのはOKですか?
63ポイント を落としてしまった。
|
|
|
|
|
Name: SCI ..中級者(13,870ポイント)
Date: 2009/03/01(日) 23:16
No:29712
|
|
Title: Re:太鼓の鉄人のプログラムを改造中ですが
|
|
この変換を別の(2桁以上でもできる)方法でやるには、例えばatoi()やstrtol()が簡単だと思います。
これなら、変換元が2桁以上でも関数1つで実現できます。
62ポイント を手に入れた。
|
|
|
|
|
Name: SooA ..入門者(3,421ポイント)
Date: 2009/03/01(日) 23:54
No:29725
|
|
Title: Re:太鼓の鉄人のプログラムを改造中ですが
|
|
読み込んでいる txt の内容が分からないのですが
'0' というのは 16進数で 0x30 です、
'1' は 0x31
'2' は 0x32
'3' は 0x33
|
9 は 0x39
つまり '1'-0x30 とすれば数値としての 1 を得ることが出来ます。
アルファベットの場合だと
'A' 〜 'Z' 0x41 〜 0x5A
'a' 〜 'z' 0x61 〜 0x7A
となり、16進数で連続した数値になっています。
これを利用してテキストデータから数値へ変換すれば
良いかと思います。
'0'〜'9'は そのまま '?'-0x30 で数値に
'A'〜'Z'は '?'-0x41+10
'a'〜'z'は '?'-0x61+36
これで 0〜9、A〜Z、a〜z に対応する値を付けることが出来ます。
113ポイント を手に入れた。
|
|
|
|
|
Name: SCI ..中級者(14,125ポイント)
Date: 2009/03/02(月) 00:08
No:29729
|
|
Title: Re:太鼓の鉄人のプログラムを改造中ですが
|
|
>これで 0〜9、A〜Z、a〜z に対応する値を付けることが出来ます。
これでもほとんどの場合、その動作は保証されていますが、厳密に言うと「値の一貫性」が保証されていません。
どういうことかというと、A-Z、a-zの値が連続しているかどうかは保証されているわけではなく、実際に値が不連続となる文字コードも存在します。
「ほとんどの場合」ちゃんと動きますが、一応、念頭においておくといいかもしれません。
100ポイント を手に入れた。
|
|
|
|
|
Name: hss12 ..ぴよぴよ(985ポイント)
Date: 2009/03/02(月) 00:37
No:29732
|
|
Title: Re:太鼓の鉄人のプログラムを改造中ですが
|
|
分かりました。16進数は苦手なので10進数にさせてもらいますが
例えば読み込んだcの値が'1'だとすると
cの文字コードが49となり'0'の文字コードが48ですので
c-'0'は49-48で1となるわけですね。
ということは'A'の文字コードが65ですので
'A'-55で10になりますね。
つまり、関数使わなくても
if(48<=c && c<=57)
humen[i].knd=c-48;
else if(65<=c && c<=90)
humen[i].knd==c-55;
で大丈夫でしょうか。
(小文字なら97から122ですね。)
txtは元データそのまま10000200030004000のような感じです。
A000I000U000E000のようにしたかったので。
243ポイント を手に入れた。
|
|
|
|
|
Name: SCI ..中級者(14,604ポイント)
Date: 2009/03/02(月) 00:52
No:29735
|
|
Title: Re:太鼓の鉄人のプログラムを改造中ですが
|
|
>例えば読み込んだcの値が'1'だとすると
>cの文字コードが49となり'0'の文字コードが48ですので
>c-'0'は49-48で1となるわけですね。
その通りです。
>ということは'A'の文字コードが65ですので
>'A'-55で10になりますね。
多くの場合、これで大丈夫でしょう。
テキストとして保存しなければならないのなら、このくらいしか方法は思いつきませんね・・・
94ポイント を手に入れた。
|
|
|
|
|
Name: SooA ..入門者(3,946ポイント)
Date: 2009/03/02(月) 00:54
No:29738
|
|
Title: Re:太鼓の鉄人のプログラムを改造中ですが
|
|
比較の部分は見た目で分かりやすく書けますよ。
if( c >= '0' && c <= '9' )
humen[i].knd=c-48;
else if( c >= 'A' && c <= 'Z' )
humen[i].knd=c-55;
まず無いとは思いますが
SCIさんの仰るようなケースもあるので
その点だけ注意してください。
83ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) ..伝説なるハッカー(997,205ポイント)
Date: 2009/03/02(月) 02:44
No:29759
|
|
Title: Re:太鼓の鉄人のプログラムを改造中ですが
|
|
入力ファイルのデータは0か1しかないので、「c-'0'」のようなコードでも問題無いかと思いましたが、
アルファベットを含むような場合、他の回答者様が仰っているようなことを考慮する必要がありますね。
まぁサンプルの場合は
if( c == '0' )
.knd = 0;
else if( c == '1' )
.knd = 1;
みたいな処理でも大丈夫ですね。
ただ、仰るようにこれを拡張するなら、まず、適切な音譜データの格納の仕方を勉強してみた方がいいかもしれません。
私は適当に何も調べずに作りましたが、
ダンスマニアや、名前忘れましたがDTXmaniaでしたっけ?
あの手の自作出来る音楽ゲーのデータがどのようになっているか調べてみると良いかもしれません。
きっとこれだけ出回っているソフトですから、効率の良い方法で格納されていると思います。
211ポイント を手に入れた。
|
|
|
|
|
Name: hss12 ..かけだし(2,040ポイント)
Date: 2009/03/02(月) 03:03
No:29764
|
|
Title: Re:太鼓の鉄人のプログラムを改造中ですが
|
|
なるほど、そのほうが見やすいですね。
追加で質問なのですが、これは作った管理人さんじゃないと分かりにくいかもしれないですが、
コンボを表示する機能がなかったので付けたのですが
連続で弾が来た場合、例えば4つしかないのに連打で5回押しても
combo 4と表示されてしまいます。無駄にキーを押しているのにノーミス判定になってしまうんです。
管理人さんのコメントに
/*
本当はここで、ヒットした弾IDと弾の座標を記憶しておき、
ヒットが近かった物を結果ヒットとする処理と、
もし同じ距離の2つヒットした弾があれば左側をヒットとする処理を追加する必要がある
*/
とあったのでこれが原因かなとも思うのですが、どんなものでしょうか。
私自身処理の流れがまだ分かっていないので、どう直せばよいかヒントもらえないでしょうか。
一応作りかえたbullet.cppを付けておきます。
add_combo()を追加して、ヒットした時はcombo++
外れた時はcombo=0としています。
あと変更しているところは
input_key[0]は下キー
input_key[1]は右キー
input_key[2]は左キー・・・のようになります。
donとkaで書いてあったので全部直すのに苦労しました。
2倍のポイントを手に入れた! 942ポイント を手に入れた。
|
|
|
|
|
Name: hss12 ..かけだし(2,104ポイント)
Date: 2009/03/02(月) 03:14
No:29765
|
|
Title: Re:太鼓の鉄人のプログラムを改造中ですが
|
|
音譜データの格納の仕方ですが、案外今の状態がけっこう編集しやすいです。
ただ、作るのに時間かかりますね。コメントで歌詞でも書ければ楽なんですが。
char.cppも付けてみます。
64ポイント を手に入れた。
|
|
|
|
|
Name: kazuoni [URL] ..熟練のプログラマー(67,026ポイント)
Date: 2009/03/02(月) 03:25
No:29767
|
|
Title: Re:太鼓の鉄人のプログラムを改造中ですが
|
|
>無駄にキーを押しているのにノーミス判定になってしまうんです。
最近のDJMax等はこの辺の判定あいまいですね。
押されたデータを記憶させておいて、
次にくるものと、先ほどの格納したデータを比較し、
ある程度(自分でラインを引くのですが、)
離れていたらミスって自分はしてました。
これを利用すると、例えば今押された奴がb1,次に来るやつがb2だとすると、
もし、b1が通り過ぎてしまっても、
(押すタイミング)<(b2-b1)
ならば、b1が押されたことにできます。
そしたらあとは距離使ってperfect,good,soso,booなんてので分けれます。
追記
同期は自分も一概には言えませんが、最近の曲(リズム変化が激しい曲)
にはかなり苦労すると思います。
自分が経験しましたので・・・w
228ポイント を手に入れた。
|
|
|
|
|
Name: hss12 ..かけだし(2,242ポイント)
Date: 2009/03/02(月) 03:59
No:29769
|
|
Title: Re:太鼓の鉄人のプログラムを改造中ですが
|
|
graph.cpp中で
//ヒットしたときの結果表示描画
void graph_kekka(){
int i,flag=0;
for(i=0;i<KEKKA_MAX;i++){
if(kekka[i].flag==1){
if(kekka[i].knd==0 || kekka[i].knd==1){
DrawRotaGraphF(kekka[i].x, kekka[i].y, kekka[i].range, 0.0, img_kekka[kekka[i].knd], TRUE); //結果表示
DrawRotaGraphF(kekka[i].x-20.0, kekka[i].y-16.0, kekka[i].range, 0.0, img_combo[0], TRUE); //コンボと表示
DrawFormatString(kekka[i].x+8.0, kekka[i].y-25.0,color[1],"%d",ch.combo); //コンボ数表示
}
}
}
}
のようにしています。臨時でDrawFormatStringですが、画像データで行く予定です。
GOODなどの文字と一緒に出て消えます。
ちなみにBOOの字は出してないです。コンボがリセット=BOOなので。
表示させても連打中はBOOとは出ないです。
ところでDrawFormatStringはintしかダメなんですね。
138ポイント を手に入れた。
|
|
|
|
|
Name: SooA ..入門者(4,205ポイント)
Date: 2009/03/02(月) 15:19
No:29784
|
|
Title: Re:太鼓の鉄人のプログラムを改造中ですが
|
|
>ところでDrawFormatStringはintしかダメなんですね。
char dat1[] = {"ABCDE"};
double dat2 = 1.123456;
int dat3 = 12345;
DrawFormatString( 8, 24, 0xffffff, "文字列[%s]", dat1 ) ;
DrawFormatString( 8, 48, 0xffffff, "浮動小数点[%0.4f]", dat2 ) ;
DrawFormatString( 8, 72, 0xffffff, "整数[%d]", dat3 ) ;
DrawFormatString( 8, 96, 0xffffff, "dat3の16進数[%x]", dat3 ) ;
画像を使うようなので無用かもしれませんが、
% の後に続くフォーマットで型を指定します。
詳しくはprintf関数を調べてみてください。
意図するところが間違っていたらすみません。
267ポイント を手に入れた。
|
|
|
|
|
Name: hss12 ..入門者(2,534ポイント)
Date: 2009/03/03(火) 04:17
No:29840
|
|
Title: Re:太鼓の鉄人のプログラムを改造中ですが
|
|
すみません。言いたかったのは座標のことです。
この場合座標のkekka[i].xとkekka[i].yはdoubleのようですが、
DrawFormatStringの座標はintしか対応していないようで
そのままだとコンパイルのとき警告が出るんですね。
(int)kekka[i].xのように書けば良いのだろうとは思いますが
画像にする予定なのでそのまま書いています。
画像を表示しているDrawRotaGraphFはfloat座標のようですが、
graph.cppの最初でdoubleからfloatに変換しているのですかね。
最初何やってるのだろうと思いましたが勉強になります。
ところで
DrawRotaGraph (int座標)と
DrawRotaGraphF (float座標)
は表示したとき違いが出るのでしょうか?
292ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) ..伝説なるハッカー(999,059ポイント)
Date: 2009/03/03(火) 04:56
No:29841
|
|
Title: Re:太鼓の鉄人のプログラムを改造中ですが
|
|
Fが後ろに付く関数は小数点座標が指定出来ます。
y=10x
のような大きな傾きのある直線をF無し関数で飛ばしてみて下さい。きっとカクカクして見えると思います。
■
■
■■
■
■
■■
■
■
■
こんな感じで飛んでいくと思います。しかし小数点座標が指定出来ると滑らかに飛んでいきます。
通常描画ではよくわからないですが、バイリニア法で描画するとよくわかります。
バイリニア法での描画は龍神録プログラミングの館59章で使っているのでよければご覧下さい。
148ポイント を手に入れた。
|
|
|
|
|
Name: hss12 ..入門者(3,733ポイント)
Date: 2009/03/05(木) 21:15
No:30097
|
|
Title: Re:太鼓の鉄人のプログラムを改造中ですが
|
|
ありがとうございます。
参考にする人がいるかわかりませんが、
DrawFormatString(kekka[i].x+8.0, kekka[i].y-25.0,color[1],"%d",ch.combo); //コンボ数表示
の部分を画像表示にしてみました。
龍神録プログラミングの館の41章を参考にさせてもらいましたが
左のいらない0を表示したくなかったのと、左寄せしたかったのですこし苦労しました。
うまく書けたと思いましたが、他にも書き方があれば教えてください。
例えば、combo 0012 を combo 12と表示したかったわけです。
LoadDivGraph( "num.png" , 10 , 10 , 1 , 16 , 18 , img_num );//0〜9の数字画像を分割してimg_num配列に保存
//-----------
int keta;
int combo;
combo=ch.combo;
for(keta=0; combo !=0; keta++) combo/=10;//コンボが何桁か調べる
combo=ch.combo;
for(int k=keta; k>0; k--){//コンボ数表示
DrawRotaGraphF(kekka[i].x+15.0*k, kekka[i].y-18.0, kekka[i].range,0.0,img_num[combo%10],TRUE);
combo/=10;
}
326ポイント を手に入れた。
|
|
|
|
Name: ざこ ..プログラマー(27,792ポイント)
Date: 2009/03/05(木) 17:45
No:30073
|
|
Title: 文字列反転(復習)
|
|
以前文字列反転についてご質問させていただいており、その際このような回答をいただきました。
#include <iostream>
using namespace std;
char* rev_str(char *s)
{
unsigned int len, i;
char temp[80];
memset( temp, 0, sizeof(temp) ); // 忘れ物
len = strlen(s) - 1;
for( i=0; i<strlen(s); i++ ) {
temp[len] = s[i];
len--;
}
strcpy( s, temp ); // 忘れ物
return s;
}
int main()
{
char s[80] = "water";
cout<<"waterを逆にすると"<<rev_str(s)<<"です\n";
return 0;
}
しかしこれを実行すると表示されるのは r だけ 疑問に思い中身を見てみるとtempの中身は"retaw"になっているのに
表示がおかしいです。どうしてでしょうか?
223ポイント を手に入れた。
|
|
|
Name: ざこ ..プログラマー(27,485ポイント)
Date: 2009/03/05(木) 12:14
No:30040
| 解決!
|
Title: コモンダイアログ2
|
|
昨日ご質問させていただきましたが長くなってしまったので新しくスレをたてさせていただきます。
VOID CDialog1::OnButtonAdd()
{
CDialog2 dlg;
CString str_ed1;
CString str_ed2;
int chk;
CString str_index//追加
dlg.m_pstr=&str_ed1;
dlg.m_qstr=&str_ed2;
dlg.m_chkBOX=chk;
i=m_list.GetItemCount();
dlg.DoModal();
if(chk==0){
m_list.InsertItem(i,(LPCTSTR)str_ed1);
m_list.SetItemText(i,1,(LPCTSTR)str_ed2);
}
else if(chk==1){
for(int j=0;j<i;j++){//追加
while((index=m_list.GetNextItem(index,LVNI_ALL))!=-1){
str_index=m_list.GetItemText(index,0)
if(str_ed1==str_index){n=j;} //EDIT1の内容が一致したらnにその行数を格納
}
m_list.InsertItem(j,(LPCTSTR)str_ed1);
m_list.SetItemText(j,,1(LPCTSTR)str_ed2);
}
MessageBox("上書きしました");//ここまで
}
}
としましたが更新になりません。。 おかしい箇所をご指摘ください。デバッグではjの中身がおかしかったとおもいます。後jの中身が正しくてもなぜか更新されなかったです。
380ポイント を手に入れた。
|
|
|
|
Name: バグ ..ハッカー(151,846ポイント)
Date: 2009/03/05(木) 14:25
No:30052
|
|
Title: Re:コモンダイアログ2
|
|
jの中身がどうおかしかったのでしょうか?
ざっと見た感じですが、jに関してはおかしく無さそうですよ?
もう一度流れを確認します。
1:ダイアログ1には、パスと拡張子を表示する為のリストビューと追加用のボタンがある
2:ダイアログ2には、パスを入力する為のエディットボックスと、更新するか否かを選択する為のチェックボックスがある
3:ダイアログ1の追加ボタンを押すと、ダイアログ2が表示される
4:チェックボックスにチェックが入っていた場合は、エディットボックスに入力された内容をダイアログ1へ渡し、データを更新する
5:リストビューに既に表示されている内容と、新たに追加された内容を比較し、同一の物があった場合は何もしない
6:5で同一の物が見つからなかった場合はリストビューへ追加する
これで間違いないでしょうか?
289ポイント を手に入れた。
|
|
|
|
|
Name: ざこ ..プログラマー(27,503ポイント)
Date: 2009/03/05(木) 15:29
No:30060
|
|
Title: Re:コモンダイアログ2
|
|
あってると思います。外観に関しては前スレに画像はってあります
あ・・先頭は-1にしたので合ってるんですね。
18ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(151,943ポイント)
Date: 2009/03/05(木) 15:53
No:30064
|
|
Title: Re:コモンダイアログ2
|
|
外観に関しては分かっています。
ただ、上書きの部分の考え方がよく理解できないんですよ。
上書きにチェックが入ってなくて、同じ内容のデータが見つかった場合はどうするんですか?
全く同じ内容のデータが追加される訳ですが、それは許すという事なんですよね?
97ポイント を手に入れた。
|
|
|
|
|
Name: ざこ ..プログラマー(27,549ポイント)
Date: 2009/03/05(木) 16:03
No:30065
|
|
Title: Re:コモンダイアログ2
|
|
あーなるほど、確かに疑問をもたれるのはわかります。そういう問題点は後々修正していきますが、今回は
許すということでいきます。
46ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(151,994ポイント)
Date: 2009/03/05(木) 17:37
No:30071
|
|
Title: Re:コモンダイアログ2
|
|
サンプルです。
一応、条件は満たしている…はず(^_^;)
また、分からない事があったら、書き込みしてください。
51ポイント を手に入れた。
|
|
|
|
Name: ユカイ ..ぴよぴよ(897ポイント)
Date: 2009/03/05(木) 11:31
No:30035
|
|
Title: クリアー表示の仕方
|
|
度々すみません、どうしてもわからないことがあります。
全部敵を捕まえたらゲームがストップして、ゲームクリアーの表示のやり方を教えていただけないでしょうか?
49ポイント を手に入れた。
|
|
|
|
Name: s-rush ..プログラマー(35,254ポイント)
Date: 2009/03/05(木) 11:50
No:30036
|
|
Title: Re:クリアー表示の仕方
|
|
現在捕まえた敵の数を格納しておく変数を用意しておいて、
敵を捕まえるたびにその変数を+1していく。
もし、その変数が敵の最大数と等しく(より大きく)なったとき、
ゲームをストップしてクリア表示する。
このやり方でどうでしょうか?
100ポイント を手に入れた。
|
|
|
|
|
Name: やそ ..比類無きプログラマー(87,804ポイント)
Date: 2009/03/05(木) 11:59
No:30038
|
|
Title: Re:クリアー表示の仕方
|
|
s-rushさんとほぼ一緒ですが、考え方を逆にしてもいいです。
残っている敵の数を変数で管理しておき、捕まえたら-1とかね(^.^)
残りがZEROになったらクリアってこと^^
43ポイント を手に入れた。
|
|
|
|
|
Name: s-rush ..プログラマー(35,306ポイント)
Date: 2009/03/05(木) 12:12
No:30039
|
|
Title: Re:クリアー表示の仕方
|
|
あとはfunc_stateなる変数を用意し、
それに状態を示す値を代入して、条件分岐させてあげれば
クリア表示がしやすくなると思いますよ^^
拡張もしやすいと思います。
52ポイント を手に入れた。
|
|
|
|
|
Name: s-rush ..プログラマー(36,052ポイント)
Date: 2009/03/05(木) 12:45
No:30043
|
|
Title: Re:クリアー表示の仕方
|
|
サンプルコードです。
先ほど言ったfunc_stateでの場合分けはしていません。
もし余力があれば、挑戦してみてください。
#include "DxLib.h"
#define MAX_ENEMY 6
(略)
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow )
{
int ch_image[16],enemy_image[16],
i,j;
int catch_enemy;
ch_t ch;//自キャラ
enemy_t enemy[12];//敵キャラ
catch_enemy = 0; //捕まえた敵の数の初期化
if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //ウィンドウ化と初期化処理
/*代入(初期化)*/
ch.x =320;
ch.y =160;
ch.walking_flag=0;
ch.muki=3;
for(i=0;i<6;++i)
{
while(1)
{
enemy[i].x=GetRand(20-1);
enemy[i].y=GetRand(15-1);
if(hantei[enemy[i].y][enemy[i].x]==0)
{
enemy[i].x*=32;
enemy[i].y*=32;
break;
}
}
enemy[i].walking_flag=0;
enemy[i].muki=GetRand(3);
enemy[i].exist=0;
enemy[i].bright_operation=255;
}
SetDrawScreen( DX_SCREEN_BACK ) ; //描画先を裏画面に設定
LoadDivGraph( "char.png" , 16 , 4 , 4 , 32 , 32 , ch_image ) ;//画像を分割してimage配列に保存(自キャラ)
LoadDivGraph( "char.png" , 16 , 4 , 4 , 32 , 32 , enemy_image );//敵キャラ
while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE])
{
//↑メッセージ処理 ↑画面をクリア ↑キーボード入力状態取得 ↑ESCが押されると終了
/*白い壁を描画*/
for(i=0;i<15;i++)
for(j=0;j<20;j++)
if(hantei[i][j]==1)
DrawBox(j*32,i*32,(j+1)*32,(i+1)*32,GetColor(255,255,255),TRUE);
chara_walk(&ch,enemy,6);
ch.img=ch_image[(ch.x%32+ch.y%32)/8 + ch.muki*4]; //画像をセット
DrawGraph( ch.x , ch.y , ch.img , TRUE ) ;//画像を描画
for(i=0;i<6;++i)
{
if(enemy[i].exist==0)//敵が存在していたら
{
enemy_walk(&enemy[i]);
enemy[i].img=enemy_image[(enemy[i].x%32+enemy[i].y%32)/8 + enemy[i].muki*4];
DrawGraph( enemy[i].x , enemy[i].y , enemy[i].img , TRUE );
}
else//当たったらフェードアウト
{
if(enemy[i].bright_operation!=0)
{
SetDrawBlendMode(DX_BLENDMODE_ALPHA,enemy[i].bright_operation--);
DrawGraph( enemy[i].x , enemy[i].y , enemy[i].img , TRUE );
SetDrawBlendMode( DX_BLENDMODE_NOBLEND , 0 ) ;
if(enemy[i].bright_operation == 254) //もし敵を捕まえたら
catch_enemy++;
}
}
}
if(catch_enemy >= MAX_ENEMY) //すべての敵を捕まえたら
printfDx("GAME SET");
ScreenFlip();
}
DxLib_End();
return 0;
}
746ポイント を手に入れた。
|
|
|
|
|
Name: ユカイ ..ぴよぴよ(946ポイント)
Date: 2009/03/05(木) 14:20
No:30050
|
|
Title: Re:クリアー表示の仕方
|
|
なんとかできましたが、ゲーム自体を終わらせる方法はどうでしょう?
22ポイント を手に入れた。
|
|
|
|
|
Name: s-rush ..プログラマー(36,468ポイント)
Date: 2009/03/05(木) 14:52
No:30055
|
|
Title: Re:クリアー表示の仕方
|
|
パッと見た感じ、先ほど私が提示したサンプルのまんまみたいですね^^;
kazuoniさんもおっしゃっていますが、自分で考えてみましたか?
ヒントとしてfunc_stateっていう変数を用意して、
条件分岐すればやりやすくなるかもと提示したのですが・・・
(一応サンプルはできているのですが、自分で多少は考えてもらいたかったので、
途中段階ものをサンプルとしてアップさせていただきました)
これでは丸投げと言われても仕方がないと思います。
もう少しヒントを出しておきます。
今後のためにも、switchで分岐させておきましょう。
(略)
while( )
{
switch (func_state){
case 0:
/*---------------------------------------------------------------
ゲームの処理
先ほどのサンプルのほとんどがここに来ます。
>>if(catch_enemy >= MAX_ENEMY) //すべての敵を捕まえたら
>> printfDx("GAME SET");
この条件を、case 0にジャンプするようにします。
---------------------------------------------------------------*/
break;
case 1:
/*全敵捕獲後の処理*/
break;
default:
/*func_stateが0, 1以外になってしまった時の例外処理*/
}
}
こんな感じでいいでしょう。
>>ゲーム自体を終わらせる方法はどうでしょう?
ゲーム自体を終わらせてしまうよりも、ユーザーに選択してもらう方が、
ゲームとしてはいいかもしれません。
たとえば
Cキー入力で、もう一度ゲームをする。
Zキー入力で、ゲーム終了する。
というように。
この処理自体は簡単ですので、一度考えてみてください。
もちろんcase 1の時に処理するんですよ。
416ポイント を手に入れた。
|
|
|
|
|
Name: s-rush ..プログラマー(36,639ポイント)
Date: 2009/03/05(木) 15:35
No:30061
|
|
Title: Re:クリアー表示の仕方
|
|
>>while( ){
これは
while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE])
のことですので、
while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE])
{
}
のしたにつけるものではないですよ。
ヒントの出し方がまずかったですね^^;
171ポイント を手に入れた。
|
|
|
|
|
Name: ユカイ ..かけだし(1,206ポイント)
Date: 2009/03/05(木) 15:40
No:30062
|
|
Title: Re:クリアー表示の仕方
|
|
いえいえ、そんなことは。
こうですかね?
ちなみに今でているエラー文です。
z:\c言語\cpp_game\ch5\main.cpp(256): error C2143: 構文エラー : ')' が '{' の前にありません。
z:\c言語\cpp_game\ch5\main.cpp(256): error C2143: 構文エラー : ')' が '{' の前にありません。
z:\c言語\cpp_game\ch5\main.cpp(257): error C2050: switch 式の結果は、整数値になりませんでした。
z:\c言語\cpp_game\ch5\main.cpp(269): error C2143: 構文エラー : ':' が ';' の前にありません。
z:\c言語\cpp_game\ch5\main.cpp(279): fatal error C1075: 左側 中カッコ '{' に対応するものが 'z:\c言語\cpp_game\ch5\main.cpp(224)' で見つかる前に EOF が検出されました。
237ポイント を手に入れた。
|
|
|
|
|
Name: s-rush ..プログラマー(36,723ポイント)
Date: 2009/03/05(木) 15:49
No:30063
|
|
Title: Re:クリアー表示の仕方
|
|
えっと・・・
1つ目の
while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE])
っていうものがありますよね?
その中身が先ほどのヒントのプログラムが入るんですが・・・
84ポイント を手に入れた。
|
|
|
|
|
Name: kazuoni [URL] ..熟練のプログラマー(69,243ポイント)
Date: 2009/03/05(木) 16:03
No:30066
|
|
Title: Re:クリアー表示の仕方
|
|
一度C言語の基礎的なプログラムの流れから命令まで見直してみてはいかがでしょうか?
while文、switch文の理解ができていないような気がします。
また、頭の中で今書いているプログラムがどう動くのか一度考えてみてください。
while()が二つあるとどう動くのか。
このままだとスレが長引くだけかと。
少し冷たく感じるかも知れませんが、自分で納得したほうが吸収も早いです。
29ポイント を手に入れた。
|
|
|
|
Name: trx ..ぴよぴよ(456ポイント)
Date: 2009/03/05(木) 13:51
No:30046
|
|
Title: ソフトを二つとも動かせる
|
|
この、プログラムは、ボタンを押すと音が鳴ってtest.bmpが流れて来る様にしたいのですがtest.bmpしか出て来ないのです。どうやったら、main.bmp、test.bmp、とキーを押して、音が出る様に出来るのですか?メイクには、エラーが出ません。dxtest2.cpp以外にもdxtest.hと言うのが在り、#include "DxLib.h"と書いています。出来れば、アドバイスや、参考になるページでは無く、プログラムを、書き直して書いてください。
183ポイント を手に入れた。
|
|
|
|
Name: trx ..かけだし(2,104ポイント)
Date: 2009/03/05(木) 14:01
No:30048
|
|
Title: Re:ソフトを二つとも動かせる
|
|
自分で改良して見たらmain.bmpが点滅して出て来る様に成りました。なぜですか?
23ポイント を手に入れた。
|
|
|
|
|
Name: たか ..初心者(7,406ポイント)
Date: 2009/03/05(木) 14:17
No:30049
|
|
Title: Re:ソフトを二つとも動かせる
|
|
規約をしっかり読んでから投稿してください。
答えだけが知りたいのでしたら、他を当たってみてください。
ここはC言語何でも質問掲示板です。
それと、自分の書いた文章を見直してはどうでしょうか?
119ポイント を手に入れた。
|
|
|
|
|
Name: hss12 ..入門者(3,407ポイント)
Date: 2009/03/05(木) 14:37
No:30054
|
|
Title: Re:ソフトを二つとも動かせる
|
|
とりあえず、whileの中にwhileが書いてあり、2重になっているので
ムダな部分を消してみてはどうでしょうか。
33ポイント を手に入れた。
|
|
|
|
|
Name: trx ..ぴよぴよ(508ポイント)
Date: 2009/03/05(木) 15:05
No:30056
|
|
Title: Re:ソフトを二つとも動かせる
|
|
hss12さんありがとうございます。
それと、たかさん、そのお言葉励ましに成り自分で一部解決できました。
52ポイント を手に入れた。
|
|
|
|
|
Name: trx ..ぴよぴよ(523ポイント)
Date: 2009/03/05(木) 15:18
No:30058
| 解決!
|
Title: Re:ソフトを二つとも動かせる
|
|
すみません音も出ました。スピーカーの電源が切れていました。
15ポイント を手に入れた。
|
|
|
|
|
Name: trx ..かけだし(2,060ポイント)
Date: 2009/03/05(木) 09:08
No:30026
|
|
Title: Re:三つの画像移動
|
|
コンパイルが通らなかったのですが通りました。ありがとうございます。
ついでにもう一つ質問したいのですが、この三つのファイルをまとめてdxtest2.cppのmain.bmpと音がでてdxtest3.cppのchar.pngが出るようにするにはどうすれば良いのでしょうか?回答よろしくお願いします。
dxtest.h ↓
#include "DxLib.h"
dxtest2.cpp ↓
#include "Dxtest.h"
int GetHitKeyStateAll_2(int KeyStateBuf[]){
char GetHitKeyStateAll_Key[256];
GetHitKeyStateAll( GetHitKeyStateAll_Key );
for(int i=0;i<256;i++){
if(GetHitKeyStateAll_Key[i]==1) KeyStateBuf[i]++;
else KeyStateBuf[i]=0;
}
return 0;
}
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
int Key[256];
int Sound1 ;
int Sound2;
int Sound3;
ChangeWindowMode(TRUE);//ウィンドウモード
if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化
Sound1 = LoadSoundMem( "THE NEXT DOOR.wav" );
Sound2 = LoadSoundMem( "don.wav" );
Sound3 = LoadSoundMem( "ka.wav" );
while(ProcessMessage()==0 && ClearDrawScreen()==0 && GetHitKeyStateAll_2(Key)==0 && Key[KEY_INPUT_ESCAPE]==0){
//↑メッセージ処理 ↑画面をクリア ↑入力状態を保存 ↑ESCが押されていない
DrawFormatString(0,0,GetColor(255,255,255),"%d",Key[KEY_INPUT_Q]);//エンター入力カウント
if(Key[KEY_INPUT_Q]==1)//今の瞬間押されたら
PlaySoundMem( Sound1 , DX_PLAYTYPE_BACK );//画面全体を白い四角で表示
DrawFormatString(0,0,GetColor(255,255,255),"%d",Key[KEY_INPUT_X]);
if(Key[KEY_INPUT_X]==1)
PlaySoundMem( Sound2 , DX_PLAYTYPE_BACK );//画面全体を白い四角で表示
DrawFormatString(0,0,GetColor(255,255,255),"%d",Key[KEY_INPUT_SLASH]);
if(Key[KEY_INPUT_SLASH]==1)
PlaySoundMem( Sound2 , DX_PLAYTYPE_BACK );//画面全体を白い四角で表示
DrawFormatString(0,0,GetColor(255,255,255),"%d",Key[KEY_INPUT_LSHIFT]);
if(Key[KEY_INPUT_LSHIFT]==1)
PlaySoundMem( Sound3 , DX_PLAYTYPE_BACK );//画面全体を白い四角で表示
DrawFormatString(0,0,GetColor(255,255,255),"%d",Key[KEY_INPUT_RSHIFT]);
if(Key[KEY_INPUT_RSHIFT]==1)
PlaySoundMem( Sound3 , DX_PLAYTYPE_BACK );//画面全体を白い四角で表示
LoadGraphScreen( 0 , 150 , "main.bmp" , FALSE ) ;
ScreenFlip();
}
DxLib_End();
return 0;
}
dxtest3.cpp
#include "Dxtest.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode( TRUE ) ; // ウインドウモードに変更
if( DxLib_Init() == -1 ) return -1; //DXライブラリ初期化 エラーが起きたら終了
int x1=700-24,x2=800,x3=600,image[16];
SetDrawScreen( DX_SCREEN_BACK ) ;//描画先を裏画面に設定
LoadDivGraph( "char.png" , 16 , 4 , 4 , 32 , 32 , image ) ;//画像を分割してimage配列に保存
while(1){
ClearDrawScreen(); //裏画面のデータを全て削除
if( ProcessMessage() == -1 ) break ; //異常がおきたら終了
x1-=5;
x2-=5;
x3-=5;
DrawGraph(x1,150,image[4] ,TRUE); //左向き画像の描画
DrawGraph(x2,150,image[12] ,TRUE);
DrawGraph(x3,150,image[12] ,TRUE); //右向き画像の描画
if(x1<0) break; //画像1のx座標が0未満になれば終了
ScreenFlip() ;//裏画面データを表画面へ反映
}
DxLib_End() ;// DXライブラリ使用の終了処理
return 0 ;// ソフトの終了
}
2,032ポイント を手に入れた。
|
|
|
|
|
Name: kazuoni [URL] ..熟練のプログラマー(69,083ポイント)
Date: 2009/03/05(木) 09:17
No:30028
|
|
Title: Re:三つの画像移動
|
|
まず、規約を読んでください。
今からでもよいので、プレタグを使ってください。
また、字下げも適宜入れるようにしてください。
>この三つのファイルをまとめてdxtest2.cppのmain.bmpと音がでてdxtest3.cppのchar.pngが出るようにする
main関数は一つのプログラムに一つが原則です。
dxtest2.cppを関数化した関数をfunction()とし、
dxtest3.cppのmain関数でfunction()を呼び出してください。
言ってる意味がよくわからなければ、入門ページでちょこちょこ勉強をしてください。
関数、分割ファイル、グローバル変数等で検索すれば今回の件は解決できます。
また、ScreenFlip(),DxLib_End(),ChangeWindowMode(TRUE),SetDrawScreen( DX_SCREEN_BACK ),DxLib_Init()
はループ毎に一度だけ呼び出すようにしてください。
341ポイント を手に入れた。
|
|
|
|
|
Name: trx ..ぴよぴよ(273ポイント)
Date: 2009/03/05(木) 09:44
No:30030
|
|
Title: Re:三つの画像移動
|
|
プレタグて何ですか?
関数、分割ファイル、グローバル変数等をhttp://dixq.net/g/#8で検索したら色々出てきてなんだか良く解りません。すみません。
また、ScreenFlip(),DxLib_End(),ChangeWindowMode(TRUE),SetDrawScreen( DX_SCREEN_BACK ),DxLib_Init()
はループ毎に一度だけ呼び出すようにしてください。と言われても解りません。本当に、すみません、何も解っていないと思うので。
それともう一つ質問なのですか、char.pngの所に○○.bmpや××.jpegなどは、使えるのですか?
102ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 [URL] ..熟練のプログラマー(66,610ポイント)
Date: 2009/03/05(木) 10:37
No:30034
|
|
Title: Re:三つの画像移動
|
|
> また、ScreenFlip(),DxLib_End(),ChangeWindowMode(TRUE),SetDrawScreen( DX_SCREEN_BACK ),DxLib_Init()
> はループ毎に一度だけ呼び出すようにしてください。と言われても解りません。本当に、すみません、何も解っていないと思うので。
DXライブラリのリファレンスでそれぞれの関数を調べれば理由が分かるはずです。
> それともう一つ質問なのですか、char.pngの所に○○.bmpや××.jpegなどは、使えるのですか?
こちらもリファレンスに対応形式が載っています。
# 細かいことですが、名前が全角文字名の時と半角文字名の時とで表記が揺れています。
# 出来れば統一した方がいいかもしれませんよ。
147ポイント を手に入れた。
|
|
|
|
Name: trx ..ぴよぴよ(78ポイント)
Date: 2009/03/03(火) 08:57
No:29843
|
|
Title: PAD_INPUT
|
|
40a.番の、キーを押して判断の、所をPAD_INPUT_○○などとしたい時には、どこに、何を入れれば良いのでしょうか?これは、PLAYSTATION2のコントローラーを、使って動かしたいと、思っています。他に、14歳からはじめるC言語わくわくゲームプログラミング教室と言う本を使っていますがその本に付いて来たCDの中に、コンパイル済みのデータが入っており、そのゲームでは、コントローラーは、動きました。回答よろしくの願いします。
78ポイント を手に入れた。
|
|
|
|
Name: kazuoni [URL] ..熟練のプログラマー(67,372ポイント)
Date: 2009/03/03(火) 11:41
No:29846
|
|
Title: Re:PAD_INPUT
|
|
まず、PADとキーの対応関係を明らかにしてください。
PADの入力は本家を参照してください。
ttp://homepage2.nifty.com/natupaji/DxLib/function/dxfunc_input.html#R5N4
例えば、PAD_INPUT_AとKEY_INPUT_Xを同じものとして扱いたいなど。
また、これを扱うなら先ほど挙げた龍神録解説ページが詳しいので、参照してください。
ちょっと長いかも知れませんが、読んでしまえば、丸々使えます。
もしキーとPADの入力を分けるなら、単にGetHitKeyStateAll_2
のキー監査256個に自分が入力状態を得たいPADキー分増やせば良いです。
が、これだとPADを持っていない人は遊べなくなるので、意味無いですね^^;
207ポイント を落としてしまった。
|
|
|
|
|
Name: hss12 ..入門者(2,641ポイント)
Date: 2009/03/03(火) 12:13
No:29850
|
|
Title: Re:PAD_INPUT
|
|
変えるところはいくつかありますが、例えば
if( GetJoypadInputState( DX_INPUT_KEY_PAD1 ) & PAD_INPUT_UP ) 上を押した時の処理 ;
のように書くことができます。
DX_INPUT_KEY_PAD1ならパッドとキーボード両方使えます。
14歳の本を持っているのなら詳しく説明されていたと思いますが。
ちなみにこれだとキーコンフィグはできないです。
107ポイント を手に入れた。
|
|
|
|
|
Name: hss12 ..入門者(3,374ポイント)
Date: 2009/03/05(木) 13:36
No:30045
|
|
Title: Re:PAD_INPUT
|
|
解決後の投稿で申し訳ないですが、気になって作ってみたのでせっかくなので載せてみます。
ゲームプログラミングの館の40節のプログラムのゲームパッド版です。
もちろんhttp://dixq.net/rp/8.htmlのキーコンフィグ対応のほうが良いのでしょうが
少し飛躍していて分かりにくいですし、簡単なゲームなら必要ないと思いますので
40cにパッドについても加筆されてはどうでしょうか、管理人様。
DX_INPUT_KEY_PAD1にしてますのでパッドがなくてもキーボードでも動作します。
キーボードは別でパッドだけにするならDX_INPUT_PAD1として下さい。
#include "DxLib.h"
#define PAD_MAX 16
unsigned int KeyPad[PAD_MAX];
int GetHitPadStateAll_2(){
int PadInput = GetJoypadInputState( DX_INPUT_KEY_PAD1 );//パッドの入力状態を取得
for(int i=0; i<PAD_MAX; i++){
if( PadInput & 1<<i)KeyPad[i]++;//押されていたらカウントアップ
else KeyPad[i]=0;//押されてなかったら0
}
return 0;
}
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode(TRUE);//ウィンドウモード
if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化
while(ProcessMessage()==0 && ClearDrawScreen()==0 && GetHitPadStateAll_2()==0 && CheckHitKey(KEY_INPUT_ESCAPE)==0){
//↑メッセージ処理 ↑画面をクリア ↑入力状態を保存 ↑ESCが押されていない
for(int i=0; i<PAD_MAX; i++)
DrawFormatString(0, 20*i, GetColor(255,255,255), "ボタン%d:%u", i, KeyPad[i]);
if(KeyPad[3]==1)//ボタン3(上)が押された瞬間
DrawBox(0,0,640,480,GetColor(255,255,255),TRUE);//画面全体を白い四角で表示
//if(KeyPad[3]>0) 押されている間の処理;
//if(KeyPad[3]>10) 長押しされている時の処理;
ScreenFlip();
}
DxLib_End();
return 0;
}
733ポイント を手に入れた。
|
|
|
|
Name: ざこ ..プログラマー(26,800ポイント)
Date: 2009/03/04(水) 18:09
No:29970
|
|
Title: isdigit
|
|
{
CString num;
m_ed.GetWindowText(num);
if(isdigit(atoi(num))==0){
MessageBox("数字を入力せよ");
m_ed.SetWindowText(" ");
}
}
エデットボデックスに入力した文字列が数字じゃなければエデットボックスの中身を空にするという
簡単なプログラムですが・・例えば6を入れた場合numの中身は"6"でatoiの戻り値は6になっております。
しかしisdigitの戻り値は0になります。 何故でしょうか?
8ポイント を手に入れた。
|
|
|
|
Name: 御津凪 [URL] ..熟練のプログラマー(65,851ポイント)
Date: 2009/03/04(水) 18:31
No:29971
|
|
Title: Re:isdigit
|
|
isdigit が必要とする引数は文字コード値です。
この場合では数値を渡しているので、文字コードでの数字ではないと判断して 0 が返ってきます。
上記の場合の条件だと、取得した文字列の各文字に対して isdigit でチェックし、
数字かどうかを判断するといいと思います。
11ポイント を手に入れた。
|
|
|
|
|
Name: box ..ハッカー(136,676ポイント)
Date: 2009/03/04(水) 21:20
No:29986
|
|
Title: Re:isdigit
|
|
isdigit() の結果が真になるのは、引数が'0'〜'9'(数字)のときです。
0〜9の数値のときではありません。
32ポイント を手に入れた。
|
|
|
|
|
Name: ざこ ..プログラマー(26,953ポイント)
Date: 2009/03/04(水) 22:10
No:29990
|
|
Title: Re:isdigit
|
|
ということはatoi にするのがマズイのでしょうか? しかしisgiditの因数はint型じゃないといけないみたいですが、わかりません・・EDIT箱は文字列じゃないと使えないみたいだからEDIT箱とisdigitと併用しようとしたらどうしてもatoiにしなきゃいけない?と思うのですが、根本的にやり方変化させないとまずいのでしょうか
95ポイント を手に入れた。
|
|
|
|
|
Name: box ..ハッカー(136,814ポイント)
Date: 2009/03/04(水) 22:22
No:29993
|
|
Title: Re:isdigit
|
|
> ということはatoi にするのがマズイのでしょうか?
そうですね。
>しかしisgiditの因数はint型じゃないといけないみたいです
引数(ひきすう)です。
isdigitの引数がint型であることは間違いありません。
アスキーコードの場合でいうと、isdigitの結果が真になるのは
'0':十進で48
'1':十進で49
...
'9':十進で57
です。
今一度、'0'と0とは異なることをご確認ください。
138ポイント を手に入れた。
|
|
|
|
|
Name: ibis ..上級者(18,212ポイント)
Date: 2009/03/04(水) 22:56
No:29996
|
|
Title: Re:isdigit
|
|
ややこしいですけど、文字をint型として扱うことがあります。
そういう場合はatoiやsscanfのような関数で変換するのではなくて、普通にキャストすればいいです。
まぁキャスト無しでそのまま渡せることも多いですが。
57ポイント を手に入れた。
|
|
|
|
|
Name: tkmakwins15 ..比類無きプログラマー(94,629ポイント)
Date: 2009/03/05(木) 02:02
No:30015
|
|
Title: Re:isdigit
|
|
こういうことでしょうか?
{
CString num;
m_ed.GetWindowText(num);
if(isdigit(static_cast<unsigned char>(num[0]))){
MessageBox("数字を入力せよ");
m_ed.SetWindowText(" ");
}
}
104ポイント を手に入れた。
|
|
|
|
|
Name: tkmakwins15 ..比類無きプログラマー(94,741ポイント)
Date: 2009/03/05(木) 02:04
No:30016
|
|
Title: Re:isdigit
|
|
あっ、数字を入力していないときだから、判定逆になってますね。
{
CString num;
m_ed.GetWindowText(num);
if(!isdigit(static_cast<unsigned char>(num[0]))){
MessageBox("数字を入力せよ");
m_ed.SetWindowText(" ");
}
}
112ポイント を手に入れた。
|
|
|
|
|
Name: ざこ ..プログラマー(27,105ポイント)
Date: 2009/03/05(木) 09:17
No:30027
| 解決!
|
Title: Re:isdigit
|
|
皆様ご指導ありがとうございました。tkmakwins15様の回答を拝見させていただき、キャストでしょうか、を見て
何これと思ったので知識不足なようです。キャストのやり方は把握しているつもりでしたがstatic_castというのは初めて見ました。今の私には若干難しかったようです。キャストについて勉強しなおします。ありがとうございました。
2倍のポイントを手に入れた! 152ポイント を手に入れた。
|
|
|
|
Name: せっちゃん ..ぴよぴよ(53ポイント)
Date: 2009/03/05(木) 00:46
No:30000
|
|
Title: ローカル変数の初期化について
|
|
こんばんわ
C言語初心者です。
初歩的な質問で申し訳ないですが、どうしても解決できなくて質問させていただきます。
私は学生のためのCという本を使ってC言語の勉強をしているのですが、
この本の通りにプログラムを書いたのに、エラーが出ます。
コンパイルはMicrosoft Visual C++ 2008 Express Editionを使っています。
#include <stdio.h>
main()
{
float x, y, z;
printf("z=x*(x+y)/{y*(x-y)}計算します。\n");
printf("xとyを入力してください。----->");
scanf("%f %f, &x, &y");
z =x*(x+y)/(y*(x-y));
printf("z=%7.3f\n", z);
return(0);
}
エラーは
warning C4700: 初期化されていないローカル変数 'x' が使用されます
warbubg C4700: 初期化されていないローカル変数 'y' が使用されます
とでています。
どこがおかしいのでしょうか・・?
53ポイント を手に入れた。
|
|
|
|
Name: せっちゃん ..ぴよぴよ(109ポイント)
Date: 2009/03/05(木) 01:07
No:30005
| 解決!
|
Title: Re:ローカル変数の初期化について
|
|
お早い解答ありがとうございます。
見落としてましたorz
こんな初歩的なミスを指摘してくれてありがとうございました!
56ポイント を手に入れた。
|
|
|
|
|
Name: たいちう ..プログラマー(25,158ポイント)
Date: 2009/03/05(木) 08:56
No:30025
|
|
Title: Re:ローカル変数の初期化について
|
|
> エラーは
> warning C4700: 初期化されていないローカル変数 'x' が使用されます
> warbubg C4700: 初期化されていないローカル変数 'y' が使用されます
> とでています。
エラーではなくて警告です。
エラーの場合は、こんなもんコンパイルできるか〜、という感じですが、
警告の場合は、コンパイルできることはできるけど、少し怪しくね?という感じです。
scanfが間違っていたので、その次の行の計算をしようとするときに、
xとyは初期化も代入もされていない、ごみデータのままです。
ホントにこんなデータで計算しちゃっていいの?という警告ですね。
コンパイラの声に耳を傾けましょう。
161ポイント を手に入れた。
|
|
|
|
Name: ターボ ..ぴよぴよ(247ポイント)
Date: 2009/03/04(水) 16:56
No:29965
|
|
Title: 3DCGソフト
|
|
こんにちは。
私は3DCGは全くの素人なのですが、3DCGに興味があるのですが、お勧めの3DCGのソフトとか有りますか?
貧乏なので出来れば無料もしくは安く手に入るソフトが良いのですが、趣味でやるつもりですが、出来れば時間がかかってもいいので最終的にはプロの人と同じくらいのスキルにしたいのです。
まずはどのようにしたらよいでしょうか?ネットで調べたらsoftimage mod toolが良いとかBlenderが良いとか、多分どっちのソフトも良い(優れている)んだろうなぁと思うのですが、どっちの方が良いのか素人の私には判断しかねるので、ご教授お願いします。
後、ソフトとパソコン以外に必要なものって有りますか?
後、お勧めのサイトとか、本とかもあったら教えてほしいです。よろしくお願いします。
247ポイント を手に入れた。
|
|
|
|
Name: cosmo ..初心者(8,235ポイント)
Date: 2009/03/04(水) 18:48
No:29973
|
|
Title: Re:3DCGソフト
|
|
>softimage mod toolが良いとかBlenderが良いとか
私はこの二つに関しては良く判らないです…すいません。
3DCGソフトは他にもMetaseqoia(メタセコイア)があります。
無料版はMetaseqoia LEだったと思います。
私はインストールしたっきりあまり使っていないのですが…、
(流石に少しは使いましたけど。)
直感的に操作できるのでお勧めです。
メタボール(近づけていくと互いにくっつく)の機能が良いソフトです。
シェアウェア版も確か5千円位だったと思います。
このソフトでは確か3Dポリゴンを動かす機能は実装されていないようですが…。
206ポイント を手に入れた。
|
|
|
|
|
Name: cosmo ..初心者(8,348ポイント)
Date: 2009/03/04(水) 18:51
No:29975
|
|
Title: Re:3DCGソフト
|
|
(投稿ボタンを二重に押してしまったので同じ内容の二重投稿となってしまった為削除しました。)
113ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 [URL] ..熟練のプログラマー(66,270ポイント)
Date: 2009/03/04(水) 19:02
No:29976
|
|
Title: Re:3DCGソフト
|
|
3DCGソフトは、それぞれインターフェイスや操作が大きく違うこともあり、
私自身はどれが良いかは分かりませんが、
私は Blender を使っています。
(使い込んでいるわけではないですが)
softimage mod tool の方は、サイトを見ると、商用利用を禁止しているので、
3Dの技術を覚える程度(無料ゲームを作るだけ)なら良いかもしれません。
softimage mod tool を使ってみたわけではないですが、
Blender は操作が非常に癖があり、しっかり覚えないと扱いづらいところがあります。
貧乏、ということですが、3DCGソフトはその性質上、それなりのスペックを使用します。
(3Dゲームを遊べる程度ならOK)
今は3DCGの基本を覚えるところからということなので大丈夫かと思いますが、
高質のモデルを作るとなると、ハイスペックPCでないと動作が重かったり、不安定になりやすいので注意してください。
cosmo さんの紹介したシェアウェア版メタセコイアには、プラグイン機能があり、
ボーン編集やアニメーションが出来るプラグインがあったはずです。
419ポイント を手に入れた。
|
|
|
|
|
Name: ターボ ..ぴよぴよ(342ポイント)
Date: 2009/03/04(水) 20:33
No:29984
|
|
Title: Re:3DCGソフト
|
|
cosmoさん御津凪さん返信ありがとうございます。
cosmoさんへ
Metaseqoia(メタセコイア)について調べてみます。
御津凪さんへ
>softimage mod tool の方は、サイトを見ると、商用利用を禁止しているので、
そうなんですか、知りませんでした。わざわざ調べてくれてありがとうございます。
もし、他にも詳しい人がいらっしゃったら引き続きレスお願いします。
95ポイント を手に入れた。
|
|
|
|
|
Name: Kou ..入門者(2,651ポイント)
Date: 2009/03/04(水) 21:48
No:29988
|
|
Title: Re:3DCGソフト
|
|
私は「3dsMAX 6」、「Shade 8」、「LightWave 6」を友人から譲ってもらい、しばらく使用していました。
「Blender」や「メタセコイヤ LE」も使った事がありますが、初心者なら「メタセコイヤ LE」がオススメですね。
フリー版だとプラグインが使えないとか、4面編集が出来ないとかの制限はありますが、3Dモデリングに慣れるにはじゅうぶんです。
それと、「Shade」もGI(グローバルイルミネーション)を特に使わないなら、ベーシックパッケージが1万位なので、それも良いかな?
但し「Shade」は他のメジャーソフトと違って自由曲面モデリングが基本なので、他とは感じが違いますね。
「3dsMAX」や「LightWave」は色々出来る分、やはり高いので、本気でやりたくなってから購入を考えた方が無難です。
まぁ最初は「メタセコ LE」→「メタセコ(シェア版)」の流れが良いと思いますよ。
レンダラーはフリーでも探せば色々良いものがありますし。
長文失礼しました。
221ポイント を手に入れた。
|
|
|
|
|
Name: Kou ..入門者(2,766ポイント)
Date: 2009/03/04(水) 22:58
No:29997
|
|
Title: Re:3DCGソフト
|
|
追記
シェア版の「メタセコ」ですが、プロのクリエーターの方も使っているソフトですよ。
プロの方はメタセコでモデリングして、そのデータをMAXやLightWaveに持って行って、UVWMAPを編集し、
ライティング→レンダリングの流れが多いようです。
まぁ企業クリエーターの場合は、MAXやMAYAでモデリング→UVWMAP編集→別ソフトのレンダラでレンダリング
が多いみたいですけど。
でも、「メタセコ」のシェア版は、上記の作業を一応一通りはできるので、少ないお金で始めるには十分過ぎるソフトです。
それと必要な物は、
・UPU ペン4 2.4Gh以上(ここ3年〜4年位の間に発売されたモデルのPCなら十分)
・メモリ 1G以上(2Gあれば十分)
・グラフィックボード(今の製品なら1万程度の物で十分)
・ペイントソフト(GINP等のフリーソフトで十分)
・ペンタブ(テクスチャを書くのにあると便利)
こんな感じですかね。
それから、作りたい物によって、適しているソフトが違うので、そのあたりがハッキリしていると良いと思いますよ。
115ポイント を手に入れた。
|
|
|
|
|
Name: ターボ ..ぴよぴよ(467ポイント)
Date: 2009/03/05(木) 07:07
No:30019
| 解決!
|
Title: Re:3DCGソフト
|
|
Kouさん返信ありがとうございます。
Blenderをこの前(質問する前に)ダウンロードしていたのですが、メタセコイア LEもダウンロードして使い比べてみます。
パソコンはノートですがまだ買ってから半年位なので多分スペックは大丈夫だと思います。
皆さん私のためにいろいろアドバイスしてくださってありがとうございます。
125ポイント を手に入れた。
|
|
|
|
Name: 田中 ..ぴよぴよ(283ポイント)
Date: 2009/03/03(火) 15:05
No:29859
|
|
Title: 個人的なお話ですが・・・
|
|
こんにちは、いつもお世話になっています。
C言語とは関係のない、個人的な話なんですけれども、
私は現在26歳でコンピュータ系の専門学校に通っています。
今授業でC言語やJAVA(2年生から勉強)、HTMLなどを勉強してます。
・これらを勉強して就職ができるのでしょうか?
・プログラマーは年齢制限があると、聞きましたが実態はどうなのでしょうか?
私は将来が不安で、もし何か今のうちにこれを勉強しておいたほうがいいとかあったら、何か
アドバイスをお願いします。
165ポイント を手に入れた。
|
|
|
|
Name: バグ ..ハッカー(149,481ポイント)
Date: 2009/03/03(火) 15:17
No:29860
|
|
Title: Re:個人的なお話ですが・・・
|
|
就職できるか否かはむしろ、面接での印象や一般常識の有無が問われるかと思います。
即戦力を求めている会社でない限り、スキルは入社してからでも身につけられます。
年齢制限に関しては、業界全体ではなく会社それぞれにあるのではないでしょうか?
一口にプログラマーといっても様々な職種がありますし…一概には言えないのではないかと…
ちなみに、私は29歳から今の仕事を始めました。
C言語に関しては、全くの無知に近い状態でしたが、必死で勉強して、なんとかやっていけています。
将来に不安を感じるのは仕方ないですが、重圧に負けて行動する前から動けないのではお話にもなりませんよ。行動あるのみです(^-^)
184ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 [URL] ..熟練のプログラマー(65,391ポイント)
Date: 2009/03/03(火) 15:31
No:29861
|
|
Title: Re:個人的なお話ですが・・・
|
|
一通り自力でプログラムを組める程度の基礎知識と、コミュニケーション能力があれば、就職できます。
(ただし就職先の経済状況次第ですが…)
プログラマの年齢制限というと、ほぼパソコンと向き合う(&企業によっては徹夜残業が多い)為、
意外と体力が必要なのと、視力の低下を招きやすいところから来ているのではないでしょうか?
あと、常に新しい技術が出てきているので、それを覚えられる脳の若さも必要、というのもあるかもしれないです。
(私は実務経験何年以上とかの求人をよく見ましたが、年齢制限は見たことはないです)
一般的な年齢制限として今の経済状況を考えると、定年退職までしっかり働くことができ、
かつ長期雇用できるという点からではないかと考えてみましたが、
実際のところはどうなんでしょうかね。
面接官経験者とか会社に詳しい方じゃないと正確にはちょっとわからないかもです。
# 面接官補佐をしたことのある管理人さんなら何か分かるかもしれません。
299ポイント を手に入れた。
|
|
|
|
|
Name: conio [URL] ..中級者(11,771ポイント)
Date: 2009/03/03(火) 15:40
No:29862
|
|
Title: Re:個人的なお話ですが・・・
|
|
プログラマーと言っても色々あるので何とも言えませんが、ゲーム関連の人事の人によると、
・30歳で定年という事は無い
・20代後半だと、若い人と比べて「伸びる可能性」が低いと判断する企業がある
・学歴が良くても、コミュニケーションが取れそうにない人は落とす
・ゲーム以外の知識があると良い(政治、経済、映画、漫画、流行、その他何でも)
との事。(企業にもよると思いますが)
就職するなら、とりあえず早い段階の方が良いと思います。
どのプログラマーになるのか分からないのですが、【ゲームプログラマー】に関しては、
-------------------------------------------------
・C言語
・C++
・コミュニケーション
・3Dの画像等に関して
・数学
・物理
・英語
・体力、精神力
-------------------------------------------------
の能力があると良いそうです。
あと、自分はブログをやっておりまして、ブログ内で
実際に出題された、プログラムに関する筆記試験の内容なども公開してますので、参考にしてみて下さい。
237ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..比類無きプログラマー(86,324ポイント)
Date: 2009/03/03(火) 15:48
No:29865
|
|
Title: Re:個人的なお話ですが・・・
|
|
> 私は実務経験何年以上とかの求人をよく見ましたが、年齢制限は見たことはないです
平成19年10月から施行の改正雇用対策法のため、求人で年齢制限を行うことが原則としてできなくなったからです。
ただし、企業が求める人材が変わるわけではありません。
求人情報等で制限をかけなくても、書類審査や面接で落とすことになります。
うちの場合、何歳でも採用するときはしますが、50歳なのに25歳程度の人と同程度のことしかできないのでは論外です。
学校を卒業した時点で就職できるかどうかについては、やはり面接での印象や一般常識の有無ですね。
あと、どんなところに就職活動を行うかです。
151ポイント を手に入れた。
|
|
|
|
|
Name: Mist ..熟練のプログラマー(54,073ポイント)
Date: 2009/03/03(火) 16:10
No:29868
|
|
Title: Re:個人的なお話ですが・・・
|
|
長文スイマセン。
余り小さなソフトハウスや派遣会社に勤務する場合は即戦力として本当に実力があろうとなかろうといきなり最前線で働かされる場合がありますが、それなりの規模の会社に正社員として入社した場合は最初に教育期間がありますので現時点でのプログラミングスキルのある・なしはさほど心配する必要はありません。
また、離職者の中途採用の場合は入社時にどの程度のスキルがあるかを確認される場合もありますが、新卒の場合学生時代に就職後に本当に役立つ技術も身につけるのなんて無理なので雇う側も過度の期待はしていません。
他の人も書かれていますが、一朝一夕には身に付かないコミュニケーション能力とかそういったものの方がよほど重要視されます。
(物静かな人が悪いってわけじゃないんですけど)
ソフトウェア業界と一口に言っても分野ごとに必要なスキルはぜんぜん違います。(う〜ん、今度の発表会の内容にかぶってきたな)
そのため、これをやっていれば絶対に大丈夫というのはありません。
まず、あなたがどういう分野に進みたいのかを明確にすることが第一です。
その上で、その分野の企業情報を調べてその分野で必要となるスキルを勉強するのがいいと思います。
どこでもいいから就職したい、というのは就職してから後悔することになります。
ま、C言語を一通り使えるようになっておけば潰しが効くのは事実ですが。
年齢については気にしなくても問題ないです。
20代後半から新卒で入ってくる人は別に珍しくは無いです。
ただし、以下2点は注意してください。
第一に、入社してからですが若く入ってきた社員の倍以上頑張ってください。
実社会ではあなたの実力を入社年数ではなく年齢(見た目)で判断されることが多いです。
20代のうちは問題ないですが30代に突入したとき、他社の人からはある程度の実力は持っているものと判断されます。
大卒で入社した人はその実力にたどり着くまで8年間猶予があるわけですが、あなたにはその半分以下しか時間が無いのですから倍の早さで成長しなければなりません。
第二に、若い人に比べてやり直しが出来る回数が少ないことを認識してください。
入社した会社の業務内容が自分の希望と違っていたと言う事は良くあります。
その場合、転職すればよいだけのことですが、年齢が高くなるにつれ転職がしづらくなってきます。
つまり、若い人なら4〜5回転職できるチャンスがあってもあなたには残り1回ぐらいしかないかもしれません。
そのため、先にも書きましたが就職先を安易に決めることは絶対にやめましょう。
873ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) ..ウィザード(1,000,141ポイント)
Date: 2009/03/03(火) 17:20
No:29871
|
|
Title: Re:個人的なお話ですが・・・
|
|
私が就職活動をして思ったのは、企業に入る前にはあまり専門的な知識は問われないんだなってことでした。
一般常識やSPI試験のような問題、英語の問題などはありましたが、2ヶ月前から対策しても何とかなりました。
これは最低限のことが出来ない人をふるい落とす為で、大事なのはそこでは無いようです。
やはり団体で仕事をこなすにはコミュニケーション能力は必須なようで、面接が一番重要なようです。
SPI対策などはそこそこにして、その分、エントリーシートや面接対策はかなり入念にやりました。
何度もキャリア課にいってエントリーシートを見てもらったり、対策本を読みまくったりしました。
話す事を沢山用意していけば面接も楽しく、「まだ話したかったのに」というような状態で面接を終われるようになれば、かなり印象もよくなると思います。
新卒で聞かれる事はせいぜい
・大学時代頑張った事はなんですか
・志望動機はなんですか
・入社してやってみたいことはなんですか
そんな定番なことくらいです。難しく考えずにしっかり対策していけば大丈夫です。
たまに圧迫面接やイレギュラーな質問がある面接もありますが、そういうのはネットの掲示板とかで情報集めて対策すればなんとかなったりします。
・・・とこのように言うと「学生のうちは勉強しなくても大丈夫だよ」と受け取られるかもしれませんが、
そうではありません。
逆で、学生のうちにどれだけ何に打ち込んだかで面接で何が言えるかが変わってくるので
「C言語じゃなくていいから」何か自分の好きなことに打ち込んでください。
そしてそれを面接でアピールして下さい。
夢に見た日本自転車で縦断成功しました、とか、スキーで全国大会に出場した、とか。
何か積極性があるとか、やり遂げる力があるとか思われることをアピールできるといいですね。
「いやいや自分は家にゲームしか・・」そういう場合は、もし例えばゲームプログラマーになりたい場合、
自分が作ってみたいゲームのアイディアを完成させる為に、これこれのゲームをやってみたと、
それぞれにはどういう長所があり、自分なりにこんな分析が出来たとか、
其の分析を元にこういう情報が収集出来たとか成果物を残すといいと思います。
ただボーっとゲームするだけじゃなく、今後何に活かせるかに気を配りながら遊ぶことで自分の為もなり、
面接のネタにもなると思います。
会社が求めてる人材って例えば一次関数で言えば
y = 0.5x + 2
でのびて行く人じゃないと思うんですよね。
出発地点が少々上であっても関係ない。出発点は0であろうとどのような分野でも臨機応変に対応でき、
y = 2x
でのびて行く人が欲しいんだと思います。
長くなりましたが、学生のうちは「好きなことに熱中する(もちろん自分の為になること)」これが一番だと思います。
社会人になったら出来なくなるでしょうしね・・。
1,082ポイント を手に入れた。
|
|
|
|
|
Name: dimmy ..かけだし(1,122ポイント)
Date: 2009/03/03(火) 19:57
No:29882
|
|
Title: Re:個人的なお話ですが・・・
|
|
問題は面接ですよね。
筆記で知識を問う問題は出ますがそこまで掘り下げた内容が問われることはまずないと思います。
深い知識が問われるようなことがあれば、面接でプログラムが非常に得意です、とでも言ったときでしょう。
しかしあなたの場合、面接で趣味特技は?なんかよりももっと問われるであろう重要な項目があります。
それは今まで何をやっていたのか?ということ。
通常学部卒の場合、大学3年生の後期から就職に向けて動き出すとして、当たり前に行けば20,21歳です。
義務教育を経て、これまで何につまずくことなく順調にきたな、と面接官はその新卒者がそれまで何をやってきたかある程度予測がつくので、では一番最近である「大学では何をやっていたか」を訊くでしょう。
しかしあなたの場合、面接官が予測できない「空白の5年間」があります。
その間に、何をやっていたのか?を問われるだろうと思います。
家でうつむいていました、じゃ話になりません。
一度でも正規社員として働いたことがあるならそのことを話せばいいですが
そうでない場合、その質問にどう答えるかは合否を分ける最も重要なところではないかと私は思います。
例えば大学3年生で22歳な人がいて、浪人や留年したわけでもないのに1年間何をしていたのですか、と問われて、
大学2年次にイギリスへ留学しておりました、と言えば面接官はどう思うでしょうか?
留学をして何を学んだかをうまく伝えることができれば、面接官はあなたが
ほかの人とは違う貴重な経験をしていると思いませんか?
英語が喋れるのか?と思いませんか?
その人の魅力がぐっと増すと思いませんか?(まあ普通は留学なんかすればエントリーシートにでも書くでしょうから既知でしょうが)
大手に就職したいと願っているのであれば、多数の応募がある中で自分をどうアピールするかが重要です
面接官はユニークな人材を期待しています
30前なら、もうそれ以上(今回の勝負時を通り越して次回)のやり直しは困難かと思いますが、今から一、二度勝負するくらいならまだ十分です
自分は今まで何をしていたのか、を嘘偽りなく、魅力的に聞こえるよう、面接時に説明すること。
説明できるよう、自分を見つめなおすこと。
嘘は御法度。
あとは、あなたが行きたい企業について徹底的に調べ上げることです。
これでもか、と調べ上げます。
試験日に行きの車内で会社から貰ったパンフレットをちら見しただけなんて落としてくれと言っているようなものです。
自分に自信を持つことも大事です。
自信は不採用時の逆境によっていくらかついてきます。
どういうことかというと、上に書いたことを実践していれば、ずいぶん知識が増えているはずです。
不採用になっても、その企業のことはこれ以上ないくらい知っている自分がいるはずです。
面接時の勝手もわかってきます。
一度落とされたくらいでは力を抜かず精一杯また挑戦してください。
自信がつくと思います。
1,122ポイント を手に入れた。
|
|
|
|
|
Name: たいちう ..上級者(24,997ポイント)
Date: 2009/03/03(火) 21:14
No:29888
|
|
Title: Re:個人的なお話ですが・・・
|
|
> ・これらを勉強して就職ができるのでしょうか?
全くの未経験で異業種からの転職と比較して、専門学校で2〜3年
みっちり基礎を仕込まれたと判断されれば有利になるでしょう。
ただし、22・23歳の新卒した場合、3年の専門学校での経験があったとしても、
年齢的に不利なのは確かです。少しでも有利になるようにと考えるならば、
基本情報やソフトウェア開発の資格を取ってはいかがでしょうか。
ついでにプログラマやSEとして働くならば、勉強(新しい知識の習得)は
不可欠です。それも教えてもらうのではなく、能動的な学習が必要です。
一生とは言いませんが、現役で働いている間は勉強し続けましょう。
> ・プログラマーは年齢制限があると、聞きましたが実態はどうなのでしょうか?
35歳定年説をあえて肯定しているブログを思い出しました。
http://sengoku.blog.klab.org/archives/50211291.html
> しかしあなたの場合、面接官が予測できない「空白の5年間」があります。
普通は履歴書になんか書いてあるんじゃまいか。
# みんな26歳にチャンスが残り少ないみたいなことゆーなよー
# 俺が転職に踏み切れないじゃないかー まだ予定はないんだけど
2倍のポイントを手に入れた! 494ポイント を手に入れた。
|
|
|
|
|
Name: 田中 ..ぴよぴよ(101ポイント)
Date: 2009/03/05(木) 06:23
No:30018
|
|
Title: Re:個人的なお話ですが・・・
|
|
皆さん、回答ありがとうございます。いつも、お世話になっています。
皆さんの文章読んで見て、びっくりしたのが、技術だけではなく、社会人の常識や礼儀、またはコミュニケーションを重視していることです。
僕は、頑張りたいと思います。
この天まで昇天しそうな気持ちを持続させ、頭を柔軟に、そして、なんでも吸収するぞっという心意気で、
日々を努力していきたいと思います。
182ポイント を落としてしまった。
|
|
|
|
|