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

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

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

#1

投稿記事 by ソ連 » 14年前

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

アバター
h2so5
副管理人
記事: 2212
登録日時: 14年前
住所: 東京
連絡を取る:

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

#2

投稿記事 by h2so5 » 14年前

沢山登場する、00 は何ですか?
これは 0 と同じで、二つ続けて書いても何の意味もありませんよ。

ソ連

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

#3

投稿記事 by ソ連 » 14年前

>h2so5さん

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

閉鎖

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