質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

1回答

1131閲覧

C言語 二次元配列が重なってしまう

退会済みユーザー

退会済みユーザー

総合スコア0

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

1クリップ

投稿2017/07/16 14:34

こんにちは私は現在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}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

■と□が全角だからでしょう。
見た目にこだわらないなら、xと_などに置き換えれば上手くいくと思います。

どうしても全角文字を使いたい場合は、

C

1void my_draw_field(){ 2 int i,j;
system("cls");
for(i=0;i<FIELD_HEIGHT - 2;i++){ for(j=2;j<FIELD_WIDTH - 2;j++){ if(field[i][j] == 9)printf("■"); else if(field[i][j] == 1)printf("□"); else printf(" "); // <------ここ!! } printf("\n"); }

}

ここ!!の部分の空白も全角にしてください。

投稿2017/07/16 14:40

編集2017/07/16 14:46
LouiS0616

総合スコア35660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/07/22 05:46

どうやらコンパイラーの問題だったみたいでした。 フリーソフトのコンパイラーソフトを使ったのですが同じコードソースでVisual studio express 2017で処理をしたら解決できました。 ありがとうございました。
LouiS0616

2017/07/22 06:20

ちなみにどんなコンパイラ使っていたか教えていただけませんか? 聞いたからと言って私になにかわかるわけじゃないですが、純粋な関心で。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問