1 Востаннє редагувалося Torbins (29.04.2014 08:59:06)

Тема: Гра з числами на паскалі

1 ) Можеш підказати чому вічно видає , YOU LOSE , правильно чи не правильно зробив , якщо зробив правильно має писати YOU WIN , що не правильно YOU LOSE , а воно вічне видає YOU LOSE ?

2 ) І як вставити в гру музику , наприклад спочатку грає лалалала , виграв Парарі , програв туду ?

3 ) Зробити кнопку меню , де буде написано як грати ( потрібно скласти числа щоб їх сума чисел в кожному рядку дорівнювала сумі чисел кожного стовпчика (приблизно так)) .

4 ) Рекорди або час виконання роботи . Приклад вимірювання часу роботи алгоритму

program MYPROG ;
uses Dos ;

type
   TTime = record { Тип для зберігання часу }
      Hours , { години }
          Minutes, { хвилини }
           Seconds { секунди }
           HSeconds : Word { соті частки секунди }
       end ;

var
    StartTime , FinishTime : TTime { Час старту і фінішу алгоритму }
    Algorithm1_Time : Longint ; { Час роботи алгоритму }
function ResTime ( const STime , FTime : TTime ) : Longint ;
{ Визначає різницю між часом закінчення і час старту алгоритму }
begin
   ResTime =
    36000   ( FTime.Hours - STime.Hours ) + { годинник }
     6000   ( FTime.Minutes - STime.Minutes ) + { хвилини }
          100   ( FTime.Seconds - STime.Seconds ) + { секунди }
            ( FTime.HSeconds - STime.HSeconds ) { стільники секунди }
end ;
                {інші опису алгоритму }

BEGIN
               { Початок алгоритму }
   with StartTime do GetTime ( Hours , Minutes, Seconds , HSeconds ) ;

              { Досліджуваний фрагмент алгоритму }

   with FinishTime do GetTime ( Hours , Minutes, Seconds , HSeconds ) ;
 
   Algorithm1_Time = ResTime ( StartTime , FinishTime ) ;
    writeln (' Algorithm1 time =' , Algorithm1_Time )

           { Закінчення алгоритму }
END .

Сама прога :

Program Liniya ;
Uses Graph , Crt ;
Var GrDriver , grMode : integer ;
k : string [ 2 ] ;
kk : char ;
x , y : integer ;
A : array [ 1 .. 3,1 .. 3 ] of byte ;
Xc , Yc : byte ; { koordinata vvoda }
h : real ;
i , j : integer ;

Procedure InitGr ;
begin
GrDriver : = Detect ;
InitGraph ( GrDriver , grMode , '') ;
end ;
Procedure Fon ;
begin
SetColor ( White) ;
setlinestyle ( 0,0,0 ) ;
Line ( 161,80,161 +318,80 ) ; { verh }
Line ( 161,80,161,80 +318 ) ; { liva }
Line ( 161,80 +318,161 +318,80 +318 ) ; { nuz }
Line (161 +318,80,161 +318,80 +318) ; { prava }
Line (161,80 +106,479,80 +106) ; { 1 gor }
Line (161,80 +106 +106,479,80 +106 +106) ; { 2 gor }
Line (161 +106,80,161 +106,398) ;
Line (161 +106 * 2,80,161 +106 * 2,398) ;

end ;

Procedure Cell ( xl , yl : integer ) ;
begin
setlinestyle ( 0,0,3 ) ;
rectangle ( xl +1 , yl +1 , xl +105 , yl +105 ) ;
end ;

Function IsOf : boolean ;
var
s1 , s2 , s3 , s4 , s5 , s6 , s7 , s8 : byte ;
begin
s1 : = a [ 1,1 ] + a [ 1,2 ] + a [ 1,3 ] ;
s2 : = a [ 2,1 ] + a [ 2,2 ] + a [ 2,3 ] ;
s3 : = a [ 3,1 ] + a [ 3,2 ] + a [ 3,3 ] ;

s4 : = a [ 1,1 ] + a [ 2,1 ] + a [ 3,1 ] ;
s5 : = a [ 1,2 ] + a [ 2,2 ] + a [ 3,2 ] ;
s6 : = a [ 1,3 ] + a [ 2,3 ] + a [ 3,3 ] ;

s7 : = a [ 1,1 ] + a [ 2,2 ] + a [ 3,3 ] ;
s8 : = a [ 3,1 ] + a [ 2,2 ] + a [ 1,3 ] ;
{ Writeln ( s1 : 2 , s2 : 2 , s3 : 2 , s4 : 2 , s5 : 2 , s6 : 2 , s7 : 2 , s8 : 2 ) ;}
if ( s1 = s2 ) and ( s2 = s3 ) and ( s3 = s4 ) and ( s4 = s5 ) and ( s5 = s6 ) and ( s6 = s7 ) and ( s7 = s8 ) and ( s8 = 6 ) then
IsOf : = true
else
IsOf : = false ;

end ;

Begin
InitGr ;
fon ;

outtextxy ( 1,1 , ' vybir komirky : WASD ');
outtextxy (1,15 , 'C - clear ');
outtextxy ( 1,30 , 'G - compare ');
outtextxy ( 1,45 , 'N - exit ');

setColor ( green ) ;
x : = 161 ; y : = 80 ;
xc : = 1 ; yc : = 1 ;
Cell ( x , y ) ;

repeat
kk : = upcase ( readkey ) ;
case kk of
'S': begin

setcolor ( black ) ;
cell ( x , y ) ;
fon ;
setcolor ( green ) ;
if y = 292 then
y : = 80 else
y : = y + 106 ;
cell ( x , y ) ;
case y of
80 : Xc : = 1 ;
186 : Xc : = 2 ;
292 : Xc : = 3 ;
end ;

end ;
'W': begin

setcolor ( black ) ;
cell ( x , y ) ;
fon ;
setcolor ( green ) ;
if y = 80 then
y : = 292 else
y : = y - 106 ;
cell ( x , y ) ;
case y of
80 : Xc : = 1 ;
186 : Xc : = 2 ;
292 : Xc : = 3 ;
end ;

end ;
'A': begin

setcolor ( black ) ;
cell ( x , y ) ;
fon ;
setcolor ( green ) ;
if x = 161 then
x : = 373 else
x : = x - 106 ;
cell ( x , y ) ;
case x of
161 : Yc : = 1 ;
267 : Yc : = 2 ;
373 : Yc : = 3 ;
end ;

end ;
'D': begin

setcolor ( black ) ;
cell ( x , y ) ;
fon ;
setcolor ( green ) ;
if x = 373 then
x : = 161 else
x : = x + 106 ;
cell ( x , y ) ;
case x of
161 : Yc : = 1 ;
267 : Yc : = 2 ;
373 : Yc : = 3 ;
end ;

end ;

'1 ' : Begin
settextstyle ( 1,0,9 ) ;
setcolor ( black ) ;
outtextxy ( x +25 , y - 8 , '2 ');
outtextxy ( x +25 , y - 8 , '3 ');
setcolor ( red ) ;
settextstyle ( 1,0,9 ) ;
outtextxy ( x +25 , y - 8 , '1 ');
a [ xc , yc ]: = 1 ;
settextstyle ( 0,0,0 ) ;
end ;

'2 ' : Begin
settextstyle ( 1,0,9 ) ;
setcolor ( black ) ;
outtextxy ( x +25 , y - 8 , '1 ');
outtextxy ( x +25 , y - 8 , '3 ');
setcolor ( red ) ;
settextstyle ( 1,0,9 ) ;
outtextxy ( x +25 , y - 8 , '2 ');
a [ xc , yc ]: = 2 ;
settextstyle ( 0,0,0 ) ;
end ;
'3 ' : Begin
settextstyle ( 1,0,9 ) ;
setcolor ( black ) ;
outtextxy ( x +25 , y - 8 , '2 ');
outtextxy ( x +25 , y - 8 , '1 ');
setcolor ( red ) ;
settextstyle ( 1,0,9 ) ;
outtextxy ( x +25 , y - 8 , '3 ');
a [ xc , yc ]: = 3 ;
settextstyle ( 0,0,0 ) ;
end ;
'C': begin
ClearDevice ;
setcolor ( white ) ;
settextstyle ( 0,0,0 ) ;
outtextxy ( 1,1 , ' vybir komirky : WASD ');
outtextxy (1,15 , 'C - clear ');
outtextxy ( 1,30 , 'G - compare ');
outtextxy ( 1,45 , 'N - exit ');

fon ;
setColor ( green ) ;
cell ( x , y ) ;
end ;
'G': begin
{ ClearDevice ;}
settextstyle ( 0,0,2 ) ;

if isof then
outtextxy ( 1,60 , ' YOU WIN ' )
else
outtextxy ( 1,60 , ' YOU LOSE ');
settextstyle ( 0,0,0 ) ;
{ Fon ;
setColor ( green ) ;
cell ( x , y ) ;}
end ;

end ;
until upcase ( kk ) = 'N ';
CloseGraph ;

End.

2

Re: Гра з числами на паскалі

Якщо потрібні кнопки, музичка і таке інше, то варто писати на Delphi: http://www.delphikingdom.com/lyceum/seminar.asp?ID=3

3

Re: Гра з числами на паскалі

