ヤルハラのおもち
オリジナル版のソースコードを追加
@@ -0,0 +1,261 @@ | ||
1 | +//初期化・定義**************************************** | |
2 | + | |
3 | +//画面初期化と部品ロード | |
4 | + // 画面サイズ設定 | |
5 | + scr_width = 400 | |
6 | + scr_height = 300 | |
7 | + | |
8 | + // 画面作成 | |
9 | + screen 0,scr_width,scr_height | |
10 | + // キャプション設定 | |
11 | + title "ヤルハラのおもち" | |
12 | + buffer 2,scr_width,scr_height //合成用バッファ | |
13 | + buffer 3,scr_width,scr_height //背景 | |
14 | + picload "bg.bmp" | |
15 | + buffer 4 //メイン部品 | |
16 | + picload "mikan.bmp" | |
17 | + | |
18 | +//パーツ定義 | |
19 | + chrpattern = 12 | |
20 | + psize_x = 64 | |
21 | + psize_y = 32 | |
22 | + // パーツ配列定義 | |
23 | + dim parts_x,chrpattern // 座標(X) | |
24 | + dim parts_y,chrpattern // 座標(Y) | |
25 | + dim parts_probability,chrpattern // 出現確率 | |
26 | +//キャラクタ配置テーブル | |
27 | + parts_x = 0, 64,128,192, 0, 64,128,192, 0, 64,128,192 | |
28 | + parts_y = 0, 0, 0, 0, 32, 32, 32, 32, 64, 64, 64, 64 | |
29 | +//キャラクタ生起確率 | |
30 | + parts_probability=18,8,3,1, 25,3,1,1, 25,3,1,1 | |
31 | + probability_max=90 | |
32 | + | |
33 | +//遷移 (0:タイトル画面,1:ゲーム,2:ゲームオーバー) | |
34 | + scene = 0 | |
35 | + | |
36 | +//スコア セーブはまだ | |
37 | + score = 0 | |
38 | + | |
39 | +//変数初期化 | |
40 | + parts_now = 0 | |
41 | + parts_pos_x = 0 | |
42 | + speed = 10 | |
43 | + mode = 0 | |
44 | + parts_spr = 0 | |
45 | + // 配置した製品の管理 | |
46 | + dim product,3 | |
47 | + product = -1,-1,-1 //製品 下・中・上の順 | |
48 | + randomize | |
49 | + | |
50 | +// BGM読み込み | |
51 | +mmload "omoti_lofi.wav",0,1 | |
52 | + | |
53 | + | |
54 | +*titlesc | |
55 | +//タイトル | |
56 | +gsel 0 | |
57 | +repeat | |
58 | + cls 4 | |
59 | + color 255,255,255 | |
60 | + mes "ヤルハラのおもち" | |
61 | + mes "キー操作" | |
62 | + mes "→:右へ" | |
63 | + mes "↓:下へ" | |
64 | + wait 10 | |
65 | + stick key | |
66 | + if (key != 0) { | |
67 | + // BGM再生開始 | |
68 | + mmplay 0 | |
69 | + // メインゲームへ | |
70 | + goto *gameloop | |
71 | + } | |
72 | +loop | |
73 | + | |
74 | +*gameover | |
75 | +//ゲームオーバー | |
76 | +gsel 0 | |
77 | +mmstop | |
78 | +repeat | |
79 | + cls 4 | |
80 | + color 255,255,255 | |
81 | + mes "ゲームオーバー" | |
82 | + wait 10 | |
83 | + stick key | |
84 | + if (key != 0) { | |
85 | + // 失敗フラグを初期化 | |
86 | + error_product = 0 | |
87 | + // スコアを初期化 | |
88 | + score = 0 | |
89 | + // タイトル画面へ | |
90 | + goto *titlesc | |
91 | + } | |
92 | +loop | |
93 | + | |
94 | + | |
95 | + | |
96 | +//メインループ | |
97 | +*gameloop | |
98 | + | |
99 | +repeat | |
100 | + // スコア表示 | |
101 | + title "ヤルハラのおもち SCORE:"+score+"円" | |
102 | + await 1 | |
103 | + // 背景描画 | |
104 | + gosub *draw_bg | |
105 | + | |
106 | + switch mode | |
107 | + case 0 | |
108 | + // 部品移動中 | |
109 | + parts_pos_x += speed | |
110 | + if (parts_pos_x > scr_width/2-32) { | |
111 | + // 移動完了・プレイヤー入力へ | |
112 | + mode = 1 | |
113 | + } | |
114 | + swbreak | |
115 | + | |
116 | + case 1 | |
117 | + stick key,39 | |
118 | + if key&4 { | |
119 | + // 部品を捨てる | |
120 | + mode = 2 | |
121 | + } | |
122 | + if key&8 { | |
123 | + // | |
124 | + parts_pos_x=0 | |
125 | + mode = 0 | |
126 | + // 部品を配置する | |
127 | + gosub *put_product | |
128 | + // 次の部品を取り出す | |
129 | + gosub *partsmake | |
130 | + } | |
131 | + swbreak | |
132 | + | |
133 | + case 2 | |
134 | + // 画面外に部品を移動させる | |
135 | + parts_pos_x += speed | |
136 | + if (parts_pos_x > scr_width) { | |
137 | + // 画面外まで移動した | |
138 | + parts_pos_x=0 | |
139 | + mode = 0 | |
140 | + // 次の部品を取り出す | |
141 | + gosub *partsmake | |
142 | + } | |
143 | + swbreak | |
144 | + swend | |
145 | + | |
146 | + if error_product = 1 : break // 失敗したら処理を中断 | |
147 | + | |
148 | + // 部品の座標を設定 | |
149 | + pos parts_pos_x,50 | |
150 | + | |
151 | + // パーツを設定 | |
152 | + parts_spr = parts_now | |
153 | + gosub *draw_chr | |
154 | + gosub *draw_product | |
155 | + gosub *maindraw | |
156 | +loop | |
157 | + | |
158 | +if error_product = 1 : goto *gameover // ゲームオーバー処理へ | |
159 | + | |
160 | +// ----------------------------------------------- | |
161 | +// 部品の配置 | |
162 | +*put_product | |
163 | + if ( product(2) == -1 ) { putpos = 2 } // 一番上が空いている | |
164 | + if ( product(1) == -1 ) { putpos = 1 } // 真ん中が空いている | |
165 | + if ( product(0) == -1 ) { putpos = 0 } // 一番下が空いている | |
166 | + | |
167 | + // 現在の部品を製品として配置 | |
168 | + product(putpos) = parts_now | |
169 | + | |
170 | + if ( product(2) > -1 ) { | |
171 | + | |
172 | + // 一番上に部品を配置した | |
173 | +// gosub *draw_chr | |
174 | + gosub *draw_product | |
175 | + gosub *maindraw | |
176 | + wait 50 | |
177 | + | |
178 | + // 失敗判定 | |
179 | + gosub *scan_product | |
180 | + | |
181 | + // 製品を初期化 | |
182 | + product = -1,-1,-1 | |
183 | + } | |
184 | +return | |
185 | + | |
186 | +*scan_product | |
187 | + // 失敗フラグを初期化 | |
188 | + error_product = 0 | |
189 | + | |
190 | + if product(0)!8 : error_product = 1 // 一番下がおモチでない | |
191 | + if product(1)!4 : error_product = 1 // 真ん中がおモチでない | |
192 | + if product(2)=2 : error_product = 1 // カビみかんを選んだ | |
193 | + if product(2)=3 : error_product = 1 // タコを選んだ | |
194 | + if error_product = 0 : score += 3 // 正しく作れたらスコアアップ | |
195 | +return | |
196 | + | |
197 | + | |
198 | +*draw_product | |
199 | + if ( product(0) > -1 ) { | |
200 | + // 一番下の製品を描画 | |
201 | + pos scr_width/2-32,200 | |
202 | + parts_spr = product(0) | |
203 | + gosub *draw_chr | |
204 | + } | |
205 | + if ( product(1) > -1 ) { | |
206 | + // 真ん中の製品を描画 | |
207 | + pos scr_width/2-32,175 | |
208 | + parts_spr = product(1) | |
209 | + gosub *draw_chr | |
210 | + } | |
211 | + if ( product(2) > -1 ) { | |
212 | + // 一番上の製品を描画 | |
213 | + pos scr_width/2-32,150 | |
214 | + parts_spr = product(2) | |
215 | + gosub *draw_chr | |
216 | + } | |
217 | + | |
218 | + return | |
219 | + | |
220 | + | |
221 | + | |
222 | +//ゲームシステム関連**************************************** | |
223 | +*partsmake | |
224 | + // 乱数取得 | |
225 | + dice=rnd(probability_max) | |
226 | + protemp=0 | |
227 | + | |
228 | + repeat chrpattern | |
229 | + protemp+=parts_probability(cnt) | |
230 | + if (dice<protemp) { | |
231 | + // 部品を引き当てたので、部品IDを設定 | |
232 | + parts_now = cnt | |
233 | + break | |
234 | + } | |
235 | + loop | |
236 | +return | |
237 | + | |
238 | + | |
239 | +//描画モジュール**************************************** | |
240 | + | |
241 | +*maindraw | |
242 | + | |
243 | + //バッファのコピー | |
244 | + gsel 0 : pos 0,0 : gmode 0 //通常描画 | |
245 | + gcopy 2 , 0 , 0 , scr_width , scr_height | |
246 | + return | |
247 | + | |
248 | +*draw_bg | |
249 | + //背景コピー | |
250 | + gsel 2 : pos 0,0 : gmode 0 //通常描画 | |
251 | + gcopy 3 , 0 , 0 , scr_width , scr_height | |
252 | + return | |
253 | + | |
254 | +*draw_chr | |
255 | + //キャラクタコピー | |
256 | + gsel 2 : gmode 2 //透明色付きコピー | |
257 | + gcopy 4 , parts_x(parts_spr) , parts_y(parts_spr) , psize_x , psize_y | |
258 | + return | |
259 | + | |
260 | + | |
261 | + |