ページ 11

ボンバーマン風ゲームについての質問です

Posted: 2011年2月09日(水) 14:57
by ソ連
今C言語を用いてLinuxでボンバーマンをイメージしたゲームを作成中です。
マップ、キャラの作成に関しては特に不備がありませんが、爆弾についてでわからないところが多いので質問させていただきます。

自分は、爆弾作成の際にまずはキャラクターから爆弾を出すことが可能かを考えて、爆弾=置物のように考えてプログラムを作成しました。
なので現段階では爆弾の役割はしていません。
キャラクターが居たマスに爆弾を発生させることはできたのですが、ちょっとしたエラーが発生してしまいます。
1マスを全角で作成し、キャラクター、爆弾、壁などのすべての物を全角で表示させています。
しかし、キャラを移動させながら爆弾を発生させると半角ズレてしまい、また、爆弾でさえも壊すことのできない壁も消してしましいます。
何故このようなエラーが発生してしまうのかがわかりません。
教えてください

プログラム
static void run(void)
2 {
3 int x,y,ch,i,j;
4 int hantei[26][30]={
5 {00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00},
6 {00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00},
7 {00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00},
8 {00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00},
9 {00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00},
10 {00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00},
11 {00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00},
12 {00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00},
13 {00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00},
14 {00,00,00,00,00,00,00,00,00,00,00,00,00,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11},
15 {00,00,00,00,00,00,00,00,00,00,00,00,00,11,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,11},
16 {00,00,00,00,00,00,00,00,00,00,00,00,00,11,00,11,00,11,00,11,00,11,00,11,00,11,00,11,00,11},
17 {00,00,00,00,00,00,00,00,00,00,00,00,00,11,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,11},
18 {00,00,00,00,00,00,00,00,00,00,00,00,00,11,00,11,00,11,00,11,00,11,00,11,00,11,00,11,00,11},
19 {00,00,00,00,00,00,00,00,00,00,00,00,00,11,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,11},
20 {00,00,00,00,00,00,00,00,00,00,00,00,00,11,00,11,00,11,00,11,00,11,00,11,00,11,00,11,00,11},
21 {00,00,00,00,00,00,00,00,00,00,00,00,00,11,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,11},
22 {00,00,00,00,00,00,00,00,00,00,00,00,00,11,00,11,00,11,00,11,00,11,00,11,00,11,00,11,00,11},
23 {00,00,00,00,00,00,00,00,00,00,00,00,00,11,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,11},
24 {00,00,00,00,00,00,00,00,00,00,00,00,00,11,00,11,00,11,00,11,00,11,00,11,00,11,00,11,00,11},
25 {00,00,00,00,00,00,00,00,00,00,00,00,00,11,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,11},
26 {00,00,00,00,00,00,00,00,00,00,00,00,00,11,00,11,00,11,00,11,00,11,00,11,00,11,00,11,00,11},
27 {00,00,00,00,00,00,00,00,00,00,00,00,00,11,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,11},
28 {00,00,00,00,00,00,00,00,00,00,00,00,00,11,00,11,00,11,00,11,00,11,00,11,00,11,00,11,00,11},
29 {00,00,00,00,00,00,00,00,00,00,00,00,00,11,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,11},
30 {00,00,00,00,00,00,00,00,00,00,00,00,00,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11},
31 };
32    x=28;
33   y=10;
34    mvaddstr(0,0,"Push [q] to quit.");
35    mvaddstr(y,x,"壱");
36
37
38
39   while((ch=getch())!='q'){
40   switch(ch){
41      case KEY_UP:
42       if(hantei[y-1][x/2]==00){
43       mvaddstr(y,x," ");
44       y -= 1;
45        }
46        break;
47      case KEY_DOWN:
48       if(hantei[y+1][x/2]==00){
49        mvaddstr(y,x," ");
50        y += 1;
51        }
52        break;
53      case KEY_LEFT:
54       if(hantei[y][x/2-1]==00){
55        mvaddstr(y,x," ");
56        x -= 2;
57        }
58        break;
59      case KEY_RIGHT:
60        if(hantei[y][x/2+1]==00){
61        mvaddstr(y,x," ");
62        x += 2;
63       }
64       break;
65      case 'c':
66        hantei[y][x/2]=22;
67        ch=getch();
68        switch(ch){
69          case KEY_UP:
70            if(hantei[y-1][x/2]==00){
71           mvaddstr(y,x,"●");
72            y -= 1;
73           }
74           break;
75         case KEY_DOWN:
76           if(hantei[y+1][x/2]==00){
77           mvaddstr(y,x,"●");
78           y += 1;
79           }
80           break;
81         case KEY_LEFT:
82           if(hantei[y][x/2-1]==00){
83            mvaddstr(y,x,"●");
84           x = x-2;
85           }
86            break;
87         case KEY_RIGHT:
88           if(hantei[y][x/2+1]==00){
89            mvaddstr(y,x,"●");
90           x = x+2;
91           }
92            break;
93             default:
94           break;
95             }
96
97        break;
98      default:
99        break;
100       } 
101   mvaddstr(y,x,"壱");
102
103   }
104   }

Re: ボンバーマン風ゲームについての質問です

Posted: 2011年2月09日(水) 18:06
by h2so5
沢山登場する、00 は何ですか?
これは 0 と同じで、二つ続けて書いても何の意味もありませんよ。

Re: ボンバーマン風ゲームについての質問です

Posted: 2011年2月09日(水) 18:27
by ソ連
>h2so5さん

コレは、マップです。
00は、マップ内の空欄を意味します