背景には、それ自体で変更し、私は、マウスのボタンを離すまでの手順は、多くの回繰り返さ

StackOverflow https://stackoverflow.com/questions/2572439

  •  24-09-2019
  •  | 
  •  

質問

(同じ乱数が3あなたが勝つ、時限起動した場合)

私は学生です、と私は少しスロットゲームに取り組んでいます。私はこのビットより視覚的にするために、ボーランドパスカル7. Iの使用グラフを使用しますが、私はグレーに黒から私のバックグラウンドターンゲームを開始するとき、およびその他の問題は、私はゲーム開始ボタンをクリックすると、ゲームが何度も実行されることです私は、マウスのボタンを離すまで。どのように私はこの問題を解決することができますか?

ここに私の完全なプログラムがあります:

program slots;
uses mymouse,graph,crt;
var gdriver,gmode,coin:integer;
    m:mouserec;
    a,b,c,coins:string;
   procedure gomb(x1,y1,x2,y2:integer;szoveg:string);
   var j,n:integer;
   begin
      setcolor(blue);
      rectangle(x1,y1,x2,y2);
      setfillstyle(1,blue);
      floodfill(x1+2,y1+2,blue);
      setcolor(0);
      outtextxy((x1+x2)div 2 -textwidth(szoveg) div 2 ,(y1+y2) div 2-textheight(szoveg) div 2,szoveg);
      end;

  procedure randomal(var a,b,c:string);
  begin

  randomize;
  STR(random(2)+1,a);
  STR(random(2)+1,b);
  STR(random(2)+1,c);
  end;

 procedure menu;
  begin;
   settextstyle(0,0,1);
   outtextxy(20,10,'Meno menu');
   gomb(20,20,90,50,'Teglalap');
   gomb(20,60,90,90,'Inditas');
   gomb(20,100,90,130,'Harmadik');
   gomb(20,140,90,170,'Negyedik');
   end;
  procedure teglalap(x1,x2,y1,y2,tinta:integer);
  begin
  setcolor(tinta);
  rectangle(x1,x2,y1,y2);
  end;

  procedure jatek(var a,b,c:string;var coin:integer;coins:string);
  begin;
  clrscr;
  menu;
  randomal(a,b,c);
  if ((a=b) AND (b=c)) then coin:=coin+1 else coin:=coin-1;
  settextstyle(0,0,3);
  setbkcolor(black);
  outtextxy(200,20,a);
  outtextxy(240,20,b);
  outtextxy(280,20,c);
  STR(coin,coins);
  outtextxy(400,400,coins);
  end;

  procedure eger;
  begin;
  mouseinit;
  mouseon;
  menu;
  repeat
  getmouse(m);
  if (m.left) and (m.x>20) ANd (m.x<90) and (m.y>20) and (m.y<50) then teglalap(90,90,300,300,blue);
  if (m.left) and (m.x>20) AND (m.x<90) and (m.y>60) and (m.y<90) then jatek(a,b,c,coin,coins);

  until ((m.left) and (m.x>20) ANd (m.x<140) and (m.y>140) and (m.y<170));
end;
 begin
   coin:=50;
   gdriver:=detect;
   initgraph(gdriver, gmode, '');
   eger;
end.
役に立ちましたか?

解決

私はターボパスカルを使用するために何年もあります)

私は、init BGI(グラフィック)モードにこのスニペットを使用しました

  Gd := Detect;
  InitGraph(Gd, Gm, 'bgi');
  if GraphResult <> grOk then
    Halt(1);
  SetBkColor(black);
  Cleardevice;

私が正しくリコール、ClearDeviceClrScrがテキストモード用で、画面をクリアするために適切である。

さて、GetMouse(m);はおそらくので、すぐにマウスのデータを返すコード
repeatループにマウスを使用しない場合でも、遅延なしで何度も何度も実行されます。
一つの解決策は、あなたがそのコードまたは
を実行する前に、マウスボタンがアップしているかどうかを確認することです GetMouseを呼び出す前に、遅延のいくつかの種類を追加します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top