ページ 1 / 1
テトリス作成
Posted: 2007年12月16日(日) 00:15
by ぜt
vc++でdxライブラリをつかってテトリスを作成しようとおもうのですが
このサイトには参考にできるソースはありますか?
すいませんよくわからなくて・・・
Re:テトリス作成
Posted: 2007年12月16日(日) 00:50
by バグ
DxLibを使用していませんが、下記のURLのページはテトリスを作るのに参考になると思います。ただ、Windowsプログラムの仕組みを知っておかないとピンとこないかもしれません。
http://codezine.jp/a/article/aid/207.aspx
下記の本にはWin32APIでのテトリス作成の方法が解説付きで載っています。個人的にはこちらのソースの方が好きですね。
http://www.amazon.co.jp/Windows%E3%82%B ... 4797325453
Re:テトリス作成
Posted: 2007年12月16日(日) 11:11
by ひこ
私も今テトリスをDXライブラリを使って作っています。(まだ途中ですが・・・)
私が参考にしているのは下記のサイトです。
ライブラリは使っていませんがわかりやすいと思います。
http://www.nhk.or.tv/kow/program/index.php
Re:テトリス作成
Posted: 2007年12月16日(日) 13:56
by ぜt
ひこさんに質問なんですが?
紹介サイトのテトリスは
DXライブラリはどういうところに使えばいいんですか?
Re:テトリス作成
Posted: 2007年12月16日(日) 14:56
by ひこ
実は私もまだDrawBoxぐらいしか使ってません。
私はC言語&DXライブラリの初心者なので
「テトリスを作ってプログラミングに慣れよう」って感じでテトリスを作り始めました。
ですのでDXライブラリをどこで使えば有効なのかなどは自分でもわかっていません。
参考にならないレスですいません^^;
Re:テトリス作成
Posted: 2007年12月16日(日) 15:42
by バグ
画像描画、音楽再生、キー入力判定くらいじゃないでしょうか?
Re:テトリス作成
Posted: 2007年12月16日(日) 16:42
by ぜt
ありがとうございます。
記述方法DXライブラリ以外の記述方法も変えないといけないんでしょうか?
おしえてください
Re:テトリス作成
Posted: 2007年12月16日(日) 20:40
by ぜt
すいませんさっきの文章がおかしかったので書き直します。
http://www.nhk.or.tv/kow/program/index.php
をDxライブラリをもちいてテトリスを作成するとき、
画像描画、音楽再生、キー入力判定以外で記述方法を変えるところはありますか?
おしえてください。
Re:テトリス作成
Posted: 2007年12月16日(日) 23:14
by ひこ
>バグさん
補足どうもありがとうございます。
>ぜtさん
記述方法を変えるところはほぼないと思います・・・(たぶん
私はそのサイトに書いてあるコードを見て自分が理解できたと思ったら
自分なりにコードをアレンジしながら作成していますよ。
Re:テトリス作成
Posted: 2007年12月17日(月) 09:20
by ぜt
Re:テトリス作成
Posted: 2007年12月17日(月) 09:51
by バグ
kbhit関数はキーが押されたかどうかの判定をする関数です。
ですから、DxLibで同じような事をさせようと思ったら、GetHitKeyStateAll関数が良いのではないでしょうか?
勿論、そのまま置き換えただけでは動きませんので、下記のリファレンスを参考にして自分の都合の良いように書き換えて下さい。
http://homepage2.nifty.com/natupaji/DxLib/dxfunc.html
Re:テトリス作成
Posted: 2007年12月17日(月) 10:40
by ひこ
バグさんのおっしゃる通りです。
私もGetHitKeyStateAll関数を使って判定しています。
Re:テトリス作成
Posted: 2007年12月17日(月) 12:02
by ぜt
ありがとうございました。
僕もその関数を使って作ってみます。
Re:テトリス作成
Posted: 2007年12月19日(水) 15:46
by ぜt
たびたびすいません。
c言語でsystem("cls");はDxライブラリではどんな関数をつかえばいいんでしょうか?
Re:テトリス作成
Posted: 2007年12月28日(金) 16:41
by ぜt
http://www.nhk.or.tv/kow/program/program_124.php
をDXライブラリを使ってvc++で作ってみたのですが
ブロックが瞬間移動する感じで落下して行きます。
本当はどう上のサイトだとどう動くんでしょうか?
Re:テトリス作成
Posted: 2007年12月28日(金) 18:43
by tk-xleader
system("cls");の代わりになるのはClearDrawScreen();でよいと思います。
Re:テトリス作成
Posted: 2007年12月28日(金) 23:38
by ぜt
栄光のプログラマーさんありがとうございました。
ところで私が質問した瞬間移動のけんですが解決しました。
ちゃんとブロックが残像ありで落ちてきたんですがなんか処理中に画面が
ちらつくんですがどうすればいいですか?
Re:テトリス作成
Posted: 2007年12月29日(土) 01:56
by 管理人
>ぜtさん
tkmakwins15さんのお名前は栄光のプログラマーではありません。
名前は「Name:」の直後に書かれています。仰っているのは掲示板ランクで、書き込みを沢山するほどポイントが上がっていく仕組みになっています。
そして、解らない事があるたびに掲示板で聞くよりも、調べたり勉強した方が早いと思いますので、
一通りゲームプログラミングの館に目を通していただいて、
http://dixq.net/g/
わからない関数については一先ずリファレンスページを見ていただいて
http://homepage2.nifty.com/natupaji/DxLib/dxfunc.html
それでもわからなければ質問していただいた方が解決が早いかと思います。
そして、仰るちらつきについてですが、裏画面処理をしていないからではないでしょうか。
ゲームプログラミングの館の12,13章をお読みください。
Re:テトリス作成
Posted: 2007年12月29日(土) 10:28
by tk-xleader
ゲームは高速な描画が行われるため、そのまま画面上に直接描画すると、次の画面を作成する過程を見せるという状態になります。
それだと、画面がかなり高速で描画されるために、ちらつきが見えるようになります。
そこで、2つの画面を作り、それを入れ替えながら描画するという方法を取る事になります。
使う関数は、
SetDrawScreen();
(引数はDX_SCREEN_BACKで)
ScreenFlip();
です。
Re:テトリス作成
Posted: 2007年12月29日(土) 11:24
by ぜt
tkamakwins15さんありがとうございました。
早速使ってみます。
Re:テトリス作成
Posted: 2008年1月01日(火) 21:53
by ぜt
http://www.nhk.or.tv/kow/program/program_127.php
の
srand((unsigned)time(NULL));
block_type = rand() % 7;
というところはDXライブラリに どうなおせばいいんですか?
すいません調べてみたけどちょっとわからなかったのでお願いします。
Re:テトリス作成
Posted: 2008年1月01日(火) 23:01
by 雷
srand
で調べてみましょう。
そこで、何をしているか分かりますか?
ここはこうなると思うのですが、やり方がわかりません。
などと質問された方が、指摘しやすいかと思います。
やっていることがわからなければ、プログラムをしている意味が無いと思いますので^^;
一行目が、乱数の設定
二行目が、ブロックタイプの設定
(読めば分かりますがw
DXライブラリは主に表示関係だったと思うので、DXライブラリに直す理由が分かりません^^;
(もしかしたら、あるのかもしれませんが…
Re:テトリス作成
Posted: 2008年1月02日(水) 01:22
by tk-xleader
無理に直すとしたら、
srand((unsigned)time(NULL));
は削除して、
rand()%7;
は
GetRand(6);
に直すくらいでしょうか。
Re:テトリス作成
Posted: 2008年1月02日(水) 08:40
by ぜt
ありがとうございます。
早速試してみたいと思います。
クイックソートエラーC2440
Posted: 2008年1月12日(土) 17:29
by オルムント
いつもお世話になってます。
動的な領域確保について質問します。
現在データの入ったファイルを読み込み
その中のデータをソートするプログラムを作っています。
管理人様のクイックソートプログラム解説アプリで勉強させていただきました。
ですが、現在作っているプログラムにどうやって対応させればよいのか
分からず困っています。
右の数字部分を降順に並べ替えて出力したいと思って実行しますと、
error C2440:'=':'int'から'seito'に変換できません。
error C2440:'=':'seito'から'int'に変換できません。
とエラー出力が表示されてしまいます。
あと、現在のプログラムは特定の行数以上読み込むと暴走してしまいます。
いまファイルデータが100行あるので下記のプログラム中に
struct seito x[100];
としていますが、何行でも対応できるようにしたいと思い調べたら
malloc関数というものを見つけました。
対応のさせ方がわからなくて困っています
お手数ですが、わかる方ご指導お願いします。
↓ファイルデータ↓
C00001 45
C00002 49
C00003 47
C00004 40
C00005 58
C00006 61
C00007 51
C00008 38
C00009 59
C00010 52
C00011 49
C00012 50
C00013 56
C00014 48
C00015 48
C00016 43
C00017 48
C00018 53
C00019 47
C00020 47
C00021 53
C00022 47
C00023 40
C00024 41
C00025 49
C00026 55
C00027 48
C00028 57
C00029 62
C00030 40
C00031 56
C00032 40
C00033 53
C00034 47
C00035 48
C00036 47
C00037 47
C00038 44
C00039 53
C00040 54
C00041 50
C00042 51
C00043 56
C00044 38
C00045 61
C00046 41
C00047 38
C00048 50
C00049 58
C00050 51
C00051 55
C00052 65
C00053 56
C00054 51
C00055 44
C00056 66
C00057 50
C00058 52
C00059 53
C00060 49
C00061 52
C00062 49
C00063 49
C00064 56
C00065 59
C00066 49
C00067 45
C00068 58
C00069 50
C00070 61
C00071 45
C00072 59
C00073 53
C00074 56
C00075 53
C00076 44
C00077 54
C00078 43
C00079 49
C00080 51
C00081 56
C00082 52
C00083 54
C00084 43
C00085 62
C00086 59
C00087 53
C00088 56
C00089 47
C00090 48
C00091 52
C00092 52
C00093 46
C00094 52
C00095 45
C00096 53
C00097 55
C00098 44
C00099 43
C00100 49
↓プログラム↓
#include <stdio.h>
#include <stdlib.h>
FILE* fp;
int kijun,cnt,i,j,num,ninzu;
struct seito {
char c;
int no;
int ten;
}SEITO;
struct seito x[100],temp;
void fileopen(void){
if ((fp=fopen("testfile","r"))==NULL) {
printf("not open file\n");
exit(1);
}
for (cnt=0;;cnt++){
if (fscanf(fp, " %c%05d %d",&x[cnt].c,&x[cnt].no,&x[cnt].ten)!=3);
if(ferror(fp)||feof(fp))break;
}
}
void sort(void){
int left,right;
int left0=left,right0=right;
int pivot;
if(left>=right)return;
pivot=(x[left].ten+x[(left+right)/2].ten+x[right].ten)/3;
while(1){
while(x[left].ten<pivot)left++;
while(x[right].ten>pivot)right--;
if(left>=right)break;
temp=x[left].ten;
x[left].ten=x[right].ten;
x[right].ten=temp;
left++;
right--;
}
sort(x,left0,left-1);
sort(x,right+1,right0);
}
void show(void){
for (i=0;i<cnt;i++){
if (x.ten>=kijun){
printf("C%05d %d\n",x.no,x.ten);
}}
}
int main(void){
fileopen();
num=sizeof(x)/sizeof(x[0]);
sort(x,num, sizeof(SEITO));
show();
fclose(fp);
return 0;
}
Re:テトリス作成
Posted: 2008年1月19日(土) 22:13
by ぜt
http://www.nhk.or.tv/kow/program/program_128.php
//画面表示
void ShowGameField()・・・・・
で落下していくブロックを表示するときに
for(i=0;i<21;i++)
{
for(j=0;j<12;j++)
{
for(field
[j] == 1)
{
DrawExtendGraph(x,y,x,y,画像名,TRUE);
}
}
}
とブロックを表示しているのですが、これだと全種類のブロックが
同じ画像になります。
ブロックの種類ごとに色を変えたいと思っているのですが全く思いつきません
考え方だけでもご教授いただけないでしょうか。お願いいたします。
Re:テトリス作成
Posted: 2008年1月19日(土) 22:18
by ぜt
また トピック作成します<!--1