Newsgroup: it.comp.lang.pascal
Titolo: Ve lo faccio rivivere io l' NG !

Un pò di tempo fa vi lamentavate perchè non c'erano richieste d'aiuto e l'NG
stava morendo... bè ora vediamo se vi posso dare una mano:
Mi sto avvicinando alla grafica in pascal, dopo essermi letto "Pascal: guida
alla programmazione" di McGraw-Hill.  Ottimo libro ma per quanto riguarda la
grafica è decisamente povero, purtroppo conosco l'inglese così-così e per
riuscire a leggere l'help del TP7 bisogna avere una laurea in lingue (avendo
io 14 anni dubito di poterla riuscire a prendere a breve) comunque mi
servirebbero delle risposte (o dei link) alle seguenti domande:
1. L'uso dei puntatori può, a lungo termine, portare al suicidio ?
2. Dove trovo (no nell'help) una spiegazione in lingua totalmente e
inconfondibilmente di origine assolutamente ITALIANA, alle varie unit ?
3. Ho due immagini: un cerchio e un quadrato e basta, nientaltro (cavolo non
pretendo molto !) come le posso memorizzare per farle muovere sullo schermo
?
Uso due puntator non tipizzatii e "ghetto" (voce del verbo get, paradigma:
to get, ghetto,gotto) la memoria ma quando avvio il programma mi da certi
errori che sembra che sto cercando di fare half-life in pascal !
4. Prendiamo questo esempio: la pallina va a destra e a sinistra sotto c'è
una piattaforma elettrificata, in questa piattaforma c'è un buco di
lunghezza il diametro della pallina, quando  spingo il bottoncino la pallina
cade se becca il buco vinco se no perdo (e fin qui ci siamo)
La posizione del buco è random come faccio a creare sto pavimento che non so
dove si interrompe e dove rincomincia ?
Bè ho altre domande ma per ora basta, quando riuscirò a risolvere questi
probblemi vi farò le altre, grazie a chiunque mi risponda.


Cavolo questo sembra una verifica di matematica. Ti sei lasciato influenzare
dalla scuola?
Cmq
Domanda 1: no, i puntatori se correttamente usati, intendo allocare e
disallocare al momento giusto, sono la via migliore per creare programmi
veloci e dinamici.
Domanda 2: personalmente so molto bene l'inglese quindi non saprei aiutarti
in quanto non li ho mai cercati.
Domanda 3: beh, io dire che per muoverle devi disegnarle in punti diversi
dello schermo in sequenze rapide, del tipo ciclo for rallentato dai Delay,
per le posizioni potresti andare a leggere o a scrivere le coordinate su di
un file.
Domanda 4: i casi sono 2: se lo esegui in prompt di Ms-Dos da Windows è una
autentica pazzia, se invece è da dos puro controlla che essendo due
puntatori senza tipo di averli allocati non con New ma con GetMem e funzioni
similari del tipo GetMem(Puntatore, SizeOf(Puntatore));
Domanda 5: ???!! ma che domande sono, basta che tu prenda come riferimenti i
punti delle coordinate cartesiane dello schermo.Es.
X:= 0;
Y:= 50;
Rnd:= Random(80) {sono le colonne X dello schermo}
se Rnd fosse 20
allora la prima parte di pavimento è
X1:=0 X2:= 20
Y:= 50
il buco è largo 10 quindi
X1:=20 X2:= 30
Y:= 50
Il resto del paviemento è
X1:= 30 X2:= 80
Y1:= 50;
Spero di esserti stato di aiuto. Scrivimi pure alla mail privata se hai
bisogno.
Ciao
--
Davide Carrara
cci...@libero.it

prova 
gpi.infomedia.it
 (temporaneamente off-line, prova tra qualche
giorno/settimana)
Ciao !
--
Posted from 
relay1.inwind.it
 [212.141.53.67] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 probblemi vi farò le altre, grazie a chiunque mi risponda.
Guarda secondo m'è metterti a creare un gioco da dos in pascal non è il
massimo
perchè questo non ti aiuterà quando passerai a sistemi windows e ti troverai
spiazzato
se vuoi comunque perseverare in questa strada (come ho fatto anche io dalla
1a alla 3a)
ricordati che le prestazioni sono basse e se vuoi di + devi usare
l'assembler

 errori che sembra che sto cercando di fare half-life in pascal !
?
In line di principio:
    individuare la zona di schermo in cui comparirà l'immagine e la sua
dimensione e ghettare la memoria necessaria;
    1-salvare tale zona in memoria;
    2-creare l'immagine sullo schermo;
    3-rutine di ritardo (puoi usare GetTime per spostare l'immagine 
p.es
.
ogni
0,2 secondi oppure Delay(200));
    4-ripristinare la zona di schermo salvata;
    5-nuova posizione dell'immagine;
    6-verificare se c'è la richiesta di uscita dal ciclo;
    7-altrimenti saltare a 1-.
Non ho capito bene come hai posto il problema della pallina: è una
situazione bi o tridimensionale?


o ankora meglio il c++ e l'assembler
neon pensa: Kom'e' bello il FreeAgent

 - rimuovi XXX x rispondere    ICQ #8814554
Quando era in vena di battutacce [Groucho Marx] chiedeva al cameriere, o
alla cameriera: "Scusi, ha le zampe di rana?".  Qualunque fosse la
risposta, Groucho prendeva un'aria gravemente delusa e diceva: "Risposta
sbagliata!  Doveva dire: ``No, sono i reumatismi che mi fanno camminare
cosi'!''".
		-- Arthur Sheekman, "Le lettere di Groucho Marx"

 probblemi vi farò le altre, grazie a chiunque mi risponda.
Ciao.
Simone.
==============================
...e Dio disse: "pkunzip universo.zip"
e-mail: 
drfa...@tiscalinet.it
web: 
http://go.to/drfalken
 (internet
su numero verde, pascal, assembler,
mp3 player, tips'n'tricks)
==============================

 errori che sembra che sto cercando di fare half-life in pascal !
Un po' di tempo fa mi ero scritto un programmino che muoveva un'immagine
sullo schermo usando i puntatori. Ecco il listato
=================================================================
Program PutImagePlay;
{Demonstrate the GetImage and PutImage commands}
  uses crt,dos,graph,graphic;
  const
    StartX=100;
    StartY=50;
    CUp=^E;
    CDown=^X;
    CLeft=^S;
    CRight=^D;
    CExit=^[;
  var
    CurPort:ViewPortType;
    MaxX, MaxY:word;   {The maximum resolution of the screen}
    MaxColor:word;     {The maximum color value available}
    done:boolean;
    Ch:Char;
  Procedure NothingToDo;
    Begin
    End;
  Function ReadChar:Char;
    var
      Ch:Char;
    Begin
      Ch:=ReadKey;
      If Ch=#0 Then
        Case ReadKey Of
          #45:Ch:=CExit;     {Alt-X}
          #72:Ch:=CUp;       {Up}
          #75:Ch:=CLeft;     {Left}
          #77:Ch:=CRight;    {Right}
          #80:Ch:=CDown;     {Down}
        End;
      ReadChar:=Ch;
    End;
  var
    Pausetime:word;
    Saucer:pointer;
    X,Y:integer;
    ulx,uly:word;
    lrx,lry:word;
    Size:word;
    I:word;
begin
  graphinit;
  MaxColor:=GetMaxColor;  {Get the maximum allowable drawing color}
  MaxX:=GetMaxX;          {Get screen resolution values}
  MaxY:=GetMaxY;
  ClearDevice;
  SetViewPort(0,0,MaxX,MaxY,ClipOn);  {Set the view port to the entire
screen}
  {PaintScreen}
  ClearDevice;
  GetViewSettings(CurPort);
  line(startx,starty,startx,starty+14);
  line(startx,starty+14,startx+3,starty+11);
  line(startx+4,starty+12,startx+4,starty+13);
  line(startx+5,starty+14,startx+5,starty+15);
  line(startx+6,starty+16,startx+6,starty+17);
  line(startx+7,starty+18,startx+8,starty+18);
  line(startx+9,starty+17,startx+9,starty+16);
  line(startx+8,starty+15,startx+8,starty+14);
  line(startx+7,starty+13,startx+7,starty+12);
  putpixel(startx+6,starty+11,white);
  line(startx+6,starty+10,startx+9,starty+10);
  line(startx+10,starty+10,startx,starty);
  ulx:=StartX;    {x punto + alto}
  uly:=StartY;       {y punto + alto}
  lrx:=StartX+11;    {x punto + basso }
  lry:=StartY+19; {y punto + basso}
  Size:=ImageSize(ulx,uly,lrx,lry);
  GetMem(Saucer,Size);
  GetImage(ulx,uly,lrx,lry,Saucer^);
  Repeat
    Ch:=ReadChar;
    Case Ch Of
      CUp:Begin
            PutImage(ulx,uly,Saucer^,XORput);
            ulx:=ulx;
            uly:=uly-1;
            PutImage(ulx,uly,Saucer^,XORput);
          End;
      CDown:Begin
              PutImage(ulx,uly,Saucer^,XORput);
              ulx:=ulx;
              uly:=uly+1;
              PutImage(ulx,uly,Saucer^,XORput);
            End;
      CLeft:Begin
              PutImage(ulx,uly,Saucer^,XORput);
              ulx:=ulx-1;
              uly:=uly;
              PutImage(ulx,uly,Saucer^,XORput);
            End;
      CRight:Begin
               PutImage(ulx,uly,Saucer^,XORput);
              ulx:=ulx+1;
              uly:=uly;
              PutImage(ulx,uly,Saucer^,XORput);
             End;
      CExit:Done:=True;
    End;
  Until Done;
  FreeMem(Saucer,size);
end. { PutImagePlay }
====================================
Spero ti sia utile.
PS: Graphic e graphinit sono mie unit e procedura per avviare la grafica,
fallo normalmente con initgraph(....).

 Io finche` non sono passato al C, manco sapevo cosa fossero...
Non diciamo fesserie!!!!!
E se volessi implementare una lista, un albero, voler accedere alla memoria
per intercettare i dati, come faresti?!?!?!?

Scusate se vi ho fatto aspettare, ringrazio tutti quelli che hanno risposto,
questa volta cercherò di essere più preciso, ecco un semplice prog. che fa
muovere una pallina a destra ed a sinistra e quando si spinge un tasto
questa "cade":
----------------------------------PROGRAMMA
MOV---------------------------------
program mov;
uses crt,graph;
var
   scheda,modo,cod_err:integer;
   x,y:integer;
   p:pointer;
procedure disegna_mem;
   var
      colore:shortint;
      xx,yy:integer;
      dimensione:word;
   begin
      setcolor(14);                         {usa il giallo}
      circle(50,65,15);                     {disegna la palla}
      dimensione:=imagesize(0,0,100,115);
      getmem(p,dimensione);                 {memorizza l'immagine e puntala
con p^}
      getimage(0,0,100,115,p^);
      clearviewport;
      END;
procedure trascina;
   var
      direzione: (alto,basso,destra,sinistra);
      xx,yy:integer;
      fine:integer;
   begin
      xx:=70; yy:=70;
      fine:=0;
      direzione:=destra;
      putimage(xx,yy,p^,xorput);
      repeat
         putimage(xx,yy,p^,xorput);
         case direzione of
            basso:   begin
                         yy:=yy+10;
                         fine:=fine+1;
                      end;
            sinistra: begin
                         xx:=xx-10;
                            if xx<(x*0.15) then
                               direzione:=destra;
                            if keypressed then
                               direzione:=basso;
                      end;
             destra:  begin
                         xx:=xx+10;
                         if xx>(x*0.65) then
                            direzione:=sinistra;
                         if keypressed then
                            direzione:=basso;
                      end;
         end;
         putimage(xx,yy,p^,xorput);
         delay(100);
      until fine:=50;
   end;
  begin
     scheda:=detect;
     initgraph(scheda,modo,'C:\tp7\bgi');
     cod_err:=graphresult;
     if cod_err<> grok then
        writeln('Errore grafico: ',grapherrormsg(cod_err))
     else begin
        x:=getmaxx;
        y:=getmaxy;
        disegna_mem;
        trascina;
        closegraph;
    end;
 end.
--------------------------FINE PROGRAMMA------------------------------------
Allora ecco i probblemi:
1. Perchè la palla si muove così da schifo ?
2. Ripeto la domanda della scorsa mail, facciamo finta che ho disegnato una
linea lunga tutto lo schermo, ad una certa altezza, come faccio a creare un
buco in questa linea di larghezza data, ma con posizione nella linea random
?
3. A cosa servono gli alberi ? ( ditemi: "a creare ossigeno" e vi mando "I
love you" direttamente nell'HD" ;-)
Vorrei precisare (viste alcune recenti mail) che questi non sono compiti per
casa o simili anche perchè il nostro professore di inf. non sapeva
dell'esistenza delle librerie graph prima di stamattina quando gliele ho
fatte vedere (viva la scuola italiana).
Grazie a tuuuuuuuuuuuuuuuuuuuuuutti Ciao !

 - rimuovi XXX x rispondere    ICQ #8814554
Non e' facile essere un narcisista obeso.
		-- Jackie Gleason

 - rimuovi XXX x rispondere    ICQ #8814554
"Mamma, mamma, c'e' il lattaio.  Hai i soldi o devo andare fuori a
giocare?"
		-- Da it.hobby.umorismo

 opinabili :)
Certo, anche le mie sono solo opinioni, e sono pronto a cambiarle se trovo
qualcosa di meglio; mi sembra che lo dicesse Leopardi: "Solo un idiota non
cambierebbe mai idee"..

 - rimuovi XXX x rispondere    ICQ #8814554
Umberto Bossi vuole rivoluzionare la segnaletica stradale della Padania:
"D'ora in poi, non ci sara' piu' scritto ``Inversione di Marcia'', ma ci
sara' ``El ti ghe da inverti' la diresiun''.  Cosi', chi capira', girera'".
"Ma, e gli altri?".  "Selezione naturale".
		-- Non letterale, da "Striscia la Notizia"




eh eh, W il Leo, allora ;-)
Ridimmelo quando devi studiarlo, quanto è bello Leo....... ;PP
Alla prossima!!

 che librerie grafiche dovrei usare per non utilizzare le graph ?
vuoi dire che unit esteren, create da altri?? Non saprei, ma puoi sempre
scrivertele in asm................

 - rimuovi XXX x rispondere    ICQ #8814554
"Mi domando perche' i cavalli non partecipino mai ai quiz televisivi...
Sono cosi' ferrati..."
		-- Da it.hobby.umorismo

 maturita`, e dopo non sentiro` mai piu` parlare di letteratura :-)
E perchè dovresti dispiacertene????? E' da un anno che ho smesso di studiare
quel rompipalle!!!!

Morpheus ha scritto:

Non toccatemi Leopardi!
--
Fabio Feuli
E-Mail 
fe...@libero.it
"O natura, o natura,
Perché non rendi poi
Quel che prometti allor? perché di tanto
Inganni i figli tuoi?"
(Leopardi: Dai Canti, A Silvia vv. 34-39)

 Non toccatemi Leopardi!
Mipiaceva anche a me ma non puoi negare che era un rompicolgioni mica da
ridere!!!! Sempre a farsi seghe metali sulla sfiga che attanaglia
l'universo....... Insomma datti una mossa.....

 - rimuovi XXX x rispondere    ICQ #8814554
"Mamma, mamma, c'e' il lattaio.  Hai i soldi o devo andare fuori a
giocare?"
-- Da it.hobby.umorismo

 - rimuovi XXX x rispondere    ICQ #8814554
ARCIDUCA FERDINANDO TROVATO VIVO --
    LA PRIMA GUERRA MONDIALE, UN ERRORE