Одесса: 12°С (вода 8°С)
Киев: 8°С
Львов: 0°С

Тема: Помогите пожалуйста розобратся в исходнике игры тетрис.

Ответить в теме
Показано с 1 по 5 из 5
  1. Вверх #1

    По умолчанию Помогите пожалуйста розобратся в исходнике игры тетрис.

    Написано на паскале. Непонятно как строятся фигурка, как они падают и как сделано поле падения. Пишите обьяснение как для чайника. И обьясние пожалуйста все переменные. Заранее благодарен.


    Program tetris(i,o);

    Uses Crt, Graph;

    Type Stakan = Array [0..21, 0..11] Of Integer;
    Type Figura = Array [0..3, 0..3] Of Integer;

    Var Matela, Mat1Tela, Mat2Tela, Cima : Stakan;
    Next, FigLine, FigL, FigR, FigT,
    FigKvadrat, FigZ, FigS, Fig, Figra : Figura;
    Prox, Aux, A, B, C, I, J, Num, Cont, Lin, Speed,
    Lines, Score, Graphdriver, Graphmode, Con, Bant, Numnex : Integer;
    Fim, Turn, Game, Dir, Esq, Giro, NovayaFig : Boolean;
    CurrentKey : Char;
    Strin : String [6];
    Ponto, Old : LongInt;
    {аЁб㥬 Ґ¤Ё*Ёз*л© Єў*¤а*вЁЄ}
    Procedure SmallKvadrat (Col, Lin, Col1, Lin1: Integer);
    Begin
    SetFillStyle (1, 7); Bar (Col, Lin, Col1, Lin1);
    SetColor (15); SetLineStyle (0, 1, 1);
    Line (Col, Lin, Col1, Lin); Line (Col, Lin, Col, Lin1);
    Line (Col, Lin+ 1, Col1, Lin+ 1); Line (Col+ 1, Lin, Col+ 1, Lin1);
    Line (Col, Lin+ 2, Col1, Lin+ 2); Line (Col+ 2, Lin, Col+ 2, Lin1);
    SetColor (8);
    Line (Col, Lin1, Col1, Lin1); Line (Col+ 1, Lin1- 1, Col1, Lin1- 1);
    Line (Col+ 2, Lin1- 2, Col1, Lin1- 2); Line (Col1, Lin, Col1, Lin1);
    Line (Col1- 1, Lin+ 1, Col1- 1, Lin1); Line (Col1- 2, Lin+ 2, Col1- 2, Lin1);
    SetColor (7);
    Line (Col, Lin, Col+ 2, Lin+ 2); Line (Col1, Lin1, Col1- 2, Lin1- 2);
    End;

    Procedure OneDown;
    Begin
    If Old<> Ponto Then Begin
    Old:= Ponto;
    Bar (1, 1, 100, 98);
    SetColor (White);
    OutTextXY (520, 85, '‘«Ґ¤гой*п:');
    Str (Ponto, Strin); OutTextXY (5, 10, '‘зҐв:'+ Strin);
    Str (Lines, Strin); OutTextXY (5, 30, '‹Ё*Ё©:'+ Strin);
    Str (Score, Strin); OutTextXY (5, 50, '“а®ўҐ*м:'+ Strin);
    End;
    For I:= 1 To 20 Do
    For J:= 1 To 10 Do Begin
    If Matela [I, J] = 0 Then Begin
    SetFillStyle (1, Black);
    Bar ( (J- 1) * 20+ 215, (I- 1) * 20+ 25, (J- 1) * 20+ 19+ 215, (I- 1) * 20+ 19+ 25);
    End
    Else If Matela [I, J] <> Mat2Tela [I, J] Then Begin
    SmallKvadrat ( (J- 1) * 20+ 215, (I- 1) * 20+ 25, (J- 1) * 20+ 19+ 215, (I- 1) * 20+ 19+ 25);
    End;
    End;
    End;

    Procedure OutNext;
    Begin
    For I:= 0 To 3 Do
    For J:= 0 To 3 Do Begin
    If Next [I, J] = 0 Then Begin
    SetFillStyle (1, Black);
    Bar ( (J- 1) * 20+ 515, (I- 1) * 20+ 25, (J- 1) * 20+ 19+ 515, (I- 1) * 20+ 19+ 25);
    End
    Else Begin
    SmallKvadrat ( (J- 1) * 20+ 515, (I- 1) * 20+ 25, (J- 1) * 20+ 19+ 515, (I- 1) * 20+ 19+ 25);
    End;
    End;
    End;

    Procedure FigNaugad;
    Begin
    Numnex:= Random (7);
    case Numnex of
    0: Next:= FigL;
    1: Next:= FigR;
    2: Next:= FigLine;
    3: Next:= FigKvadrat;
    4: Next:= FigZ;
    5: Next:= FigS;
    else Next:= FigT
    end;
    End;

    Procedure LinesPlus;
    Begin
    Aux:= Lines;
    For A:= 1 To 4 Do
    For I:= 20 Downto 1 Do Begin
    Cont:= 0;
    For J:= 1 To 10 Do If Matela [I, J] = 1 Then Cont:= Cont+ 1;
    If Cont= 10 Then Begin
    For J:= 1 To 10 Do Begin
    Matela [I, J] := 0;
    End;
    Inc (Lines, 1);
    For Lin:= 1 To (I- 1) Do
    For J:= 1 To 10 Do Begin
    Cima [Lin, J] := Matela [Lin, J];
    Matela [Lin, J] := 0;
    End;
    For Lin:= 2 To I Do
    For J:= 1 To 10 Do
    Matela [Lin, J] := Cima [Lin- 1, J];
    End;
    End;
    Ponto:= Ponto+ ( (Lines- Aux) * (Lines- Aux) * 100);
    End;

    Procedure KeybrdEvent;
    Begin
    If KeyPressed Then Begin
    CurrentKey:= ReadKey;
    If Ord (CurrentKey) = 077 Then Begin {Right}
    If Dir= True Then Begin
    Inc (C, 1);
    Inc (Con, 1);
    If Con< 4 Then Dec (B, 1);
    If Con>= 4 Then Begin
    Con:= 0;
    Dec (C, 1);
    End;
    End;
    End
    Else If Ord (CurrentKey) = 075 Then Begin
    If Esq= True Then Begin {Left}
    Dec (C, 1);
    Inc (Con, 1);
    If Con< 4 Then Dec (B, 1);
    If Con>= 4 Then Begin
    Con:= 0;
    Inc (C, 1);
    End;
    End;
    End
    Else If Ord (CurrentKey) = 072 Then Begin {Up}
    If Giro= True Then Begin
    Inc (Con, 1);
    If Con< 2 Then Dec (B, 1);
    If Con>= 2 Then Con:= 0;
    Figra:= Fig;
    If (Num= 0) Or (Num= 1) Or (Num= 6) Then Begin
    For I:= 1 To 3 Do Begin
    Fig [3, I] := Figra [I, 1];
    Fig [2, I] := Figra [I, 2];
    Fig [1, I] := Figra [I, 3];
    End;
    End
    Else If (Num= 4) Or (Num= 5) Then Begin
    If Turn= True Then Begin
    For I:= 0 To 3 Do Begin
    Fig [3, I] := Figra [I, 0];
    Fig [2, I] := Figra [I, 1];
    Fig [1, I] := Figra [I, 2];
    Fig [0, I] := Figra [I, 3];
    Turn:= False;
    End;
    End
    Else If Turn= False Then Begin
    If Num= 4 Then Fig:= FigZ;
    If Num= 5 Then Fig:= FigS;
    Turn:= True;
    End;
    End
    Else If Num= 2 Then Begin
    For I:= 0 To 3 Do
    For J:= 0 To 3 Do
    Fig [I, J] := Figra [J, I];
    End;
    End;
    End
    Else If Ord (CurrentKey) = 080 {Down}
    Then Speed:= 0;
    End;
    End;


    Begin
    DetectGraph (Graphdriver, Graphmode);
    InitGraph (Graphdriver, Graphmode, '');
    setbkcolor(1);
    setcolor(15);
    rectangle(0,0,getMaxX,getMaxY);
    setcolor(14);
    outtextxy(round(0.5*getmaxx)-80,12,'T E T R I S - 2000.');
    repeat ; until keypressed;
    Randomize;

    For I:= 0 To 3 Do
    For J:= 0 To 3 Do Begin
    FigLine [I, J] := 0;
    FigKvadrat [I, J] := 0;
    FigL [I, J] := 0;
    FigR [I, J] := 0;
    FigT [I, J] := 0;
    FigZ [I, J] := 0;
    FigS [I, J] := 0;
    End;
    For I:= 0 To 3 Do FigLine [2, I] := 1; {0000}
    For I:= 1 To 3 Do FigL [2, I] := 1; { 0}
    FigL [1, 3] := 1; {000}
    For I:= 1 To 3 Do FigR [2, I] := 1; {0 }
    FigR [1, 1] := 1; {000}
    For I:= 0 To 1 Do FigZ [I, 1] := 1; {00 }
    For I:= 1 To 2 Do FigZ [I, 2] := 1; { 00}
    For I:= 0 To 1 Do FigS [I, 2] := 1; { 00}
    For I:= 1 To 2 Do FigS [I, 1] := 1; {00 }
    For I:= 1 To 3 Do FigT [2, I] := 1; { 0 }
    FigT [1, 2] := 1; {000}
    For I:= 1 To 2 Do FigKvadrat [1, I] := 1; {00 }
    For I:= 1 To 2 Do FigKvadrat [2, I] := 1; {00 }

    FigNaugad;
    Old:= 0;
    Con:= 0;
    Ponto:= 0;
    Lines:= 0;
    CurrentKey:= '0';
    For I:= 1 To 20 Do
    For J:= 1 To 10 Do Matela [I, J] := 0;
    For I:= 1 To 21 Do Matela [I, 0] := 1;
    For I:= 1 To 21 Do Matela [I, 11] := 1;
    For J:= 0 To 11 Do Matela [21, J] := 1;
    SetBkColor (Black);
    SetColor (White);
    Line (214, 25, 214, 425);
    Line (415, 25, 415, 425);
    Line (215, 425, 414, 425);
    Fim:= False;
    Game:= True;

    Repeat
    Speed:= 30000;
    Score:= 1;
    Inc (Ponto, 10);
    Speed:= Speed- ( (Ponto Div 4000) * 10);
    Score:= Score+ (Ponto Div 4000);
    NovayaFig:= False;
    Fig:= Next;
    Num:= Numnex;
    FigNaugad;
    Turn:= True;
    C:= 4;
    B:= 0;
    OutNext;
    Repeat
    KeybrdEvent;
    KeybrdEvent;
    If B= Bant+ 1 Then Con:= 0;
    Esq:= True;
    Dir:= True;
    Giro:= True;
    Mat2Tela:= Matela;
    LinesPlus;
    Mat1Tela:= Matela;
    For I:= 0 To 2 Do
    For J:= 0 To 2 Do Begin
    If (Num= 4) Or (Num= 5) Then
    If Matela [I+ B, J+ C] = 1 Then Giro:= False;
    End;
    For I:= 1 To 3 Do
    For J:= 1 To 3 Do Begin
    If (Num= 6) Or (Num= 0) Or (Num= 1) Then
    If Matela [I+ B, J+ C] = 1 Then Giro:= False;
    End;
    For I:= 0 To 3 Do
    For J:= 0 To 3 Do
    If NovayaFig= False Then Begin
    If Num= 3 Then Giro:= False;
    If Num= 2 Then
    If Matela [I+ B, J+ C] = 1 Then Giro:= False;
    If Matela [I+ B, J+ C] <> 1 Then
    Begin
    Matela [I+ B, J+ C] := Fig [I, J];
    If (Matela [I+ B, J+ C+ 1] ) + (Fig [I, J] ) = 2 Then Dir:= False;
    If (Mat1Tela [I+ B, J+ C- 1] ) + (Fig [I, J] ) = 2 Then Esq:= False;
    If (Matela [I+ B+ 1, J+ C] ) + (Fig [I, J] ) = 2 Then
    Begin
    For I:= 0 To 3 Do
    For J:= 0 To 3 Do
    If Matela [I+ B, J+ C] <> 1 Then
    Begin
    Matela [I+ B, J+ C] := Fig [I, J];
    End;
    OneDown;
    NovayaFig:= True;
    End;
    End;
    End;
    If NovayaFig= False Then Begin
    OneDown;
    For I:= 0 To 3 Do
    For J:= 0 To 3 Do
    If Mat1Tela [I+ B, J+ C] <> 1 Then
    Matela [I+ B, J+ C] := 0;
    Delay (Speed);
    Bant:= B;
    Inc (B, 1);
    End;
    If KeyPressed Then CurrentKey:= ReadKey;
    If Ord (CurrentKey) = 027 Then Fim:= True;
    Until (NovayaFig= True) Or (Fim= True);
    For J:= 4 To 6 Do If Matela [1, J] = 1 Then Game:= False;
    Until (Game= False) Or (Fim= True);
    cleardevice;
    setbkcolor(1);
    setcolor(15);
    rectangle(0,0,getMaxX,getMaxY);
    setcolor(14);
    outtextxy(60,round(0.5*GetMaxY),'COPYRIGHT (c) 2000 BY <<VICTOR AFONIN>>. _ALL_ RIGHT RESERVED!!!');
    delay(3000);
    closegraph;
    End.


  2. Вверх #2
    Посетитель Аватар для Phoenixxe
    Пол
    Мужской
    Адрес
    Одесса
    Возраст
    35
    Сообщений
    359
    Репутация
    73
    Записей в дневнике
    2
    админы, удалите пожалуйста темы этого халявщика, который не может даже пользоваться форматированием и базовыми тегами

    халявщик, тебя не учили убирать копирайт из кода ?
    Si vis pacem, para bellum

  3. Вверх #3
    Новичок
    Пол
    Мужской
    Возраст
    33
    Сообщений
    15
    Репутация
    10
    Цитата Сообщение от Phoenixxe Посмотреть сообщение
    тебя не учили убирать копирайт из кода ?
    да ладно, не надо бить человека, он и удалив копирайт все равно нарушил бы право собственности. или я не прав? и так всем известно кто написал и кому принадлежит идея тетриса.
    Код:
    /**
     * HelloFromMe.java
     * copyright (c) 2011 by me. all right reserved!!!
     */
    public class HelloFromMe{
      HelloFromMe(){
        System.out.println("Hello from me!!!");
      }
      public static void main(String[] args) {
        new HelloFromMe();
      }
    }
    и не копируйте это! копирайт!
    правда это и так никому не надо

    ну а отформатировать было бы не плохо +1.

  4. Вверх #4
    Посетитель Аватар для a1ro
    Пол
    Мужской
    Возраст
    29
    Сообщений
    170
    Репутация
    39
    Код HTML:
    /*
     * Copyright (c) 1995, 2008, Oracle and/or its affiliates. All rights reserved.
     *
     * Redistribution and use in source and binary forms, with or without
     * modification, are permitted provided that the following conditions
     * are met:
     *
     *   - Redistributions of source code must retain the above copyright
     *     notice, this list of conditions and the following disclaimer.
     *
     *   - Redistributions in binary form must reproduce the above copyright
     *     notice, this list of conditions and the following disclaimer in the
     *     documentation and/or other materials provided with the distribution.
     *
     *   - Neither the name of Oracle or the names of its
     *     contributors may be used to endorse or promote products derived
     *     from this software without specific prior written permission.
     *
     * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
     * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
     * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
     * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
     * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
     * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
     * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
     * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
     * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
     * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     */ 
    
    /** 
     * The HelloWorldApp class implements an application that
     * simply prints "Hello World!" to standard output.
     */
    class HelloWorldApp {
        public static void main(String[] args) {
            System.out.println("Hello World!"); // Display the string.
        }
    }
    ты опоздал. Оракл уже это закопирайтил на Java.
    Счастья всем, счастья каждому! И пусть никто не уйдет обиженным!

  5. Вверх #5
    Новичок
    Пол
    Мужской
    Возраст
    33
    Сообщений
    15
    Репутация
    10
    вот блин я же специально изменил код, такого hello world как у меня я еще не видел
    шучу!


Ответить в теме

Метки этой темы

Социальные закладки

Социальные закладки

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения