第18講 テトリス開発(完成まで)
第1話 ZとCキーでブロックを左右に動かす
ZとCキーでブロックを左右に動かすを実現するコード例(変更部分だけ記載)
void block(){
int i,j,l;
y=(GetNowCount()-hajimenojikoku)/200;
char h;
if (jyu(KEY_INPUT_Z != 0){
h=1;
for(i=0;i<4;i++){
if(chizumodosu[x+p[s][k][i]-1][y+q[s][k][i]]==0){
h=0;
break;
}
}
if(h==1)x--;
}
if (jyu(KEY_INPUT_C) != 0){
h=1;
for(i=0;i<4;i++){
if(chizumodosu[x+p[s][k][i]+1][y+q[s][k][i]]==0){
h=0;
break;
}
}
if(h==1)x++;
}
for(i=0;i<4;i++){
//sはブロックの種類 0:長方形 1:正方形 2:L字 3:N字
//kは回転状態 0:元の状態 1:90°回転 2:180°回転 3:270°回転
if(chizumodosu[x+p[s][k][i]][y+q[s][k][i]]==1){
if(y+q[s][k][i]>0)chizu[x+p[s][k][i]][y+q[s][k][i]] = 2 + s;
}
}
for(i=0;i<4;i++){
for (j = 0; j < 12; j++) {
for (l = 0; l < 27; l++) {
if (chizu[j][l] == 2 + i) {
if(i==0) DrawBox(20 * j, 20 * l, 20 * (j + 1) - 1, 20 * (l + 1) - 1, kiiro, true);
if(i==1) DrawBox(20 * j, 20 * l, 20 * (j + 1) - 1, 20 * (l + 1) - 1, mizuiro, true);
if(i==2) DrawBox(20 * j, 20 * l, 20 * (j + 1) - 1, 20 * (l + 1) - 1, aka, true);
if(i==3) DrawBox(20 * j, 20 * l, 20 * (j + 1) - 1, 20 * (l + 1) - 1, ao, true);
}
}
}
}
h=1; //char h=1;から変更
for(i=0;i<4;i++){
if(y+q[s][k][i]+1>0 && chizumodosu[x+p[s][k][i]][y+q[s][k][i]+1]==0){
h=0;
break;
}
}
if(h==0){
for(i=0;i<4;i++)chizumodosu[x+p[s][k][i]][y+q[s][k][i]]=0;
t=0; //0:作動 1:作動停止
hajimenojikoku=GetNowCount();
}
for(i=0;i<4;i++){
if(y+q[s][k][i]==1 && chizumodosu[x+p[s][k][i]][y+q[s][k][i]]==0){
m=2;
}
}
}
コピペ用添付ファイル
次の課題は、スペースキーで時計方向に90°回転させるです。
ただし、回転した結果が壁に食い込む場合には、回転させないとします。
結果という言葉を入れているのは、物理的にはこの状態で90°回転させると
角がぶつかってしまいますが、
そこには目をつぶり、回転できることにするからです。
今回はかなりむずかしいと思いますので、
ヒントを入れておきます。
if(chizumodosu[x+p[s][(k+1)%4][i]][y+q[s][(k+1)%4][i]]==0){
第17講第9話へ 第2話へ
初心者のための excel 2016 マクロ VBA 入門講義 基礎から応用まで
vc++ c言語 c++ 入門 初心者 基礎から応用まで
eclipse c++ 入門
魔方陣 数独で学ぶ VBA 入門
数独のシンプルな解き方・簡単な解法の研究
VB講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)
初心者のための VC++による C言語 C++ 入門 基礎から応用まで第1部
eclipse java 入門
java 入門 サイト 基礎から応用まで
本サイトトップへ