Fondo cambia por sí mismo y el procedimiento se repite varias veces hasta que suelte el botón del ratón

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

  •  24-09-2019
  •  | 
  •  

Pregunta

Soy estudiante y estoy trabajando en un juego de tragamonedas pequeños (si el mismo número aleatorio surge 3 cronometrados, se gana). Yo uso Borland Pascal 7. gráfico que utilizo para hacer esto un poco más visual, pero cuando inicio el juego de mis vueltas fondo de negro a gris, y el otro problema es que si hago clic en el botón de inicio del juego, el juego se ejecuta muchas veces hasta que suelte el botón del ratón. ¿Cómo puedo solucionar esto?

Aquí está mi programa completo:

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.
¿Fue útil?

Solución

Tengo muchos años de usar Turbo Pascal:)

I utiliza este fragmento a init BGI (gráfico) modo:

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

Si no recuerdo mal, ClearDevice es adecuado para la limpieza de la pantalla, ClrScr es para el modo de texto.

Ahora, probablemente GetMouse(m); vuelve inmediatamente los datos del ratón por lo tanto el código
en el bucle repeat corre una y otra vez sin demora, incluso si usted no utiliza el ratón.
Una solución es comprobar si el botón del ratón no está antes de ejecutar ese código o
añadir algún tipo de retraso antes de llamar al GetMouse.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top