PICでもぐらたたき風ゲームを作っているのですが、LED1~8まである中で、下記のプログラムだと乱数が重複して、同じLEDが2回3回連続して光ってしまうのですが、連続で同じLEDが光らないようにするにはどうすればいいでしょうか?
PIC C
1#include<16f887.h> 2#define RAND_MAX 7 3#include <stdlib.h> 4#use delay(clock=20000000) 5#fuses hs ,nowdt 6#byte porta=0x05 7#byte portb=0x06 8#byte portc=0x07 9#byte portd=0x08 10 11 12long ct,n,i,r; 13int _7seg(int data10) 14{ 15 int x,databcd,a1,b1,c1,d1,a2,b2,c2,d2; 16 databcd = data10+(data10/10)*6; 17 a1=(databcd&0x01)<<3; // 1桁 18 b1=(databcd&0x02)<<1; 19 c1=(databcd&0x04)>>1; 20 d1=(databcd&0x08)>>3; 21 22 a2=(databcd&0x10)<<3; // 2桁 23 b2=(databcd&0x20)<<1; 24 c2=(databcd&0x40)>>1; 25 d2=(databcd&0x80)>>3; 26 27 x=a1|b1|c1|d1|a2|b2|c2|d2; 28 return(x); 29 } 30 31int data; 32int const s[100] ={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; 33 34void main(void) 35{ 36 37 int h; 38 39 40 set_tris_a(0); 41 set_tris_b(0xff); 42 set_tris_c(0); 43 set_tris_d(0); 44 PORTB=0; //カウンタ(7セグ) 45 PORTD=0; //LED 46 PORTC=0; //ボタン 47 ct=0; 48 n=0; 49 i=0; 50 h=0; 51 52 //t=0; 53 54 55while(1) 56{ 57 58 h = rand(); 59 i = s[h]; 60 portd=i; // モグラの頭 出る 61 62 63 while(ct<6000 ) // 入力を待ちながらボタン判定 64 { 65 if (portd == ~ portb ){ n++; // 押されたらカウント 66 portc=_7seg(n); 67 break; 68 } 69 ct++ ; 70 71 delay_us(1000); //光ってる時間 72 } 73 74 ct = 0; 75 76 portd=0; 77 delay_ms(1000); // シリンダー引っ込み待ち 78 79 // 次のモグラへ 80 81} 82 83} 84
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/01/11 01:35
2019/01/11 01:43
退会済みユーザー
2019/01/11 01:47
2019/01/11 01:51