Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 04.12.2009, 19:50
Аватар для mak-karpov
mak-karpov mak-karpov вне форума
Активный
 
Регистрация: 18.09.2008
Сообщения: 235
Версия Delphi: 2010 и 7
Репутация: 1242
По умолчанию Консоль и пиксели

Вопрос в том, что надо, когда консоль в полном экране (Alt+Enter), вывести изображение попиксельно. В Windows это возможно, т.к. игры, тож. в принципе консольные, это делать умудряются. В качастве примера, какой эффект должен получиться, приведу код Borland Pascal'я. На дельфи либо не компилируеться, либо у меня руки из одного места растут.
Код:
{$A+,B-,D+,E+,F-,G+,I+,L+,N-,O-,P-,Q-,R-,S+,T-,V+,X+,Y+}   
    
{$M 16384,0,655360}  
    
Uses CRT;   
    
Const vx0 = 3;   
      vy0 = 2;   
      v0  = vx0;   
      r0  = 50;   
      r02 = (r0-v0)*(r0-v0);   
      d   = r02 * 10 div 10;   
Type ScreenType = Array[0..199,0..319] of Byte;   
     DispType   = Array[-r0..r0,-r0..r0] of Integer;   
    
Var   
    
    Screen           : ScreenType Absolute $a000:$0000;   
    Buffer1, Buffer2 : ^ScreenType;   
    Disp             : ^DispType;   
    x,y,vx,vy,r2,c   : LongInt;   
Procedure Move(Var A,B; Count: Word);   
assembler;   
asm  
        push ds   
        mov  cx, Count   
        les  di, B   
        lds  si, A   
        shr  cx, 1  
        jz   @zero   
        rep  movsw   
@zero:  pop  ds   
end;   
BEGIN   
    
 asm  
  mov ax, $13  
  int $10  
 end;   
    
 New(Buffer1);   
 New(Buffer2);   
 New(Disp);   
    
 FillChar(Screen, SizeOf(Screen), 3);   
 y:=0;   
    
 repeat  
    
  For x:=0 to 319 do Screen[y,x]:=11;   
  Inc(y,10);   
    
 until y>199;   
    
 x:=0;   
    
 repeat  
    
  For y:=0 to 199 do Screen[y,x]:=11;   
  Inc(x,10);   
    
 until x>319;   
    
 Move(Screen, Buffer1^, SizeOf(Screen));   
 Move(Buffer1^,Screen,64000);   
    
 For y:=-r0 to r0 do  
 For x:=-r0 to r0 do  
  begin  
    
  r2:=x*x+y*y;   
  if r2>r02 then Disp^[y,x] := y*320+x   
   else    
  Disp^[y,x]:=(y*(r2+d)div(r02+d))*320+(x*(r2+d)div(r02+d));   
    
  end;   
    
 x:=r0;   
 y:=r0;   
 vx:=vx0;   
 vy:=vy0;   
 repeat  
    
  asm  
          mov     ax, Integer(y)   
          mov     bx, 320  
          imul    bx   
          add     ax, Integer(x)   
          mov     di, ax   
          mov     dx, -r0*320-r0   
          les     si, Disp   
          mov     ch, 2*r0+1  
@next_dy: mov     cl, 2*r0+1  
@next_dx:   
          mov     es, Word(Disp+2)   
          mov     bx, es:[si]   
          mov     es, Word(Buffer1+2)   
          mov     al, es:[di+bx]   
          mov     bx, Seg(Screen)   
          mov     es, bx   
          mov     bx, dx   
          mov     es:[di+bx], al   
          add     si, 2  
          inc     dx   
          dec     cl   
          jnz     @next_dx   
          add     dx, 320-(2*r0+1)   
          dec     ch   
          jnz     @next_dy   
  end;   
    
  if ((x+vx)>=r0)and ((x+vx)<=319-r0)then Inc(x, vx)   
                                       else vx:=-vx;   
    
  if ((y+vy)>=r0)and ((y+vy)<=199-r0)then Inc(y,vy)   
                                       else vy:=-vy;   
  Delay(25);   
 until Port[$60]=$01;   
    
 Dispose(Buffer1);   
 Dispose(Buffer2);   
 Dispose(Disp);   
    
 asm  
  mov ax, $03  
  int $10  
 end;   
    
END. 
Этот код
1) Переводить Borland Pascal в полноэкранный режим
2) Рисует сетку.
3) Дальше разглядеть не успел

Мне надо тоже самое, только вместо сетки 16-цветная картинка, желательно задаваемая массивом цветов точек. Надеюсь вы поняли.
__________________
Кнопка "+" - весы в правом верхнем углу сообщения...
Ответить с цитированием
 


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 13:54.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025