Фонът се променя от само себе си и процедурата се повтаря много пъти, докато не освободя бутона на мишката

Аз съм студент и работя върху малка слот игра (ако едно и също произволно число се появи 3 пъти, вие печелите). Използвам Borland Pascal 7. Използвам графика, за да направя това малко по-визуално, но когато стартирам играта фонът ми се превръща от черен в сив, а другият проблем е, че ако щракна върху бутона за стартиране на играта, играта се изпълнява много пъти докато не пусна бутона на мишката. Как мога да разреша това?

Ето пълната ми програма:

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.

person Robert    schedule 03.04.2010    source източник


Отговори (1)


Имам много години да използвам Turbo Pascal :)

Използвах този фрагмент за стартиране на BGI (графичен) режим:

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

Ако си спомням правилно, ClearDevice е подходящо за изчистване на екрана, ClrScr е за текстов режим.

Сега GetMouse(m); вероятно връща незабавно данните от мишката, така че кодът
в цикъла repeat се изпълнява отново и отново без забавяне, дори ако не използвате мишката.
Едно от решенията е да проверите дали бутонът на мишката е преди да изпълните този код или
добавете някакъв вид забавяне, преди да извикате GetMouse.

person Nick Dandoulakis    schedule 03.04.2010