на делфі не можна(((

4

Re: Гра з числами на паскалі

Можеше хоча б підказати чому вічно видає , YOU LOSE , правильно чи не правильно зробив , якщо зробив правильно має писати YOU WIN , що не правильно YOU LOSE , а воно вічне видає YOU LOSE ?

5

Re: Гра з числами на паскалі

о перше норм уже не потрібно

6

Re: Гра з числами на паскалі

Пане, у вас програма на 200 рядків, невідформатована, з купою "магічних констант", ви всім "тикаєте" - і ще очікуєте на допомогу? Розставте відступи, приведіть програму до стану, коли її можливо читати, виокремить шматок коду, який працює не так, як слід - і 80%, що самі побачите помилку. Якщо ж не побачите - викладіть те, що стосується проблеми, сюди, уточніть компілятор і зробіть це ввічливо - і реакція на ваше питання буде зовсім інша.

Подякували: Odin881

7 Востаннє редагувалося Torbins (29.04.2014 10:09:55)

Re: Гра з числами на паскалі

Program Liniya;
Uses Graph, Crt;
Var GrDriver, grMode: integer;
k : string[2];
kk : char;
x,y:integer;
A : array [1..3,1..3] of byte;
Xc, Yc : byte; {koordinata vvoda}
h: real;
i,j:integer;
 
Procedure InitGr;
begin
     GrDriver := Detect;
     InitGraph (GrDriver, grMode, '');
end;
Procedure Fon;
begin
     SetColor (White);
     setlinestyle(0,0,0);
     Line (161,80,161+318,80); {verh}
     Line (161,80,161,80+318); {liva}
     Line (161,80+318,161+318,80+318); {nuz}
     Line (161+318,80,161+318,80+318); {prava}
     Line (161,80+106,479,80+106); {1 gor}
     Line (161,80+106+106,479,80+106+106); {2 gor}
     Line (161+106,80,161+106,398);
     Line (161+106*2,80,161+106*2,398);
 
end;
 
Procedure Cell(xl,yl:integer);
begin
       setlinestyle(0,0,3);
       rectangle(xl+1,yl+1,xl+105,yl+105);
end;
 
Function IsOf:boolean;
var
    s1,s2,s3,s4,s5,s6,s7,s8:byte;
begin
     s1 := a[1,1]+a[1,2]+a[1,3];
     s2 := a[2,1]+a[2,2]+a[2,3];
     s3 := a[3,1]+a[3,2]+a[3,3];
 
     s4 := a[1,1]+a[2,1]+a[3,1];
     s5 := a[1,2]+a[2,2]+a[3,2];
     s6 := a[1,3]+a[2,3]+a[3,3];
 
     s7 := a[1,1]+a[2,2]+a[3,3];
     s8 := a[3,1]+a[2,2]+a[1,3];
     {   writeln(s1:2,s2:2,s3:2,s4:2,s5:2,s6:2,s7:2,s8:2);}
     if (s1=s2) and (s2=s3) and (s3=s4) and (s4=s5) and (s5=s6) and (s6=s7) and (s7=s8) and (s8=6) then
       IsOf := true
        else
       IsOf := false;
 
end;
 
Begin
 InitGr;
 fon;
 
           outtextxy(1,1,'vybir komirky : WASD');
           outtextxy(1,15,'C - clear');
           outtextxy(1,30,'G - compare');
           outtextxy(1,45,'N - exit');
 
  setColor(green);
  x := 161; y := 80;
  xc:=1;yc:=1;
  Cell(x,y);
 
  repeat
        kk := upcase(readkey);
       case kk of
        'S': begin
 
                             setcolor(black);
                             cell(x,y);
                             fon;
                             setcolor(green);
                             if y = 292 then
                                y := 80 else
                                y := y + 106;
                             cell(x,y);
                               case y of
                                    80 : Xc := 1;
                                    186: Xc :=2;
                                    292: Xc :=3;
                               end;
 
        end;
         'W': begin
 
                             setcolor(black);
                             cell(x,y);
                             fon;
                             setcolor(green);
                             if y = 80 then
                                y := 292 else
                                y := y - 106;
                             cell(x,y);
                               case y of
                                    80 : Xc := 1;
                                    186: Xc :=2;
                                    292: Xc :=3;
                               end;
 
        end;
        'A': begin
 
                             setcolor(black);
                             cell(x,y);
                             fon;
                             setcolor(green);
                             if x = 161 then
                                x := 373 else
                                x := x - 106;
                             cell(x,y);
                               case x of
                                    161: Yc := 1;
                                    267: Yc :=2;
                                    373: Yc :=3;
                               end;
 
        end;
        'D':  begin
 
                             setcolor(black);
                             cell(x,y);
                             fon;
                             setcolor(green);
                             if x = 373 then
                                x := 161 else
                                x := x + 106;
                             cell(x,y);
                               case x of
                                    161: Yc := 1;
                                    267: Yc :=2;
                                    373: Yc :=3;
                               end;
 
        end;
 
         '1': begin
                             settextstyle(1,0,9);
                             setcolor(black);
                             outtextxy(x+25,y-8,'2');
                             outtextxy(x+25,y-8,'3');
                             setcolor(red);
                             settextstyle(1,0,9);
                             outtextxy(x+25,y-8,'1');
                             a[xc,yc] := 1;
                             settextstyle(0,0,0);
        end;
 
         '2': begin
                             settextstyle(1,0,9);
                             setcolor(black);
                             outtextxy(x+25,y-8,'1');
                             outtextxy(x+25,y-8,'3');
                             setcolor(red);
                             settextstyle(1,0,9);
                             outtextxy(x+25,y-8,'2');
                             a[xc,yc] := 2;
                             settextstyle(0,0,0);
        end;
        '3': begin
                             settextstyle(1,0,9);
                             setcolor(black);
                             outtextxy(x+25,y-8,'2');
                             outtextxy(x+25,y-8,'1');
                             setcolor(red);
                             settextstyle(1,0,9);
                             outtextxy(x+25,y-8,'3');
                             a[xc,yc] := 3;
                             settextstyle(0,0,0);
        end;
         'C': begin
           ClearDevice;
           setcolor(white);
                             settextstyle(0,0,0);
           outtextxy(1,1,'vybir komirky : WASD');
           outtextxy(1,15,'C - clear');
           outtextxy(1,30,'G - compare');
           outtextxy(1,45,'N - exit');
 
           fon;
           setColor(green);
           cell(x,y);
        end;
         'G': begin
           {ClearDevice;}
                             settextstyle(0,0,2);
 
           if isof then
           outtextxy(1,60,'YOU WIN')
           else
            outtextxy(1,60,'YOU LOSE');
          settextstyle(0,0,0);
          { fon;
           setColor(green);
           cell(x,y);}
        end;
       
        end;
  until upcase(kk) = 'N';
CloseGraph;
 
End.

8

Re: Гра з числами на паскалі

2. Взагалі писати в 2014 році музику на PC Speaker під DOS - трохи... гм... запізно, але можете почитати, скажімо,
http://book.kbsu.ru/practice/2_8/2_8_0.html (рос.)
3,4. А в чому проблема?

9

Re: Гра з числами на паскалі

та просто ніяк не можу вставити, допоможіть будьласка.

10

Re: Гра з числами на паскалі

Щоб зробити звук у такій програмі, то треба сильно поморочитися з вводом з клавіатури. Типу програли одну ноту, перевірили чи не натиснуті якісь кнопки, якщо ні, то програли наступну ноту, і так по кругу. Крім того, далеко не на всіх компах зараз є отой спікер. Хоча Сімка й новіші вінди його взагалі не використовують, а замість цього грають звук на колонках.

11

Re: Гра з числами на паскалі

а якщо вставити тільки один звук для всієї гри?

12

Re: Гра з числами на паскалі

Ну й буде комп'ютер безперервно противно пищати.
Я усе ж таки раджу вам подивитися у сторону Делфі, тим більше, що у ній використовується мова програмування Object Pascal.

13

Re: Гра з числами на паскалі

з музикою розібрався, можете допомогти зробити меню і вимірювання часу роботи?

14

Re: Гра з числами на паскалі

Почитайте про модуль CRT за посиланням, яке вище виклав koala. І там же перший приклад.
Що стосується часу, то у вас у першому пості начебто цілком робочий код.

15

Re: Гра з числами на паскалі

да, але як його вставити в прогу?

16

Re: Гра з числами на паскалі

Що саме вставити?
Якщо юніт, то просто описуєте його в розділі uses через кому:

Uses Graph, Crt, Dos;

17

Re: Гра з числами на паскалі

як вставити program MYPROG ; в програму Program Liniya ?

18

Re: Гра з числами на паскалі

що вимырювало час?

19 Востаннє редагувалося Torbins (29.04.2014 18:13:43)

Re: Гра з числами на паскалі

Спробуйте розібратися, що там діється.
Підказка:

with StartTime do
  GetTime(Hours, Minutes, Seconds, HSeconds);

можна замінити на

GetTime(StartTime.Hours, StartTime.Minutes, StartTime.Seconds, StartTime.HSeconds);

А усе, що розташовано між фігурними дужками, є коментарем. Коментарі не впливають на роботу програми, і пишуться програмістом для програміста.

20

Re: Гра з числами на паскалі

я вже пробував, звісно дякую, але будь-ласка допоможіть вставити, я вже як тільки не вставляв.
буду дуже вдячний, будь-ласка, мені щей потрібно його 30 квітня здати.