テトリス作成

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ぜt

テトリス作成

#1

投稿記事 by ぜt » 17年前

vc++でdxライブラリをつかってテトリスを作成しようとおもうのですが
このサイトには参考にできるソースはありますか?

すいませんよくわからなくて・・・

バグ

Re:テトリス作成

#2

投稿記事 by バグ » 17年前

DxLibを使用していませんが、下記のURLのページはテトリスを作るのに参考になると思います。ただ、Windowsプログラムの仕組みを知っておかないとピンとこないかもしれません。

http://codezine.jp/a/article/aid/207.aspx


下記の本にはWin32APIでのテトリス作成の方法が解説付きで載っています。個人的にはこちらのソースの方が好きですね。

http://www.amazon.co.jp/Windows%E3%82%B ... 4797325453

ひこ

Re:テトリス作成

#3

投稿記事 by ひこ » 17年前

私も今テトリスをDXライブラリを使って作っています。(まだ途中ですが・・・)

私が参考にしているのは下記のサイトです。
ライブラリは使っていませんがわかりやすいと思います。

http://www.nhk.or.tv/kow/program/index.php

ぜt

Re:テトリス作成

#4

投稿記事 by ぜt » 17年前

ひこさんに質問なんですが?
紹介サイトのテトリスは
DXライブラリはどういうところに使えばいいんですか?

ひこ

Re:テトリス作成

#5

投稿記事 by ひこ » 17年前

実は私もまだDrawBoxぐらいしか使ってません。

私はC言語&DXライブラリの初心者なので
「テトリスを作ってプログラミングに慣れよう」って感じでテトリスを作り始めました。

ですのでDXライブラリをどこで使えば有効なのかなどは自分でもわかっていません。
参考にならないレスですいません^^;

バグ

Re:テトリス作成

#6

投稿記事 by バグ » 17年前

画像描画、音楽再生、キー入力判定くらいじゃないでしょうか?

ぜt

Re:テトリス作成

#7

投稿記事 by ぜt » 17年前

ありがとうございます。
記述方法DXライブラリ以外の記述方法も変えないといけないんでしょうか?
おしえてください

ぜt

Re:テトリス作成

#8

投稿記事 by ぜt » 17年前

すいませんさっきの文章がおかしかったので書き直します。
http://www.nhk.or.tv/kow/program/index.php
をDxライブラリをもちいてテトリスを作成するとき、
画像描画、音楽再生、キー入力判定以外で記述方法を変えるところはありますか?
おしえてください。

ひこ

Re:テトリス作成

#9

投稿記事 by ひこ » 17年前

>バグさん
補足どうもありがとうございます。

