getkeyは押しっぱなしだと入力状態が常に1で固定されてしまうので
一回だけ判定したい場合はチェック用のフラグ変数を用意しておくのがよく使われる手法です。
ゆーさんのソースで言うとchkcodeがそれです。
論理演算を使用しているので、わかりにくいかもしれませんが
単純に書かせていただくと
// Zキーを押したとき
if( z == 1) {
// チェックフラグが0ならばZキーを押してから一回目のループという事
if( chkcode == 0 ) {
chkcode = 1 // 初回にはチェックフラグを1にする
//音を鳴らす命令をここに書く 2回目以降はchkcodeが0ではないので音が鳴らない
}
}
else {
// Zキーを押していないときにはチェックフラグを0にする
chkcode = 0
}
>しかし、DFJKで、ドンとカッの音を分けたいのですが...
その場合はD、F、J、Kのキーそれぞれに対してチェックフラグを用意することになります。
kflag_d = 0; // Dキー用チェックフラグ
kflag_f = 0; // Fキー用チェックフラグ
kflag_j = 0; // Jキー用チェックフラグ
kflag_k = 0; // Kキー用チェックフラグ
*main
getkey key_d, 68;
getkey key_f, 70;
getkey key_j, 74;
getkey key_k, 75;
// Dキー
if( key_d == 1 ) {
if( kflag_d == 0 ) {
kflag_d = 1;
// Dが押されたときの音
}
}
else {
kflag_d = 0;
}
// Fキー
if( key_f == 1 ) {
if( kflag_f == 0 ) {
kflag_f = 1;
// Fが押されたときの音
}
}
else {
kflag_f = 0;
}
// Jキー
if( key_J == 1 ) {
if( kflag_j == 0 ) {
kflag_j = 1;
// Jが押されたときの音
}
}
else {
kflag_j = 0;
}
// Kキー
if( key_k == 1 ) {
if( kflag_k == 0 ) {
kflag_k = 1;
// Kが押されたときの音
}
}
else {
kflag_k = 0;
}
await 100;
goto *main;
【getkey 一回だけ判定】などのキーワードで検索すればたぶん似たようなソースが見つかります。
(きっと)
とりあえずそのままコピペするのではなく流れを理解してから
自分が分かりやすいように書き換えることをお勧めします。