こんにちは私は現在C言語の学習をしていまして下記のURLを参考にブロック崩しゲームのコードを作成しています。
下記のコード通り書いてみたのですがこれではブロックとブロックが半分ずつかさなってしまいます。
この半分重なる部分をずらして一つ一つのブロックがはっきり表示させたいのですがどこをいじればいいのかがわかりません。
お力をお貸しください。
C[![リンク内容](ef4919106c4b2b39f34e6474b48c3a22.png)](http://petitetech.com/c_block_puzzle/c_block_puzzle1.html)
1#include <stdio.h> 2#include <stdlib.h> 3#include <conio.h> 4 5#define BLOCK_HEIGHT 4 6#define BLOCK_WIDTH 4 7 8#define FIELD_HEIGHT 23 9#define FIELD_WIDTH 18 10 11void my_init_var(void); 12void my_make_block(void); 13void my_make_field(void); 14void my_draw_field(void); 15void my_clear_field(void); 16void my_fall_block(void); 17 18int block[BLOCK_HEIGHT][BLOCK_WIDTH]; 19int stage[FIELD_HEIGHT][FIELD_WIDTH]; 20int field[FIELD_HEIGHT][FIELD_WIDTH]; 21 22int blocks[BLOCK_HEIGHT][BLOCK_WIDTH] = { 23 {0,0,0,0}, 24 {0,1,1,0}, 25 {0,1,1,0}, 26 {0,0,0,0} 27}; 28 29int block_x; 30int block_y; 31 32int main(){ 33 int stop = 0; 34 35 my_init_var(); 36 37 while(1){ 38 my_clear_field(); 39 my_make_block(); 40 my_make_field(); 41 my_draw_field(); 42 my_fall_block(); 43 44 stop = _getch(); 45 46 if(block_y > 17)break; 47 } 48 49 return 0; 50} 51 52void my_init_var(){ 53 int i,j; 54 55 for(i=0;i<FIELD_HEIGHT;i++){ 56 for(j=0;j<FIELD_WIDTH;j++){ 57 stage[i][0] = 9; 58 stage[i][1] = 9; 59 stage[i][2] = 9; 60 stage[20][j] = 9; 61 stage[21][j] = 9; 62 stage[22][j] = 9; 63 stage[i][15] = 9; 64 stage[i][16] = 9; 65 stage[i][17] = 9; 66 } 67 } 68 69 block_x = 7; 70 block_y = 0; 71} 72 73void my_make_block(){ 74 int x,y; 75 76 for(y=0;y<BLOCK_HEIGHT;y++){ 77 for(x=0;x<BLOCK_WIDTH;x++){ 78 block[y][x] = blocks[y][x]; 79 } 80 } 81} 82 83void my_make_field(){ 84 int i,j,x,y; 85 86 for(i=0;i<FIELD_HEIGHT;i++){ 87 for(j=0;j<FIELD_WIDTH;j++){ 88 field[i][j] = stage[i][j]; 89 } 90 } 91 92 for(y=0;y<BLOCK_HEIGHT;y++){ 93 for(x=0;x<BLOCK_WIDTH;x++){ 94 field[block_y + y][block_x + x] += block[y][x]; 95 } 96 } 97} 98 99void my_draw_field(){ 100 int i,j; 101 102 system("cls"); 103 104 for(i=0;i<FIELD_HEIGHT - 2;i++){ 105 for(j=2;j<FIELD_WIDTH - 2;j++){ 106 if(field[i][j] == 9)printf("■"); 107 else if(field[i][j] == 1)printf("□"); 108 else printf(" "); 109 } 110 printf("\n"); 111 } 112} 113 114void my_clear_field(){ 115 int i,j; 116 117 for(i=0;i<FIELD_HEIGHT;i++){ 118 for(j=0;j<FIELD_WIDTH;j++){ 119 field[i][j] = 0; 120 } 121 } 122} 123 124void my_fall_block(){ 125 block_y++; 126}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/07/22 05:46
2017/07/22 06:20