>ぜtさん
記述方法を変えるところはほぼないと思います・・・(たぶん

私はそのサイトに書いてあるコードを見て自分が理解できたと思ったら
自分なりにコードをアレンジしながら作成していますよ。

ぜt

Re:テトリス作成

#10

投稿記事 by ぜt » 17年前

http://www.nhk.or.tv/kow/program/program_125.php
のkbhit()はDXライブラリの関数は何を使えばいいんでしょうか?

バグ

Re:テトリス作成

#11

投稿記事 by バグ » 17年前

kbhit関数はキーが押されたかどうかの判定をする関数です。
ですから、DxLibで同じような事をさせようと思ったら、GetHitKeyStateAll関数が良いのではないでしょうか?
勿論、そのまま置き換えただけでは動きませんので、下記のリファレンスを参考にして自分の都合の良いように書き換えて下さい。

http://homepage2.nifty.com/natupaji/DxLib/dxfunc.html

ひこ

Re:テトリス作成

#12

投稿記事 by ひこ » 17年前

バグさんのおっしゃる通りです。
私もGetHitKeyStateAll関数を使って判定しています。

ぜt

Re:テトリス作成

#13

投稿記事 by ぜt » 17年前

ありがとうございました。
僕もその関数を使って作ってみます。

ぜt

Re:テトリス作成

#14

投稿記事 by ぜt » 17年前

たびたびすいません。
c言語でsystem("cls");はDxライブラリではどんな関数をつかえばいいんでしょうか?

ぜt

Re:テトリス作成

#15

投稿記事 by ぜt » 17年前

http://www.nhk.or.tv/kow/program/program_124.php
をDXライブラリを使ってvc++で作ってみたのですが
ブロックが瞬間移動する感じで落下して行きます。
本当はどう上のサイトだとどう動くんでしょうか?

tk-xleader

Re:テトリス作成

#16

投稿記事 by tk-xleader » 17年前

system("cls");の代わりになるのはClearDrawScreen();でよいと思います。

ぜt

Re:テトリス作成

#17

投稿記事 by ぜt » 17年前

栄光のプログラマーさんありがとうございました。
ところで私が質問した瞬間移動のけんですが解決しました。

ちゃんとブロックが残像ありで落ちてきたんですがなんか処理中に画面が
ちらつくんですがどうすればいいですか?

管理人

Re:テトリス作成

#18

投稿記事 by 管理人 » 17年前

>ぜtさん
tkmakwins15さんのお名前は栄光のプログラマーではありません。
名前は「Name:」の直後に書かれています。仰っているのは掲示板ランクで、書き込みを沢山するほどポイントが上がっていく仕組みになっています。

そして、解らない事があるたびに掲示板で聞くよりも、調べたり勉強した方が早いと思いますので、
一通りゲームプログラミングの館に目を通していただいて、
http://dixq.net/g/
わからない関数については一先ずリファレンスページを見ていただいて
http://homepage2.nifty.com/natupaji/DxLib/dxfunc.html

それでもわからなければ質問していただいた方が解決が早いかと思います。
そして、仰るちらつきについてですが、裏画面処理をしていないからではないでしょうか。
ゲームプログラミングの館の12,13章をお読みください。

tk-xleader

Re:テトリス作成

#19

投稿記事 by tk-xleader » 17年前

ゲームは高速な描画が行われるため、そのまま画面上に直接描画すると、次の画面を作成する過程を見せるという状態になります。
それだと、画面がかなり高速で描画されるために、ちらつきが見えるようになります。
そこで、2つの画面を作り、それを入れ替えながら描画するという方法を取る事になります。
使う関数は、
SetDrawScreen();
(引数はDX_SCREEN_BACKで)
ScreenFlip();
です。

ぜt

Re:テトリス作成

#20

投稿記事 by ぜt » 17年前

tkamakwins15さんありがとうございました。
早速使ってみます。

ぜt

Re:テトリス作成

#21

投稿記事 by ぜt » 17年前

http://www.nhk.or.tv/kow/program/program_127.php

srand((unsigned)time(NULL));
  block_type = rand() % 7;
というところはDXライブラリに どうなおせばいいんですか?

すいません調べてみたけどちょっとわからなかったのでお願いします。

Re:テトリス作成

#22

投稿記事 by » 17年前

srand
で調べてみましょう。

そこで、何をしているか分かりますか?
ここはこうなると思うのですが、やり方がわかりません。
などと質問された方が、指摘しやすいかと思います。
やっていることがわからなければ、プログラムをしている意味が無いと思いますので^^;


一行目が、乱数の設定
二行目が、ブロックタイプの設定
(読めば分かりますがw

DXライブラリは主に表示関係だったと思うので、DXライブラリに直す理由が分かりません^^;
(もしかしたら、あるのかもしれませんが…

tk-xleader

Re:テトリス作成

#23

投稿記事 by tk-xleader » 17年前

無理に直すとしたら、
srand((unsigned)time(NULL));
は削除して、
rand()%7;

GetRand(6);
に直すくらいでしょうか。

ぜt

Re:テトリス作成

#24

投稿記事 by ぜt » 17年前

ありがとうございます。
早速試してみたいと思います。

オルムント

クイックソートエラーC2440

#25

投稿記事 by オルムント » 17年前

いつもお世話になってます。
動的な領域確保について質問します。

現在データの入ったファイルを読み込み
その中のデータをソートするプログラムを作っています。

管理人様のクイックソートプログラム解説アプリで勉強させていただきました。
ですが、現在作っているプログラムにどうやって対応させればよいのか
分からず困っています。

右の数字部分を降順に並べ替えて出力したいと思って実行しますと、

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;
}

ぜt

Re:テトリス作成

#26

投稿記事 by ぜt » 17年前

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);
}
}
}
とブロックを表示しているのですが、これだと全種類のブロックが
同じ画像になります。
ブロックの種類ごとに色を変えたいと思っているのですが全く思いつきません
考え方だけでもご教授いただけないでしょうか。お願いいたします。

ぜt

Re:テトリス作成

#27

投稿記事 by ぜt » 17年前

また トピック作成します<!--1

閉鎖

“C言語何でも質問掲示板” へ戻る