![](/logo_grey.gif)
Последние записи
- Как в Python+Selenium webdriver открыть новую вкладку в уже открытом браузере?
- Lazarus, проверка существования строки таблице
- BASM и record, обращение к полям записи
- Web PHP Framework Symfony
- Относительный путь для вывода картинки на html странице
- Массовое открытие гиперссылок в браузере
- Скопировать значение строки из таблицы в textarea
- Рамки для страниц отчетов
- Вывод StdOut консоли в TMemo
- Чтение из файла большого размера (нехватка памяти)
![](http://programmersclub.ru/slurm3.jpg)
Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке - https://slurm.club/3MeqNEk
![](http://programmersclub.ru/katajpg.jpg)
Online-курс Java с оплатой после трудоустройства. Каждый выпускник получает предложение о работе
И зарплату на 30% выше ожидаемой, подробнее на сайте академии, ссылка - ttps://clck.ru/fCrQw
20th
Июн
Задача о Ханойских башнях. Си.
Каждый студент-программист решает эту задачу. Вот код для упрощения поиска.
#include <stdio.h>
#include <conio.h>
void DisplayPin(int,int);
void TransferInNext( int,int,int,int);
void InputPin(int);
void Swap(int,int);
struct Pin
{
int pin[3][50];
int count[3];
}T;
int count=0;
int main()
{
int amount;
clrscr();
printf("Input amount rings->");
scanf("%d",&amount);
if(amount>50)
{
printf("<50\n");
return 1;
}
InputPin(amount);
if(amount)
TransferInNext( 1,3,2,amount);
printf("\nAmount step %d \n",count);
getch();
return 0;
}
void DisplayPin( int from,int to)
{
int i,j;
printf("\nMove Disk From %d To %d",from,to);
for(i = 0; i < 3; i++)
{
printf("\n");
printf("| ");
for(j = 0;j< T.count; j++)
printf("%d",T.pin[j]);
}
printf("\n");
}
void Swap(int from,int to)
{
T.pin[to-1][T.count[to-1]++]=T.pin[from-1][--T.count[from-1]];
DisplayPin(from,to);
count++;
}
//////////////////////////////////
void TransferInNext ( int from,int to,int via,int n)
{
if(n==1)
{
Swap(from,to);
}
else
{
TransferInNext(from,via,to,n-1);
Swap(from,to);
TransferInNext(via,to,from,n-1);
}
}
///////////////////////////////////
void InputPin(int len)
{
int i,k=len;
printf("| ");
for(i=0; i<len; i++,k--)
{
T.pin[0]=k;
printf("%d",T.pin[0]);
}
printf("\n| \n| \n---------------------------------------\n\n");
T.count[0]=len;
return;
}
Возможно, в теме на форуме будет доработан код для псевдографики.
19th
Июн
Правильное определение порядка точек в прорисовке тени в 2d-игре
Давно тут не постил уже, прям забыл уже как тут хорошо было
![](http://programmersforum.ru/images/smilies/smile.gif)
Вот заинтересовал вопрос о прорисовке тени. Допустим есть некий игрок и препятствия (см. вложение) и он имеет угол обзора 90 градусов и все, что выпадает за этот угол или закрывается препятствием не должно быть отображено. Допустим неким образом я сумел просчитать координаты этих точек, где кривая тени ломается. Определяю методом перебора:
1. Проверяю доступность для “обзора” каждой из четырех точек препятствия (все объекты – прямоугольники).
2. Если точка оказывается доступной(красные круги) то добавляем ее в список точек а также пробуем спроектировать луч из этой точки с углом из точки обзора, тем самим добавляя спроектированную точку в список(угол показан жёлтым, а спроектированная точка зелёным).
3. Дальше пытаюсь отсортировать эти точки так, чтобы их можно было бы прорисовать одним циклом (для начала просто соединить в ломанную(показано белым), а в дальнейшем хочу зарисовать все, не входящее в эту фигуру чёрным или серым). Но так как все препятствия расположены хаотически то может случится ситуация, когда одно препятствие попадает в список раньше положенного.
Прошу помощи в сортировке такого списке, чтобы можно было отобразить как на картинке Спасибо за внимание.
Интересная проблема и возможные варианты решения. Смотрим на форуме. Принимаем участие.
18th
Июн
Целесообразность применения out
Для объявления выходных параметров служит ключевое слово out:
procedure GetScreenResolution(out Width, Height: Integer);
begin
Width := GetScreenWidth;
Height := GetScreenHeight;
end;
Установка значений выходных параметров внутри подпрограммы приводит к установке значений переменных, переданных в качестве аргументов:
var
W, H: Integer;
begin
GetScreenResolution(W, H);
...
end;
После вызова процедуры GetScreenResolution переменные W и H будут содержать значения, которые были присвоены формальным параметрам Width и Height соответственно.
Если параметр является одновременно и входным, и выходным, то он описывается с ключевым словом var:
procedure Exchange(var A, B: Integer);
var
C: Integer;
begin
C := A;
A := B;
B := C;
end;
Изменение значений var-параметров внутри подпрограммы приводит к изменению значений переменных, переданных в качестве аргументов:
var
X, Y: Integer;
begin
X := 5;
Y := 10;
...
Exchange(X, Y);
// Теперь X = 10, Y = 5
...
end;
При вызове подпрограмм на место out- и var-параметров можно подставлять только переменные, но не константы и не выражения.
Если при описании параметра не указано ни одно из ключевых слов const, out, или var, то параметр считается входным, его можно изменять, но все изменения не влияют на фактический аргумент, поскольку они выполняются с копией аргумента, создаваемой на время работы подпрограммы. При вызове подпрограммы на месте такого параметра можно использовать константы и выражения. Пример подпрограммы:
f
unction NumberOfSetBits(A: Cardinal): Byte;
begin
Result := 0;
while A <> 0 do
begin
Result := Result + (A mod 2);
A := A div 2;
end;
end;
Параметр A в приведенной функции является входным, но при этом он используется в качестве локальной переменной для хранения промежуточных данных.
PS ну а теперь сами подумайте где это можно применить
Тема на форуме.
17th
Июн
Рассылка. Выпуск 63.
От ведущего рассылки.
Добрый вечер читатели рассылки. Сегодня выходит 63ий выпуск рассылки. Сегодня у нас обзор интересных тем и дискуссий с форума.
17th
ICQ Client Delphi
16th
Июн
Как пользоваться пакетом java.io
try
{
mkdirs = new File(name).exists();
if (mkdirs)
{
File file = new File(name);
boolean success = file.delete();
success = file.createNewFile();
}
else
{
File file = new File(name);
boolean success = file.createNewFile();
}
}
catch (IOException ex)
{
Logger.getLogger(Switch.class.getName()).log(Level.SEVERE, null, ex);
}
16th
Сохранение web-страницы с картинками. Delphi.
procedure TForm1.Button1Click(Sender: TObject);
var ms:TmemoryStream;
begin
ms:=TmemoryStream.create;
idhttp1.Get('http://lio.lv/olimps/uzdevumi.php?show=1',ms);
ms.SaveToFile('1.html');
end;
16th
Создание динамической ссылки.
const
MySite = 'www.sait.ru'; // название твоего сайта
procedure TForm1.Edit1Change(Sender: TObject);
var
Mylink: string; // новая ссылка
begin
stat:= Copy(edit1.text, 1, Pos(' ',edit1.Text)-1);
Mylink:= MySite + '/' + stat; // www.sait.ru/stat
end;
15th
Июн
3D НЕБО в DELPHI
Здравствуйте уважаемые программисты, я пишу 3D движок и столкнулся с проблемой, как делать небо?
Если можно, то скажите как рисуется небо в авиа симуляторах?
Метод CubeMap, берешь 6 картиночек CubeMap, грузишь их при создании сцены и обрабатываешь типа:
Код:
procedure DrawSkyBox; begin glColor3f(0.3,0.3,0.3); glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glPushMatrix; glTranslatef(Scene1.Player.x,Scene1.Player.y,Scene1.Player.z);
glBindTexture(GL_TEXTURE_2D,Tex[SB_BACK]); glBegin(GL_QUADS); glTexCoord2f(1, 0); glVertex3f(-SkyRad, -SkyRad, SkyRad); glTexCoord2f(0, 0); glVertex3f(SkyRad, -SkyRad, SkyRad); glTexCoord2f(0, 1); glVertex3f(SkyRad, SkyRad, SkyRad); glTexCoord2f(1, 1); glVertex3f(-SkyRad, SkyRad, SkyRad); glEnd;
glBindTexture(GL_TEXTURE_2D,Tex[SB_FRONT]); glPushMatrix; glRotatef(180, 0, 1, 0); glBegin(GL_QUADS); glTexCoord2f(1, 0); glVertex3f(-SkyRad, -SkyRad, SkyRad); glTexCoord2f(0, 0); glVertex3f(SkyRad, -SkyRad, SkyRad); glTexCoord2f(0, 1); glVertex3f(SkyRad, SkyRad, SkyRad); glTexCoord2f(1, 1); glVertex3f(-SkyRad, SkyRad, SkyRad); glEnd; glPopMatrix;
glBindTexture(GL_TEXTURE_2D,Tex[SB_LEFT]); glPushMatrix; glRotatef(-90, 0, 1, 0); glBegin(GL_QUADS); glTexCoord2f(1, 0); glVertex3f(-SkyRad, -SkyRad, SkyRad); glTexCoord2f(0, 0); glVertex3f(SkyRad, -SkyRad, SkyRad); glTexCoord2f(0, 1); glVertex3f(SkyRad, SkyRad, SkyRad); glTexCoord2f(1, 1); glVertex3f(-SkyRad, SkyRad, SkyRad); glEnd; glPopMatrix;
glBindTexture(GL_TEXTURE_2D,Tex[SB_RIGHT]); glPushMatrix; glRotatef(90, 0, 1, 0); glBegin(GL_QUADS); glTexCoord2f(1, 0); glVertex3f(-SkyRad, -SkyRad, SkyRad); glTexCoord2f(0, 0); glVertex3f(SkyRad, -SkyRad, SkyRad); glTexCoord2f(0, 1); glVertex3f(SkyRad, SkyRad, SkyRad); glTexCoord2f(1, 1); glVertex3f(-SkyRad, SkyRad, SkyRad); glEnd; glPopMatrix;
glBindTexture(GL_TEXTURE_2D,Tex[SB_TOP]); glPushMatrix; glRotatef(-90, 1, 0, 0); glBegin(GL_QUADS); glTexCoord2f(0, 0); glVertex3f(-SkyRad, -SkyRad, SkyRad); glTexCoord2f(0, 1); glVertex3f(SkyRad, -SkyRad, SkyRad); glTexCoord2f(1, 1); glVertex3f(SkyRad, SkyRad, SkyRad); glTexCoord2f(1, 0); glVertex3f(-SkyRad, SkyRad, SkyRad); glEnd; glPopMatrix;
glBindTexture(GL_TEXTURE_2D,Tex[SB_BOTTOM]); glPushMatrix; glRotatef(90, 1, 0, 0); glBegin(GL_QUADS); glTexCoord2f(1, 1); glVertex3f(-SkyRad, -SkyRad, SkyRad); glTexCoord2f(1, 0); glVertex3f(SkyRad, -SkyRad, SkyRad); glTexCoord2f(0, 0); glVertex3f(SkyRad, SkyRad, SkyRad); glTexCoord2f(0, 1); glVertex3f(-SkyRad, SkyRad, SkyRad); glEnd; glPopMatrix; glPopMatrix; end;
end.
А т.н. окружение сцены можно делать просто скроллом картинок по небу, можно добавить 3Д анимацию. много можно чего…
14th
Июн
Анимация на ассемблере.
Смотрим идущего человечка.
code segment
ASSUME CS:code, DS:DATA_SEG, ES:NOTHING, SS:STACK_SEG
start:
MOV AX,DATA_SEG
MOV DS,AX
MOV AX,STACK_SEG
MOV SS,AX
MOV SP, OFFSET TOP_OF_STACK
MOV AX,13h
INT 10h
MOV AX,0A000h
MOV ES,AX
CLD
MOV DI,320*12
MOV BH, 48
MOVE_MASK:
MOV AL, NOM_KADR
CMP AL,0
JNZ KADR2
MOV NOM_KADR, 1
MOV SI, OFFSET H1
JMP SHOW_KADR
KADR2:
MOV NOM_KADR, 0
MOV SI, OFFSET H2
SHOW_KADR:
PUSH DI
MOV BL,13
DRAW_H:
MOV CX,12
REP MOVSB
ADD DI,320-12
DEC BL
JNZ DRAW_H
POP DI
INC DI
READ_KEY:
MOV AH,08h
INT 21h
cmp al,0 ; Проверка на расш.коды
JZ READ_KEY
cmp al, 'q'
JNZ MOVE_MASK
MOV AX,3
INT 10h
MOV AH,4Ch
INT 21h
DATA_SEG SEGMENT
H1 DB 0,0,0,0,0,9,9,9,9,0,0,0
DB 0,0,0,0,0,9,9,9,9,0,0,0
DB 0,0,0,0,0,9,9,0,0,0,0,0
DB 0,0,0,9,9,9,9,9,9,0,0,0
DB 0,0,0,9,9,9,9,9,9,0,0,0
DB 0,9,9,0,0,9,9,0,0,9,9,0
DB 0,9,9,0,0,9,9,0,0,9,9,0
DB 0,0,0,0,0,9,9,0,0,0,0,0
DB 0,0,0,0,0,9,9,0,0,0,0,0
DB 0,0,0,9,9,0,0,9,9,0,0,0
DB 0,0,0,9,9,0,0,9,9,0,0,0
DB 0,9,9,0,0,0,0,0,0,9,9,0
DB 0,9,9,0,0,0,0,0,0,9,9,0
H2 DB 0,0,0,0,0,9,9,9,9,0,0,0
DB 0,0,0,0,0,9,9,9,9,0,0,0
DB 0,0,0,0,0,9,9,0,0,0,0,0
DB 0,0,0,9,9,9,9,9,9,0,0,0
DB 0,0,0,9,9,9,9,9,9,0,0,0
DB 0,9,9,0,0,9,9,0,0,9,9,0
DB 0,9,9,0,0,9,9,0,0,9,9,0
DB 0,0,0,0,0,9,9,0,0,0,0,0
DB 0,0,0,0,0,9,9,9,9,0,0,0
DB 0,0,0,9,9,0,0,9,9,0,0,0
DB 0,0,0,9,9,0,0,9,9,0,0,0
DB 0,9,9,0,0,0,0,9,9,0,0,0
DB 0,9,9,0,0,0,0,0,0,0,0,0
NOM_KADR DB 0
DATA_SEG ENDS
STACK_SEG SEGMENT
DB 64 DUP('STACK')
TOP_OF_STACK DW ?
STACK_SEG ENDS
code ends
end start
end
Облако меток
css реестр ассемблер timer SaveToFile ShellExecute программы массив советы word MySQL SQL ListView pos random компоненты дата LoadFromFile form база данных сеть html php RichEdit indy строки Win Api tstringlist Image мысли макросы Edit ListBox office C/C++ memo графика StringGrid canvas поиск файл Pascal форма Файлы интернет excel Microsoft Office Excel winapi журнал ПРОграммист DelphiКупить рекламу на сайте за 1000 руб
пишите сюда - alarforum@yandex.ru
Да и по любым другим вопросам пишите на почту
![пеллетные котлы](http://programmersclub.ru/respective.jpg)
пеллетные котлы
![пеллетный котел](http://programmersclub.ru/emtas.jpg)
Пеллетный котел Emtas
![форум программистов](http://programmersclub.ru/banf336х280.gif)
Наши форумы по программированию:
- Форум Web программирование (веб)
- Delphi форумы
- Форумы C (Си)
- Форум .NET Frameworks (точка нет фреймворки)
- Форум Java (джава)
- Форум низкоуровневое программирование
- Форум VBA (вба)
- Форум OpenGL
- Форум DirectX
- Форум CAD проектирование
- Форум по операционным системам
- Форум Software (Софт)
- Форум Hardware (Компьютерное железо)