Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Технологии > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 14.09.2018, 16:19   #1
Roman_Jarckov23
Пользователь
 
Регистрация: 11.09.2018
Сообщений: 20
Репутация: 10
Вопрос Чат в паскале для игры. Можно ли использовать следующий код без crt, чтобы сообщения выводились в GraphABC в окне?

Можно ли использовать следующий код без crt, чтобы сообщения выводились в GraphABC в окне???
Код:

uses
  System, System.Net, System.Net.Sockets, System.IO, System.Threading, crt;
 
type
  TByteArray = array of byte;
 
var
  client: array [1..64] of TCPClient;
  s_str: array [1..64] of NetworkStream;
  s_raw: TByteArray;
  listener: system.Net.Sockets.TcpListener;
  s_ip, msg, nowdate, cl_str: string;
  s_port, length, i, n: integer;
  thr: array [1..64] of thread;
  thr_s: thread;
 
procedure chat(data: object);
var
  i, err:integer;
  name: string;
begin
  Val(data.ToString, i, err);
  s_str[i] := client[i].GetStream;
  length := s_str[i].Read(s_raw, 0, s_raw.Length);
  name := System.Text.Encoding.Default.GetString(s_raw, 0, length);
  writeln('Есть клиент ', name, '.');
  msg := Concat('Добро пожаловать на сервер ', s_ip, ', ', name, '!');
  s_str[i].Write(System.Text.Encoding.Default.GetBytes(msg), 0, msg.Length);
  try
    while true do 
    begin
      length := s_str[i].Read(s_raw, 0, s_raw.Length);
      cl_str := System.Text.Encoding.Default.GetString(s_raw, 0, length);
      writeln(name, ': ', cl_str);
      for j:integer:=1 to n do begin
        s_str[j] := client[j].GetStream;
        msg := name + ': ' + cl_str{+#13#10};
        if s_str[j].CanWrite then
          s_str[j].Write(System.Text.Encoding.Default.GetBytes(msg), 0, msg.Length)
        else
          writeln('Ошибка. Невозможно отправить сообщение клиенту.');
      end;
    end;
  except
    textcolor(4);
    writeln('Клиент отключился.');
    textcolor(2);
  end;
end;
 
 
begin
  s_raw := TByteArray(System.Array.CreateInstance(typeof(byte), 1024));
  try
    textcolor(14);
    write('Введите IP: ');
    readln(s_ip);
    write('Введите порт: ');
    readln(s_port);
    listener := TCPListener.Create(IPAddress.Parse(s_ip), s_port);
    listener.Start(64);
    textcolor(2);
    writeln('Готово. Ожидаем подключения...');
  except
    textcolor(4);
    writeln('Ошибка. Приложение будет закрыто.');
    sleep(2500);
    exit;
  end;
  i := 0;
  while true do
    if listener.Pending then
    begin
      i += 1;
      n:=i;
      client[i] := listener.AcceptTcpClient();
      thr[i] := new Thread(chat);
      thr[i].Start(i);
    end;
end.

Roman_Jarckov23 вне форума   Ответить с цитированием
Старый 14.09.2018, 17:13   #2
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 24,613
Репутация: 5352
По умолчанию

можно. но зачем?! Вы не поверите, но окно GraphABC предназначено для вывода ГРАФИЧЕСКОЙ информации. Там можно, конечно, выводить текст (в том числе разными шрифтами, разными цветами, разным размером и под любым углом к горизонту), но в данном случае это зачем нужно?!

для вывода текста в графическом окне используется команда TextOut

Код:

// Демонстрация работы со шрифтами
uses GraphABC;

begin
  Window.Title := 'Шрифты';
  SetWindowSize(760,460);
  Font.Name := 'Arial';
  Font.Style := fsBoldItalic;
  for var i:=4 to 14 do
  begin
    Font.Size := 2*i;
    Font.Color := clRandom;
    TextOut(30,2*i*i-15,'PascalABC.NET');
  end;
  Font.Name := 'Times New Roman';
  Font.Style := fsBoldUnderline;
  for var i:=4 to 14 do
  begin
    Font.Size := 2*i;
    Font.Color := clRandom;
    TextOut(400,2*i*i-15,'PascalABC.NET');
  end;
end.

Serge_Bliznykov вне форума   Ответить с цитированием
Старый 14.09.2018, 19:29   #3
Roman_Jarckov23
Пользователь
 
Регистрация: 11.09.2018
Сообщений: 20
Репутация: 10
Смущение

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
можно. но зачем?! Вы не поверите, но окно GraphABC предназначено для вывода ГРАФИЧЕСКОЙ информации. Там можно, конечно, выводить текст (в том числе разными шрифтами, разными цветами, разным размером и под любым углом к горизонту), но в данном случае это зачем нужно?!

для вывода текста в графическом окне используется команда TextOut

Код:

// Демонстрация работы со шрифтами
uses GraphABC;

begin
  Window.Title := 'Шрифты';
  SetWindowSize(760,460);
  Font.Name := 'Arial';
  Font.Style := fsBoldItalic;
  for var i:=4 to 14 do
  begin
    Font.Size := 2*i;
    Font.Color := clRandom;
    TextOut(30,2*i*i-15,'PascalABC.NET');
  end;
  Font.Name := 'Times New Roman';
  Font.Style := fsBoldUnderline;
  for var i:=4 to 14 do
  begin
    Font.Size := 2*i;
    Font.Color := clRandom;
    TextOut(400,2*i*i-15,'PascalABC.NET');
  end;
end.

Для того чтобы чат был внутри игры, а не в отдельном окне!!!
Roman_Jarckov23 вне форума   Ответить с цитированием
Старый 15.09.2018, 10:43   #4
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 24,613
Репутация: 5352
По умолчанию

Цитата:
Сообщение от Roman_Jarckov23 Посмотреть сообщение
Для того чтобы чат был внутри игры, а не в отдельном окне!!!
понятно.
Просто приведённый Вами код - это не совсем игра
Serge_Bliznykov вне форума   Ответить с цитированием
Ответ

Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
можно ли как нибудь клонировать token или запусти программу без tokena для того чтобы запустить автотренажер Karim_1989 Свободное общение 2 17.03.2017 15:21
как сделать чтобы выводились все написанные сообщения nikytt PHP 0 09.10.2016 23:35
Можно ли использовать Wi-fi роутер без модема? Heroserodet Железо 6 04.09.2014 11:25
Доработать протокол отправки SMS-сообщений таким образом, чтобы удалять можно было только разрешенные для удаления сообщения. Разр Skullet C/C++ Сетевое программирование 0 13.12.2012 02:33
php, perl прием данных, чтобы сообщения доходили без перезагрузки страницы Delphinchik Perl 1 16.02.2011 22:07


17:54.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru